mimoha's picture
Create app.py
3dc0087 verified
# 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)