Spaces:
Paused
Paused
0x07CB commited on
feat: Ajout du traitement complet des messages texte avec modération, détection de langue et génération multilingue
Browse files- 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
|