import gradio as gr from langchain_community.vectorstores import FAISS from langchain_community.embeddings import HuggingFaceEmbeddings import zipfile import os # Percorsi per il primo file ZIP zip_path_m = "faiss_manual_index.zip" # File ZIP per l'indice manuale faiss_manual_index = "faiss_manual_index" # Sottocartella per estrazione manuale # Controlla se la directory esiste già if not os.path.exists(faiss_manual_index): os.makedirs(faiss_manual_index) # Crea la directory # Percorsi per il secondo file ZIP zip_path_p = "faiss_problems_index.zip" # File ZIP per l'indice problemi faiss_problems_index = "faiss_problems_index" # Sottocartella per estrazione problemi # Controlla se la directory esiste già if not os.path.exists(faiss_problems_index): os.makedirs(faiss_problems_index) # Crea la directory # Controlla i file presenti nella cartella faiss_manual_index prima dell'estrazione print(f"Contenuto della directory {faiss_manual_index} prima dell'estrazione:", os.listdir(faiss_manual_index)) # Estrai il primo file ZIP se non esiste già if os.path.exists(zip_path_m): # Controlla che il file zip esista with zipfile.ZipFile(zip_path_m, 'r') as zip_ref: zip_ref.extractall(faiss_manual_index) print(f"Files estratti nella directory: {faiss_manual_index}") else: print(f"File {zip_path_m} non trovato. Assicurati di caricarlo nello Space.") # Verifica di nuovo il contenuto della cartella faiss_manual_index dopo l'estrazione print(f"Contenuto della directory {faiss_manual_index} dopo l'estrazione:", os.listdir(faiss_manual_index)) # Estrai il secondo file ZIP se non esiste già if os.path.exists(zip_path_p): # Controlla che il file zip esista with zipfile.ZipFile(zip_path_p, 'r') as zip_ref: zip_ref.extractall(faiss_problems_index) print(f"Files estratti nella directory: {faiss_problems_index}") else: print(f"File {zip_path_p} non trovato. Assicurati di caricarlo nello Space.") # Verifica di nuovo il contenuto della cartella faiss_problems_index dopo l'estrazione print(f"Contenuto della directory {faiss_problems_index} dopo l'estrazione:", os.listdir(faiss_problems_index)) # Carica il modello di embedding embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/LaBSE") # Carica i vectorstore FAISS salvati manual_vectorstore = FAISS.load_local(faiss_manual_index, embedding_model, allow_dangerous_deserialization=True) problems_vectorstore = FAISS.load_local(faiss_problems_index, embedding_model, allow_dangerous_deserialization=True) def search_query(query): # Cerca nei manuali manual_results = manual_vectorstore.similarity_search(query, k=2) manual_output = "\n\n".join([doc.page_content for doc in manual_results]) # Cerca nei problemi problems_results = problems_vectorstore.similarity_search(query, k=2) problems_output = "\n\n".join([doc.page_content for doc in problems_results]) # Restituisce i risultati come output diviso return manual_output, problems_output examples = [ ["How to change the knife?"], ["What are the safety precautions for using the machine?"], ["How can I get help with the machine?"] ] # Interfaccia Gradio iface = gr.Interface( fn=search_query, inputs=gr.Textbox(lines=2, placeholder="Enter your question here..."), outputs=[ gr.Textbox(label="Manual Results"), gr.Textbox(label="Issues Results") ], examples=examples, title="Manual Querying System", description="Enter a question to get relevant information extracted from the manual and the most common related issues." ) # Avvia l'app iface.launch()