Spaces:
Paused
Paused
rick
commited on
bug fixed now... not done...
Browse files- pages/main.py +73 -102
pages/main.py
CHANGED
|
@@ -323,10 +323,10 @@ def concatenate_audio_files(audio_list: List[Tuple[bytes, float]]) -> Optional[b
|
|
| 323 |
|
| 324 |
def process_message(
|
| 325 |
message: str,
|
| 326 |
-
|
| 327 |
-
tts_enabled: bool = False,
|
| 328 |
-
|
| 329 |
-
)
|
| 330 |
"""
|
| 331 |
Traite les messages des utilisateurs et génère une réponse.
|
| 332 |
|
|
@@ -336,9 +336,9 @@ def process_message(
|
|
| 336 |
tts_enabled (bool, optional): Si la synthèse vocale est activée. Par défaut False.
|
| 337 |
|
| 338 |
"""
|
| 339 |
-
payload_content = f'{
|
| 340 |
st.session_state.messages = [
|
| 341 |
-
{"role": "system", "content":
|
| 342 |
{"role": "user", "content": payload_content}
|
| 343 |
]
|
| 344 |
st.session_state["full_response"] = ""
|
|
@@ -353,8 +353,7 @@ def process_message(
|
|
| 353 |
|
| 354 |
# Utiliser regex pour supprimer les trois premiers et derniers guillemets doubles
|
| 355 |
st.session_state.full_response = re.sub(r'^"{3}|"{3}$', '', st.session_state.full_response.strip())
|
| 356 |
-
st.session_state.messages = []
|
| 357 |
-
###st.session_state.full_response = full_response
|
| 358 |
return st.session_state.full_response
|
| 359 |
except Exception as e:
|
| 360 |
st.error(f"Une erreur s'est produite lors de la génération de la réponse : {e}")
|
|
@@ -362,8 +361,8 @@ def process_message(
|
|
| 362 |
|
| 363 |
def process_tts_message(text_response: str) -> Tuple[Optional[bytes], Optional[float]]:
|
| 364 |
try:
|
| 365 |
-
|
| 366 |
-
return
|
| 367 |
except Exception as e:
|
| 368 |
st.error(f"Une erreur s'est produite lors de la conversion texte-parole : {e}")
|
| 369 |
return None, None
|
|
@@ -401,9 +400,9 @@ def set_translation_mode(from_lang: str, dest_lang: str) -> Tuple[str, str]:
|
|
| 401 |
Returns:
|
| 402 |
Tuple[str, str]: Un tuple contenant le prompt système et le prompt d'opération.
|
| 403 |
"""
|
| 404 |
-
|
| 405 |
-
|
| 406 |
-
return
|
| 407 |
|
| 408 |
# List of languages supported by the application
|
| 409 |
SUPPORTED_LANGUAGES = [
|
|
@@ -565,7 +564,6 @@ def main_page():
|
|
| 565 |
if "interface_language_select" not in st.session_state:
|
| 566 |
st.session_state.interface_language_select = "English" # Langue par défaut
|
| 567 |
|
| 568 |
-
#system_prompt, operation_prompt = init_process_mode()
|
| 569 |
|
| 570 |
# Initialisation de l'historique des messages avec le prompt système
|
| 571 |
if "messages" not in st.session_state:
|
|
@@ -597,7 +595,7 @@ def main_page():
|
|
| 597 |
input_text=user_input, temperature=0.01
|
| 598 |
)
|
| 599 |
|
| 600 |
-
audio_list = []
|
| 601 |
|
| 602 |
for cursor_selected_lang in st.session_state.selected_languages:
|
| 603 |
st.session_state.target_language = cursor_selected_lang["iso-639-1"]
|
|
@@ -608,7 +606,7 @@ def main_page():
|
|
| 608 |
st.session_state.full_response = ""
|
| 609 |
|
| 610 |
# Initialisation du mode de traitement pour la langue cible actuelle
|
| 611 |
-
system_prompt, operation_prompt = init_process_mode(from_lang=
|
| 612 |
(
|
| 613 |
st.session_state.language_detected if "language_detected" in st.session_state.language_detected else convert_language_name_to_iso6391(
|
| 614 |
st.session_state.interface_language
|
|
@@ -616,8 +614,8 @@ def main_page():
|
|
| 616 |
),
|
| 617 |
to_lang=st.session_state.target_language
|
| 618 |
)
|
| 619 |
-
# display error with st.error ; if (system_prompt, operation_prompt) is "", "" or None, None, and raise error
|
| 620 |
-
if not system_prompt or not operation_prompt:
|
| 621 |
st.error("Erreur : Les prompts système ou d'opération sont vides.")
|
| 622 |
raise ValueError("Les prompts système ou d'opération ne peuvent pas être vides.")
|
| 623 |
|
|
@@ -625,30 +623,29 @@ def main_page():
|
|
| 625 |
with st.status(f'({target_language_name}) - {get_translation("traduction_en_cours")}', expanded=True) as response_status:
|
| 626 |
with st.chat_message("assistant", avatar="👻"):
|
| 627 |
message_placeholder = st.empty()
|
| 628 |
-
response_generator = process_message(
|
| 629 |
-
user_input,
|
|
|
|
| 630 |
st.session_state.enable_tts_for_input_from_text_field,
|
| 631 |
-
system_prompt
|
| 632 |
)
|
| 633 |
|
| 634 |
|
| 635 |
response_status.update(label=f'({target_language_name}) - {get_translation("traduction_en_cours")}', state="running", expanded=True)
|
| 636 |
-
for response_chunk in response_generator:
|
| 637 |
message_placeholder.markdown(response_chunk)
|
| 638 |
|
| 639 |
-
end_response = response_generator.close() # Obtenir la réponse complète à la fin
|
| 640 |
if st.session_state.full_response != "":
|
| 641 |
message_placeholder.markdown(st.session_state.full_response)
|
| 642 |
|
| 643 |
if st.session_state.enable_tts_for_input_from_text_field:
|
| 644 |
response_status.update(label=f'({target_language_name}) - {get_translation("traduction_terminee")} ; {get_translation("synthese_vocale_en_cours")}', state="running", expanded=False)
|
| 645 |
-
tts_audio, tts_duration = process_tts_message(st.session_state.full_response)
|
| 646 |
del st.session_state.full_response
|
| 647 |
-
if tts_audio:
|
| 648 |
-
st.audio(tts_audio, format="audio/mp3", autoplay=False)
|
| 649 |
-
audio_list.append((tts_audio, tts_duration))
|
| 650 |
-
del tts_audio
|
| 651 |
-
del tts_duration
|
| 652 |
response_status.update(label=f'({target_language_name}) - {get_translation("traduction_terminee")} ; {get_translation("synthese_vocale_terminee")}', state="complete", expanded=False)
|
| 653 |
else:
|
| 654 |
response_status.update(label=f'({target_language_name}) - {get_translation("erreur_synthese_vocale")}', state="error", expanded=False)
|
|
@@ -660,29 +657,29 @@ def main_page():
|
|
| 660 |
response_status.update(label=f'({target_language_name}) - {get_translation("erreur_traduction")}', state="error", expanded=False)
|
| 661 |
|
| 662 |
|
| 663 |
-
if audio_list:
|
| 664 |
with st.status(f"{get_translation('concatenation_audio_en_cours')}", expanded=False) as audio_status:
|
| 665 |
audio_status.update(label=f"{get_translation('concatenation_audio_en_cours')}", state="running", expanded=False)
|
| 666 |
try:
|
| 667 |
-
final_audio = concatenate_audio_files(audio_list)
|
| 668 |
with st.container(border=True):
|
| 669 |
|
| 670 |
# Générer un nom de fichier unique
|
| 671 |
-
timestamp = time.strftime("%Y%m%d-%H%M%S")
|
| 672 |
-
langues = "_".join([lang["iso-639-1"] for lang in st.session_state.selected_languages])
|
| 673 |
-
nom_fichier = f"reponse_audio_{langues}_{timestamp}.mp3"
|
| 674 |
|
| 675 |
|
| 676 |
-
st.audio(final_audio, format="audio/mp3", autoplay=st.session_state.autoplay_tts)
|
| 677 |
|
| 678 |
st.download_button(
|
| 679 |
label=f"📥 {get_translation('telecharger_audio')}",
|
| 680 |
-
data=final_audio,
|
| 681 |
-
file_name=nom_fichier,
|
| 682 |
mime="audio/mp3",
|
| 683 |
use_container_width=True,
|
| 684 |
type="primary",
|
| 685 |
-
key=f"download_button_{langues}_{timestamp}",
|
| 686 |
)
|
| 687 |
|
| 688 |
# ##
|
|
@@ -704,11 +701,11 @@ def main_page():
|
|
| 704 |
st.write(f"Frame rate: {audio.frame_rate}, Frame width: {audio.frame_width}, Duration: {audio.duration_seconds} seconds")
|
| 705 |
|
| 706 |
# Transcrire l'audio en texte
|
| 707 |
-
transcription = transcribe_audio(temp_audio, language=st.session_state.language_detected)
|
| 708 |
# Detecter la langue du texte transcrit (si la langue source n'est pas détectée)
|
| 709 |
if st.session_state.language_detected is None:
|
| 710 |
st.session_state.language_detected = detect_language(
|
| 711 |
-
input_text=transcription, temperature=0.01
|
| 712 |
)
|
| 713 |
st.markdown(
|
| 714 |
f"- {get_translation('langue_detectee')}".format(
|
|
@@ -718,18 +715,18 @@ def main_page():
|
|
| 718 |
|
| 719 |
st.markdown(
|
| 720 |
f"🎤 {get_translation('transcription_audio')}".format(
|
| 721 |
-
f"{transcription}"
|
| 722 |
)
|
| 723 |
)
|
| 724 |
|
| 725 |
|
| 726 |
-
audio_list = []
|
| 727 |
for cursor_selected_lang in st.session_state.selected_languages:
|
| 728 |
st.session_state.target_language = cursor_selected_lang["iso-639-1"]
|
| 729 |
st.session_state.full_response = ""
|
| 730 |
|
| 731 |
# Initialisation du mode de traitement pour la langue cible actuelle
|
| 732 |
-
system_prompt, operation_prompt = init_process_mode(from_lang=
|
| 733 |
(
|
| 734 |
st.session_state.language_detected if "language_detected" in st.session_state.language_detected else convert_language_name_to_iso6391(
|
| 735 |
st.session_state.interface_language
|
|
@@ -740,89 +737,63 @@ def main_page():
|
|
| 740 |
|
| 741 |
with st.chat_message("assistant", avatar="👻"):
|
| 742 |
message_placeholder = st.empty()
|
| 743 |
-
response_generator = process_message(
|
| 744 |
-
|
| 745 |
-
|
|
|
|
|
|
|
| 746 |
)
|
| 747 |
|
| 748 |
-
for response_chunk in response_generator:
|
| 749 |
message_placeholder.markdown(response_chunk)
|
| 750 |
-
end_response = response_generator.close()
|
| 751 |
if st.session_state.full_response != "":
|
| 752 |
message_placeholder.markdown(st.session_state.full_response)
|
| 753 |
|
| 754 |
if st.session_state.enable_tts_for_input_from_audio_record:
|
| 755 |
-
tts_audio, tts_duration = process_tts_message(st.session_state.full_response)
|
| 756 |
|
| 757 |
-
if tts_audio:
|
| 758 |
-
audio_list.append((tts_audio, tts_duration))
|
| 759 |
else:
|
| 760 |
pass
|
| 761 |
|
| 762 |
-
if audio_list:
|
| 763 |
-
final_audio = concatenate_audio_files(audio_list)
|
| 764 |
|
| 765 |
with st.container(border=True):
|
| 766 |
|
| 767 |
# Générer un nom de fichier unique
|
| 768 |
-
timestamp = time.strftime("%Y%m%d-%H%M%S")
|
| 769 |
-
langues = "_".join([lang["iso-639-1"] for lang in st.session_state.selected_languages])
|
| 770 |
-
nom_fichier = f"reponse_audio_{langues}_{timestamp}.mp3"
|
| 771 |
|
| 772 |
-
st.audio(final_audio, format="audio/mp3", autoplay=st.session_state.autoplay_tts)
|
| 773 |
|
| 774 |
st.download_button(
|
| 775 |
label=f"📥 {get_translation('telecharger_audio')}",
|
| 776 |
-
data=final_audio,
|
| 777 |
-
file_name=nom_fichier,
|
| 778 |
mime="audio/mp3",
|
| 779 |
use_container_width=True,
|
| 780 |
type="primary",
|
| 781 |
-
key=f"download_button_{langues}_{timestamp}",
|
| 782 |
)
|
| 783 |
|
| 784 |
-
|
| 785 |
-
|
| 786 |
-
|
| 787 |
-
|
| 788 |
-
|
| 789 |
-
|
| 790 |
-
|
| 791 |
-
|
| 792 |
-
|
| 793 |
-
|
| 794 |
-
|
| 795 |
-
|
| 796 |
-
|
| 797 |
-
|
| 798 |
-
del transcription
|
| 799 |
-
if 'operation_prompt' in locals():
|
| 800 |
-
del operation_prompt
|
| 801 |
-
if 'system_prompt' in locals():
|
| 802 |
-
del system_prompt
|
| 803 |
-
if 'audio_list' in locals():
|
| 804 |
-
del audio_list
|
| 805 |
-
if "full_response" in st.session_state:
|
| 806 |
-
del st.session_state["full_response"]
|
| 807 |
-
if "tts_audio" in locals():
|
| 808 |
-
del tts_audio
|
| 809 |
-
if 'tts_duration' in locals():
|
| 810 |
-
del tts_duration
|
| 811 |
-
if 'timestamp' in locals():
|
| 812 |
-
del timestamp
|
| 813 |
-
if 'langues' in locals():
|
| 814 |
-
del langues
|
| 815 |
-
if 'nom_fichier' in locals():
|
| 816 |
-
del nom_fichier
|
| 817 |
-
if 'final_audio' in locals():
|
| 818 |
-
del final_audio
|
| 819 |
-
if 'response_generator' in locals():
|
| 820 |
-
del response_generator
|
| 821 |
-
if 'end_response' in locals():
|
| 822 |
-
del end_response
|
| 823 |
-
|
| 824 |
-
if "messages" in st.session_state:
|
| 825 |
-
del st.session_state["messages"]
|
| 826 |
|
| 827 |
clear_inputs_garbages()
|
| 828 |
|
|
|
|
| 323 |
|
| 324 |
def process_message(
|
| 325 |
message: str,
|
| 326 |
+
operation_prompt_: Optional[str] = "",
|
| 327 |
+
tts_enabled: Optional[bool] = False,
|
| 328 |
+
system_prompt_: Optional[str] = ""
|
| 329 |
+
):
|
| 330 |
"""
|
| 331 |
Traite les messages des utilisateurs et génère une réponse.
|
| 332 |
|
|
|
|
| 336 |
tts_enabled (bool, optional): Si la synthèse vocale est activée. Par défaut False.
|
| 337 |
|
| 338 |
"""
|
| 339 |
+
payload_content = f'{operation_prompt_} :\n"""\n{message}\n"""'
|
| 340 |
st.session_state.messages = [
|
| 341 |
+
{"role": "system", "content": system_prompt_},
|
| 342 |
{"role": "user", "content": payload_content}
|
| 343 |
]
|
| 344 |
st.session_state["full_response"] = ""
|
|
|
|
| 353 |
|
| 354 |
# Utiliser regex pour supprimer les trois premiers et derniers guillemets doubles
|
| 355 |
st.session_state.full_response = re.sub(r'^"{3}|"{3}$', '', st.session_state.full_response.strip())
|
| 356 |
+
st.session_state.messages = []
|
|
|
|
| 357 |
return st.session_state.full_response
|
| 358 |
except Exception as e:
|
| 359 |
st.error(f"Une erreur s'est produite lors de la génération de la réponse : {e}")
|
|
|
|
| 361 |
|
| 362 |
def process_tts_message(text_response: str) -> Tuple[Optional[bytes], Optional[float]]:
|
| 363 |
try:
|
| 364 |
+
tts_audio_, tts_duration_ = text_to_speech(text_response)
|
| 365 |
+
return tts_audio_, tts_duration_
|
| 366 |
except Exception as e:
|
| 367 |
st.error(f"Une erreur s'est produite lors de la conversion texte-parole : {e}")
|
| 368 |
return None, None
|
|
|
|
| 400 |
Returns:
|
| 401 |
Tuple[str, str]: Un tuple contenant le prompt système et le prompt d'opération.
|
| 402 |
"""
|
| 403 |
+
system_prompt_ = GlobalSystemPrompts.linguascribe()
|
| 404 |
+
operation_prompt_ = f"Translate({from_lang} to {dest_lang})"
|
| 405 |
+
return system_prompt_, operation_prompt_
|
| 406 |
|
| 407 |
# List of languages supported by the application
|
| 408 |
SUPPORTED_LANGUAGES = [
|
|
|
|
| 564 |
if "interface_language_select" not in st.session_state:
|
| 565 |
st.session_state.interface_language_select = "English" # Langue par défaut
|
| 566 |
|
|
|
|
| 567 |
|
| 568 |
# Initialisation de l'historique des messages avec le prompt système
|
| 569 |
if "messages" not in st.session_state:
|
|
|
|
| 595 |
input_text=user_input, temperature=0.01
|
| 596 |
)
|
| 597 |
|
| 598 |
+
st.session_state.audio_list = []
|
| 599 |
|
| 600 |
for cursor_selected_lang in st.session_state.selected_languages:
|
| 601 |
st.session_state.target_language = cursor_selected_lang["iso-639-1"]
|
|
|
|
| 606 |
st.session_state.full_response = ""
|
| 607 |
|
| 608 |
# Initialisation du mode de traitement pour la langue cible actuelle
|
| 609 |
+
st.session_state.system_prompt, st.session_state.operation_prompt = init_process_mode(from_lang=
|
| 610 |
(
|
| 611 |
st.session_state.language_detected if "language_detected" in st.session_state.language_detected else convert_language_name_to_iso6391(
|
| 612 |
st.session_state.interface_language
|
|
|
|
| 614 |
),
|
| 615 |
to_lang=st.session_state.target_language
|
| 616 |
)
|
| 617 |
+
# display error with st.error ; if (st.session_state.system_prompt, st.session_state.operation_prompt) is "", "" or None, None, and raise error
|
| 618 |
+
if (not st.session_state.system_prompt) or (not st.session_state.operation_prompt):
|
| 619 |
st.error("Erreur : Les prompts système ou d'opération sont vides.")
|
| 620 |
raise ValueError("Les prompts système ou d'opération ne peuvent pas être vides.")
|
| 621 |
|
|
|
|
| 623 |
with st.status(f'({target_language_name}) - {get_translation("traduction_en_cours")}', expanded=True) as response_status:
|
| 624 |
with st.chat_message("assistant", avatar="👻"):
|
| 625 |
message_placeholder = st.empty()
|
| 626 |
+
st.session_state.response_generator = process_message(
|
| 627 |
+
user_input,
|
| 628 |
+
st.session_state.operation_prompt,
|
| 629 |
st.session_state.enable_tts_for_input_from_text_field,
|
| 630 |
+
st.session_state.system_prompt
|
| 631 |
)
|
| 632 |
|
| 633 |
|
| 634 |
response_status.update(label=f'({target_language_name}) - {get_translation("traduction_en_cours")}', state="running", expanded=True)
|
| 635 |
+
for response_chunk in st.session_state.response_generator:
|
| 636 |
message_placeholder.markdown(response_chunk)
|
| 637 |
|
| 638 |
+
st.session_state.end_response = st.session_state.response_generator.close() # Obtenir la réponse complète à la fin
|
| 639 |
if st.session_state.full_response != "":
|
| 640 |
message_placeholder.markdown(st.session_state.full_response)
|
| 641 |
|
| 642 |
if st.session_state.enable_tts_for_input_from_text_field:
|
| 643 |
response_status.update(label=f'({target_language_name}) - {get_translation("traduction_terminee")} ; {get_translation("synthese_vocale_en_cours")}', state="running", expanded=False)
|
| 644 |
+
st.session_state.tts_audio, st.session_state.tts_duration = process_tts_message(st.session_state.full_response)
|
| 645 |
del st.session_state.full_response
|
| 646 |
+
if st.session_state.tts_audio:
|
| 647 |
+
st.audio(st.session_state.tts_audio, format="audio/mp3", autoplay=False)
|
| 648 |
+
st.session_state.audio_list.append((st.session_state.tts_audio, st.session_state.tts_duration))
|
|
|
|
|
|
|
| 649 |
response_status.update(label=f'({target_language_name}) - {get_translation("traduction_terminee")} ; {get_translation("synthese_vocale_terminee")}', state="complete", expanded=False)
|
| 650 |
else:
|
| 651 |
response_status.update(label=f'({target_language_name}) - {get_translation("erreur_synthese_vocale")}', state="error", expanded=False)
|
|
|
|
| 657 |
response_status.update(label=f'({target_language_name}) - {get_translation("erreur_traduction")}', state="error", expanded=False)
|
| 658 |
|
| 659 |
|
| 660 |
+
if st.session_state.audio_list:
|
| 661 |
with st.status(f"{get_translation('concatenation_audio_en_cours')}", expanded=False) as audio_status:
|
| 662 |
audio_status.update(label=f"{get_translation('concatenation_audio_en_cours')}", state="running", expanded=False)
|
| 663 |
try:
|
| 664 |
+
st.session_state.final_audio = concatenate_audio_files(st.session_state.audio_list)
|
| 665 |
with st.container(border=True):
|
| 666 |
|
| 667 |
# Générer un nom de fichier unique
|
| 668 |
+
st.session_state.timestamp = time.strftime("%Y%m%d-%H%M%S")
|
| 669 |
+
st.session_state.langues = "_".join([lang["iso-639-1"] for lang in st.session_state.selected_languages])
|
| 670 |
+
st.session_state.nom_fichier = f"reponse_audio_{st.session_state.langues}_{st.session_state.timestamp}.mp3"
|
| 671 |
|
| 672 |
|
| 673 |
+
st.audio(st.session_state.final_audio, format="audio/mp3", autoplay=st.session_state.autoplay_tts)
|
| 674 |
|
| 675 |
st.download_button(
|
| 676 |
label=f"📥 {get_translation('telecharger_audio')}",
|
| 677 |
+
data=st.session_state.final_audio,
|
| 678 |
+
file_name=st.session_state.nom_fichier,
|
| 679 |
mime="audio/mp3",
|
| 680 |
use_container_width=True,
|
| 681 |
type="primary",
|
| 682 |
+
key=f"download_button_{st.session_state.langues}_{st.session_state.timestamp}",
|
| 683 |
)
|
| 684 |
|
| 685 |
# ##
|
|
|
|
| 701 |
st.write(f"Frame rate: {audio.frame_rate}, Frame width: {audio.frame_width}, Duration: {audio.duration_seconds} seconds")
|
| 702 |
|
| 703 |
# Transcrire l'audio en texte
|
| 704 |
+
st.session_state.transcription = transcribe_audio(temp_audio, language=st.session_state.language_detected)
|
| 705 |
# Detecter la langue du texte transcrit (si la langue source n'est pas détectée)
|
| 706 |
if st.session_state.language_detected is None:
|
| 707 |
st.session_state.language_detected = detect_language(
|
| 708 |
+
input_text=st.session_state.transcription, temperature=0.01
|
| 709 |
)
|
| 710 |
st.markdown(
|
| 711 |
f"- {get_translation('langue_detectee')}".format(
|
|
|
|
| 715 |
|
| 716 |
st.markdown(
|
| 717 |
f"🎤 {get_translation('transcription_audio')}".format(
|
| 718 |
+
f"{st.session_state.transcription}"
|
| 719 |
)
|
| 720 |
)
|
| 721 |
|
| 722 |
|
| 723 |
+
st.session_state.audio_list = []
|
| 724 |
for cursor_selected_lang in st.session_state.selected_languages:
|
| 725 |
st.session_state.target_language = cursor_selected_lang["iso-639-1"]
|
| 726 |
st.session_state.full_response = ""
|
| 727 |
|
| 728 |
# Initialisation du mode de traitement pour la langue cible actuelle
|
| 729 |
+
st.session_state.system_prompt, st.session_state.operation_prompt = init_process_mode(from_lang=
|
| 730 |
(
|
| 731 |
st.session_state.language_detected if "language_detected" in st.session_state.language_detected else convert_language_name_to_iso6391(
|
| 732 |
st.session_state.interface_language
|
|
|
|
| 737 |
|
| 738 |
with st.chat_message("assistant", avatar="👻"):
|
| 739 |
message_placeholder = st.empty()
|
| 740 |
+
st.session_state.response_generator = process_message(
|
| 741 |
+
st.session_state.transcription,
|
| 742 |
+
st.session_state.operation_prompt,
|
| 743 |
+
st.session_state.enable_tts_for_input_from_audio_record,
|
| 744 |
+
st.session_state.system_prompt
|
| 745 |
)
|
| 746 |
|
| 747 |
+
for response_chunk in st.session_state.response_generator:
|
| 748 |
message_placeholder.markdown(response_chunk)
|
| 749 |
+
st.session_state.end_response = st.session_state.response_generator.close()
|
| 750 |
if st.session_state.full_response != "":
|
| 751 |
message_placeholder.markdown(st.session_state.full_response)
|
| 752 |
|
| 753 |
if st.session_state.enable_tts_for_input_from_audio_record:
|
| 754 |
+
st.session_state.tts_audio, st.session_state.tts_duration = process_tts_message(st.session_state.full_response)
|
| 755 |
|
| 756 |
+
if st.session_state.tts_audio:
|
| 757 |
+
st.session_state.audio_list.append((st.session_state.tts_audio, st.session_state.tts_duration))
|
| 758 |
else:
|
| 759 |
pass
|
| 760 |
|
| 761 |
+
if st.session_state.audio_list:
|
| 762 |
+
st.session_state.final_audio = concatenate_audio_files(st.session_state.audio_list)
|
| 763 |
|
| 764 |
with st.container(border=True):
|
| 765 |
|
| 766 |
# Générer un nom de fichier unique
|
| 767 |
+
st.session_state.timestamp = time.strftime("%Y%m%d-%H%M%S")
|
| 768 |
+
st.session_state.langues = "_".join([lang["iso-639-1"] for lang in st.session_state.selected_languages])
|
| 769 |
+
st.session_state.nom_fichier = f"reponse_audio_{st.session_state.langues}_{st.session_state.timestamp}.mp3"
|
| 770 |
|
| 771 |
+
st.audio(st.session_state.final_audio, format="audio/mp3", autoplay=st.session_state.autoplay_tts)
|
| 772 |
|
| 773 |
st.download_button(
|
| 774 |
label=f"📥 {get_translation('telecharger_audio')}",
|
| 775 |
+
data=st.session_state.final_audio,
|
| 776 |
+
file_name=st.session_state.nom_fichier,
|
| 777 |
mime="audio/mp3",
|
| 778 |
use_container_width=True,
|
| 779 |
type="primary",
|
| 780 |
+
key=f"download_button_{st.session_state.langues}_{st.session_state.timestamp}",
|
| 781 |
)
|
| 782 |
|
| 783 |
+
def clear_inputs_garbages(sessions_state_list: Optional[list] =
|
| 784 |
+
[ 'transcription', 'operation_prompt', 'system_prompt',
|
| 785 |
+
'audio_list', 'full_response', 'tts_audio',
|
| 786 |
+
'tts_duration', 'timestamp', 'langues',
|
| 787 |
+
'nom_fichier', 'final_audio', 'response_generator',
|
| 788 |
+
'end_response', 'messages' ]
|
| 789 |
+
):
|
| 790 |
+
def delete_session_state_var(var_name: str):
|
| 791 |
+
if f"{var_name}" in st.session_state:
|
| 792 |
+
del st.session_state[f"{var_name}"]
|
| 793 |
+
|
| 794 |
+
for it_var_name in sessions_state_list:
|
| 795 |
+
delete_session_state_var(it_var_name)
|
| 796 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 797 |
|
| 798 |
clear_inputs_garbages()
|
| 799 |
|