mirror of
https://github.com/hanzoai/chat-rag-api.git
synced 2026-10-30 18:45:41 +00:00
Extracted from the deployed chat-rag-api:0.7.8-hanzo image; adds a Qdrant vector store targeting hanzoai/vector as a drop-in for pgvector. - app/services/vector_store/qdrant_vector.py: QdrantVector(QdrantVectorStore) with the id helpers (get_all_ids/get_filtered_ids/get_documents_by_ids), delete-by-file_id, and the route's Mongo-style file_id filter translated to native Qdrant filters. file_id stored in payload metadata (unique point ids). - factory.get_vector_store: mode='qdrant' (lazy import; pg/atlas deploys unaffected). - config: VectorDBType.QDRANT + QDRANT_URL/QDRANT_API_KEY/QDRANT_DISTANCE/ EMBEDDINGS_DIM(1536) + construction branch. - health: qdrant_health_check (client.get_collections()). - requirements: langchain-qdrant==0.2.0, qdrant-client==1.12.1. Verified: pytest tests/test_qdrant_vector.py (4 tests) against in-memory Qdrant; factory builds QdrantVector with all route methods present.
57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
from typing import Optional
|
|
from pymongo import MongoClient
|
|
from langchain_core.embeddings import Embeddings
|
|
|
|
from .async_pg_vector import AsyncPgVector
|
|
from .atlas_mongo_vector import AtlasMongoVector
|
|
from .extended_pg_vector import ExtendedPgVector
|
|
|
|
|
|
def get_vector_store(
|
|
connection_string: str,
|
|
embeddings: Embeddings,
|
|
collection_name: str,
|
|
mode: str = "sync",
|
|
search_index: Optional[str] = None,
|
|
# qdrant-only options (hanzoai/vector)
|
|
qdrant_url: Optional[str] = None,
|
|
qdrant_api_key: Optional[str] = None,
|
|
qdrant_dim: Optional[int] = None,
|
|
qdrant_distance: str = "cosine",
|
|
qdrant_prefer_grpc: bool = False,
|
|
):
|
|
if mode == "sync":
|
|
return ExtendedPgVector(
|
|
connection_string=connection_string,
|
|
embedding_function=embeddings,
|
|
collection_name=collection_name,
|
|
)
|
|
elif mode == "async":
|
|
return AsyncPgVector(
|
|
connection_string=connection_string,
|
|
embedding_function=embeddings,
|
|
collection_name=collection_name,
|
|
)
|
|
elif mode == "atlas-mongo":
|
|
mongo_db = MongoClient(connection_string).get_database()
|
|
mong_collection = mongo_db[collection_name]
|
|
return AtlasMongoVector(
|
|
collection=mong_collection, embedding=embeddings, index_name=search_index
|
|
)
|
|
elif mode == "qdrant":
|
|
# Imported lazily so pgvector/atlas deployments don't need qdrant deps.
|
|
from .qdrant_vector import QdrantVector
|
|
|
|
return QdrantVector.from_config(
|
|
url=qdrant_url,
|
|
api_key=qdrant_api_key,
|
|
collection_name=collection_name,
|
|
embeddings=embeddings,
|
|
dim=qdrant_dim,
|
|
distance=qdrant_distance,
|
|
prefer_grpc=qdrant_prefer_grpc,
|
|
)
|
|
else:
|
|
raise ValueError(
|
|
"Invalid mode specified. Choose 'sync', 'async', 'atlas-mongo', or 'qdrant'."
|
|
) |