Reza-galaxy21 commited on
Commit
cf2dd39
·
verified ·
1 Parent(s): 3f672a5

Delete app اپلود درست و دباگ ۱۱۱۹

Browse files
app اپلود درست و دباگ ۱۱۱۹ DELETED
@@ -1,196 +0,0 @@
1
- import os
2
- import shutil
3
- import logging
4
- import gradio as gr
5
- from langchain_community.document_loaders import PyPDFLoader # تغییر به PyPDFLoader
6
- from langchain_community.embeddings import OpenAIEmbeddings
7
- from langchain_community.vectorstores import FAISS
8
- from langchain_community.chat_models import ChatOpenAI
9
-
10
- # تنظیمات لاگ‌گیری
11
- logging.basicConfig(level=logging.INFO)
12
- 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
- # بررسی و بارگذاری دیتابیس برداری
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
27
- else:
28
- logger.warning(f"❌ دیتابیس در مسیر `{DATABASE_FILE}` وجود ندارد.")
29
- return None
30
- except Exception as e:
31
- logger.error(f"❌ خطا در بارگذاری دیتابیس: {e}")
32
- return None
33
-
34
- def save_database(vector_db):
35
- try:
36
- vector_db.save_local(DATABASE_FILE)
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
-
44
- # پردازش و ذخیره‌سازی فایل‌های PDF
45
- def process_and_store_pdfs(file_paths):
46
- texts = []
47
- for file_path in file_paths:
48
- try:
49
- logger.info(f"در حال پردازش فایل: {file_path}")
50
- if file_path.endswith(".pdf"):
51
- # استفاده از PyPDFLoader به جای PDFMinerLoader
52
- loader = PyPDFLoader(file_path)
53
- documents = loader.load()
54
- texts.extend(documents)
55
- logger.info(f"✅ تعداد صفحات پردازش شده: {len(documents)}")
56
- else:
57
- logger.warning(f"فرمت فایل {file_path} پشتیبانی نمی‌شود.")
58
- except Exception as e:
59
- logger.error(f"خطا در پردازش فایل {file_path}: {e}")
60
-
61
- try:
62
- logger.info("در حال ایجاد embeddings و ذخیره‌سازی در FAISS...")
63
- openai_api_key = os.getenv("My_huggingface_key")
64
-
65
- if not openai_api_key:
66
- logger.error("❌ کلید API مقداردهی نشده است!")
67
- raise ValueError("❌ کلید OpenAI API یافت نشد.")
68
-
69
- embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
70
- vector_db = FAISS.from_documents(texts, embeddings)
71
- logger.info(f"✅ ذخیره‌سازی در FAISS با موفقیت انجام شد. تعداد اسناد: {vector_db.index.ntotal}")
72
- return vector_db
73
- except Exception as e:
74
- logger.error(f"خطا در ایجاد embeddings یا ذخیره‌سازی در FAISS: {e}")
75
- return None
76
-
77
- # پاسخ‌گویی بر اساس اسناد بارگذاری‌شده
78
- def chat_with_doc(query):
79
- try:
80
- global global_vector_db
81
- if not global_vector_db:
82
- return "❌ لطفاً یک فایل مرتبط آپلود کنید."
83
-
84
- if not query.strip():
85
- return "❌ لطفاً سوال خود را وارد کنید."
86
-
87
- retriever = global_vector_db.as_retriever(search_kwargs={"k": 5})
88
- docs = retriever.get_relevant_documents(query)
89
- context = "\n\n".join([doc.page_content for doc in docs])
90
-
91
- if not context:
92
- return "هیچ اطلاعات مرتبطی یافت نشد."
93
-
94
- llm = ChatOpenAI(model_name="gpt-4", openai_api_key=os.getenv("My_huggingface_key"))
95
- response = llm.predict(f"""سوال: {query}\n\nاطلاعات مرتبط:\n{context}\n\nپاسخ:""")
96
-
97
- final_response = f"پاسخ:\n{response}\n\nمنابع:\n"
98
- for doc in docs:
99
- final_response += f"- {doc.metadata.get('source', 'نامشخص')}, صفحه {doc.metadata.get('page', 'نامشخص')}\n"
100
-
101
- return final_response
102
- except Exception as e:
103
- logger.error(f"خطا در پاسخ‌گویی بر اساس سند: {e}")
104
- return f"❌ خطایی رخ داده است: {e}"
105
-
106
- # ذخیره فایل آپلود شده
107
- def save_uploaded_file(file):
108
- try:
109
- file_name = os.path.basename(file)
110
- file_path = os.path.join(UPLOAD_FOLDER, file_name)
111
- shutil.copy(file, file_path)
112
-
113
- global global_vector_db
114
- global_vector_db = process_and_store_pdfs([file_path])
115
- if global_vector_db:
116
- save_database(global_vector_db)
117
-
118
- return f"✅ فایل ذخیره شد: {file_path}"
119
- except Exception as e:
120
- return f"❌ خطا در ذخیره فایل: {e}"
121
-
122
- # دباگ موقت
123
- def debug_temp():
124
- debug_results = []
125
-
126
- # بررسی مقدار کلید API
127
- openai_api_key = os.getenv("My_huggingface_key")
128
- if openai_api_key:
129
- debug_results.append(f"✅ کلید API مقداردهی شده: {openai_api_key[:5]}********")
130
- else:
131
- debug_results.append("❌ کلید API مقداردهی نشده است!")
132
-
133
- # بررسی نسخه langchain_community
134
- try:
135
- import langchain_community
136
- version = langchain_community.__version__
137
- debug_results.append(f"✅ نسخه langchain_community: {version}")
138
- except Exception as e:
139
- debug_results.append(f"❌ خطا در بررسی نسخه langchain_community: {e}")
140
-
141
- # بررسی فایل‌های PDF در مسیر آپلود
142
- try:
143
- pdf_files = [f for f in os.listdir(UPLOAD_FOLDER) if f.endswith(".pdf")]
144
- if pdf_files:
145
- file_paths = [os.path.join(UPLOAD_FOLDER, f) for f in pdf_files]
146
- debug_results.append(f"✅ فایل‌های PDF در مسیر `{UPLOAD_FOLDER}`:")
147
-
148
- # بررسی تعداد صفحات هر فایل
149
- for file_path in file_paths:
150
- try:
151
- loader = PyPDFLoader(file_path) # استفاده از PyPDFLoader
152
- documents = loader.load()
153
- debug_results.append(f" - {os.path.basename(file_path)}: {len(documents)} صفحه")
154
- except Exception as e:
155
- debug_results.append(f"❌ خطا در بررسی صفحات {file_path}: {str(e)}")
156
- else:
157
- debug_results.append(f"❌ هیچ فایل PDF در مسیر `{UPLOAD_FOLDER}` وجود ندارد.")
158
- except Exception as e:
159
- debug_results.append(f"❌ خطا در بررسی پوشه `{UPLOAD_FOLDER}`: {e}")
160
-
161
- # بررسی وضعیت دیتابیس
162
- try:
163
- if os.path.exists(DATABASE_FILE):
164
- debug_results.append(f"✅ دیتابیس در مسیر `{DATABASE_FILE}` وجود دارد.")
165
-
166
- # بررسی تعداد اسناد ذخیره شده
167
- if global_vector_db:
168
- debug_results.append(f" - تعداد اسناد در دیتابیس: {global_vector_db.index.ntotal}")
169
- else:
170
- debug_results.append("❌ دیتابیس در حافظه بارگذاری نشده است")
171
- else:
172
- debug_results.append(f"❌ دیتابیس در مسیر `{DATABASE_FILE}` وجود ندارد.")
173
- except Exception as e:
174
- debug_results.append(f"❌ خطا در بررسی دیتابیس: {e}")
175
-
176
- return "\n".join(debug_results)
177
-
178
- # رابط کاربری با Gradio
179
- with gr.Blocks() as demo:
180
- gr.Markdown("# هوش مصنوعی همراه کارشناسان توزیع برق ایران")
181
-
182
- query = gr.Textbox(label="سوال خود را بپرسید", lines=2)
183
- response = gr.Textbox(label="پاسخ", lines=10, interactive=False)
184
- submit_btn = gr.Button("ارسال سوال")
185
-
186
- file = gr.File(label="📎 آپلود فایل", file_types=[".pdf"])
187
- upload_status = gr.Textbox(label="وضعیت آپلود", interactive=False)
188
- upload_btn = gr.Button("ارسال فایل")
189
-
190
- debug_btn = gr.Button("🔍 بررسی دباگ موقت")
191
- debug_output = gr.Textbox(label="نتایج دباگ", lines=10, interactive=False)
192
-
193
- upload_btn.click(save_uploaded_file, inputs=[file], outputs=[upload_status])
194
- debug_btn.click(debug_temp, outputs=debug_output)
195
-
196
- demo.launch()