import gradio as gr import torch from transformers import AutoTokenizer, AutoModelForSeq2SeqLM import whisper # Pour le Speech-to-Text from gtts import gTTS # Pour le Text-to-Speech import os # --- 1. Chargement des modèles --- # Ton modèle Gheya model_name = "Finisha-F-scratch/Gheya-dialogue-v1" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSeq2SeqLM.from_pretrained(model_name) # Modèle de transcription (Whisper base est rapide pour le temps réel) stt_model = whisper.load_model("base") def voice_chat(audio_path): if audio_path is None: return None, "Veuillez enregistrer un message." # ÉTAPE A : Transcription (Audio -> Texte) result = stt_model.transcribe(audio_path) user_text = result["text"] # ÉTAPE B : Génération Gheya (Texte -> Texte) input_ids = tokenizer(user_text, return_tensors="pt").input_ids outputs = model.generate( input_ids, max_new_tokens=150, do_sample=True, temperature=0.7 ) response_text = tokenizer.decode(outputs[0], skip_special_tokens=True) # ÉTAPE C : Synthèse Vocale (Texte -> Audio) tts = gTTS(text=response_text, lang='fr') output_audio_path = "response.mp3" tts.save(output_audio_path) return output_audio_path, response_text # --- 2. Interface Gradio --- with gr.Blocks(theme=gr.themes.Soft()) as demo: gr.Markdown("# 🎙️ Gheya Voice Call") gr.Markdown("Parlez directement avec le modèle Gheya-dialogue-v1.") with gr.Row(): with gr.Column(): # Entrée audio (Microphone) input_audio = gr.Audio(sources="microphone", type="filepath", label="Appuyez pour parler") submit_btn = gr.Button("Envoyer l'appel", variant="primary") with gr.Column(): # Sortie audio et transcription textuelle pour suivi output_audio = gr.Audio(label="Gheya vous répond", autoplay=True) output_text = gr.Textbox(label="Transcription de la réponse") # Logique de clic submit_btn.click( fn=voice_chat, inputs=input_audio, outputs=[output_audio, output_text] ) if __name__ == "__main__": demo.launch()