ramysaidagieb commited on
Commit
717f924
·
verified ·
1 Parent(s): 9041419

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -37
app.py CHANGED
@@ -1,50 +1,57 @@
1
  import gradio as gr
2
- from utils import process_documents
3
  from rag_pipeline import RAGPipeline
 
 
 
4
 
5
  rag = RAGPipeline()
6
 
7
- log_messages = []
8
-
9
- def log_callback(message):
10
- log_messages.append(message)
11
- print(message)
12
-
13
- def upload_and_index(files):
14
- log_messages.clear()
15
- if not files:
16
- return "⚠️ يرجى رفع ملفات.", "", ""
17
 
18
- chunks = []
 
 
19
  for file in files:
20
- content_chunks = process_documents(file.name)
21
- chunks.extend(content_chunks)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
 
23
- index_status = rag.build_index(chunks, log_callback=log_callback)
24
- return index_status, "\n".join(log_messages), ""
25
-
26
- def answer_question(question):
27
- if not question.strip():
28
- return "⚠️ يرجى إدخال سؤال."
29
- log_messages.clear()
30
- answer = rag.answer_question(question, log_callback=log_callback)
31
- return answer
32
-
33
- with gr.Blocks(title="مساعد عربي للكتب") as demo:
34
- gr.Markdown("## 📚 مساعد ذكي للإجابة من كتبك باللغة العربية")
35
  with gr.Row():
36
- file_input = gr.File(file_types=[".pdf", ".docx", ".txt"], label="📁 حمّل ملفاتك", file_count="multiple")
37
- upload_button = gr.Button("🔍 رفع وبناء الفهرس")
38
- upload_output = gr.Textbox(label="🔔 الحالة", lines=2)
39
 
40
- with gr.Row():
41
- question_input = gr.Textbox(placeholder="اكتب سؤالك هنا...", label="❓ السؤال")
42
- submit_button = gr.Button("🚀 أرسل السؤال")
 
 
 
 
43
 
44
- answer_output = gr.Textbox(label="🧠 الإجابة", lines=6)
45
- logs_output = gr.Textbox(label="📜 سجل العمليات", lines=12)
46
 
47
- upload_button.click(fn=upload_and_index, inputs=[file_input], outputs=[upload_output, logs_output, answer_output])
48
- submit_button.click(fn=answer_question, inputs=[question_input], outputs=[answer_output])
49
-
50
  demo.launch()
 
1
  import gradio as gr
 
2
  from rag_pipeline import RAGPipeline
3
+ from utils import process_documents
4
+ import asyncio
5
+ import time
6
 
7
  rag = RAGPipeline()
8
 
9
+ def log_message(msg, logs):
10
+ logs.append(msg)
11
+ return logs
 
 
 
 
 
 
 
12
 
13
+ def upload_and_index(files, logs):
14
+ logs = log_message("[RAG] بدء معالجة الملفات...", logs)
15
+ all_chunks = []
16
  for file in files:
17
+ logs = log_message(f"[RAG] معالجة الملف: {file.name}", logs)
18
+ chunks = process_documents(file.name)
19
+ all_chunks.extend(chunks)
20
+ logs = log_message(f"[RAG] تم استخراج {len(chunks)} مقطع من {file.name}", logs)
21
+
22
+ logs = log_message(f"[RAG] بناء الفهرس لـ {len(all_chunks)} مقطع...", logs)
23
+ start = time.time()
24
+ rag.build_index(all_chunks, logs)
25
+ duration = time.time() - start
26
+ logs = log_message(f"[RAG] تم بناء الفهرس في {duration:.2f} ثانية.", logs)
27
+ return logs, True # True لتمكين مربع السؤال
28
+
29
+ def answer_question(question, logs):
30
+ logs = log_message(f"[RAG] استلام السؤال: {question}", logs)
31
+ start = time.time()
32
+ answer, sources = rag.answer(question)
33
+ duration = time.time() - start
34
+ logs = log_message(f"[RAG] تم الإجابة في {duration:.2f} ثانية.", logs)
35
+ logs = log_message(f"[RAG] المصادر: {sources}", logs)
36
+ return answer, logs
37
+
38
+ with gr.Blocks() as demo:
39
+ logs = gr.State([])
40
+ gr.Markdown("# نظام استرجاع المعرفة من الملفات (RAG)")
41
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  with gr.Row():
43
+ files_input = gr.File(file_types=['.pdf', '.docx', '.txt'], file_count="multiple", label="رفع الملفات")
44
+ upload_btn = gr.Button("رفع وبناء الفهرس")
45
+ logs_output = gr.Textbox(label="سجل العمليات", lines=10, interactive=False)
46
 
47
+ question_input = gr.Textbox(label="اكتب سؤالك هنا", visible=False)
48
+ ask_btn = gr.Button("إرسال السؤال", visible=False)
49
+ answer_output = gr.Textbox(label="الإجابة", lines=5)
50
+
51
+ upload_btn.click(upload_and_index, inputs=[files_input, logs], outputs=[logs_output, question_input])
52
+ upload_btn.click(lambda: True, None, question_input) # اظهار مربع السؤال
53
+ upload_btn.click(lambda: True, None, ask_btn) # اظهار زر السؤال
54
 
55
+ ask_btn.click(answer_question, inputs=[question_input, logs], outputs=[answer_output, logs_output])
 
56
 
 
 
 
57
  demo.launch()