Spaces:
Sleeping
Sleeping
| # app.py | |
| from google import genai | |
| import gradio as gr | |
| import base64 | |
| from PIL import Image | |
| import io | |
| API_KEY = "AIzaSyB4JKubDJd7nLx1NqPhDfMGeVWeQ7kqClY" | |
| client = genai.Client(api_key=API_KEY) | |
| MODEL_NAME = "gemini-2.5-flash" | |
| def generate_main_question_gemini(image): | |
| if image is None: | |
| return "الرجاء رفع صورة أولاً." | |
| try: | |
| # تحويل الصورة إلى base64 | |
| buffered = io.BytesIO() | |
| image.save(buffered, format="PNG") | |
| img_bytes = buffered.getvalue() | |
| img_base64 = base64.b64encode(img_bytes).decode("utf-8") | |
| # البرومبت الأساسي | |
| prompt = f""" | |
| سيتم تزويدك بصورة تحتوي على مادة علمية (قد تكون من درس في الرياضيات أو الكيمياء أو الفيزياء أو الأحياء). | |
| اقرأ محتوى الصورة بدقّة، وحاول تحديد نوع المادة والمفهوم الرئيسي الوارد فيها، ثم: | |
| اشرح الفكرة الأساسية بأسلوب واضح وسلس، بلغة عربية فصحى مبسّطة. | |
| وسّع الشرح لتوضيح المعنى العلمي أو القاعدة أو القانون أو الظاهرة التي تتحدث عنها الفقرة أو المسألة. | |
| قدّم مثالًا عمليًا أو تطبيقيًا من نفس المادة يساعد على فهم الفكرة. | |
| إذا كانت الصورة تحتوي على معادلة أو تجربة أو رسم توضيحي، اشرح خطواتها أو الغاية منها. | |
| في النهاية، اختم بجملة تربط الفكرة بالمفهوم العلمي العام الذي تنتمي إليه (مثلاً: قوانين نيوتن – المعادلات الكيميائية – مفهوم الطاقة – نظرية المجموعات...). | |
| يجب أن يكون الرد منسّقًا وواضحًا، يتكوّن من فقرتين إلى أربع فقرات على الأكثر، | |
| ويُظهر فهماً دقيقاً للمادة العلمية بلغة تربوية مفهومة. | |
| """ | |
| # تمرير الصورة مع البرومبت | |
| response = client.models.generate_content( | |
| model=MODEL_NAME, | |
| contents=[ | |
| {"role": "user", "parts": [ | |
| {"text": prompt}, | |
| {"inline_data": {"mime_type": "image/png", "data": img_base64}} | |
| ]} | |
| ] | |
| ) | |
| return response.text.strip() | |
| except Exception as e: | |
| return f" Error while connecting to API: {e}" | |
| with gr.Blocks() as demo: | |
| gr.Markdown("## MainQuestion — Basic Question Generator (Arabic Output)") | |
| with gr.Row(): | |
| image = gr.Image(label="Upload Image", type="pil") | |
| output = gr.Textbox(label="Generated Question (Arabic)", lines=6) | |
| submit_btn = gr.Button("Submit") | |
| submit_btn.click(fn=generate_main_question_gemini, inputs=image, outputs=output) | |
| if __name__ == "__main__": | |
| demo.launch(share=True, show_error=True) | |