Spaces:
Build error
Build error
Delete app.py
Browse files
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|