import gradio as gr from quran_rag_agent import process_query last_retrieved_chunks = [] def get_retrieved_chunks(): """Return formatted retrieved chunks for display.""" global last_retrieved_chunks if not last_retrieved_chunks: return "لم يتم استرجاع نتائج بعد (No results retrieved yet)" output = "" for i, chunk in enumerate(last_retrieved_chunks, 1): meta = chunk["metadata"] output += f"### مصدر {i}\n" output += f"**السورة:** {meta.get('surah_name', 'N/A')} | " output += f"**نوع الوحي:** {meta.get('revelation_type', 'N/A')} | " output += f"**كتاب التفسير:** {meta.get('tafsir_book', 'N/A')}\n\n" output += f"{chunk['content']}\n\n---\n\n" return output with gr.Blocks(title="المساعد القرآني الذكي (AI Quran Expert)") as demo: gr.Markdown("# المساعد القرآني الذكي (AI Quran Expert)") gr.Markdown("اسأل عن أي آية أو موضوع، وسيقوم النظام بالبحث في القرآن وكتب التفسير.") with gr.Row(): with gr.Column(scale=2): chatbot = gr.Chatbot(label="المحادثة", height=500) msg = gr.Textbox(label="سؤالك", placeholder="اكتب سؤالك هنا...", rtl=True) k_slider = gr.Slider(minimum=1, maximum=10, value=3, step=1, label="عدد مصادر التفسير لكل آية (k)") with gr.Row(): submit_btn = gr.Button("إرسال", variant="primary") clear_btn = gr.Button("مسح المحادثة") with gr.Column(scale=1): gr.Markdown("## 📚 المصادر المسترجعة") with gr.Accordion("عرض المصادر", open=False): sources_display = gr.Markdown("لم يتم استرجاع نتائج بعد") refresh_btn = gr.Button("🔄 تحديث", size="sm") gr.Examples( examples=["تفسير آية الكرسي", "ما هي الآيات التي تتحدث عن الصبر؟", "شرح سورة الإخلاص"], inputs=msg ) def respond(message, chat_history, k_val): global last_retrieved_chunks response, chunks = process_query(message, k_val) last_retrieved_chunks = chunks chat_history.append({"role": "user", "content": message}) chat_history.append({"role": "assistant", "content": response}) return "", chat_history, get_retrieved_chunks() submit_btn.click(respond, [msg, chatbot, k_slider], [msg, chatbot, sources_display]) msg.submit(respond, [msg, chatbot, k_slider], [msg, chatbot, sources_display]) clear_btn.click(lambda: ([], ""), outputs=[chatbot, sources_display]) refresh_btn.click(get_retrieved_chunks, outputs=sources_display) if __name__ == "__main__": demo.launch()