Sidoine commited on
Commit
a534a1b
·
verified ·
1 Parent(s): 3aac7c8

Delete app.py

Browse files
Files changed (1) hide show
  1. app.py +0 -231
app.py DELETED
@@ -1,231 +0,0 @@
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
- from dotenv import load_dotenv
13
-
14
- # Charger les variables d'environnement à partir du fichier .env
15
- load_dotenv()
16
-
17
- # Récupérer les clés API depuis les variables d'environnement
18
- GROQ_API = os.getenv("GROQ_API")
19
- HF_API = os.getenv("HF_API")
20
-
21
- #changement du logo et du titre de mon application en anglais
22
- st.set_page_config(page_title="Machine Learning Dans le Cloud", page_icon=":brain:", layout="centered", menu_items=None)
23
-
24
-
25
-
26
- # Créer trois colonnes de largeur égale
27
- col1, col2, col3 = st.columns(3)
28
-
29
- # Laisser la première et la troisième colonne vides
30
- with col1:
31
- st.write("")
32
-
33
- # Afficher le logo dans la deuxième colonne
34
- with col2:
35
- st.image("img/logo2.png", use_column_width=None)
36
-
37
- with col3:
38
- st.write("")
39
-
40
- selected = option_menu(
41
- menu_title=None, # required
42
- options=["Accueil", "Chatbot : Groq", "Speech to Text", "Text to Speech"], # required
43
- icons=["house","chat-dots", "mic","pen" ], # optional
44
- menu_icon="cast", # optional
45
- default_index=0, # optional
46
- orientation="horizontal",
47
- )
48
-
49
- if selected == "Accueil":
50
- st.title(f"{selected}")
51
-
52
- # Display home page with app description and logo
53
- st.header('EXAMEN DE MACHINE LEARNING AVEC LE CLOUD | TAYAWELBA DAWAI')
54
- 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)
55
-
56
- st.image('img/image1.jpeg', caption='Large Language Model')
57
- #st.title('Bienvenue sur l\'application de classification d\'images de radiographies pulmonaires')
58
- #st.markdown("<h1 style='text-align: center;'>Bienvenue sur l'application de classification d'images de radiographies pulmonaires</h1>", unsafe_allow_html=True)
59
- 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)
60
- 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)
61
- 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)
62
- 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)
63
-
64
-
65
- components.html(
66
- """
67
- <div style="position: fixed; bottom: 0; left: 0; right: 0; text-align: center; font-size: 15px; color: gray;">
68
- Tous droits réservés © Juin 2024 Tayawelba Dawaï Hesed
69
- </div>
70
- """,
71
- height=50
72
- )
73
- if selected == "Chatbot : Groq":
74
- # Sidebar settings
75
- with st.sidebar:
76
- st.sidebar.subheader("PARAMETRES")
77
- temperature = st.slider("Temperature", 0.0, 5.0, 1.0)
78
- tokens = st.slider("Max Tokens", 0, 8192, 900)
79
- stream = st.toggle("Stream", value=True)
80
- etat = stream
81
-
82
- class GroqAPI:
83
- # Handles API operations with Groq to generate chat responses
84
- def __init__(self, model_name: str):
85
- self.client = Groq(api_key="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")
86
- self.model_name = model_name
87
-
88
- # Internal method to get responses from Groq API
89
- def _response(self, message):
90
- return self.client.chat.completions.create(
91
- model=self.model_name,
92
- messages=message,
93
- temperature=temperature,
94
- max_tokens=tokens,
95
- stream=etat,
96
- stop=None,
97
- )
98
-
99
- # Generator to stream responses from API
100
- def response_stream(self, message):
101
- for chunk in self._response(message):
102
- if chunk.choices[0].delta.content:
103
- yield chunk.choices[0].delta.content
104
-
105
- class Message:
106
- # Manages chat messages in the Streamlit UI
107
- system_prompt = "You are a professional AI. Please generate responses in English to all user inputs."
108
-
109
- # Initializes the chat history if it doesn't exist in session state
110
- def __init__(self):
111
- if "messages" not in st.session_state:
112
- st.session_state.messages = [{"role": "system", "content": self.system_prompt}]
113
-
114
- # Adds a new message to the session state
115
- def add(self, role: str, content: str):
116
- st.session_state.messages.append({"role": role, "content": content})
117
-
118
- # Displays all past messages in the UI, ignoring system messages
119
- def display_chat_history(self):
120
- for message in st.session_state.messages:
121
- if message["role"] == "system":
122
- continue
123
- with st.chat_message(message["role"]):
124
- st.markdown(message["content"])
125
-
126
- # Streams API responses to the Streamlit chat messages UI
127
- def display_stream(self, generator):
128
- with st.chat_message("assistant"):
129
- return st.write_stream(generator)
130
-
131
- class ModelSelector:
132
- # Allows the user to select a model from a predefined list
133
- def __init__(self):
134
- # List of available models to choose from
135
- self.models = ["llama3-70b-8192", "llama3-8b-8192", "gemma-7b-it", "mixtral-8x7b-32768"]
136
-
137
- # Displays model selection in the sidebar with a title
138
- def select(self):
139
- with st.sidebar:
140
- return st.selectbox("Model", self.models)
141
-
142
- # Entry point for the Streamlit app "myChatbot"
143
- def main():
144
- user_input = st.chat_input("Chat avec moi...")
145
- model = ModelSelector()
146
- selected_model = model.select()
147
- message = Message()
148
-
149
- # If there is user input, process it via the selected model
150
- if user_input:
151
- llm = GroqAPI(selected_model)
152
- message.add("user", user_input)
153
- message.display_chat_history()
154
- response = message.display_stream(llm.response_stream(st.session_state.messages))
155
- message.add("assistant", response)
156
-
157
- main()
158
-
159
-
160
- if selected == "Speech to Text":
161
- # CODE SPEECH-TO-TEXT
162
- st.title(f"{selected}")
163
-
164
- st.markdown("Cette partie vous permet de convertir votre **parole** en **texte**.")
165
-
166
- # Record audio
167
- with st.spinner("Veuillez parler..."):
168
- # Initialize recognizer
169
- r = sr.Recognizer()
170
-
171
- # Use microphone as source
172
- with sr.Microphone() as source:
173
- # Adjust for ambient noise
174
- r.adjust_for_ambient_noise(source)
175
- st.info("Enregistrement en cours... Parlez maintenant !")
176
- audio_data = r.listen(source)
177
-
178
- # Speech recognition
179
- try:
180
- st.success("Enregistrement terminé ! Voici ce que j'ai compris :")
181
- recognized_text = r.recognize_google(audio_data, language='fr-FR') # Language set to French
182
- st.write(recognized_text)
183
- except sr.UnknownValueError:
184
- st.warning("Désolé, je n'ai pas pu comprendre ce que vous avez dit.")
185
- except sr.RequestError as e:
186
- st.error(f"Erreur lors de la demande au service de reconnaissance vocale : {e}")
187
-
188
- # Clear button to reset input and result
189
- if st.button("Nettoyer"):
190
- st.success("Le champ est nettoyé.")
191
- st.empty() # Clear previous results if any
192
-
193
- # Button to allow new speech-to-text conversion
194
- if st.button("Convertir en texte"):
195
- st.experimental_rerun()
196
-
197
- # END CODE SPEECH-TO-TEXT
198
-
199
-
200
- if selected == "Text to Speech":
201
- # CODE TEXT-TO-SPEECH
202
- st.title(f"{selected}")
203
-
204
- st.markdown("Cette partie vous offre la possibilité de convertir vos **paragraphes** et vos **phrases** en **parole**.")
205
-
206
- headers = {"Authorization": HF_API}
207
-
208
- # User input for text-to-speech
209
- tts_input = st.text_area("Entrer le texte à convertir en parole:", "")
210
- if st.button("Convertir en parole"):
211
- if tts_input:
212
- with st.spinner("Conversion en cours..."):
213
- # Détection de la langue
214
- language = detect(tts_input)
215
- # Conversion de texte en parole
216
- tts = gTTS(text=tts_input, lang=language)
217
- tts.save("output.mp3")
218
- st.success("Conversion terminée ! Cliquez ci-dessous pour écouter le résultat.")
219
- audio_file = open("output.mp3", "rb").read()
220
- st.audio(audio_file, format="audio/mp3")
221
- else:
222
- st.warning("Veuillez saisir le texte à convertir en parole.")
223
-
224
- # Clear button to reset input and result
225
- if st.button("Nettoyer"):
226
- tts_input = ""
227
- st.success("Le champ est nettoyé.")
228
- st.empty() # Clear previous results if any
229
-
230
- # END CODE TEXT-TO-SPEECH
231
-