chatbot / modules /retriever.py
amitshamsundar's picture
update code to handle .index file
d72e6f0
Raw
History Blame Contribute Delete
1.36 kB
import faiss
import json
import numpy as np
import os
FAISS_INDEX_PATH = "faiss_index.index"
METADATA_PATH = "faiss_metadata.json"
# Load FAISS index and metadata
def load_faiss_index():
if not os.path.exists(FAISS_INDEX_PATH) or not os.path.exists(METADATA_PATH):
print(f"Warning: FAISS index file ({FAISS_INDEX_PATH}) or metadata file ({METADATA_PATH}) not found. Please build the index first.")
return None, None
try:
index = faiss.read_index(FAISS_INDEX_PATH)
with open(METADATA_PATH, "r") as f:
metadata = json.load(f)
print("FAISS index and metadata loaded successfully.")
return index, metadata
except Exception as e:
print(f"Error loading FAISS index or metadata: {e}")
return None, None
# Retrieve top-k chunks
def retrieve_chunks(query_embedding, index, metadata, k=5):
if index is None or metadata is None:
return "Error: FAISS index not loaded. Please upload a knowledge base."
try:
D, I = index.search(np.array([query_embedding]), k)
results = [metadata[str(i)] for i in I[0] if str(i) in metadata and I[0] is not None and len(I[0]) > 0]
return "\n".join(results)
except Exception as e:
print(f"Error during FAISS search: {e}")
return "Error performing search. Index might be corrupted or empty."