Test / app.py
GueuleDange's picture
Update app.py
4455fbc verified
import os
import gradio as gr
from huggingface_hub import InferenceClient
# Récupérer le token depuis les variables d'environnement (Secrets)
HF_TOKEN = os.environ.get("HF_TOKEN")
# 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[dict[str, str]],
system_message=SYSTEM_MESSAGE,
max_tokens=256,
temperature=0.7,
top_p=0.95,
):
"""
For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
"""
if not HF_TOKEN:
yield "❌ Erreur : HF_TOKEN non configuré. Ajoutez-le dans les Secrets de votre Space."
return
try:
client = InferenceClient(token=HF_TOKEN, model="openai/gpt-oss-20b")
# Détecter si l'utilisateur demande une réponse dans une langue spécifique
target_lang = detect_language_request(message)
messages = [{"role": "system", "content": system_message}]
# Limiter l'historique de la conversation aux 3 derniers échanges
for val in history[-3:]:
if val.get("role") == "user" and val.get("content"):
messages.append({"role": "user", "content": val["content"]})
if val.get("role") == "assistant" and val.get("content"):
messages.append({"role": "assistant", "content": val["content"]})
messages.append({"role": "user", "content": message})
response = ""
for message in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
choices = message.choices
token = ""
if len(choices) and choices[0].delta.content:
token = choices[0].delta.content
response += token
yield response
# Traduire la réponse si une langue cible est demandée
if target_lang:
response = translate_response(response, target_lang)
yield response
except Exception as e:
yield f"❌ Erreur : {str(e)}"
"""
For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
"""
chatbot = gr.ChatInterface(
respond,
type="messages",
additional_inputs=[
gr.Textbox(value=SYSTEM_MESSAGE, label="System message", interactive=False),
gr.Slider(minimum=1, maximum=512, value=256, step=1, label="Max new tokens"),
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."
)
with gr.Blocks() as demo:
# Affichage d'information sur le token (debug)
gr.Markdown(f"Token configuré: {'✅ Oui' if HF_TOKEN else '❌ Non'}")
# Vous pouvez retirer le LoginButton puisque nous utilisons le token direct
# with gr.Sidebar():
# gr.LoginButton()
chatbot.render()
if __name__ == "__main__":
demo.launch()