# app.py import gradio as gr import json import re import google.generativeai as genai API_KEY = "AIzaSyB4JKubDJd7nLx1NqPhDfMGeVWeQ7kqClY" genai.configure(api_key=API_KEY) MODEL_NAME = "gemini-2.5-flash" model = genai.GenerativeModel(MODEL_NAME) def generate_mcqs_gemini(paragraph: str, n_questions: int, n_choices: int = 4): if not paragraph or paragraph.strip() == "": return " Please enter a paragraph first.", "" prompt = f""" اقرأ الفقرة أو الدرس الآتي بعناية: {paragraph} ثم أنشئ {n_questions} سؤال من نوع الاختيار من متعدد (MCQ) يختبر الفهم الحقيقي لمضمون النص. يجب أن تتصف الأسئلة بالشروط التالية: - أن تكون واضحة ومباشرة. - أن يكون مستوى الصعوبة متوسطًا. - أن تكون الخيارات الأربعة متقاربة المعنى إلى حدٍّ ما، ولكن واحدة منها فقط صحيحة بوضوح. - أن تُكتب الخيارات بلغة عربية فصحى سليمة ومتناسقة في الأسلوب. - عدد الخيارات = {n_choices}. أعِد المخرجات بصيغة JSON فقط بدون أي شرح إضافي. البنية المطلوبة: {{ "mcqs": [ {{ "question": "النص", "options": ["اختيار1","اختيار2","اختيار3","اختيار4"], "answer_index": رقم (0 إلى {n_choices-1}) }} ] }} """ try: response = model.generate_content(prompt) raw_text = response.text.strip() cleaned = re.sub(r"```(json)?", "", raw_text).strip("` \n") data = json.loads(cleaned) mcqs = data.get("mcqs", []) if not mcqs: return " Could not parse MCQs.", "" questions_text = "" answers_text = "" for i, q in enumerate(mcqs, 1): questions_text += f"\nQ{i}: {q['question']}\n" for j, opt in enumerate(q["options"]): questions_text += f" {j}) {opt}\n" correct_idx = q["answer_index"] answers_text += f"Q{i}: {correct_idx} {q['options'][correct_idx]}\n" return questions_text, answers_text except Exception as e: return f" Error while connecting to API: {e}", "" with gr.Blocks() as demo: gr.Markdown("## Arabic MCQ Generator (Difficulty = سهل)") paragraph = gr.Textbox( label="Paragraph (Input text)", lines=8, placeholder="Paste your paragraph here..." ) n_questions = gr.Number( label="Number of Questions", value=5, precision=0 ) output_questions = gr.Textbox(label="Generated MCQs (without answers)", lines=20) output_answers = gr.Textbox(label="Answers with index", lines=10) submit_btn = gr.Button("Submit") submit_btn.click( fn=generate_mcqs_gemini, inputs=[paragraph, n_questions], outputs=[output_questions, output_answers] ) if __name__ == "__main__": demo.launch(share=True, show_error=True)