ramy2018 commited on
Commit
ba71242
·
verified ·
1 Parent(s): 1e1c187

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -29
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
- def summarize_chunks(logs):
25
- logs = log_message("[RAG] بدأ التلخيص للمقاطع...", logs)
26
  rag.summarize_all_chunks()
27
  logs = log_message("[RAG] تم التلخيص لجميع المقاطع.", logs)
28
- return logs
29
 
30
- def answer_question(question, logs, summary_input):
 
 
 
 
 
 
31
  logs = log_message(f"[RAG] استلام السؤال: {question}", logs)
32
 
33
- if not summary_input.strip():
34
- logs = log_message("[RAG] لا يوجد ملخص صالح. يرجى تلخيص المقاطع أولاً.", logs)
35
- return "", summary_input, logs
36
-
37
- # توليد الإجابة بناءً على الملخص
38
- qa_prompt = f"أجب عن السؤال التالي بناء على النص:\n\n{summary_input}\n\nالسؤال: {question}\nالإجابة:"
39
- try:
40
- inputs = rag.tokenizer(qa_prompt, return_tensors="pt", truncation=True, max_length=512)
41
- output_ids = rag.model.generate(inputs["input_ids"], max_length=200)
42
- answer = rag.tokenizer.decode(output_ids[0], skip_special_tokens=True).strip()
43
- if not answer:
44
- logs = log_message("[RAG] فشل في توليد إجابة من النموذج.", logs)
45
- except Exception as e:
46
- logs = log_message(f"[RAG] خطأ أثناء توليد الإجابة: {str(e)}", logs)
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(file_types=[".pdf", ".docx", ".txt"], file_count="multiple", label="📂 رفع الملفات")
 
 
 
 
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(upload_and_index, inputs=[files_input, logs], outputs=[logs_output, summarize_btn, question_input, answer_btn])
69
- summarize_btn.click(summarize_chunks, inputs=logs, outputs=logs_output)
70
- answer_btn.click(answer_question, inputs=[question_input, logs, summary_output], outputs=[answer_output, summary_output, logs_output])
 
 
 
 
 
 
 
 
 
 
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()