Spaces:
Sleeping
Sleeping
import gradio as gr | |
from langchain_community.vectorstores import FAISS | |
from langchain_community.embeddings import HuggingFaceEmbeddings | |
import zipfile | |
import os | |
import openai | |
import torch | |
# Carica la chiave API di OpenAI dalle variabili d'ambiente | |
openai.api_key = os.getenv("OPENAI_API_KEY") | |
# Percorsi ZIP per manuali e problemi | |
zip_path_m = "faiss_manual_index.zip" | |
faiss_manual_index = "faiss_manual_index" | |
zip_path_p = "faiss_problems_index.zip" | |
faiss_problems_index = "faiss_problems_index" | |
# Estrazione dei file ZIP se necessario | |
for zip_path, output_dir in [(zip_path_m, faiss_manual_index), (zip_path_p, faiss_problems_index)]: | |
if not os.path.exists(output_dir): | |
os.makedirs(output_dir) | |
if os.path.exists(zip_path): | |
with zipfile.ZipFile(zip_path, 'r') as zip_ref: | |
zip_ref.extractall(output_dir) | |
# Caricamento del modello di embedding | |
embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/LaBSE") | |
# Caricamento dei vectorstore FAISS | |
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) | |
# Funzione per la ricerca e il riassunto | |
def search_and_summarize(query): | |
# Ricerca nei manuali e problemi | |
manual_results = manual_vectorstore.similarity_search(query, k=2) | |
manual_output = "\n\n".join([doc.page_content for doc in manual_results]) | |
problems_results = problems_vectorstore.similarity_search(query, k=2) | |
problems_output = "\n\n".join([doc.page_content for doc in problems_results]) | |
combined_text = f"Manual Results:\n{manual_output}\n\nProblems Results:\n{problems_output}" | |
# Generazione del riassunto con OpenAI | |
input_text = f"Riassumi le seguenti informazioni:\n{combined_text}\n\nRiassunto:" | |
response = openai.Completion.create( | |
engine="text-davinci-003", # Puoi scegliere un altro modello se preferisci | |
prompt=input_text, | |
max_tokens=300, | |
temperature=0.7 | |
) | |
summary = response.choices[0].text.strip() | |
return manual_output, problems_output, summary | |
# Interfaccia Gradio | |
iface = gr.Interface( | |
fn=search_and_summarize, | |
inputs=gr.Textbox(lines=2, placeholder="Enter your question here..."), | |
outputs=[ | |
gr.Textbox(label="Manual Results"), | |
gr.Textbox(label="Issues Results"), | |
gr.Textbox(label="Summary by OpenAI") | |
], | |
examples=[ | |
["How to change the knife?"], | |
["What are the safety precautions for using the machine?"], | |
["How can I get help with the machine?"] | |
], | |
title="Manual Querying System with OpenAI Summarization", | |
description="Enter a question to get information from the manual and the common issues, summarized by OpenAI." | |
) | |
# Avvia l'app Gradio | |
iface.launch() | |