rick commited on
Commit
092f860
·
unverified ·
1 Parent(s): 107cd6a

bug fixed now... not done...

Browse files
Files changed (1) hide show
  1. 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
- operation_prompt: str = "",
327
- tts_enabled: bool = False,
328
- system_prompt: Optional[str]=""
329
- ) -> str:
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'{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,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 = [] #.append({"role": "assistant", "content": full_response})
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
- tts_audio, tts_duration = text_to_speech(text_response)
366
- return tts_audio, tts_duration
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
- system_prompt = GlobalSystemPrompts.linguascribe()
405
- operation_prompt = f"Translate({from_lang} to {dest_lang})"
406
- return system_prompt, operation_prompt
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, operation_prompt,
 
630
  st.session_state.enable_tts_for_input_from_text_field,
631
- system_prompt=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
- transcription, operation_prompt, st.session_state.enable_tts_for_input_from_audio_record,
745
- system_prompt=system_prompt
 
 
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
- # check if `final_audio` var exists , if exists delete final_audio
785
- #if 'final_audio' in locals():
786
- # del final_audio
787
- #if 'audio_list' in locals():
788
- # del audio_list
789
- #if 'system_prompt' in locals():
790
- # del system_prompt
791
- #if 'operation_prompt' in locals():
792
- # del operation_prompt
793
- #if 'user_input' in locals():
794
- # del user_input
795
-
796
- def clear_inputs_garbages():
797
- if 'transcription' in locals():
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