from langchain_qdrant import QdrantVectorStore, FastEmbedSparse from langchain_openai import OpenAIEmbeddings from src import config def get_hybrid_retriever(): """ Builds and returns a hybrid dense + sparse retriever using MMR search. Instantiates QdrantVectorStore directly to ensure compatibility with the local file-based client """ # 1. Initialize Client client = config.qdrant_client # 2. Initialize Embeddings dense_embeddings = OpenAIEmbeddings( model=config.EMBEDDING_MODEL, openai_api_key=config.OPENAI_API_KEY ) sparse_embeddings = FastEmbedSparse(model_name=config.SPARSE_MODEL) # 3. Instantiate the vector store directly using the shared client vector_store = QdrantVectorStore( client=client, collection_name=config.COLLECTION_NAME, embedding=dense_embeddings, sparse_embedding=sparse_embeddings, retrieval_mode="hybrid" ) # 4. Return Retriever return vector_store.as_retriever( search_type="mmr", search_kwargs={ "k": 8, "fetch_k": 20, "lambda_mult": 0.7 } )