mimoha commited on
Commit
3dc0087
·
verified ·
1 Parent(s): 0bc23d0

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +74 -0
app.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+ from google import genai
3
+ import gradio as gr
4
+ import base64
5
+ from PIL import Image
6
+ import io
7
+
8
+ API_KEY = "AIzaSyB4JKubDJd7nLx1NqPhDfMGeVWeQ7kqClY"
9
+
10
+ client = genai.Client(api_key=API_KEY)
11
+ MODEL_NAME = "gemini-2.5-flash"
12
+
13
+
14
+ def generate_main_question_gemini(image):
15
+ if image is None:
16
+ return "الرجاء رفع صورة أولاً."
17
+
18
+ try:
19
+ # تحويل الصورة إلى base64
20
+ buffered = io.BytesIO()
21
+ image.save(buffered, format="PNG")
22
+ img_bytes = buffered.getvalue()
23
+ img_base64 = base64.b64encode(img_bytes).decode("utf-8")
24
+
25
+ # البرومبت الأساسي
26
+ prompt = f"""
27
+ سيتم تزويدك بصورة تحتوي على مادة علمية (قد تكون من درس في الرياضيات أو الكيمياء أو الفيزياء أو الأحياء).
28
+
29
+ اقرأ محتوى الصورة بدقّة، وحاول تحديد نوع المادة والمفهوم الرئيسي الوارد فيها، ثم:
30
+
31
+ اشرح الفكرة الأساسية بأسلوب واضح وسلس، بلغة عربية فصحى مبسّطة.
32
+
33
+ وسّع الشرح لتوضيح المعنى العلمي أو القاعدة أو القانون أو الظاهرة التي تتحدث عنها الفقرة أو المسألة.
34
+
35
+ قدّم مثالًا عمليًا أو تطبيقيًا من نفس المادة يساعد على فهم الفكرة.
36
+
37
+ إذا كانت الصورة تحتوي على معادلة أو تجربة أو رسم توضيحي، اشرح خطواتها أو الغاية منها.
38
+
39
+ في النهاية، اختم بجملة تربط الفكرة بالمفهوم العلمي العام الذي تنتمي إليه (مثلاً: قوانين نيوتن – المعادلات الكيميائية – مفهوم الطاقة – نظرية المجموعات...).
40
+
41
+ يجب أن يكون الرد منسّقًا وواضحًا، يتكوّن من فقرتين إلى أربع فقرات على الأكثر،
42
+ ويُظهر فهماً دقيقاً للمادة العلمية بلغة تربوية مفهومة.
43
+ """
44
+
45
+ # تمرير الصورة مع البرومبت
46
+ response = client.models.generate_content(
47
+ model=MODEL_NAME,
48
+ contents=[
49
+ {"role": "user", "parts": [
50
+ {"text": prompt},
51
+ {"inline_data": {"mime_type": "image/png", "data": img_base64}}
52
+ ]}
53
+ ]
54
+ )
55
+
56
+ return response.text.strip()
57
+
58
+ except Exception as e:
59
+ return f" Error while connecting to API: {e}"
60
+
61
+
62
+ with gr.Blocks() as demo:
63
+ gr.Markdown("## MainQuestion — Basic Question Generator (Arabic Output)")
64
+
65
+ with gr.Row():
66
+ image = gr.Image(label="Upload Image", type="pil")
67
+
68
+ output = gr.Textbox(label="Generated Question (Arabic)", lines=6)
69
+
70
+ submit_btn = gr.Button("Submit")
71
+ submit_btn.click(fn=generate_main_question_gemini, inputs=image, outputs=output)
72
+
73
+ if __name__ == "__main__":
74
+ demo.launch(share=True, show_error=True)