Spaces:
Paused
Paused
rick commited on
update UI/UX...
Browse files
app.py
CHANGED
|
@@ -144,32 +144,38 @@ def transcribe_audio(audio_file: IO, language: Optional[str] = None) -> str:
|
|
| 144 |
file_size_mb = os.path.getsize(audio_file.name) / (1024 * 1024)
|
| 145 |
|
| 146 |
try:
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 152 |
transcript = client.audio.transcriptions.create(
|
| 153 |
model="whisper-1",
|
| 154 |
-
file=
|
| 155 |
language=language
|
| 156 |
)
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
return full_transcript.strip()
|
| 160 |
-
else:
|
| 161 |
-
with open(audio_file.name, "rb") as audio_file:
|
| 162 |
-
transcript = client.audio.transcriptions.create(
|
| 163 |
-
model="whisper-1",
|
| 164 |
-
file=audio_file,
|
| 165 |
-
language=language
|
| 166 |
-
)
|
| 167 |
-
return transcript.text
|
| 168 |
except IOError as e:
|
| 169 |
-
|
| 170 |
return ""
|
| 171 |
except client.APIError as e:
|
| 172 |
-
|
| 173 |
return ""
|
| 174 |
|
| 175 |
# Fonction pour détecter la langue d'un texte donné
|
|
@@ -343,32 +349,41 @@ def process_message(
|
|
| 343 |
with st.chat_message("assistant", avatar="👻"):
|
| 344 |
message_placeholder = st.empty()
|
| 345 |
full_response = ""
|
| 346 |
-
|
| 347 |
-
|
| 348 |
-
|
| 349 |
-
|
| 350 |
-
|
| 351 |
-
|
| 352 |
-
|
| 353 |
-
|
| 354 |
-
|
| 355 |
-
|
| 356 |
-
|
| 357 |
-
|
| 358 |
-
|
| 359 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 360 |
|
| 361 |
st.session_state.messages.append(
|
| 362 |
{"role": "assistant", "content": full_response}
|
| 363 |
)
|
| 364 |
|
| 365 |
if tts_enabled:
|
| 366 |
-
|
| 367 |
-
|
| 368 |
-
|
| 369 |
-
|
| 370 |
-
|
| 371 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 372 |
return None, None
|
| 373 |
|
| 374 |
class GlobalSystemPrompts:
|
|
@@ -608,7 +623,7 @@ def main():
|
|
| 608 |
)
|
| 609 |
st.write(get_translation("langue_detectee").format(st.session_state.language_detected))
|
| 610 |
|
| 611 |
-
st.write(get_translation("transcription").format(transcription))
|
| 612 |
|
| 613 |
audio_list = []
|
| 614 |
for cursor_selected_lang in st.session_state.selected_languages:
|
|
|
|
| 144 |
file_size_mb = os.path.getsize(audio_file.name) / (1024 * 1024)
|
| 145 |
|
| 146 |
try:
|
| 147 |
+
with st.status("Transcription de l'audio en cours...") as status:
|
| 148 |
+
if file_size_mb > max_size_mb:
|
| 149 |
+
status.update(label="Découpage de l'audio en segments...")
|
| 150 |
+
segments = split_audio(audio_file.name, max_size_mb)
|
| 151 |
+
full_transcript = ""
|
| 152 |
+
for i, segment in enumerate(segments):
|
| 153 |
+
status.update(label=f"Transcription du segment {i+1}/{len(segments)}...")
|
| 154 |
+
with open(segment, "rb") as audio_segment:
|
| 155 |
+
transcript = client.audio.transcriptions.create(
|
| 156 |
+
model="whisper-1",
|
| 157 |
+
file=audio_segment,
|
| 158 |
+
language=language
|
| 159 |
+
)
|
| 160 |
+
full_transcript += f"{transcript.text} "
|
| 161 |
+
os.unlink(segment) # Supprime le fichier temporaire
|
| 162 |
+
status.update(label="Transcription terminée", state="complete")
|
| 163 |
+
return full_transcript.strip()
|
| 164 |
+
else:
|
| 165 |
+
status.update(label="Transcription de l'audio...")
|
| 166 |
+
with open(audio_file.name, "rb") as audio_file:
|
| 167 |
transcript = client.audio.transcriptions.create(
|
| 168 |
model="whisper-1",
|
| 169 |
+
file=audio_file,
|
| 170 |
language=language
|
| 171 |
)
|
| 172 |
+
status.update(label="Transcription terminée", state="complete")
|
| 173 |
+
return transcript.text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 174 |
except IOError as e:
|
| 175 |
+
st.error(f"Erreur d'entrée/sortie lors de la transcription : {e}")
|
| 176 |
return ""
|
| 177 |
except client.APIError as e:
|
| 178 |
+
st.error(f"Erreur API lors de la transcription : {e}")
|
| 179 |
return ""
|
| 180 |
|
| 181 |
# Fonction pour détecter la langue d'un texte donné
|
|
|
|
| 349 |
with st.chat_message("assistant", avatar="👻"):
|
| 350 |
message_placeholder = st.empty()
|
| 351 |
full_response = ""
|
| 352 |
+
|
| 353 |
+
with st.status("Traitement en cours...", expanded=True) as status:
|
| 354 |
+
status.update(label="Génération de la réponse", state="running", expanded=True)
|
| 355 |
+
try:
|
| 356 |
+
for response in client.chat.completions.create(
|
| 357 |
+
model="gpt-4o-mini",
|
| 358 |
+
messages=st.session_state.messages,
|
| 359 |
+
stream=True,
|
| 360 |
+
temperature=0.1):
|
| 361 |
+
full_response += (response.choices[0].delta.content or "")
|
| 362 |
+
message_placeholder.markdown(full_response + "▌")
|
| 363 |
+
# Utiliser regex pour supprimer les trois premiers et derniers guillemets doubles
|
| 364 |
+
full_response = re.sub(r'^"{3}|"{3}$', '', full_response.strip())
|
| 365 |
+
message_placeholder.markdown(full_response)
|
| 366 |
+
status.update(label="Réponse générée avec succès", state="complete")
|
| 367 |
+
except Exception as e:
|
| 368 |
+
st.error(f"Une erreur s'est produite lors de la génération de la réponse : {e}")
|
| 369 |
+
status.update(label="Erreur lors de la génération de la réponse", state="error")
|
| 370 |
+
return None, None
|
| 371 |
|
| 372 |
st.session_state.messages.append(
|
| 373 |
{"role": "assistant", "content": full_response}
|
| 374 |
)
|
| 375 |
|
| 376 |
if tts_enabled:
|
| 377 |
+
with st.status("Conversion texte-parole en cours...", expanded=True) as status:
|
| 378 |
+
status.update(label="Conversion texte-parole", state="running", expanded=True)
|
| 379 |
+
try:
|
| 380 |
+
tts_audio, tts_duration = text_to_speech(full_response)
|
| 381 |
+
status.update(label="Conversion texte-parole réussie", state="complete")
|
| 382 |
+
return tts_audio, tts_duration
|
| 383 |
+
except Exception as e:
|
| 384 |
+
st.error(f"Une erreur s'est produite lors de la conversion texte-parole : {e}")
|
| 385 |
+
status.update(label="Erreur lors de la conversion texte-parole", state="error")
|
| 386 |
+
return None, None
|
| 387 |
return None, None
|
| 388 |
|
| 389 |
class GlobalSystemPrompts:
|
|
|
|
| 623 |
)
|
| 624 |
st.write(get_translation("langue_detectee").format(st.session_state.language_detected))
|
| 625 |
|
| 626 |
+
#st.write(get_translation("transcription").format(transcription))
|
| 627 |
|
| 628 |
audio_list = []
|
| 629 |
for cursor_selected_lang in st.session_state.selected_languages:
|