Reza-galaxy21 commited on
Commit
0499eda
·
verified ·
1 Parent(s): 008f16b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -31
app.py CHANGED
@@ -14,7 +14,7 @@ logger = logging.getLogger(__name__)
14
 
15
  # تنظیمات مسیرها
16
  UPLOAD_FOLDER = "uploaded_files"
17
- DATABASE_FILE = "vector_database.pkl"
18
  os.makedirs(UPLOAD_FOLDER, exist_ok=True)
19
 
20
  # بارگذاری دیتابیس برداری در صورت وجود
@@ -28,6 +28,7 @@ def load_database():
28
  def save_database(vector_db):
29
  with open(DATABASE_FILE, "wb") as f:
30
  pickle.dump(vector_db, f)
 
31
 
32
  # دیتابیس کلی
33
  global_vector_db = load_database()
@@ -38,16 +39,12 @@ def process_and_store_pdfs(file_paths):
38
  for file_path in file_paths:
39
  try:
40
  logger.info(f"در حال پردازش فایل: {file_path}")
41
-
42
  if file_path.endswith(".pdf"):
43
- # استفاده از PDFMinerLoader برای استخراج متن از PDF
44
  loader = PDFMinerLoader(file_path)
45
  documents = loader.load()
46
-
47
  texts.extend(documents)
48
  else:
49
  logger.warning(f"فرمت فایل {file_path} پشتیبانی نمی‌شود.")
50
-
51
  except Exception as e:
52
  logger.error(f"خطا در پردازش فایل {file_path}: {e}")
53
 
@@ -55,7 +52,7 @@ def process_and_store_pdfs(file_paths):
55
  logger.info("در حال ایجاد embeddings و ذخیره‌سازی در FAISS...")
56
  embeddings = OpenAIEmbeddings()
57
  vector_db = FAISS.from_documents(texts, embeddings)
58
- logger.info("ذخیره‌سازی در FAISS با موفقیت انجام شد.")
59
  return vector_db
60
  except Exception as e:
61
  logger.error(f"خطا در ایجاد embeddings یا ذخیره‌سازی در FAISS: {e}")
@@ -66,7 +63,7 @@ def chat_with_doc(query):
66
  try:
67
  global global_vector_db
68
  if not global_vector_db:
69
- logger.warning("دیتابیس برداری خالی است.")
70
  return "❌ لطفاً یک فایل مرتبط آپلود کنید."
71
 
72
  if not query.strip():
@@ -75,7 +72,6 @@ def chat_with_doc(query):
75
  logger.info("در حال جستجو در دیتابیس برداری...")
76
  retriever = global_vector_db.as_retriever(search_kwargs={"k": 5})
77
  docs = retriever.get_relevant_documents(query)
78
-
79
  context = "\n\n".join([doc.page_content for doc in docs])
80
 
81
  if not context:
@@ -90,9 +86,7 @@ def chat_with_doc(query):
90
  for doc in docs:
91
  final_response += f"- {doc.metadata.get('source', 'نامشخص')}, صفحه {doc.metadata.get('page', 'نامشخص')}\n"
92
 
93
- logger.info(f"پاسخ تولید شده: {final_response}")
94
  return final_response
95
-
96
  except Exception as e:
97
  logger.error(f"خطا در پاسخ‌گویی بر اساس سند: {e}")
98
  return f"❌ خطایی رخ داده است: {e}"
@@ -106,23 +100,19 @@ def handle_file_upload(file):
106
  file_path = os.path.join(UPLOAD_FOLDER, os.path.basename(file.name))
107
  try:
108
  shutil.copy(file.name, file_path)
109
- logger.info(f"فایل {file.name} با موفقیت ذخیره شد.")
110
 
111
  new_vector_db = process_and_store_pdfs([file_path])
112
  if new_vector_db:
113
  if global_vector_db:
114
- logger.info("در حال ادغام دیتابیس جدید با دیتابیس موجود...")
115
  global_vector_db.merge_from(new_vector_db)
116
  else:
117
  global_vector_db = new_vector_db
118
 
119
  save_database(global_vector_db)
120
- logger.info(f"✅ فایل {file.name} با موفقیت پردازش و ذخیره شد.")
121
  return f"✅ فایل {file.name} با موفقیت آپلود و پردازش شد."
122
  else:
123
- logger.warning("❌ خطا در پردازش فایل.")
124
  return "❌ خطا در پردازش فایل."
125
-
126
  except Exception as e:
127
  logger.error(f"خطا در پردازش فایل: {e}")
128
  return f"❌ خطا: {e}"
@@ -134,33 +124,53 @@ def list_files_in_db():
134
  return f"تعداد فایل‌های آپلود شده در دیتابیس: {file_count} فایل"
135
  return "هیچ فایلی در دیتابیس وجود ندارد."
136
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
  # رابط کاربری با Gradio
138
  with gr.Blocks() as demo:
139
  gr.Markdown("# هوش مصنوعی همراه کارشناسان توزیع برق ایران")
140
 
141
- with gr.Row():
142
- query = gr.Textbox(label="سوال خود را بپرسید", lines=2)
143
-
144
- with gr.Row():
145
- upload_status = gr.Textbox(label="وضعیت آپلود", interactive=False)
146
 
147
- with gr.Row():
148
- file = gr.File(label="📎 آپلود فایل", file_types=[".pdf"], interactive=True)
 
149
 
150
- with gr.Row():
151
- submit_btn = gr.Button("ارسال سوال")
152
- upload_btn = gr.Button("ارسال فایل")
153
 
154
- with gr.Row():
155
- response = gr.Textbox(label="پاسخ", lines=10, interactive=False)
 
 
156
 
157
- with gr.Row():
158
- list_files_btn = gr.Button("نمایش تعداد فایل‌های آپلود شده")
159
- files_list = gr.Textbox(label="وضعیت دیتابیس", lines=2, interactive=False)
160
 
161
  upload_btn.click(handle_file_upload, inputs=[file], outputs=upload_status)
162
  submit_btn.click(chat_with_doc, inputs=[query], outputs=response)
163
  list_files_btn.click(list_files_in_db, outputs=files_list)
164
 
165
- # اجرای Gradio
 
 
 
166
  demo.launch()
 
14
 
15
  # تنظیمات مسیرها
16
  UPLOAD_FOLDER = "uploaded_files"
17
+ DATABASE_FILE = "/home/user/app/vector_database.pkl" # مشخص کردن مسیر دقیق
18
  os.makedirs(UPLOAD_FOLDER, exist_ok=True)
19
 
20
  # بارگذاری دیتابیس برداری در صورت وجود
 
28
  def save_database(vector_db):
29
  with open(DATABASE_FILE, "wb") as f:
30
  pickle.dump(vector_db, f)
31
+ logger.info(f"✅ دیتابیس ذخیره شد: {DATABASE_FILE}")
32
 
33
  # دیتابیس کلی
34
  global_vector_db = load_database()
 
39
  for file_path in file_paths:
40
  try:
41
  logger.info(f"در حال پردازش فایل: {file_path}")
 
42
  if file_path.endswith(".pdf"):
 
43
  loader = PDFMinerLoader(file_path)
44
  documents = loader.load()
 
45
  texts.extend(documents)
46
  else:
47
  logger.warning(f"فرمت فایل {file_path} پشتیبانی نمی‌شود.")
 
48
  except Exception as e:
49
  logger.error(f"خطا در پردازش فایل {file_path}: {e}")
50
 
 
52
  logger.info("در حال ایجاد embeddings و ذخیره‌سازی در FAISS...")
53
  embeddings = OpenAIEmbeddings()
54
  vector_db = FAISS.from_documents(texts, embeddings)
55
+ logger.info("ذخیره‌سازی در FAISS با موفقیت انجام شد.")
56
  return vector_db
57
  except Exception as e:
58
  logger.error(f"خطا در ایجاد embeddings یا ذخیره‌سازی در FAISS: {e}")
 
63
  try:
64
  global global_vector_db
65
  if not global_vector_db:
66
+ logger.warning("دیتابیس برداری خالی است.")
67
  return "❌ لطفاً یک فایل مرتبط آپلود کنید."
68
 
69
  if not query.strip():
 
72
  logger.info("در حال جستجو در دیتابیس برداری...")
73
  retriever = global_vector_db.as_retriever(search_kwargs={"k": 5})
74
  docs = retriever.get_relevant_documents(query)
 
75
  context = "\n\n".join([doc.page_content for doc in docs])
76
 
77
  if not context:
 
86
  for doc in docs:
87
  final_response += f"- {doc.metadata.get('source', 'نامشخص')}, صفحه {doc.metadata.get('page', 'نامشخص')}\n"
88
 
 
89
  return final_response
 
90
  except Exception as e:
91
  logger.error(f"خطا در پاسخ‌گویی بر اساس سند: {e}")
92
  return f"❌ خطایی رخ داده است: {e}"
 
100
  file_path = os.path.join(UPLOAD_FOLDER, os.path.basename(file.name))
101
  try:
102
  shutil.copy(file.name, file_path)
103
+ logger.info(f"فایل {file.name} ذخیره شد.")
104
 
105
  new_vector_db = process_and_store_pdfs([file_path])
106
  if new_vector_db:
107
  if global_vector_db:
 
108
  global_vector_db.merge_from(new_vector_db)
109
  else:
110
  global_vector_db = new_vector_db
111
 
112
  save_database(global_vector_db)
 
113
  return f"✅ فایل {file.name} با موفقیت آپلود و پردازش شد."
114
  else:
 
115
  return "❌ خطا در پردازش فایل."
 
116
  except Exception as e:
117
  logger.error(f"خطا در پردازش فایل: {e}")
118
  return f"❌ خطا: {e}"
 
124
  return f"تعداد فایل‌های آپلود شده در دیتابیس: {file_count} فایل"
125
  return "هیچ فایلی در دیتابیس وجود ندارد."
126
 
127
+ # **بخش دباگ موقت برای بررسی مسیر و فایل‌ها**
128
+ def check_files():
129
+ base_path = "/home/user/app"
130
+ files = []
131
+ for root, dirs, filenames in os.walk(base_path):
132
+ for filename in filenames:
133
+ files.append(os.path.join(root, filename))
134
+
135
+ return "\n".join(files) if files else "هیچ فایلی یافت نشد."
136
+
137
+ def check_database_file():
138
+ if os.path.exists(DATABASE_FILE):
139
+ return f"✅ فایل دیتا��یس موجود است: {DATABASE_FILE}"
140
+ else:
141
+ return "❌ فایل دیتابیس یافت نشد!"
142
+
143
+ def get_working_directory():
144
+ return f"Current Working Directory: {os.getcwd()}"
145
+
146
  # رابط کاربری با Gradio
147
  with gr.Blocks() as demo:
148
  gr.Markdown("# هوش مصنوعی همراه کارشناسان توزیع برق ایران")
149
 
150
+ query = gr.Textbox(label="سوال خود را بپرسید", lines=2)
151
+ response = gr.Textbox(label="پاسخ", lines=10, interactive=False)
152
+ submit_btn = gr.Button("ارسال سوال")
 
 
153
 
154
+ file = gr.File(label="📎 آپلود فایل", file_types=[".pdf"])
155
+ upload_status = gr.Textbox(label="وضعیت آپلود", interactive=False)
156
+ upload_btn = gr.Button("ارسال فایل")
157
 
158
+ list_files_btn = gr.Button("نمایش تعداد فایل‌های آپلود شده")
159
+ files_list = gr.Textbox(label="وضعیت دیتابیس", lines=2, interactive=False)
 
160
 
161
+ # دکمه‌های بخش دباگ
162
+ debug_files_btn = gr.Button("🔍 بررسی فایل‌ها")
163
+ debug_db_btn = gr.Button("📂 بررسی دیتابیس")
164
+ debug_dir_btn = gr.Button("📁 بررسی مسیر")
165
 
166
+ debug_output = gr.Textbox(label="نتایج دباگ", lines=10, interactive=False)
 
 
167
 
168
  upload_btn.click(handle_file_upload, inputs=[file], outputs=upload_status)
169
  submit_btn.click(chat_with_doc, inputs=[query], outputs=response)
170
  list_files_btn.click(list_files_in_db, outputs=files_list)
171
 
172
+ debug_files_btn.click(check_files, outputs=debug_output)
173
+ debug_db_btn.click(check_database_file, outputs=debug_output)
174
+ debug_dir_btn.click(get_working_directory, outputs=debug_output)
175
+
176
  demo.launch()