0x07CB commited on
Commit
a819608
·
unverified ·
1 Parent(s): 5382199

feat: Ajout du traitement complet des messages texte avec modération, détection de langue et génération multilingue

Browse files
Files changed (1) hide show
  1. pages/main.py +104 -0
pages/main.py CHANGED
@@ -471,6 +471,110 @@ def main_page():
471
  disabled=st.session_state.ui_chat_input_disabled
472
  )
473
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
474
  with chat_input_tabs3:
475
  with st.container(border=True):
476
  # Interface utilisateur pour l'upload de fichiers
 
471
  disabled=st.session_state.ui_chat_input_disabled
472
  )
473
 
474
+ if st.session_state.user_input:
475
+ # Désactiver temporairement l'interface pendant le traitement
476
+ st.session_state.ui_chat_input_disabled = True
477
+ st.session_state.ui_audio_input_disabled = True
478
+ st.session_state.ui_filesuploader_disabled = True
479
+
480
+ try:
481
+ # Vérification de la modération
482
+ user_message_moderation_check(st.session_state.user_input)
483
+
484
+ # Détection de la langue du message
485
+ language_detected = detect_language(
486
+ input_text=st.session_state.user_input,
487
+ temperature=0.01,
488
+ context_window=512,
489
+ model="gpt-4o-mini"
490
+ )
491
+
492
+ # Réinitialiser l'état précédent
493
+ st.session_state.full_response = ""
494
+ st.session_state.audio_list = []
495
+
496
+ with st.chat_message("user", avatar="👤"):
497
+ timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
498
+ st.write(timestamp)
499
+ with st.container(border=True):
500
+ st.subheader(f"🌐 lang: {convert_iso6391_to_language_name(language_detected)}")
501
+ st.markdown(st.session_state.user_input)
502
+
503
+ # Traitement pour chaque langue sélectionnée
504
+ for lang in st.session_state.selected_languages:
505
+ st.session_state.target_language = lang["iso-639-1"]
506
+
507
+ # Initialisation du mode de traitement avec la langue détectée
508
+ st.session_state.system_prompt, st.session_state.operation_prompt = init_langs_for_processing(
509
+ target_language=st.session_state.target_language,
510
+ interface_language=st.session_state.interface_language,
511
+ language_detected=language_detected
512
+ )
513
+
514
+ with st.chat_message("assistant", avatar="👻"):
515
+ with st.status(f"Processing response in {lang['language']}...", expanded=True) as status:
516
+ message_placeholder = st.empty()
517
+ st.session_state.response_generator = process_message(
518
+ st.session_state.user_input,
519
+ st.session_state.operation_prompt,
520
+ st.session_state.system_prompt
521
+ )
522
+
523
+ full_response = ""
524
+ for response_chunk in st.session_state.response_generator:
525
+ full_response += response_chunk
526
+ message_placeholder.markdown(full_response)
527
+
528
+ st.session_state.response_generator.close()
529
+ st.session_state.full_response = full_response
530
+
531
+ # Générer l'audio si TTS est activé
532
+ if st.session_state.enable_tts_for_input_from_text_field:
533
+ status.update(label=f"Generating audio in {lang['language']}...")
534
+ tts_audio, tts_duration = process_tts_message(
535
+ full_response,
536
+ voice=st.session_state.tts_voice
537
+ )
538
+ if tts_audio:
539
+ st.session_state.audio_list.append(
540
+ (tts_audio, tts_duration)
541
+ )
542
+ status.update(label="Done!", state="complete")
543
+
544
+ # Générer l'audio final si nécessaire
545
+ if st.session_state.audio_list:
546
+ with st.container(border=True):
547
+ st.session_state.final_audio = concatenate_audio_files(st.session_state.audio_list)
548
+
549
+ # Générer un nom de fichier unique
550
+ st.session_state.timestamp = time.strftime("%Y%m%d-%H%M%S")
551
+ st.session_state.langues = "_".join([lang["iso-639-1"] for lang in st.session_state.selected_languages])
552
+ st.session_state.nom_fichier = f"reponse_audio_{st.session_state.langues}_{st.session_state.timestamp}.mp3"
553
+
554
+ st.audio(
555
+ st.session_state.final_audio,
556
+ format="audio/mpeg",
557
+ autoplay=st.session_state.autoplay_tts
558
+ )
559
+
560
+ st.download_button(
561
+ label=f"📥 {get_translation('telecharger_audio')}",
562
+ data=st.session_state.final_audio,
563
+ file_name=st.session_state.nom_fichier,
564
+ mime="audio/mpeg",
565
+ use_container_width=True,
566
+ type="primary",
567
+ key=f"download_button_{st.session_state.langues}_{st.session_state.timestamp}"
568
+ )
569
+
570
+ except Exception as e:
571
+ st.error(f"Une erreur s'est produite : {str(e)}")
572
+ finally:
573
+ # Réactiver l'interface
574
+ st.session_state.ui_chat_input_disabled = False
575
+ st.session_state.ui_audio_input_disabled = False
576
+ st.session_state.ui_filesuploader_disabled = False
577
+
578
  with chat_input_tabs3:
579
  with st.container(border=True):
580
  # Interface utilisateur pour l'upload de fichiers