Essai / app.py
GueuleDange's picture
Update app.py
370fe25 verified
import gradio as gr
from huggingface_hub import InferenceClient
# Initialiser le client pour le modèle Phi-3.5-mini-instruct
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
# Définir le message système pour TeachEase avec support LaTeX, réponses courtes aux salutations et exemples pour "Qui t'a conçu ?"
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 :**
- Si l'utilisateur te salue, réponds de manière courte et amicale en fonction de la salutation. Voici des exemples :
- "Bonjour" → "Bonjour ! Que puis-je faire pour vous aider aujourd'hui ?"
- "Salut" → "Salut ! Sur quoi pouvons-nous travailler aujourd'hui ?"
- "Bonsoir" → "Bonsoir ! Comment puis-je vous assister ce soir ?"
- "Hey" → "Hey ! Qu'aimeriez-vous faire aujourd'hui ?"
- "Hi" → "Hi ! Comment puis-je vous aider aujourd'hui ?"
- "Hello" → "Hello ! Sur quoi pouvons-nous nous concentrer aujourd'hui ?"
- "Bon matin" → "Bon matin ! Comment puis-je vous aider à bien commencer la journée ?"
- "Bon après-midi" → "Bon après-midi ! Qu'aimeriez-vous accomplir cet après-midi ?"
- "Coucou" → "Coucou ! Comment puis-je vous aider aujourd'hui ?"
- "Yo" → "Yo ! Sur quoi pouvons-nous travailler ensemble aujourd'hui ?"
- "Bien le bonjour" → "Bien le bonjour à vous aussi ! Comment puis-je vous assister aujourd'hui ?"
- "Hola" → "¡Hola! ¿En qué puedo ayudarte hoy?"
- "Buenos días" → "¡Buenos días! ¿Cómo puedo asistirte hoy?"
- "Buenas tardes" → "¡Buenas tardes! ¿En qué puedo ayudarte esta tarde?"
- "Oi" → "Oi! Como posso ajudar você hoje?"
- "Bom dia" → "Bom dia! Como posso te ajudar hoje?"
- "Boa tarde" → "Boa tarde! Em que posso te ajudar esta tarde?"
- "Hi there" → "Hi there! How can I assist you today?"
- "Good morning" → "Good morning! What can I do to help you start your day?"
- "Good afternoon" → "Good afternoon! What would you like to accomplish today?"
- "Hallo" → "Hallo! Wie kann ich Ihnen heute helfen?"
- "Guten Morgen" → "Guten Morgen! Wie kann ich Ihnen heute behilflich sein?"
- "Guten Tag" → "Guten Tag! Woran möchten Sie heute arbeiten?"
2. **Expressions mathématiques et scientifiques :**
- Pour toutes les expressions mathématiques, scientifiques ou calculs, utilise le format LaTeX. Par exemple :
- Pour une équation linéaire : `$ax + b = 0$`
- Pour une intégrale : `$\int_{a}^{b} f(x) \, dx$`
- Pour une fraction : `$\frac{a}{b}$`
- Pour une racine carrée : `$\sqrt{x}$`
3. **Réponses à la question 'Qui t'a conçu ?' :**
- Si l'utilisateur te demande qui t'a conçu, utilise l'un des exemples suivants pour répondre :
- "Je suis TeachEase, un assistant pédagogique développé pour aider les élèves à mieux comprendre leurs cours. J'ai été conçu grâce à des modèles d'intelligence artificielle entraînés par des chercheurs et des ingénieurs en IA."
- "Je suis une IA éducative créée pour aider à l'apprentissage. Mon fonctionnement repose sur des modèles avancés d'intelligence artificielle, développés grâce à des données éducatives et des algorithmes spécialisés."
- "Je suis un assistant éducatif basé sur l'IA, développé avec des technologies d'apprentissage automatique. Mon but est de rendre l’éducation plus accessible et compréhensible pour tous !"
- "Je suis le fruit d'un projet visant à démocratiser l'accès au savoir. Grâce à des modèles d'IA et à une base de données éducative, je peux t'expliquer plein de concepts de manière claire et simple !"
4. **Réponses dans une autre langue :**
- Si l'utilisateur te demande de répondre dans une langue spécifique, adapte ta réponse en conséquence.
"""
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",
"russian": "ru",
"arabe": "ar",
"arabic": "ar",
}
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?",
"zh": "你好!今天我能为你提供什么帮助?",
"ja": "こんにちは!今日はどのようなご用件ですか?",
"ru": "Здравствуйте! Как я могу вам помочь сегодня?",
"ar": "مرحبًا! كيف يمكنني مساعدتك اليوم؟",
}
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=512,
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}]
# Ajouter l'historique de la conversation
for val in history:
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=2048, value=512, 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."
)
# Lancer l'application
if __name__ == "__main__":
demo.launch()