GueuleDange commited on
Commit
3cf7dd9
·
verified ·
1 Parent(s): 53ab94d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -101
app.py CHANGED
@@ -5,93 +5,29 @@ from huggingface_hub import InferenceClient
5
  # Récupérer le token depuis les variables d'environnement (Secrets)
6
  HF_TOKEN = os.environ.get("HF_TOKEN")
7
 
8
- # Définir un message système plus léger
9
- SYSTEM_MESSAGE = """
10
- Tu es TeachEase, un enseignant virtuel conçu pour aider les élèves à comprendre leurs cours, faire leurs exercices et devoirs.
11
- 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.
12
- **Instructions spéciales :**
13
- 1. **Salutations :** Réponds de manière courte et amicale.
14
- 2. **Expressions mathématiques et scientifiques :** Utilise le format LaTeX.
15
- 3. **Traduction et réponses multilingues :** Adapte ta réponse en fonction de la langue demandée.
16
- """
17
-
18
- def detect_language_request(message: str) -> str:
19
- """
20
- Détecte si l'utilisateur demande une réponse dans une langue spécifique.
21
- Retourne la langue demandée ou None si aucune demande n'est détectée.
22
- """
23
- language_requests = {
24
- "anglais": "en",
25
- "english": "en",
26
- "espagnol": "es",
27
- "spanish": "es",
28
- "allemand": "de",
29
- "german": "de",
30
- "portugais": "pt",
31
- "portuguese": "pt",
32
- "français": "fr",
33
- "french": "fr",
34
- "italien": "it",
35
- "italian": "it",
36
- "chinois": "zh",
37
- "chinese": "zh",
38
- "japonais": "ja",
39
- "japanese": "ja",
40
- "russe": "ru",
41
- }
42
- for keyword, lang_code in language_requests.items():
43
- if keyword in message.lower():
44
- return lang_code
45
- return None
46
-
47
- def translate_response(response: str, target_lang: str) -> str:
48
- """
49
- Traduit la réponse dans la langue cible (simulation).
50
- """
51
- translations = {
52
- "en": "Hello! How can I assist you today?",
53
- "es": "¡Hola! ¿En qué puedo ayudarte hoy?",
54
- "de": "Hallo! Wie kann ich Ihnen heute helfen?",
55
- "pt": "Olá! Como posso ajudar você hoje?",
56
- "fr": "Bonjour ! Comment puis-je vous aider aujourd'hui ?",
57
- "it": "Ciao! Come posso aiutarti oggi?",
58
- }
59
- return translations.get(target_lang, response)
60
-
61
  def respond(
62
  message,
63
- history: list[tuple[str, str]],
64
- system_message=SYSTEM_MESSAGE,
65
- max_tokens=256,
66
- temperature=0.7,
67
- top_p=0.95,
68
  ):
 
 
 
69
  if not HF_TOKEN:
70
  yield "❌ Erreur : HF_TOKEN non configuré. Ajoutez-le dans les Secrets de votre Space."
71
  return
72
 
73
  try:
74
- # Initialiser le client avec le token
75
- client = InferenceClient(token=HF_TOKEN, model="microsoft/Phi-3.5-mini-instruct")
76
-
77
- # Détecter si l'utilisateur demande une réponse dans une langue spécifique
78
- target_lang = detect_language_request(message)
79
 
80
- # Préparer les messages pour le modèle
81
  messages = [{"role": "system", "content": system_message}]
82
-
83
- # Limiter l'historique de la conversation aux 3 derniers échanges
84
- for val in history[-3:]:
85
- if val[0]:
86
- messages.append({"role": "user", "content": val[0]})
87
- if val[1]:
88
- messages.append({"role": "assistant", "content": val[1]})
89
-
90
- # Ajouter le nouveau message de l'utilisateur
91
  messages.append({"role": "user", "content": message})
92
 
93
- # Générer la réponse du modèle
94
  response = ""
 
95
  for message in client.chat_completion(
96
  messages,
97
  max_tokens=max_tokens,
@@ -99,39 +35,29 @@ def respond(
99
  temperature=temperature,
100
  top_p=top_p,
101
  ):
102
- if hasattr(message, 'choices') and message.choices:
103
- if hasattr(message.choices[0], 'delta') and hasattr(message.choices[0].delta, 'content'):
104
- token = message.choices[0].delta.content
105
- if token:
106
- response += token
107
- yield response
108
 
109
- # Traduire la réponse si une langue cible est demandée
110
- if target_lang and response:
111
- response = translate_response(response, target_lang)
112
  yield response
113
 
114
  except Exception as e:
115
  yield f"❌ Erreur : {str(e)}"
116
-
117
- # Configurer l'interface Gradio
118
- demo = gr.ChatInterface(
119
- respond,
120
- additional_inputs=[
121
- gr.Textbox(value=SYSTEM_MESSAGE, label="System message", interactive=True),
122
- gr.Slider(minimum=1, maximum=512, value=256, step=1, label="Max new tokens"),
123
- gr.Slider(minimum=0.1, maximum=1.0, value=0.7, step=0.1, label="Temperature"),
124
- gr.Slider(
125
- minimum=0.1,
126
- maximum=1.0,
127
- value=0.95,
128
- step=0.05,
129
- label="Top-p (nucleus sampling)",
130
- ),
131
- ],
132
- title="TeachEase - Enseignant Virtuel",
133
- description="Bienvenue sur TeachEase ! Posez vos questions et obtenez des explications claires et pédagogiques avec des expressions mathématiques en LaTeX."
134
  )
135
 
 
 
 
 
 
 
 
 
 
 
 
136
  if __name__ == "__main__":
137
  demo.launch()
 
5
  # Récupérer le token depuis les variables d'environnement (Secrets)
6
  HF_TOKEN = os.environ.get("HF_TOKEN")
7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  def respond(
9
  message,
10
+ max_tokens,
11
+ temperature,
12
+ top_p,
13
+
 
14
  ):
15
+ """
16
+ 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
17
+ """
18
  if not HF_TOKEN:
19
  yield "❌ Erreur : HF_TOKEN non configuré. Ajoutez-le dans les Secrets de votre Space."
20
  return
21
 
22
  try:
23
+ client = InferenceClient(token=HF_TOKEN, model="openai/gpt-oss-20b")
 
 
 
 
24
 
 
25
  messages = [{"role": "system", "content": system_message}]
26
+ messages.extend(history)
 
 
 
 
 
 
 
 
27
  messages.append({"role": "user", "content": message})
28
 
 
29
  response = ""
30
+
31
  for message in client.chat_completion(
32
  messages,
33
  max_tokens=max_tokens,
 
35
  temperature=temperature,
36
  top_p=top_p,
37
  ):
38
+ choices = message.choices
39
+ token = ""
40
+ if len(choices) and choices[0].delta.content:
41
+ token = choices[0].delta.content
 
 
42
 
43
+ response += token
 
 
44
  yield response
45
 
46
  except Exception as e:
47
  yield f"❌ Erreur : {str(e)}"
48
+ """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  )
50
 
51
+ with gr.Blocks() as demo:
52
+ # Affichage d'information sur le token (debug)
53
+ gr.Markdown(f"Token configuré: {'✅ Oui' if HF_TOKEN else '❌ Non'}")
54
+
55
+ # Vous pouvez retirer le LoginButton puisque nous utilisons le token direct
56
+ # with gr.Sidebar():
57
+ # gr.LoginButton()
58
+
59
+ chatbot.render()
60
+
61
+
62
  if __name__ == "__main__":
63
  demo.launch()