Reza-galaxy21 commited on
Commit
68cc812
·
verified ·
1 Parent(s): 9f6a01c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -40
app.py CHANGED
@@ -13,19 +13,14 @@ logger = logging.getLogger(__name__)
13
 
14
  # تنظیمات مسیرها
15
  UPLOAD_FOLDER = "uploaded_files"
16
- DATABASE_FILE = "/home/user/app/vector_database" # بدون پسوند .pkl
17
  os.makedirs(UPLOAD_FOLDER, exist_ok=True)
18
 
19
- # مقداردهی کلید API
20
- openai_api_key = os.getenv("My_huggingface_key")
21
- if not openai_api_key:
22
- logger.error("❌ کلید OpenAI API مقداردهی نشده است!")
23
-
24
  # بررسی و بارگذاری دیتابیس برداری
25
  def load_database():
26
  try:
27
  if os.path.exists(DATABASE_FILE):
28
- embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
29
  vector_db = FAISS.load_local(DATABASE_FILE, embeddings)
30
  logger.info(f"✅ دیتابیس بارگذاری شد: {DATABASE_FILE}")
31
  return vector_db
@@ -42,6 +37,7 @@ def save_database(vector_db):
42
  logger.info(f"✅ دیتابیس ذخیره شد: {DATABASE_FILE}")
43
  except Exception as e:
44
  logger.error(f"❌ خطا در ذخیره دیتابیس: {e}")
 
45
 
46
  global_vector_db = load_database()
47
 
@@ -61,12 +57,14 @@ def process_and_store_pdfs(file_paths):
61
  except Exception as e:
62
  logger.error(f"خطا در پردازش فایل {file_path}: {e}")
63
 
64
- if not texts:
65
- logger.warning("❌ هیچ متنی برای ذخیره‌سازی در FAISS یافت نشد.")
66
- return None
67
-
68
  try:
69
  logger.info("در حال ایجاد embeddings و ذخیره‌سازی در FAISS...")
 
 
 
 
 
 
70
  embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
71
  vector_db = FAISS.from_documents(texts, embeddings)
72
  logger.info(f"✅ ذخیره‌سازی در FAISS با موفقیت انجام شد. تعداد اسناد: {vector_db.index.ntotal}")
@@ -88,13 +86,18 @@ def chat_with_doc(query):
88
  retriever = global_vector_db.as_retriever(search_kwargs={"k": 5})
89
  docs = retriever.get_relevant_documents(query)
90
 
 
 
91
  if len(docs) == 0:
92
  return "هیچ اطلاعات مرتبطی یافت نشد."
93
 
94
- context = "\n\n".join([doc.page_content for doc in docs])
95
- logger.info(f" اطلاعات مربوط به پرسش: {context}")
 
 
 
96
 
97
- llm = ChatOpenAI(model_name="gpt-4", openai_api_key=openai_api_key)
98
  response = llm.predict(f"""سوال: {query}\n\nاطلاعات مرتبط:\n{context}\n\nپاسخ:""")
99
 
100
  final_response = f"پاسخ:\n{response}\n\nمنابع:\n"
@@ -115,12 +118,8 @@ def save_uploaded_file(file):
115
 
116
  global global_vector_db
117
  global_vector_db = process_and_store_pdfs([file_path])
118
-
119
  if global_vector_db:
120
  save_database(global_vector_db)
121
- logger.info(f"📂 تعداد اسناد در دیتابیس: {global_vector_db.index.ntotal}")
122
- else:
123
- logger.error("❌ دیتابیس برداری مقداردهی نشده است!")
124
 
125
  return f"✅ فایل ذخیره شد: {file_path}"
126
  except Exception as e:
@@ -131,37 +130,16 @@ def debug_temp():
131
  debug_results = []
132
 
133
  # بررسی مقدار کلید API
 
134
  if openai_api_key:
135
  debug_results.append(f"✅ کلید API مقداردهی شده: {openai_api_key[:5]}****")
136
  else:
137
  debug_results.append("❌ کلید API مقداردهی نشده است!")
138
 
139
- # بررسی فایل‌های PDF در مسیر آپلود
140
- try:
141
- pdf_files = [f for f in os.listdir(UPLOAD_FOLDER) if f.endswith(".pdf")]
142
- if pdf_files:
143
- file_paths = [os.path.join(UPLOAD_FOLDER, f) for f in pdf_files]
144
- debug_results.append(f"✅ فایل‌های PDF در مسیر {UPLOAD_FOLDER}:")
145
-
146
- # بررسی تعداد صفحات هر فایل
147
- for file_path in file_paths:
148
- try:
149
- loader = PyPDFLoader(file_path)
150
- documents = loader.load()
151
- debug_results.append(f" - {os.path.basename(file_path)}: {len(documents)} صفحه")
152
- except Exception as e:
153
- debug_results.append(f"❌ خط�� در بررسی صفحات {file_path}: {str(e)}")
154
- else:
155
- debug_results.append(f"❌ هیچ فایل PDF در مسیر {UPLOAD_FOLDER} وجود ندارد.")
156
- except Exception as e:
157
- debug_results.append(f"❌ خطا در بررسی پوشه {UPLOAD_FOLDER}: {e}")
158
-
159
  # بررسی وضعیت دیتابیس
160
  try:
161
  if os.path.exists(DATABASE_FILE):
162
  debug_results.append(f"✅ دیتابیس در مسیر {DATABASE_FILE} وجود دارد.")
163
-
164
- # بررسی تعداد اسناد ذخیره شده
165
  if global_vector_db:
166
  debug_results.append(f" - تعداد اسناد در دیتابیس: {global_vector_db.index.ntotal}")
167
  else:
@@ -188,6 +166,7 @@ with gr.Blocks() as demo:
188
  debug_btn = gr.Button("🔍 بررسی دباگ موقت")
189
  debug_output = gr.Textbox(label="نتایج دباگ", lines=10, interactive=False)
190
 
 
191
  upload_btn.click(save_uploaded_file, inputs=[file], outputs=[upload_status])
192
  debug_btn.click(debug_temp, outputs=debug_output)
193
 
 
13
 
14
  # تنظیمات مسیرها
15
  UPLOAD_FOLDER = "uploaded_files"
16
+ DATABASE_FILE = "/home/user/app/vector_database"
17
  os.makedirs(UPLOAD_FOLDER, exist_ok=True)
18
 
 
 
 
 
 
19
  # بررسی و بارگذاری دیتابیس برداری
20
  def load_database():
21
  try:
22
  if os.path.exists(DATABASE_FILE):
23
+ embeddings = OpenAIEmbeddings(openai_api_key=os.getenv("My_huggingface_key"))
24
  vector_db = FAISS.load_local(DATABASE_FILE, embeddings)
25
  logger.info(f"✅ دیتابیس بارگذاری شد: {DATABASE_FILE}")
26
  return vector_db
 
37
  logger.info(f"✅ دیتابیس ذخیره شد: {DATABASE_FILE}")
38
  except Exception as e:
39
  logger.error(f"❌ خطا در ذخیره دیتابیس: {e}")
40
+ raise e
41
 
42
  global_vector_db = load_database()
43
 
 
57
  except Exception as e:
58
  logger.error(f"خطا در پردازش فایل {file_path}: {e}")
59
 
 
 
 
 
60
  try:
61
  logger.info("در حال ایجاد embeddings و ذخیره‌سازی در FAISS...")
62
+ openai_api_key = os.getenv("My_huggingface_key")
63
+
64
+ if not openai_api_key:
65
+ logger.error("❌ کلید API مقداردهی نشده است!")
66
+ raise ValueError("❌ کلید OpenAI API یافت نشد.")
67
+
68
  embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
69
  vector_db = FAISS.from_documents(texts, embeddings)
70
  logger.info(f"✅ ذخیره‌سازی در FAISS با موفقیت انجام شد. تعداد اسناد: {vector_db.index.ntotal}")
 
86
  retriever = global_vector_db.as_retriever(search_kwargs={"k": 5})
87
  docs = retriever.get_relevant_documents(query)
88
 
89
+ logger.info(f"✅ تعداد اسناد بازیابی‌شده: {len(docs)}")
90
+
91
  if len(docs) == 0:
92
  return "هیچ اطلاعات مرتبطی یافت نشد."
93
 
94
+ context = "\n\n".join([doc.page_content[:200] for doc in docs]) # نمایش ۲۰۰ کاراکتر اول از هر سند
95
+ logger.info(f"📄 اسناد بازیابی‌شده:\n{context}")
96
+
97
+ # تست جداگانه FAISS
98
+ return f"🔍 نتایج جستجو از FAISS:\n{context}"
99
 
100
+ llm = ChatOpenAI(model_name="gpt-4", openai_api_key=os.getenv("My_huggingface_key"))
101
  response = llm.predict(f"""سوال: {query}\n\nاطلاعات مرتبط:\n{context}\n\nپاسخ:""")
102
 
103
  final_response = f"پاسخ:\n{response}\n\nمنابع:\n"
 
118
 
119
  global global_vector_db
120
  global_vector_db = process_and_store_pdfs([file_path])
 
121
  if global_vector_db:
122
  save_database(global_vector_db)
 
 
 
123
 
124
  return f"✅ فایل ذخیره شد: {file_path}"
125
  except Exception as e:
 
130
  debug_results = []
131
 
132
  # بررسی مقدار کلید API
133
+ openai_api_key = os.getenv("My_huggingface_key")
134
  if openai_api_key:
135
  debug_results.append(f"✅ کلید API مقداردهی شده: {openai_api_key[:5]}****")
136
  else:
137
  debug_results.append("❌ کلید API مقداردهی نشده است!")
138
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  # بررسی وضعیت دیتابیس
140
  try:
141
  if os.path.exists(DATABASE_FILE):
142
  debug_results.append(f"✅ دیتابیس در مسیر {DATABASE_FILE} وجود دارد.")
 
 
143
  if global_vector_db:
144
  debug_results.append(f" - تعداد اسناد در دیتابیس: {global_vector_db.index.ntotal}")
145
  else:
 
166
  debug_btn = gr.Button("🔍 بررسی دباگ موقت")
167
  debug_output = gr.Textbox(label="نتایج دباگ", lines=10, interactive=False)
168
 
169
+ submit_btn.click(chat_with_doc, inputs=[query], outputs=[response])
170
  upload_btn.click(save_uploaded_file, inputs=[file], outputs=[upload_status])
171
  debug_btn.click(debug_temp, outputs=debug_output)
172