File size: 4,497 Bytes
af75fd5
 
 
d7c8750
eef188b
d7c8750
9ca83be
d7c8750
 
 
 
9ca83be
 
 
d7c8750
af75fd5
adb4006
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
af75fd5
 
 
d7c8750
9ca83be
d7c8750
 
af75fd5
adb4006
 
 
d7c8750
af75fd5
 
9ca83be
 
af75fd5
 
 
 
 
d7c8750
af75fd5
 
d7c8750
af75fd5
 
 
 
 
 
 
 
 
 
adb4006
 
 
 
 
 
af75fd5
d7c8750
af75fd5
 
 
d7c8750
9ca83be
af75fd5
 
 
 
 
 
 
 
 
d7c8750
 
af75fd5
 
d7c8750
af75fd5
d7c8750
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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()