Spaces:
Sleeping
Sleeping
| """Factory that returns the configured vector store singleton.""" | |
| import logging | |
| from app.config import settings | |
| from app.vectorstore.base import VectorStore | |
| logger = logging.getLogger(__name__) | |
| VECTORSTORE_BACKEND_LABEL = "faiss" | |
| _instance: VectorStore | None = None | |
| def _backend_label() -> str: | |
| return (settings.vectorstore_backend or "faiss").strip().lower() | |
| def get_vectorstore() -> VectorStore: | |
| """Return (or lazily create) the vector store singleton. | |
| Backend is selected via ``settings.vectorstore_backend`` (``faiss`` or ``qdrant``). | |
| """ | |
| global _instance, VECTORSTORE_BACKEND_LABEL | |
| if _instance is not None: | |
| return _instance | |
| from app.embeddings.factory import get_embedding_client | |
| embedding = get_embedding_client() | |
| backend = _backend_label() | |
| VECTORSTORE_BACKEND_LABEL = backend | |
| if backend == "qdrant": | |
| from app.vectorstore.qdrant_wrapper import QdrantVectorStore | |
| _instance = QdrantVectorStore(embedding=embedding) | |
| logger.info("VectorStore: Qdrant (%s)", settings.qdrant_url) | |
| else: | |
| from app.vectorstore.faiss_wrapper import FAISSVectorStore | |
| _instance = FAISSVectorStore(embedding=embedding) | |
| logger.info("VectorStore: FAISS (LangChain, local disk)") | |
| return _instance | |
| def reset_vectorstore() -> None: | |
| """Reset the singleton (used in tests).""" | |
| global _instance, VECTORSTORE_BACKEND_LABEL | |
| _instance = None | |
| VECTORSTORE_BACKEND_LABEL = "faiss" | |
| try: | |
| from app.retrieval.semantic_cache import reset_semantic_cache | |
| reset_semantic_cache() | |
| except ImportError: | |
| pass | |
| try: | |
| from app.vectorstore.qdrant_async import reset_async_qdrant_client | |
| reset_async_qdrant_client() | |
| except ImportError: | |
| pass | |