Sammaali commited on
Commit
575a82f
·
verified ·
1 Parent(s): b60eeb1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -53
app.py CHANGED
@@ -1,81 +1,72 @@
1
  import os
2
- import requests
3
  import gradio as gr
 
4
 
5
- # --- إعداد API ---
6
- API_KEY = os.environ.get("MISTRAL_API_KEY")
7
 
8
- if not API_KEY:
9
- raise ValueError("❌ لازم تحط MISTRAL_API_KEY")
 
10
 
11
- API_URL = "https://api.mistral.ai/v1/chat/completions"
12
 
13
-
14
- # --- توليد السؤال ---
15
  def generate_question(text):
16
 
17
- if not text.strip():
18
- return "يرجى إدخال نص"
19
-
20
  prompt = f"""
21
- You are an expert Arabic educational content designer.
22
 
23
- TASK:
24
- Generate ONE comprehensive question that covers the main idea of the text.
25
 
26
- STRICT RULES:
27
- - Maximum 25 words
28
- - One sentence only
29
- - No repetition
30
- - No explanation
31
- - Use clear Modern Standard Arabic
32
- - The question should start with: "ما" or "كيف"
33
 
34
- TEXT:
35
- {text}
36
 
37
- FINAL QUESTION:
38
- """
 
 
 
39
 
40
- headers = {
41
- "Authorization": f"Bearer {API_KEY}",
42
- "Content-Type": "application/json"
43
- }
44
 
45
- data = {
46
- "model": "mistral-small-latest",
47
- "messages": [
48
- {"role": "user", "content": prompt}
49
- ],
50
- "temperature": 0.2
51
- }
 
 
52
 
53
  try:
54
- response = requests.post(API_URL, headers=headers, json=data)
55
- result = response.json()
 
 
 
 
 
56
 
57
- return result["choices"][0]["message"]["content"].strip()
58
 
59
  except Exception as e:
60
- return f" خطأ: {str(e)}"
61
 
62
 
63
- # --- واجهة Gradio ---
64
  demo = gr.Interface(
65
  fn=generate_question,
66
- inputs=gr.Textbox(
67
- lines=10,
68
- label="📘 الفقرة",
69
- placeholder="ضع الفقرة هنا..."
70
- ),
 
71
  outputs=gr.Textbox(
72
- lines=3,
73
- label="السؤال العام"
74
  ),
75
- title="🎓 مولد السؤال الشامل",
76
- description="يولد سؤالاً واحداً شاملاً يغطي الفكرة العامة للنص."
77
  )
78
 
79
- # --- تشغيل ---
80
- if __name__ == "__main__":
81
- demo.launch()
 
1
  import os
 
2
  import gradio as gr
3
+ from mistralai.client import Mistral
4
 
 
 
5
 
6
+ api_key = os.environ["MISTRAL_API_KEY"]
7
+ client = Mistral(api_key=api_key)
8
+ model_name = "mistral-small-latest"
9
 
 
10
 
 
 
11
  def generate_question(text):
12
 
 
 
 
13
  prompt = f"""
14
+ بصفتك خبيراً في هندسة المحتوى التعليمي، حلل النص المرفق وصغ "سؤالاً جوهرياً واحداً" يمثل الهيكل العظمي للمعلومات الواردة، بحيث يكون هو حجر الزاوية لعملية التسميع. التزم بالقواعد المنطقية التاليبصفتك خبيراً في هندسة المحتوى التعليمي، قم بتحليل النص المرفق وصياغة سؤال جوهري واحد للتسميع. اتبع الخطوات التالية بدقة:
15
 
16
+ الخطوة الأولى: التحليل والربط
 
17
 
18
+ ابحث عن المفهوم الشامل والرابط الموضوعي بين الأجزاء.
 
 
 
 
 
 
19
 
20
+ حدد العلاقة بين "الماهية/البنية" (لماذا وجد؟) و"الأثر/الوظيفة" (ماذا فعل؟).
 
21
 
22
+ الخطوة الثانية: صياغة السؤال (بناءً على معايير صارمة)
23
+
24
+ يجب أن يمنع السؤال السرد المباشر ويحفز التركيب الذهني.
25
+
26
+ يجب أن يعمل كـ "مظلة" تغطي 90% من النص بما في ذلك الأسباب البنيوية الدقيقة.
27
 
28
+ الخطوة الثالثة: النقد الذاتي (قبل العرض)
 
 
 
29
 
30
+ راجع السؤال الناتج: هل سأضطر عند الإجابة عليه لذكر (أصغر تفصيل بنيوي) ورد في النص؟
31
+
32
+ إذا كان هناك معلومة (مثل أصبغة معينة أو مادة كيميائية) لن يضطر المتعلم لذكرها، أعد صياغة السؤال ليتضمنها.
33
+
34
+ الآن، صغ السؤال النهائي ثم اشرح لي باختصار كيف يضمن هذا السؤال استرجاع كافة تفاصيل النص.
35
+ إليك النص: {text}
36
+ التزم فقط بالحقائق الواردة في النص، ولا تطلب في السؤال تفسيرات وظيفية أو علمية ما لم تكن مذكورة صراحة في الفقرة.
37
+ السؤال:
38
+ """
39
 
40
  try:
41
+ response = client.chat.complete(
42
+ model=model_name,
43
+ messages=[
44
+ {"role": "user", "content": prompt}
45
+ ],
46
+ temperature=0.3
47
+ )
48
 
49
+ return response.choices[0].message.content
50
 
51
  except Exception as e:
52
+ return f"حدث خطأ: {e}"
53
 
54
 
55
+ # Gradio UI
56
  demo = gr.Interface(
57
  fn=generate_question,
58
+ inputs=[
59
+ gr.Textbox(
60
+ lines=10,
61
+ label="الفقرة"
62
+ )
63
+ ],
64
  outputs=gr.Textbox(
65
+ lines=14,
66
+ label="السؤال المولد"
67
  ),
68
+ title="مولد الأسئلة العربية باستخدام Mistral Nemo",
69
+ description="أدخل عنوان الدرس والفقرة وسيتم توليد سؤال شامل."
70
  )
71
 
72
+ demo.launch()