import gradio as gr from huggingface_hub import InferenceClient # Initialiser le client pour le modèle Phi-3.5-mini-instruct client = InferenceClient("microsoft/Phi-3.5-mini-instruct") # Définir un message système plus léger SYSTEM_MESSAGE = """ Tu es TeachEase, un enseignant virtuel conçu pour aider les élèves à comprendre leurs cours, faire leurs exercices et devoirs. Ton rôle est d'expliquer les concepts de manière claire et pédagogique, de fournir des exemples concrets et de poser des questions pour vérifier la compréhension. **Instructions spéciales :** 1. **Salutations :** Réponds de manière courte et amicale. 2. **Expressions mathématiques et scientifiques :** Utilise le format LaTeX. 3. **Traduction et réponses multilingues :** Adapte ta réponse en fonction de la langue demandée. """ def detect_language_request(message: str) -> str: """ Détecte si l'utilisateur demande une réponse dans une langue spécifique. Retourne la langue demandée ou None si aucune demande n'est détectée. """ language_requests = { "anglais": "en", "english": "en", "espagnol": "es", "spanish": "es", "allemand": "de", "german": "de", "portugais": "pt", "portuguese": "pt", "français": "fr", "french": "fr", "italien": "it", "italian": "it", "chinois": "zh", "chinese": "zh", "japonais": "ja", "japanese": "ja", "russe": "ru", } for keyword, lang_code in language_requests.items(): if keyword in message.lower(): return lang_code return None def translate_response(response: str, target_lang: str) -> str: """ Traduit la réponse dans la langue cible (simulation). """ translations = { "en": "Hello! How can I assist you today?", "es": "¡Hola! ¿En qué puedo ayudarte hoy?", "de": "Hallo! Wie kann ich Ihnen heute helfen?", "pt": "Olá! Como posso ajudar você hoje?", "fr": "Bonjour ! Comment puis-je vous aider aujourd'hui ?", "it": "Ciao! Come posso aiutarti oggi?", } return translations.get(target_lang, response) # Retourne la réponse originale si la langue n'est pas trouvée def respond( message, history: list[tuple[str, str]], system_message=SYSTEM_MESSAGE, # Utiliser le message système par défaut max_tokens=256, # Réduire le nombre de tokens pour une réponse plus rapide temperature=0.7, top_p=0.95, ): # Détecter si l'utilisateur demande une réponse dans une langue spécifique target_lang = detect_language_request(message) # Préparer les messages pour le modèle messages = [{"role": "system", "content": system_message}] # Limiter l'historique de la conversation aux 3 derniers échanges for val in history[-3:]: if val[0]: messages.append({"role": "user", "content": val[0]}) if val[1]: messages.append({"role": "assistant", "content": val[1]}) # Ajouter le nouveau message de l'utilisateur messages.append({"role": "user", "content": message}) # Générer la réponse du modèle response = "" for message in client.chat_completion( messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p, ): token = message.choices[0].delta.content response += token # Traduire la réponse si une langue cible est demandée if target_lang: response = translate_response(response, target_lang) yield response # Configurer l'interface Gradio demo = gr.ChatInterface( respond, additional_inputs=[ gr.Textbox(value=SYSTEM_MESSAGE, label="System message", interactive=False), # Message système fixe gr.Slider(minimum=1, maximum=512, value=256, step=1, label="Max new tokens"), # Réduire la valeur maximale gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"), gr.Slider( minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)", ), ], title="TeachEase - Enseignant Virtuel", description="Bienvenue sur TeachEase ! Posez vos questions et obtenez des explications claires et pédagogiques avec des expressions mathématiques en LaTeX." ) # Lancer l'application if __name__ == "__main__": demo.launch()