tayawelba commited on
Commit
ac31ddd
1 Parent(s): 4865fe2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +209 -210
app.py CHANGED
@@ -1,210 +1,209 @@
1
- import streamlit as st
2
- import requests
3
- import time
4
- from streamlit_option_menu import option_menu
5
- import streamlit.components.v1 as components
6
- import os
7
- from groq import Groq
8
- from gtts import gTTS
9
- from langdetect import detect
10
- import speech_recognition as sr
11
-
12
-
13
-
14
- #GROQ_API = os.environ.get("GROQ_API")
15
-
16
- #changement du logo et du titre de mon application en anglais
17
- st.set_page_config(page_title="Machine Learning Dans le Cloud", page_icon=":brain:", layout="centered", menu_items=None)
18
-
19
-
20
-
21
- # Créer trois colonnes de largeur égale
22
- col1, col2, col3 = st.columns(3)
23
-
24
- # Laisser la première et la troisième colonne vides
25
- with col1:
26
- st.write("")
27
-
28
- # Afficher le logo dans la deuxième colonne
29
- with col2:
30
- st.image("img/logo2.png", use_column_width=None)
31
-
32
- with col3:
33
- st.write("")
34
-
35
- selected = option_menu(
36
- menu_title=None, # required
37
- options=["Accueil", "Chatbot : Groq", "Speech to Text", "Text to Speech"], # required
38
- icons=["house","chat-dots", "mic","pen" ], # optional
39
- menu_icon="cast", # optional
40
- default_index=0, # optional
41
- orientation="horizontal",
42
- )
43
-
44
- if selected == "Accueil":
45
- st.title(f"{selected}")
46
-
47
- # Display home page with app description and logo
48
- st.header('Bienvenue dans notre application polyvalente de conversation !')
49
- st.markdown("<h5 style='text-align: justify;'>Notre application combine trois fonctionnalités principales pour vous offrir une expérience interactive et fluide.</h5>", unsafe_allow_html=True)
50
-
51
- st.image('img/image1.jpeg', caption='Large Language Model')
52
- #st.title('Bienvenue sur l\'application de classification d\'images de radiographies pulmonaires')
53
- #st.markdown("<h1 style='text-align: center;'>Bienvenue sur l'application de classification d'images de radiographies pulmonaires</h1>", unsafe_allow_html=True)
54
- st.markdown("<h5 style='text-align: justify;'><b> Chatbot avec Groq : </b> Cette fonctionnalité permet aux utilisateurs d'interagir avec un chatbot alimenté par Groq. Les utilisateurs peuvent saisir des prompts dans une zone de texte et obtenir des réponses générées par le modèle Groq. L'interaction se fait de manière fluide et naturelle, simulant une conversation en langage naturel.</h5>", unsafe_allow_html=True)
55
- st.markdown("<h5 style='text-align: justify;'><b> Speech to Text : </b> La fonction Speech to Text permet aux utilisateurs de convertir la parole en texte. En activant cette fonction, les utilisateurs peuvent parler dans leur microphone, et le texte correspondant sera automatiquement transcrit dans une zone de texte. Cela facilite la saisie de prompts ou de messages sans avoir à les taper manuellement.</h5>", unsafe_allow_html=True)
56
- st.markdown("<h5 style='text-align: justify;'><b> Text to Speech : </b> La fonction Text to Speech permet aux utilisateurs de convertir du texte en parole. Les utilisateurs peuvent saisir du texte dans une zone dédiée, et en appuyant sur un bouton, le texte sera synthétisé en parole. Cela peut être utile pour écouter les réponses du chatbot ou d'autres messages générés par l\'application.</h5>", unsafe_allow_html=True)
57
- st.markdown("<h5 style='text-align: justify;'>Avec ces trois volets, les utilisateurs peuvent interagir avec l'application de différentes manières, que ce soit en saisissant du texte, en parlant dans leur microphone, ou en écoutant les réponses générées par l'application. Cela offre une expérience utilisateur riche et flexible pour répondre à différents besoins et préférences.</h5>", unsafe_allow_html=True)
58
-
59
-
60
- components.html(
61
- """
62
- <div style="position: fixed; bottom: 0; left: 0; right: 0; text-align: center; font-size: 15px; color: gray;">
63
- Tous droits réservés © Main 2024 Tayawelba Dawaï Hesed
64
- </div>
65
- """,
66
- height=50
67
- )
68
- if selected == "Chatbot : Groq":
69
- # Configuration de l'API Groq
70
- client = Groq(api_key=GROQ_API)
71
-
72
- def get_groq_completion(model, messages, temperature, max_tokens, top_p, stream):
73
- completion = client.chat.completions.create(
74
- model=model,
75
- messages=messages,
76
- temperature=temperature,
77
- max_tokens=max_tokens,
78
- top_p=top_p,
79
- stream=stream
80
- )
81
- return completion
82
-
83
- # Fonction pour initialiser l'historique
84
- def init_chat_history():
85
- if 'chat_history' not in st.session_state:
86
- st.session_state['chat_history'] = []
87
-
88
- # Interface utilisateur
89
- st.title("Interface de Chat Groq API")
90
-
91
- # Initialiser l'historique des chats
92
- init_chat_history()
93
-
94
- # Sidebar pour les paramètres
95
- st.sidebar.header("Paramètres du Modèle")
96
- model = st.sidebar.selectbox(
97
- "Choisissez un modèle",
98
- ["llama3-8b-8192", "llama3-70b-8192", "gemma-7b-it", "mixtral-8x7b-32768"]
99
- )
100
- temperature = st.sidebar.slider("Température", 0.0, 1.0, 1.0)
101
- max_tokens = st.sidebar.slider("Nombre maximum de tokens", 1, 2048, 1024)
102
- top_p = st.sidebar.slider("Top P", 0.0, 1.0, 1.0)
103
- stream = st.sidebar.checkbox("Stream", value=True)
104
-
105
- # Fonction pour envoyer le prompt et obtenir la réponse
106
- def submit_prompt():
107
- if st.session_state.prompt.strip() == "":
108
- st.error("Veuillez entrer un prompt")
109
- else:
110
- with st.spinner("Obtention de la réponse de Groq..."):
111
- messages = [{"role": "user", "content": st.session_state.prompt}]
112
- try:
113
- completion = get_groq_completion(model, messages, temperature, max_tokens, top_p, stream)
114
- response = ""
115
- for chunk in completion:
116
- response += chunk.choices[0].delta.content or ""
117
-
118
- # Ajouter le prompt et la réponse à l'historique des chats
119
- st.session_state['chat_history'].append({"prompt": st.session_state.prompt, "response": response})
120
-
121
- # Réinitialiser le champ de saisie
122
- st.session_state.prompt = ""
123
-
124
- except Exception as e:
125
- st.error(f"Erreur: {e}")
126
-
127
- # Afficher l'historique des chats
128
- st.subheader("Historique des Chats")
129
- chat_history_container = st.container()
130
- for chat in st.session_state['chat_history']:
131
- chat_history_container.markdown(f"**Prompt :** {chat['prompt']}")
132
- chat_history_container.markdown(f"**Réponse :** {chat['response']}")
133
- chat_history_container.markdown("---")
134
- # Champ de texte pour le prompt
135
- prompt = st.text_area("Enter your prompt here:", key="prompt", on_change=submit_prompt)
136
-
137
-
138
-
139
- if selected == "Speech to Text":
140
- # CODE SPEECH-TO-TEXT
141
- st.title(f"{selected}")
142
-
143
- st.markdown("Cette partie vous permet de convertir votre **parole** en **texte**.")
144
-
145
- # Record audio
146
- with st.spinner("Veuillez parler..."):
147
- # Initialize recognizer
148
- r = sr.Recognizer()
149
-
150
- # Use microphone as source
151
- with sr.Microphone() as source:
152
- # Adjust for ambient noise
153
- r.adjust_for_ambient_noise(source)
154
- st.info("Enregistrement en cours... Parlez maintenant !")
155
- audio_data = r.listen(source)
156
-
157
- # Speech recognition
158
- try:
159
- st.success("Enregistrement terminé ! Voici ce que j'ai compris :")
160
- recognized_text = r.recognize_google(audio_data, language='fr-FR') # Language set to French
161
- st.write(recognized_text)
162
- except sr.UnknownValueError:
163
- st.warning("Désolé, je n'ai pas pu comprendre ce que vous avez dit.")
164
- except sr.RequestError as e:
165
- st.error(f"Erreur lors de la demande au service de reconnaissance vocale : {e}")
166
-
167
- # Clear button to reset input and result
168
- if st.button("Nettoyer"):
169
- st.success("Le champ est nettoyé.")
170
- st.empty() # Clear previous results if any
171
-
172
- # Button to allow new speech-to-text conversion
173
- if st.button("Convertir en texte"):
174
- st.experimental_rerun()
175
-
176
- # END CODE SPEECH-TO-TEXT
177
-
178
-
179
- if selected == "Text to Speech":
180
- # CODE TEXT-TO-SPEECH
181
- st.title(f"{selected}")
182
-
183
- st.markdown("Cette partie vous offre la possibilité de convertir vos **paragraphes** et vos **phrases** en **parole**.")
184
-
185
- headers = {"Authorization": TOKEN_API}
186
-
187
- # User input for text-to-speech
188
- tts_input = st.text_area("Entrer le texte à convertir en parole:", "")
189
- if st.button("Convertir en parole"):
190
- if tts_input:
191
- with st.spinner("Conversion en cours..."):
192
- # Détection de la langue
193
- language = detect(tts_input)
194
- # Conversion de texte en parole
195
- tts = gTTS(text=tts_input, lang=language)
196
- tts.save("output.mp3")
197
- st.success("Conversion terminée ! Cliquez ci-dessous pour écouter le résultat.")
198
- audio_file = open("output.mp3", "rb").read()
199
- st.audio(audio_file, format="audio/mp3")
200
- else:
201
- st.warning("Veuillez saisir le texte à convertir en parole.")
202
-
203
- # Clear button to reset input and result
204
- if st.button("Nettoyer"):
205
- tts_input = ""
206
- st.success("Le champ est nettoyé.")
207
- st.empty() # Clear previous results if any
208
-
209
- # END CODE TEXT-TO-SPEECH
210
-
 
1
+ import streamlit as st
2
+ import requests
3
+ import time
4
+ from streamlit_option_menu import option_menu
5
+ import streamlit.components.v1 as components
6
+ import os
7
+ from groq import Groq
8
+ from gtts import gTTS
9
+ from langdetect import detect
10
+ import speech_recognition as sr
11
+
12
+
13
+
14
+ GROQ_API = os.environ.get("GROQ_API")
15
+
16
+ #changement du logo et du titre de mon application en anglais
17
+ st.set_page_config(page_title="Machine Learning Dans le Cloud", page_icon=":brain:", layout="centered", menu_items=None)
18
+
19
+
20
+
21
+ # Créer trois colonnes de largeur égale
22
+ col1, col2, col3 = st.columns(3)
23
+
24
+ # Laisser la première et la troisième colonne vides
25
+ with col1:
26
+ st.write("")
27
+
28
+ # Afficher le logo dans la deuxième colonne
29
+ with col2:
30
+ st.image("img/logo2.png", use_column_width=None)
31
+
32
+ with col3:
33
+ st.write("")
34
+
35
+ selected = option_menu(
36
+ menu_title=None, # required
37
+ options=["Accueil", "Chatbot : Groq", "Speech to Text", "Text to Speech"], # required
38
+ icons=["house","chat-dots", "mic","pen" ], # optional
39
+ menu_icon="cast", # optional
40
+ default_index=0, # optional
41
+ orientation="horizontal",
42
+ )
43
+
44
+ if selected == "Accueil":
45
+ st.title(f"{selected}")
46
+
47
+ # Display home page with app description and logo
48
+ st.header('Bienvenue dans notre application polyvalente de conversation !')
49
+ st.markdown("<h5 style='text-align: justify;'>Notre application combine trois fonctionnalités principales pour vous offrir une expérience interactive et fluide.</h5>", unsafe_allow_html=True)
50
+
51
+ st.image('img/image1.jpeg', caption='Large Language Model')
52
+ #st.title('Bienvenue sur l\'application de classification d\'images de radiographies pulmonaires')
53
+ #st.markdown("<h1 style='text-align: center;'>Bienvenue sur l'application de classification d'images de radiographies pulmonaires</h1>", unsafe_allow_html=True)
54
+ st.markdown("<h5 style='text-align: justify;'><b> Chatbot avec Groq : </b> Cette fonctionnalité permet aux utilisateurs d'interagir avec un chatbot alimenté par Groq. Les utilisateurs peuvent saisir des prompts dans une zone de texte et obtenir des réponses générées par le modèle Groq. L'interaction se fait de manière fluide et naturelle, simulant une conversation en langage naturel.</h5>", unsafe_allow_html=True)
55
+ st.markdown("<h5 style='text-align: justify;'><b> Speech to Text : </b> La fonction Speech to Text permet aux utilisateurs de convertir la parole en texte. En activant cette fonction, les utilisateurs peuvent parler dans leur microphone, et le texte correspondant sera automatiquement transcrit dans une zone de texte. Cela facilite la saisie de prompts ou de messages sans avoir à les taper manuellement.</h5>", unsafe_allow_html=True)
56
+ st.markdown("<h5 style='text-align: justify;'><b> Text to Speech : </b> La fonction Text to Speech permet aux utilisateurs de convertir du texte en parole. Les utilisateurs peuvent saisir du texte dans une zone dédiée, et en appuyant sur un bouton, le texte sera synthétisé en parole. Cela peut être utile pour écouter les réponses du chatbot ou d'autres messages générés par l\'application.</h5>", unsafe_allow_html=True)
57
+ st.markdown("<h5 style='text-align: justify;'>Avec ces trois volets, les utilisateurs peuvent interagir avec l'application de différentes manières, que ce soit en saisissant du texte, en parlant dans leur microphone, ou en écoutant les réponses générées par l'application. Cela offre une expérience utilisateur riche et flexible pour répondre à différents besoins et préférences.</h5>", unsafe_allow_html=True)
58
+
59
+
60
+ components.html(
61
+ """
62
+ <div style="position: fixed; bottom: 0; left: 0; right: 0; text-align: center; font-size: 15px; color: gray;">
63
+ Tous droits réservés © Main 2024 Tayawelba Dawaï Hesed
64
+ </div>
65
+ """,
66
+ height=50
67
+ )
68
+ if selected == "Chatbot : Groq":
69
+ # Configuration de l'API Groq
70
+ client = Groq(api_key=GROQ_API)
71
+
72
+ def get_groq_completion(model, messages, temperature, max_tokens, top_p, stream):
73
+ completion = client.chat.completions.create(
74
+ model=model,
75
+ messages=messages,
76
+ temperature=temperature,
77
+ max_tokens=max_tokens,
78
+ top_p=top_p,
79
+ stream=stream
80
+ )
81
+ return completion
82
+
83
+ # Fonction pour initialiser l'historique
84
+ def init_chat_history():
85
+ if 'chat_history' not in st.session_state:
86
+ st.session_state['chat_history'] = []
87
+
88
+ # Interface utilisateur
89
+ st.title("Interface de Chat Groq API")
90
+
91
+ # Initialiser l'historique des chats
92
+ init_chat_history()
93
+
94
+ # Sidebar pour les paramètres
95
+ st.sidebar.header("Paramètres du Modèle")
96
+ model = st.sidebar.selectbox(
97
+ "Choisissez un modèle",
98
+ ["llama3-8b-8192", "llama3-70b-8192", "gemma-7b-it", "mixtral-8x7b-32768"]
99
+ )
100
+ temperature = st.sidebar.slider("Température", 0.0, 1.0, 1.0)
101
+ max_tokens = st.sidebar.slider("Nombre maximum de tokens", 1, 2048, 1024)
102
+ top_p = st.sidebar.slider("Top P", 0.0, 1.0, 1.0)
103
+ stream = st.sidebar.checkbox("Stream", value=True)
104
+
105
+ # Fonction pour envoyer le prompt et obtenir la réponse
106
+ def submit_prompt():
107
+ if st.session_state.prompt.strip() == "":
108
+ st.error("Veuillez entrer un prompt")
109
+ else:
110
+ with st.spinner("Obtention de la réponse de Groq..."):
111
+ messages = [{"role": "user", "content": st.session_state.prompt}]
112
+ try:
113
+ completion = get_groq_completion(model, messages, temperature, max_tokens, top_p, stream)
114
+ response = ""
115
+ for chunk in completion:
116
+ response += chunk.choices[0].delta.content or ""
117
+
118
+ # Ajouter le prompt et la réponse à l'historique des chats
119
+ st.session_state['chat_history'].append({"prompt": st.session_state.prompt, "response": response})
120
+
121
+ # Réinitialiser le champ de saisie
122
+ st.session_state.prompt = ""
123
+
124
+ except Exception as e:
125
+ st.error(f"Erreur: {e}")
126
+
127
+ # Afficher l'historique des chats
128
+ st.subheader("Historique des Chats")
129
+ chat_history_container = st.container()
130
+ for chat in st.session_state['chat_history']:
131
+ chat_history_container.markdown(f"**Prompt :** {chat['prompt']}")
132
+ chat_history_container.markdown(f"**Réponse :** {chat['response']}")
133
+ chat_history_container.markdown("---")
134
+ # Champ de texte pour le prompt
135
+ prompt = st.text_area("Enter your prompt here:", key="prompt", on_change=submit_prompt)
136
+
137
+
138
+
139
+ if selected == "Speech to Text":
140
+ # CODE SPEECH-TO-TEXT
141
+ st.title(f"{selected}")
142
+
143
+ st.markdown("Cette partie vous permet de convertir votre **parole** en **texte**.")
144
+
145
+ # Record audio
146
+ with st.spinner("Veuillez parler..."):
147
+ # Initialize recognizer
148
+ r = sr.Recognizer()
149
+
150
+ # Use microphone as source
151
+ with sr.Microphone() as source:
152
+ # Adjust for ambient noise
153
+ r.adjust_for_ambient_noise(source)
154
+ st.info("Enregistrement en cours... Parlez maintenant !")
155
+ audio_data = r.listen(source)
156
+
157
+ # Speech recognition
158
+ try:
159
+ st.success("Enregistrement terminé ! Voici ce que j'ai compris :")
160
+ recognized_text = r.recognize_google(audio_data, language='fr-FR') # Language set to French
161
+ st.write(recognized_text)
162
+ except sr.UnknownValueError:
163
+ st.warning("Désolé, je n'ai pas pu comprendre ce que vous avez dit.")
164
+ except sr.RequestError as e:
165
+ st.error(f"Erreur lors de la demande au service de reconnaissance vocale : {e}")
166
+
167
+ # Clear button to reset input and result
168
+ if st.button("Nettoyer"):
169
+ st.success("Le champ est nettoyé.")
170
+ st.empty() # Clear previous results if any
171
+
172
+ # Button to allow new speech-to-text conversion
173
+ if st.button("Convertir en texte"):
174
+ st.experimental_rerun()
175
+
176
+ # END CODE SPEECH-TO-TEXT
177
+
178
+
179
+ if selected == "Text to Speech":
180
+ # CODE TEXT-TO-SPEECH
181
+ st.title(f"{selected}")
182
+
183
+ st.markdown("Cette partie vous offre la possibilité de convertir vos **paragraphes** et vos **phrases** en **parole**.")
184
+
185
+
186
+ # User input for text-to-speech
187
+ tts_input = st.text_area("Entrer le texte à convertir en parole:", "")
188
+ if st.button("Convertir en parole"):
189
+ if tts_input:
190
+ with st.spinner("Conversion en cours..."):
191
+ # Détection de la langue
192
+ language = detect(tts_input)
193
+ # Conversion de texte en parole
194
+ tts = gTTS(text=tts_input, lang=language)
195
+ tts.save("output.mp3")
196
+ st.success("Conversion terminée ! Cliquez ci-dessous pour écouter le résultat.")
197
+ audio_file = open("output.mp3", "rb").read()
198
+ st.audio(audio_file, format="audio/mp3")
199
+ else:
200
+ st.warning("Veuillez saisir le texte à convertir en parole.")
201
+
202
+ # Clear button to reset input and result
203
+ if st.button("Nettoyer"):
204
+ tts_input = ""
205
+ st.success("Le champ est nettoyé.")
206
+ st.empty() # Clear previous results if any
207
+
208
+ # END CODE TEXT-TO-SPEECH
209
+