Update app.py
Browse files
app.py
CHANGED
@@ -9,6 +9,10 @@ def log_message(msg, logs):
|
|
9 |
return logs
|
10 |
|
11 |
def upload_and_index(files, logs):
|
|
|
|
|
|
|
|
|
12 |
logs = log_message("[RAG] بدء معالجة الملفات...", logs)
|
13 |
all_chunks = []
|
14 |
for file in files:
|
@@ -17,56 +21,70 @@ def upload_and_index(files, logs):
|
|
17 |
all_chunks.extend(chunks)
|
18 |
logs = log_message(f"[RAG] تم استخراج {len(chunks)} مقطع من {file.name}", logs)
|
19 |
|
|
|
20 |
rag.build_index(all_chunks)
|
21 |
logs = log_message("[RAG] تم بناء الفهرس.", logs)
|
22 |
-
return logs, gr.update(visible=True), gr.update(visible=True), gr.update(visible=True)
|
23 |
|
24 |
-
|
25 |
-
logs = log_message("[RAG] بدأ التلخيص
|
26 |
rag.summarize_all_chunks()
|
27 |
logs = log_message("[RAG] تم التلخيص لجميع المقاطع.", logs)
|
28 |
-
return logs
|
29 |
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
logs = log_message(f"[RAG] استلام السؤال: {question}", logs)
|
32 |
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
answer = ""
|
48 |
-
|
49 |
-
logs = log_message("[RAG] تم توليد الإجابة.", logs)
|
50 |
-
return answer, summary_input, logs
|
51 |
|
52 |
with gr.Blocks() as demo:
|
53 |
logs = gr.State("")
|
54 |
gr.Markdown("# 🕌 نظام استرجاع المعرفة باللغة العربية")
|
55 |
|
56 |
with gr.Row():
|
57 |
-
files_input = gr.File(
|
|
|
|
|
|
|
|
|
58 |
upload_btn = gr.Button("🔄 رفع وبناء الفهرس")
|
59 |
|
60 |
-
summarize_btn = gr.Button("🧠 تلخيص المقاطع", visible=False)
|
61 |
-
question_input = gr.Textbox(label="❓ اكتب سؤالك هنا", visible=False)
|
62 |
answer_btn = gr.Button("✍️ أجب عن السؤال", visible=False)
|
|
|
63 |
|
64 |
logs_output = gr.Textbox(label="📜 سجل العمليات", lines=10, interactive=False)
|
65 |
summary_output = gr.Textbox(label="📌 الملخص المستخدم", lines=5)
|
66 |
answer_output = gr.Textbox(label="✅ الإجابة النهائية", lines=5)
|
67 |
|
68 |
-
upload_btn.click(
|
69 |
-
|
70 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
|
72 |
demo.launch()
|
|
|
9 |
return logs
|
10 |
|
11 |
def upload_and_index(files, logs):
|
12 |
+
"""
|
13 |
+
1) رفع وبناء الفهرس من المقاطع
|
14 |
+
2) يقوم تلقائيًا بتلخيص كل مقطع بعد الانتهاء من بناء الفهرس
|
15 |
+
"""
|
16 |
logs = log_message("[RAG] بدء معالجة الملفات...", logs)
|
17 |
all_chunks = []
|
18 |
for file in files:
|
|
|
21 |
all_chunks.extend(chunks)
|
22 |
logs = log_message(f"[RAG] تم استخراج {len(chunks)} مقطع من {file.name}", logs)
|
23 |
|
24 |
+
# بناء الفهرس
|
25 |
rag.build_index(all_chunks)
|
26 |
logs = log_message("[RAG] تم بناء الفهرس.", logs)
|
|
|
27 |
|
28 |
+
# تلخيص المقاطع تلقائيًا
|
29 |
+
logs = log_message("[RAG] بدأ التلخيص التلقائي لجميع المقاطع...", logs)
|
30 |
rag.summarize_all_chunks()
|
31 |
logs = log_message("[RAG] تم التلخيص لجميع المقاطع.", logs)
|
|
|
32 |
|
33 |
+
# إظهار زر الإجابة بعد اكتمال التلخيص
|
34 |
+
return logs, gr.update(visible=True), gr.update(visible=True)
|
35 |
+
|
36 |
+
def answer_question(question, logs):
|
37 |
+
"""
|
38 |
+
توليد الإجابة بناءً على الملخصات المحفوظة
|
39 |
+
"""
|
40 |
logs = log_message(f"[RAG] استلام السؤال: {question}", logs)
|
41 |
|
42 |
+
# استدعاء إجابة باستخدام التلخيص المحفوظ
|
43 |
+
answer, sources, combined_summary = rag.answer(question)
|
44 |
+
|
45 |
+
if not combined_summary.strip():
|
46 |
+
logs = log_message("[RAG] لم يتم إنشاء ملخص صالح. تأكد من رفع وتلخيص المقاطع.", logs)
|
47 |
+
return "", logs
|
48 |
+
|
49 |
+
if not answer.strip():
|
50 |
+
logs = log_message("[RAG] فشل في توليد الإجابة من النموذج.", logs)
|
51 |
+
else:
|
52 |
+
logs = log_message("[RAG] تم توليد الإجابة.", logs)
|
53 |
+
logs = log_message(f"[RAG] المصادر: {sources}", logs)
|
54 |
+
|
55 |
+
return answer, combined_summary, logs
|
|
|
|
|
|
|
|
|
56 |
|
57 |
with gr.Blocks() as demo:
|
58 |
logs = gr.State("")
|
59 |
gr.Markdown("# 🕌 نظام استرجاع المعرفة باللغة العربية")
|
60 |
|
61 |
with gr.Row():
|
62 |
+
files_input = gr.File(
|
63 |
+
file_types=[".pdf", ".docx", ".txt"],
|
64 |
+
file_count="multiple",
|
65 |
+
label="📂 رفع الملفات"
|
66 |
+
)
|
67 |
upload_btn = gr.Button("🔄 رفع وبناء الفهرس")
|
68 |
|
|
|
|
|
69 |
answer_btn = gr.Button("✍️ أجب عن السؤال", visible=False)
|
70 |
+
question_input = gr.Textbox(label="❓ اكتب سؤالك هنا", visible=False)
|
71 |
|
72 |
logs_output = gr.Textbox(label="📜 سجل العمليات", lines=10, interactive=False)
|
73 |
summary_output = gr.Textbox(label="📌 الملخص المستخدم", lines=5)
|
74 |
answer_output = gr.Textbox(label="✅ الإجابة النهائية", lines=5)
|
75 |
|
76 |
+
upload_btn.click(
|
77 |
+
upload_and_index,
|
78 |
+
inputs=[files_input, logs],
|
79 |
+
outputs=[logs_output, answer_btn, question_input]
|
80 |
+
)
|
81 |
+
|
82 |
+
# بعد اكتمال التلخيص التلقائي، نج��ل زر "أجب عن السؤال" و "اكتب سؤالك" مرئيين
|
83 |
+
# ومن ثم يمكن للمستخدم كتابة السؤال والضغط مباشرة على "أجب عن السؤال"
|
84 |
+
answer_btn.click(
|
85 |
+
answer_question,
|
86 |
+
inputs=[question_input, logs],
|
87 |
+
outputs=[answer_output, summary_output, logs_output]
|
88 |
+
)
|
89 |
|
90 |
demo.launch()
|