diff --git a/docs/source/api.rst b/docs/source/api.rst index 740a5373d..3e7628380 100644 --- a/docs/source/api.rst +++ b/docs/source/api.rst @@ -42,6 +42,21 @@ HybridCypherRetriever :members: + +******************* +External Retrievers +******************* + +This section includes retrievers that integrate with databases external to Neo4j. + + +WeaviateNeo4jRetriever +====================== + +.. autoclass:: neo4j_genai.retrievers.external.weaviate.WeaviateNeo4jRetriever + :members: + + ****** Errors ****** diff --git a/src/neo4j_genai/__init__.py b/src/neo4j_genai/__init__.py index c76408f17..ec7ef24c7 100644 --- a/src/neo4j_genai/__init__.py +++ b/src/neo4j_genai/__init__.py @@ -16,6 +16,7 @@ from .retrievers.hybrid import HybridCypherRetriever, HybridRetriever from .retrievers.text2cypher import Text2CypherRetriever from .retrievers.vector import VectorCypherRetriever, VectorRetriever +from .retrievers.external.weaviate import WeaviateNeo4jRetriever __all__ = [ "VectorRetriever", @@ -23,4 +24,5 @@ "HybridRetriever", "HybridCypherRetriever", "Text2CypherRetriever", + "WeaviateNeo4jRetriever", ] diff --git a/src/neo4j_genai/retrievers/external/weaviate/weaviate.py b/src/neo4j_genai/retrievers/external/weaviate/weaviate.py index 93d3b2589..4bd47ca9d 100644 --- a/src/neo4j_genai/retrievers/external/weaviate/weaviate.py +++ b/src/neo4j_genai/retrievers/external/weaviate/weaviate.py @@ -95,14 +95,37 @@ def _get_search_results( If no embedder is provided, then it will assume that the vectorizer is used in Weaviate. See the following documentation for more details: - - [Query a vector index](https://neo4j.com/docs/cypher-manual/current/indexes-for-vector-search/#indexes-vector-query) - - [db.index.vector.queryNodes()](https://neo4j.com/docs/operations-manual/5/reference/procedures/#procedure_db_index_vector_queryNodes) - - [db.index.fulltext.queryNodes()](https://neo4j.com/docs/operations-manual/5/reference/procedures/#procedure_db_index_fulltext_querynodes) + - `Query a vector index <https://neo4j.com/docs/cypher-manual/current/indexes-for-vector-search/#indexes-vector-query>`_ + - `db.index.vector.queryNodes() <https://neo4j.com/docs/operations-manual/5/reference/procedures/#procedure_db_index_vector_queryNodes>`_ + - `db.index.fulltext.queryNodes() <https://neo4j.com/docs/operations-manual/5/reference/procedures/#procedure_db_index_fulltext_querynodes>`_ + + + Example: + + .. code-block:: python + + import neo4j + from neo4j_genai.retrievers import WeaviateNeo4jRetriever + + driver = neo4j.GraphDatabase.driver(URI, auth=AUTH) + + retriever = WeaviateNeo4jRetriever( + driver=driver, + client=weaviate_client, + collection="Jeopardy", + id_property_external="neo4j_id", + id_property_neo4j="id", + ) + + biology_embedding = ... + retriever.search(query_vector=biology_embedding, top_k=2) + + Args: - query_text (str): The text to get the closest neighbors of. - query_vector (Optional[list[float]], optional): The vector embeddings to get the closest neighbors of. Defaults to None. - top_k (int, optional): The number of neighbors to return. Defaults to 5. - weaviate_filters (Optional[_Filters], optional): The filters to apply to the search query in Weaviate. Defaults to None. + query_text (Optional[str]): The text to get the closest neighbors of. + query_vector (Optional[list[float]]): The vector embeddings to get the closest neighbors of. Defaults to None. + top_k (int): The number of neighbors to return. Defaults to 5. + weaviate_filters (Optional[_Filters]): The filters to apply to the search query in Weaviate. Defaults to None. Raises: SearchValidationError: If validation of the input arguments fail. Returns: diff --git a/tests/e2e/weaviate_e2e/test_weaviate_e2e.py b/tests/e2e/weaviate_e2e/test_weaviate_e2e.py index 894fd9127..03123c280 100644 --- a/tests/e2e/weaviate_e2e/test_weaviate_e2e.py +++ b/tests/e2e/weaviate_e2e/test_weaviate_e2e.py @@ -16,7 +16,7 @@ import re import pytest import weaviate -from neo4j_genai.retrievers.external.weaviate import WeaviateNeo4jRetriever +from neo4j_genai import WeaviateNeo4jRetriever from langchain_community.embeddings import HuggingFaceEmbeddings from neo4j_genai.types import RetrieverResult, RetrieverResultItem