halimbahae commited on
Commit
f95c6c1
·
verified ·
1 Parent(s): e4eccab

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -11
app.py CHANGED
@@ -1,26 +1,45 @@
1
  import gradio as gr
2
  from huggingface_hub import InferenceClient
 
3
 
4
  # Initialisation du modèle HF中国镜像站
5
  client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
6
 
7
  # Messages système pour guider le modèle
8
  SYSTEM_PROMPT = {
9
- "fr": "Tu es un assistant pédagogique qui aide les professeurs à créer des cours.",
10
- "en": "You are an educational assistant helping teachers create courses."
11
  }
12
 
13
- # Fonction principale du chatbot
14
- def generate_course(subject, history, lang, max_tokens, temperature, top_p):
 
 
 
 
 
 
 
 
 
15
  system_message = SYSTEM_PROMPT.get(lang, SYSTEM_PROMPT["en"]) # Sélection de la langue
16
 
17
  messages = [{"role": "system", "content": system_message}]
18
 
 
19
  for message in history:
20
- messages.append({"role": message["role"], "content": message["content"]})
 
 
 
 
 
 
21
 
 
22
  messages.append({"role": "user", "content": f"Crée un cours sur : {subject}"})
23
 
 
24
  response = ""
25
  for message in client.chat_completion(
26
  messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p
@@ -29,15 +48,17 @@ def generate_course(subject, history, lang, max_tokens, temperature, top_p):
29
  response += token
30
  yield response
31
 
32
- # Interface utilisateur avec Gradio
33
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
34
- gr.Markdown("# 🎓 Teacher Assistant Chatbot")
35
 
36
  with gr.Row():
37
  subject_input = gr.Textbox(label="📌 Sujet du cours", placeholder="Ex: Apprentissage automatique")
38
  lang_select = gr.Dropdown(choices=["fr", "en"], value="fr", label="🌍 Langue")
39
 
40
- chat = gr.Chatbot(type="messages") # Fix : Utilisation du format messages
 
 
41
 
42
  with gr.Row():
43
  max_tokens = gr.Slider(minimum=100, maximum=2048, value=512, step=1, label="📝 Max tokens")
@@ -47,11 +68,11 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
47
  generate_button = gr.Button("🚀 Générer le cours")
48
 
49
  generate_button.click(
50
- generate_course,
51
- inputs=[subject_input, chat, lang_select, max_tokens, temperature, top_p],
52
  outputs=chat
53
  )
54
 
55
- # Lancer l'application
56
  if __name__ == "__main__":
57
  demo.launch()
 
1
  import gradio as gr
2
  from huggingface_hub import InferenceClient
3
+ import PyPDF2
4
 
5
  # Initialisation du modèle HF中国镜像站
6
  client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
7
 
8
  # Messages système pour guider le modèle
9
  SYSTEM_PROMPT = {
10
+ "fr": "Tu es un assistant pédagogique qui aide les professeurs à créer des cours et analyser des documents PDF.",
11
+ "en": "You are an educational assistant helping teachers create courses and analyze PDF documents."
12
  }
13
 
14
+ # 📄 Fonction pour lire et extraire le texte d'un PDF
15
+ def extract_text_from_pdf(pdf_file):
16
+ text = ""
17
+ with pdf_file as f:
18
+ reader = PyPDF2.PdfReader(f)
19
+ for page in reader.pages:
20
+ text += page.extract_text() + "\n"
21
+ return text
22
+
23
+ # 🧠 Fonction du chatbot avec gestion de l'historique + PDF RAG
24
+ def generate_response(subject, history, lang, pdf_file, max_tokens, temperature, top_p):
25
  system_message = SYSTEM_PROMPT.get(lang, SYSTEM_PROMPT["en"]) # Sélection de la langue
26
 
27
  messages = [{"role": "system", "content": system_message}]
28
 
29
+ # 🔄 Correction du format de l'historique
30
  for message in history:
31
+ if isinstance(message, dict) and "role" in message and "content" in message:
32
+ messages.append(message)
33
+
34
+ # 📄 Ajouter le contenu du PDF s'il y en a un
35
+ if pdf_file is not None:
36
+ pdf_text = extract_text_from_pdf(pdf_file)
37
+ messages.append({"role": "user", "content": f"Voici un document PDF pertinent : {pdf_text[:1000]}..."}) # On limite à 1000 caractères pour éviter la surcharge
38
 
39
+ # Ajouter la demande de l'utilisateur
40
  messages.append({"role": "user", "content": f"Crée un cours sur : {subject}"})
41
 
42
+ # 🔥 Génération de la réponse en streaming
43
  response = ""
44
  for message in client.chat_completion(
45
  messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p
 
48
  response += token
49
  yield response
50
 
51
+ # 🎨 Interface utilisateur Gradio
52
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
53
+ gr.Markdown("# 🎓 Teacher Assistant Chatbot avec PDF RAG")
54
 
55
  with gr.Row():
56
  subject_input = gr.Textbox(label="📌 Sujet du cours", placeholder="Ex: Apprentissage automatique")
57
  lang_select = gr.Dropdown(choices=["fr", "en"], value="fr", label="🌍 Langue")
58
 
59
+ pdf_upload = gr.File(label="📄 Télécharger un PDF (optionnel)", type="file")
60
+
61
+ chat = gr.Chatbot(type="messages") # ✅ Correction : Format messages OK
62
 
63
  with gr.Row():
64
  max_tokens = gr.Slider(minimum=100, maximum=2048, value=512, step=1, label="📝 Max tokens")
 
68
  generate_button = gr.Button("🚀 Générer le cours")
69
 
70
  generate_button.click(
71
+ generate_response,
72
+ inputs=[subject_input, chat, lang_select, pdf_upload, max_tokens, temperature, top_p],
73
  outputs=chat
74
  )
75
 
76
+ # 🔥 Lancer l'application
77
  if __name__ == "__main__":
78
  demo.launch()