Update app.py
Browse files
app.py
CHANGED
@@ -81,17 +81,17 @@ def create_faiss_index(documents_file: str, index_file: str, embedding_model_ins
|
|
81 |
document = json.load(f)
|
82 |
lines = document['lines']
|
83 |
logger.info(f"{len(lines)} linee caricate da {documents_file}.")
|
84 |
-
|
85 |
# Genera embedding
|
86 |
embeddings = embedding_model_instance.encode(lines, convert_to_numpy=True, show_progress_bar=True)
|
87 |
logger.info("Embedding generati con SentenceTransformer.")
|
88 |
-
|
89 |
# Crea l'indice FAISS
|
90 |
dimension = embeddings.shape[1]
|
91 |
index = faiss.IndexFlatL2(dimension)
|
92 |
index.add(embeddings)
|
93 |
logger.info(f"Indice FAISS creato con dimensione: {dimension}.")
|
94 |
-
|
95 |
# Salva l'indice
|
96 |
faiss.write_index(index, index_file)
|
97 |
logger.info(f"Indice FAISS salvato in {index_file}.")
|
@@ -142,23 +142,23 @@ def retrieve_relevant_lines(query: str, top_k: int = 5, embedding_model_instance
|
|
142 |
document = json.load(f)
|
143 |
lines = document['lines']
|
144 |
logger.info(f"{len(lines)} linee caricate da {DOCUMENTS_FILE}.")
|
145 |
-
|
146 |
# Carica l'indice FAISS
|
147 |
index = faiss.read_index(FAISS_INDEX_FILE)
|
148 |
logger.info(f"Indice FAISS caricato da {FAISS_INDEX_FILE}.")
|
149 |
-
|
150 |
# Genera embedding della query
|
151 |
if embedding_model_instance is None:
|
152 |
embedding_model_instance = SentenceTransformer('all-MiniLM-L6-v2')
|
153 |
logger.info("Modello SentenceTransformer caricato per l'embedding della query.")
|
154 |
-
|
155 |
query_embedding = embedding_model_instance.encode([query], convert_to_numpy=True)
|
156 |
logger.info("Embedding della query generati.")
|
157 |
-
|
158 |
# Ricerca nell'indice
|
159 |
distances, indices = index.search(query_embedding, top_k)
|
160 |
logger.info(f"Ricerca FAISS completata. Risultati ottenuti: {len(indices[0])}")
|
161 |
-
|
162 |
# Recupera le linee rilevanti
|
163 |
relevant_texts = [lines[idx] for idx in indices[0] if idx < len(lines)]
|
164 |
retrieved_docs = "\n".join(relevant_texts)
|
@@ -188,10 +188,10 @@ Sei un assistente museale esperto in ontologie RDF. Utilizza le informazioni for
|
|
188 |
4) Se la domanda è generica (tipo 'Ciao, come stai?'), rispondi brevemente.
|
189 |
5) Se trovi risultati, la risposta finale deve essere la query SPARQL (una sola riga).
|
190 |
6) Se non trovi nulla, rispondi con 'Nessuna info.'
|
191 |
-
7) Non multiline. Esempio: PREFIX base: <...> SELECT ?x WHERE { ... }.
|
192 |
Esempio:
|
193 |
Utente: Chi ha creato l'opera 'Amore e Psiche'?
|
194 |
-
Risposta: PREFIX base: <http://www.semanticweb.org/lucreziamosca/ontologies/progettoMuseo#> SELECT ?creatore WHERE { ?opera base:hasName "Amore e Psiche" . ?opera base:creatoDa ?creatore . }
|
195 |
### FINE REGOLE ###
|
196 |
|
197 |
### Conversazione ###
|
|
|
81 |
document = json.load(f)
|
82 |
lines = document['lines']
|
83 |
logger.info(f"{len(lines)} linee caricate da {documents_file}.")
|
84 |
+
|
85 |
# Genera embedding
|
86 |
embeddings = embedding_model_instance.encode(lines, convert_to_numpy=True, show_progress_bar=True)
|
87 |
logger.info("Embedding generati con SentenceTransformer.")
|
88 |
+
|
89 |
# Crea l'indice FAISS
|
90 |
dimension = embeddings.shape[1]
|
91 |
index = faiss.IndexFlatL2(dimension)
|
92 |
index.add(embeddings)
|
93 |
logger.info(f"Indice FAISS creato con dimensione: {dimension}.")
|
94 |
+
|
95 |
# Salva l'indice
|
96 |
faiss.write_index(index, index_file)
|
97 |
logger.info(f"Indice FAISS salvato in {index_file}.")
|
|
|
142 |
document = json.load(f)
|
143 |
lines = document['lines']
|
144 |
logger.info(f"{len(lines)} linee caricate da {DOCUMENTS_FILE}.")
|
145 |
+
|
146 |
# Carica l'indice FAISS
|
147 |
index = faiss.read_index(FAISS_INDEX_FILE)
|
148 |
logger.info(f"Indice FAISS caricato da {FAISS_INDEX_FILE}.")
|
149 |
+
|
150 |
# Genera embedding della query
|
151 |
if embedding_model_instance is None:
|
152 |
embedding_model_instance = SentenceTransformer('all-MiniLM-L6-v2')
|
153 |
logger.info("Modello SentenceTransformer caricato per l'embedding della query.")
|
154 |
+
|
155 |
query_embedding = embedding_model_instance.encode([query], convert_to_numpy=True)
|
156 |
logger.info("Embedding della query generati.")
|
157 |
+
|
158 |
# Ricerca nell'indice
|
159 |
distances, indices = index.search(query_embedding, top_k)
|
160 |
logger.info(f"Ricerca FAISS completata. Risultati ottenuti: {len(indices[0])}")
|
161 |
+
|
162 |
# Recupera le linee rilevanti
|
163 |
relevant_texts = [lines[idx] for idx in indices[0] if idx < len(lines)]
|
164 |
retrieved_docs = "\n".join(relevant_texts)
|
|
|
188 |
4) Se la domanda è generica (tipo 'Ciao, come stai?'), rispondi brevemente.
|
189 |
5) Se trovi risultati, la risposta finale deve essere la query SPARQL (una sola riga).
|
190 |
6) Se non trovi nulla, rispondi con 'Nessuna info.'
|
191 |
+
7) Non multiline. Esempio: PREFIX base: <...> SELECT ?x WHERE {{ ... }}.
|
192 |
Esempio:
|
193 |
Utente: Chi ha creato l'opera 'Amore e Psiche'?
|
194 |
+
Risposta: PREFIX base: <http://www.semanticweb.org/lucreziamosca/ontologies/progettoMuseo#> SELECT ?creatore WHERE {{ ?opera base:hasName "Amore e Psiche" . ?opera base:creatoDa ?creatore . }}
|
195 |
### FINE REGOLE ###
|
196 |
|
197 |
### Conversazione ###
|