From b6f5ce41a32a516d177851edec25337f2d0f8820 Mon Sep 17 00:00:00 2001 From: Dammerzone Date: Wed, 19 Mar 2025 18:07:48 +0100 Subject: [PATCH 1/3] Adding support of multi-vector collection --- docs/source/user_guide_rag.rst | 1 + src/neo4j_graphrag/retrievers/external/qdrant/qdrant.py | 9 ++++++++- src/neo4j_graphrag/retrievers/external/qdrant/types.py | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/source/user_guide_rag.rst b/docs/source/user_guide_rag.rst index b51c019a1..42859c41c 100644 --- a/docs/source/user_guide_rag.rst +++ b/docs/source/user_guide_rag.rst @@ -704,6 +704,7 @@ Qdrant Retrievers driver=driver, client=client, collection_name="my-collection", + using="my-vector", id_property_external="neo4j_id", # The payload field that contains identifier to a corresponding Neo4j node id property id_property_neo4j="id", embedder=embedder, diff --git a/src/neo4j_graphrag/retrievers/external/qdrant/qdrant.py b/src/neo4j_graphrag/retrievers/external/qdrant/qdrant.py index ecd3dd2e8..6b00491c0 100644 --- a/src/neo4j_graphrag/retrievers/external/qdrant/qdrant.py +++ b/src/neo4j_graphrag/retrievers/external/qdrant/qdrant.py @@ -62,6 +62,7 @@ class QdrantNeo4jRetriever(ExternalRetriever): driver=neo4j_driver, client=client, collection_name="my_collection", + using="my_vector", id_property_external="neo4j_id" ) embedding = ... @@ -71,6 +72,7 @@ class QdrantNeo4jRetriever(ExternalRetriever): driver (neo4j.Driver): The Neo4j Python driver. client (QdrantClient): The Qdrant client object. collection_name (str): The name of the Qdrant collection to use. + using (str): The name of the Qdrant vector contained in your collection in case of multi-vector collection id_property_neo4j (str): The name of the Neo4j node property that's used as the identifier for relating matches from Qdrant to Neo4j nodes. id_property_external (str): The name of the Qdrant payload property with identifier that refers to a corresponding Neo4j node id property. embedder (Optional[Embedder]): Embedder object to embed query text. @@ -89,6 +91,7 @@ def __init__( collection_name: str, id_property_neo4j: str, id_property_external: str = "id", + using:Optional[str] = None, embedder: Optional[Embedder] = None, return_properties: Optional[list[str]] = None, retrieval_query: Optional[str] = None, @@ -105,6 +108,7 @@ def __init__( driver_model=driver_model, client_model=client_model, collection_name=collection_name, + using=using, id_property_neo4j=id_property_neo4j, id_property_external=id_property_external, embedder_model=embedder_model, @@ -125,6 +129,7 @@ def __init__( self.driver = validated_data.driver_model.driver self.client = validated_data.client_model.client self.collection_name = validated_data.collection_name + self.using = validated_data.using self.embedder = ( validated_data.embedder_model.embedder if validated_data.embedder_model @@ -201,7 +206,8 @@ def get_search_results( points = self.client.query_points( collection_name=self.collection_name, - query=query_vector, + query= query_vector, + using=self.using, limit=top_k, with_payload=[self.id_property_external], **kwargs, @@ -235,3 +241,4 @@ def get_search_results( ) return RawSearchResult(records=records) + diff --git a/src/neo4j_graphrag/retrievers/external/qdrant/types.py b/src/neo4j_graphrag/retrievers/external/qdrant/types.py index d731bf735..3b2601e3a 100644 --- a/src/neo4j_graphrag/retrievers/external/qdrant/types.py +++ b/src/neo4j_graphrag/retrievers/external/qdrant/types.py @@ -48,8 +48,10 @@ class QdrantNeo4jRetrieverModel(BaseModel): collection_name: str id_property_external: str id_property_neo4j: str + using: Optional[str] = None embedder_model: Optional[EmbedderModel] = None return_properties: Optional[list[str]] = None retrieval_query: Optional[str] = None result_formatter: Optional[Callable[[neo4j.Record], RetrieverResultItem]] = None neo4j_database: Optional[str] = None + From f304fb799dac52671cba8d9102d70acf2200eb79 Mon Sep 17 00:00:00 2001 From: Dammerzone Date: Mon, 24 Mar 2025 14:11:59 +0100 Subject: [PATCH 2/3] update file format --- src/neo4j_graphrag/retrievers/external/qdrant/qdrant.py | 5 ++--- src/neo4j_graphrag/retrievers/external/qdrant/types.py | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/neo4j_graphrag/retrievers/external/qdrant/qdrant.py b/src/neo4j_graphrag/retrievers/external/qdrant/qdrant.py index 6b00491c0..a5e47f2a3 100644 --- a/src/neo4j_graphrag/retrievers/external/qdrant/qdrant.py +++ b/src/neo4j_graphrag/retrievers/external/qdrant/qdrant.py @@ -91,7 +91,7 @@ def __init__( collection_name: str, id_property_neo4j: str, id_property_external: str = "id", - using:Optional[str] = None, + using: Optional[str] = None, embedder: Optional[Embedder] = None, return_properties: Optional[list[str]] = None, retrieval_query: Optional[str] = None, @@ -206,7 +206,7 @@ def get_search_results( points = self.client.query_points( collection_name=self.collection_name, - query= query_vector, + query=query_vector, using=self.using, limit=top_k, with_payload=[self.id_property_external], @@ -241,4 +241,3 @@ def get_search_results( ) return RawSearchResult(records=records) - diff --git a/src/neo4j_graphrag/retrievers/external/qdrant/types.py b/src/neo4j_graphrag/retrievers/external/qdrant/types.py index 3b2601e3a..d0240c150 100644 --- a/src/neo4j_graphrag/retrievers/external/qdrant/types.py +++ b/src/neo4j_graphrag/retrievers/external/qdrant/types.py @@ -54,4 +54,3 @@ class QdrantNeo4jRetrieverModel(BaseModel): retrieval_query: Optional[str] = None result_formatter: Optional[Callable[[neo4j.Record], RetrieverResultItem]] = None neo4j_database: Optional[str] = None - From fe45fbb741b1410adbdb4635777c59eb9a32620a Mon Sep 17 00:00:00 2001 From: Dammerzone Date: Mon, 31 Mar 2025 13:38:52 +0200 Subject: [PATCH 3/3] update changelog: Added support for multi-vector collection in Qdrant driver." " --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d276f17cf..c3e0ac312 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Next +### Added + +- Added support for multi-vector collection in Qdrant driver. + ### Changed - Improved log output readability in Retrievers and GraphRAG and added embedded vector to retriever result metadata for debugging.