import os import gradio as gr import faiss os.system("pip install pymupdf") import fitz # PyMuPDF from langchain_community.vectorstores import FAISS from langchain_community.embeddings import OpenAIEmbeddings from sentence_transformers import SentenceTransformer # مدل برای embeddings print("⏳ در حال بارگذاری مدل embeddings...") model = SentenceTransformer("all-MiniLM-L6-v2") print("✅ مدل embeddings بارگذاری شد.") # تولید embeddings اولیه try: sample_text = ["نمونه متن برای تست"] embeddings = model.encode(sample_text) print(f"✅ Embeddings اولیه تولید شد: {embeddings.shape}") except Exception as e: print(f"❌ خطا در تولید embeddings: {e}") embeddings = None # بررسی دیتابیس FAISS def load_database(): global embeddings if embeddings is None or len(embeddings) == 0: print("⚠️ خطا: لیست embeddings خالی است. FAISS مقداردهی نمی‌شود.") return None print("⏳ در حال مقداردهی FAISS...") try: faiss_db = FAISS.from_embeddings(embeddings, model) print("✅ FAISS مقداردهی شد.") return faiss_db except Exception as e: print(f"❌ خطا در مقداردهی FAISS: {e}") return None # بررسی اینکه دیتابیس از قبل وجود دارد یا خیر if not os.path.exists("faiss_index"): print("❌ دیتابیس وجود ندارد. ایجاد دیتابیس جدید...") global_vector_db = load_database() else: print("✅ دیتابیس FAISS موجود است.") # تابع پردازش فایل def process_pdf(file): try: doc = fitz.open(file.name) text = "\n".join([page.get_text() for page in doc]) print(f"✅ فایل پردازش شد. {len(text)} کاراکتر استخراج شد.") return text except Exception as e: print(f"❌ خطا در پردازش PDF: {e}") return "⚠️ خطا در پردازش فایل" # رابط گرافیکی with gr.Blocks() as demo: gr.Markdown("# 🚀 ابزار تحلیل اسناد توزیع برق") file_input = gr.File(label="آپلود فایل PDF", type="filepath") output_text = gr.Textbox(label="📄 محتوای پردازش شده") file_input.change(process_pdf, inputs=file_input, outputs=output_text) # اجرای برنامه if __name__ == "__main__": print("🚀 برنامه در حال اجرا است...") demo.launch()