Spaces:
Paused
Paused
| 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() |