Spaces:
Runtime error
Runtime error
import gradio as gr | |
import numpy as np | |
from utils import DocumentProcessor | |
from rag_pipeline import ArabicRAGSystem | |
css = """ | |
.rtl {direction: rtl; text-align: right;} | |
.header {background: #f0f2f6; padding: 20px; border-radius: 10px;} | |
.markdown-body {font-family: 'Amiri', serif; font-size: 18px;} | |
.highlight {background: #fff3cd; padding: 10px; border-radius: 5px;} | |
""" | |
with gr.Blocks(css=css, theme=gr.themes.Soft()) as demo: | |
rag = ArabicRAGSystem() | |
with gr.Column(elem_classes="header"): | |
gr.Markdown(""" | |
<div class='rtl'> | |
<h1 style="text-align:center; color: #2B547E;">نظام التحليل اللاهوتي المدعوم بالذكاء الاصطناعي</h1> | |
<p style="text-align:center">نظام لتحليل الكتب الدينية العربية وإجابة الأسئلة مع الإشارة إلى المصادر</p> | |
</div> | |
""") | |
with gr.Row(): | |
with gr.Column(scale=1): | |
file_upload = gr.File(label="تحميل الملفات", file_types=[".pdf", ".docx"], | |
file_count="multiple", elem_classes="rtl") | |
with gr.Accordion("إعدادات البحث", open=False): | |
top_k = gr.Slider(3, 10, value=5, step=1, label="عدد المقاطع المستخدمة") | |
temperature = gr.Slider(0.1, 1.0, value=0.7, label="درجة الإبداعية") | |
with gr.Column(scale=2): | |
question = gr.Textbox(label="اكتب سؤالك هنا", lines=3, elem_classes="rtl") | |
answer = gr.Markdown(label="الإجابة", elem_classes=["markdown-body", "rtl"]) | |
sources = gr.DataFrame(label="المصادر المستخدمة", | |
headers=["النص", "المصدر", "الصفحة", "الثقة"], | |
elem_classes="rtl") | |
def process_query(files, question, top_k, temp): | |
if not files or not question: | |
return "", [] | |
processor = DocumentProcessor() | |
documents = processor.process_documents(files) | |
answer_text, sources_data = rag.generate_answer( | |
question=question, | |
documents=documents, | |
top_k=top_k, | |
temperature=temp | |
) | |
formatted_sources = [] | |
for src in sources_data: | |
formatted_sources.append([ | |
src['text'], | |
src['source'], | |
src['page'], | |
f"{src['score']:.2f}" | |
]) | |
return answer_text, formatted_sources | |
question.submit( | |
process_query, | |
inputs=[file_upload, question, top_k, temperature], | |
outputs=[answer, sources] | |
) | |
if __name__ == "__main__": | |
demo.launch() |