""" Dependency factories for FastAPI dependency injection. Provides cached singleton instances of EmbeddingService and VectorStore. """ from functools import lru_cache from app.services.embedding_service import EmbeddingService from app.services.qdrant_vector_store import QdrantVectorStore from app.services.retrieval_service import RetrievalService from app.services.vector_store import VectorStore from app.services.vector_store_contract import VectorStoreContract from app.utils.config import config_manager config = config_manager.get_config() @lru_cache def get_embedding_service() -> EmbeddingService: model_name = config.embedding_model return EmbeddingService( model_name=model_name, api_key=config.gemini_embedding_api_key, ) @lru_cache def get_vector_store() -> VectorStoreContract: if config.vector_store_backend == "qdrant": return QdrantVectorStore( url=config.qdrant_url, collection_name=config.qdrant_collection_name, vector_size=config.qdrant_vector_size, timeout=config.qdrant_timeout, ) if config.vector_store_backend == "chroma": persist_path = config.chroma_persist_path return VectorStore(persist_path=persist_path) raise ValueError(f"Unsupported VECTOR_STORE_BACKEND: {config.vector_store_backend}") @lru_cache def get_retrieval_service() -> RetrievalService: return RetrievalService( embedding_service=get_embedding_service(), vector_store=get_vector_store() )