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 ###
|