Spaces:
Sleeping
Sleeping
File size: 1,794 Bytes
732b14f dc1b199 732b14f dc1b199 faa8fb3 dc1b199 732b14f dc1b199 732b14f dc1b199 732b14f dc1b199 732b14f dc1b199 49f0cfb 732b14f dc1b199 32c4506 732b14f dc1b199 732b14f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | """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
|