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