Test2.0 / app.py
GueuleDange's picture
Update app.py
9ca83be verified
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()