# core/vector_store.py import faiss import io import logging from sentence_transformers import SentenceTransformer logger = logging.getLogger(__name__) def create_faiss_index(embeddings): """Creates a FAISS index from a list of embeddings.""" if embeddings is None or len(embeddings) == 0: logger.warning("No embeddings provided to create FAISS index.") return None dimension = embeddings.shape[1] index = faiss.IndexFlatL2(dimension) index.add(embeddings.astype('float32')) # Serialize the index to bytes for in-memory storage try: bio = io.BytesIO() writer = faiss.PyCallbackIOWriter(bio.write) faiss.write_index(index, writer) return bio.getvalue() except Exception as e: logger.error(f"Failed to serialize FAISS index: {e}") return None def deserialize_faiss_index(index_bytes: bytes) -> faiss.Index: """Deserializes a FAISS index from bytes.""" try: bio = io.BytesIO(index_bytes) reader = faiss.PyCallbackIOReader(bio.read) return faiss.read_index(reader) except Exception as e: logger.error(f"Failed to deserialize FAISS index: {e}") return None