diff --git a/langchain/retrievers/weaviate_hybrid_search.py b/langchain/retrievers/weaviate_hybrid_search.py index 8f79eca24d..8d8da48b3d 100644 --- a/langchain/retrievers/weaviate_hybrid_search.py +++ b/langchain/retrievers/weaviate_hybrid_search.py @@ -54,22 +54,22 @@ class WeaviateHybridSearchRetriever(BaseRetriever): with self._client.batch as batch: ids = [] for i, doc in enumerate(docs): - data_properties = { - self._text_key: doc.page_content, - } + metadata = doc.metadata or {} + data_properties = {self._text_key: doc.page_content, **metadata} _id = get_valid_uuid(uuid4()) batch.add_data_object(data_properties, self._index_name, _id) ids.append(_id) return ids - def get_relevant_documents(self, query: str) -> List[Document]: + def get_relevant_documents( + self, query: str, where_filter: Optional[Dict[str, object]] = None + ) -> List[Document]: """Look up similar documents in Weaviate.""" - content: Dict[str, Any] = {"concepts": [query]} query_obj = self._client.query.get(self._index_name, self._query_attrs) + if where_filter: + query_obj = query_obj.with_where(where_filter) - result = ( - query_obj.with_hybrid(content, alpha=self.alpha).with_limit(self.k).do() - ) + result = query_obj.with_hybrid(query, alpha=self.alpha).with_limit(self.k).do() if "errors" in result: raise ValueError(f"Error during query: {result['errors']}") @@ -80,5 +80,7 @@ class WeaviateHybridSearchRetriever(BaseRetriever): docs.append(Document(page_content=text, metadata=res)) return docs - async def aget_relevant_documents(self, query: str) -> List[Document]: + async def aget_relevant_documents( + self, query: str, where_filter: Optional[Dict[str, object]] = None + ) -> List[Document]: raise NotImplementedError diff --git a/langchain/vectorstores/weaviate.py b/langchain/vectorstores/weaviate.py index 0ad33b1a52..9d4da53b49 100644 --- a/langchain/vectorstores/weaviate.py +++ b/langchain/vectorstores/weaviate.py @@ -139,6 +139,8 @@ class Weaviate(VectorStore): if kwargs.get("search_distance"): content["certainty"] = kwargs.get("search_distance") query_obj = self._client.query.get(self._index_name, self._query_attrs) + if kwargs.get("where_filter"): + query_obj = query_obj.with_where(kwargs.get("where_filter")) result = query_obj.with_near_text(content).with_limit(k).do() if "errors" in result: raise ValueError(f"Error during query: {result['errors']}") @@ -154,6 +156,8 @@ class Weaviate(VectorStore): """Look up similar documents by embedding vector in Weaviate.""" vector = {"vector": embedding} query_obj = self._client.query.get(self._index_name, self._query_attrs) + if kwargs.get("where_filter"): + query_obj = query_obj.with_where(kwargs.get("where_filter")) result = query_obj.with_near_vector(vector).with_limit(k).do() if "errors" in result: raise ValueError(f"Error during query: {result['errors']}") @@ -226,6 +230,8 @@ class Weaviate(VectorStore): """ vector = {"vector": embedding} query_obj = self._client.query.get(self._index_name, self._query_attrs) + if kwargs.get("where_filter"): + query_obj = query_obj.with_where(kwargs.get("where_filter")) results = ( query_obj.with_additional("vector") .with_near_vector(vector) diff --git a/tests/integration_tests/retrievers/test_weaviate_hybrid_search.py b/tests/integration_tests/retrievers/test_weaviate_hybrid_search.py new file mode 100644 index 0000000000..a5013c4227 --- /dev/null +++ b/tests/integration_tests/retrievers/test_weaviate_hybrid_search.py @@ -0,0 +1,87 @@ +"""Test Weaviate functionality.""" +import logging +import os +from typing import Generator, Union +from uuid import uuid4 + +import pytest +from weaviate import Client + +from langchain.docstore.document import Document +from langchain.retrievers.weaviate_hybrid_search import WeaviateHybridSearchRetriever + +logging.basicConfig(level=logging.DEBUG) + +""" +cd tests/integration_tests/vectorstores/docker-compose +docker compose -f weaviate.yml up +""" + + +class TestWeaviateHybridSearchRetriever: + @classmethod + def setup_class(cls) -> None: + if not os.getenv("OPENAI_API_KEY"): + raise ValueError("OPENAI_API_KEY environment variable is not set") + + @pytest.fixture(scope="class", autouse=True) + def weaviate_url(self) -> Union[str, Generator[str, None, None]]: + """Return the weaviate url.""" + url = "http://localhost:8080" + yield url + + # Clear the test index + client = Client(url) + client.schema.delete_all() + + @pytest.mark.vcr(ignore_localhost=True) + def test_get_relevant_documents(self, weaviate_url: str) -> None: + """Test end to end construction and MRR search.""" + texts = ["foo", "bar", "baz"] + metadatas = [{"page": i} for i in range(len(texts))] + + client = Client(weaviate_url) + + retriever = WeaviateHybridSearchRetriever( + client=client, + index_name=f"LangChain_{uuid4().hex}", + text_key="text", + attributes=["page"], + ) + for i, text in enumerate(texts): + retriever.add_documents( + [Document(page_content=text, metadata=metadatas[i])] + ) + + output = retriever.get_relevant_documents("foo") + assert output == [ + Document(page_content="foo", metadata={"page": 0}), + Document(page_content="baz", metadata={"page": 2}), + Document(page_content="bar", metadata={"page": 1}), + ] + + @pytest.mark.vcr(ignore_localhost=True) + def test_get_relevant_documents_with_filter(self, weaviate_url: str) -> None: + """Test end to end construction and MRR search.""" + texts = ["foo", "bar", "baz"] + metadatas = [{"page": i} for i in range(len(texts))] + + client = Client(weaviate_url) + + retriever = WeaviateHybridSearchRetriever( + client=client, + index_name=f"LangChain_{uuid4().hex}", + text_key="text", + attributes=["page"], + ) + for i, text in enumerate(texts): + retriever.add_documents( + [Document(page_content=text, metadata=metadatas[i])] + ) + + where_filter = {"path": ["page"], "operator": "Equal", "valueNumber": 0} + + output = retriever.get_relevant_documents("foo", where_filter=where_filter) + assert output == [ + Document(page_content="foo", metadata={"page": 0}), + ] diff --git a/tests/integration_tests/vectorstores/cassettes/test_weaviate/TestWeaviate.test_max_marginal_relevance_search_with_filter.yaml b/tests/integration_tests/vectorstores/cassettes/test_weaviate/TestWeaviate.test_max_marginal_relevance_search_with_filter.yaml new file mode 100644 index 0000000000..a5d1e2832f --- /dev/null +++ b/tests/integration_tests/vectorstores/cassettes/test_weaviate/TestWeaviate.test_max_marginal_relevance_search_with_filter.yaml @@ -0,0 +1,729 @@ +interactions: +- request: + body: '{"input": [[8134], [2308], [43673]], "encoding_format": "base64"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '65' + Content-Type: + - application/json + User-Agent: + - User-Agent-DUMMY + X-OpenAI-Client-User-Agent: + - X-OpenAI-Client-User-Agent-DUMMY + authorization: + - authorization-DUMMY + method: POST + uri: https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings + response: + body: + string: !!binary | + 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 + AP//AwDmi7xYhWEAAA== + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 7bcba8c6fee5accd-ATL + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Mon, 24 Apr 2023 04:38:53 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + access-control-allow-origin: + - '*' + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + openai-organization: + - user-dvhgf0lntotpa5mrg7zv7aur + openai-processing-ms: + - '281' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15724800; includeSubDomains + x-ratelimit-limit-requests: + - '3000' + x-ratelimit-remaining-requests: + - '2999' + x-ratelimit-reset-requests: + - 20ms + x-request-id: + - f7de1b8475e1f63a3a9ddf12abbac967 + status: + code: 200 + message: OK +- request: + body: '{"input": [[8134]], "encoding_format": "base64"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '48' + Content-Type: + - application/json + User-Agent: + - User-Agent-DUMMY + X-OpenAI-Client-User-Agent: + - X-OpenAI-Client-User-Agent-DUMMY + authorization: + - authorization-DUMMY + method: POST + uri: https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings + response: + body: + string: !!binary | + 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 + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 7bcba8cb2aa7accd-ATL + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Mon, 24 Apr 2023 04:38:54 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + access-control-allow-origin: + - '*' + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + openai-organization: + - user-dvhgf0lntotpa5mrg7zv7aur + openai-processing-ms: + - '375' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15724800; includeSubDomains + x-ratelimit-limit-requests: + - '3000' + x-ratelimit-remaining-requests: + - '2999' + x-ratelimit-reset-requests: + - 20ms + x-request-id: + - eecb4503410fcc7505b7554b7109e6b1 + status: + code: 200 + message: OK +- request: + body: '{"input": [[8134]], "encoding_format": "base64"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '48' + Content-Type: + - application/json + User-Agent: + - User-Agent-DUMMY + X-OpenAI-Client-User-Agent: + - X-OpenAI-Client-User-Agent-DUMMY + authorization: + - authorization-DUMMY + method: POST + uri: https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings + response: + body: + string: !!binary | + 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 + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 7bcba8ce4dc5accd-ATL + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Mon, 24 Apr 2023 04:38:54 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + access-control-allow-origin: + - '*' + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + openai-organization: + - user-dvhgf0lntotpa5mrg7zv7aur + openai-processing-ms: + - '407' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15724800; includeSubDomains + x-ratelimit-limit-requests: + - '3000' + x-ratelimit-remaining-requests: + - '2999' + x-ratelimit-reset-requests: + - 20ms + x-request-id: + - 6a3f8b11cfa466968b57d3335d4394e9 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/integration_tests/vectorstores/cassettes/test_weaviate/TestWeaviate.test_similarity_search_with_metadata_and_filter.yaml b/tests/integration_tests/vectorstores/cassettes/test_weaviate/TestWeaviate.test_similarity_search_with_metadata_and_filter.yaml new file mode 100644 index 0000000000..2157f8d2cc --- /dev/null +++ b/tests/integration_tests/vectorstores/cassettes/test_weaviate/TestWeaviate.test_similarity_search_with_metadata_and_filter.yaml @@ -0,0 +1,384 @@ +interactions: +- request: + body: '{"input": [[8134], [2308], [43673]], "encoding_format": "base64"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '65' + Content-Type: + - application/json + User-Agent: + - User-Agent-DUMMY + X-OpenAI-Client-User-Agent: + - X-OpenAI-Client-User-Agent-DUMMY + authorization: + - authorization-DUMMY + method: POST + uri: https://api.openai.com/v1/engines/text-embedding-ada-002/embeddings + response: + body: + string: !!binary | + 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 + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 7bcba8bfb902137d-ATL + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Mon, 24 Apr 2023 04:38:52 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + access-control-allow-origin: + - '*' + alt-svc: + - h3=":443"; ma=86400, h3-29=":443"; ma=86400 + openai-organization: + - user-dvhgf0lntotpa5mrg7zv7aur + openai-processing-ms: + - '153' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15724800; includeSubDomains + x-ratelimit-limit-requests: + - '3000' + x-ratelimit-remaining-requests: + - '2999' + x-ratelimit-reset-requests: + - 20ms + x-request-id: + - b45bb5c2f0a8d630fb99fe0cc9fd89ac + status: + code: 200 + message: OK +version: 1 diff --git a/tests/integration_tests/vectorstores/test_weaviate.py b/tests/integration_tests/vectorstores/test_weaviate.py index 754b015c48..fd6a4bddf4 100644 --- a/tests/integration_tests/vectorstores/test_weaviate.py +++ b/tests/integration_tests/vectorstores/test_weaviate.py @@ -62,6 +62,23 @@ class TestWeaviate: output = docsearch.similarity_search("foo", k=1) assert output == [Document(page_content="foo", metadata={"page": 0})] + @pytest.mark.vcr(ignore_localhost=True) + def test_similarity_search_with_metadata_and_filter( + self, weaviate_url: str, embedding_openai: OpenAIEmbeddings + ) -> None: + """Test end to end construction and search with metadata.""" + texts = ["foo", "bar", "baz"] + metadatas = [{"page": i} for i in range(len(texts))] + docsearch = Weaviate.from_texts( + texts, embedding_openai, metadatas=metadatas, weaviate_url=weaviate_url + ) + output = docsearch.similarity_search( + "foo", + k=2, + where_filter={"path": ["page"], "operator": "Equal", "valueNumber": 0}, + ) + assert output == [Document(page_content="foo", metadata={"page": 0})] + @pytest.mark.vcr(ignore_localhost=True) def test_max_marginal_relevance_search( self, weaviate_url: str, embedding_openai: OpenAIEmbeddings @@ -117,3 +134,32 @@ class TestWeaviate: Document(page_content="foo", metadata={"page": 0}), Document(page_content="bar", metadata={"page": 1}), ] + + @pytest.mark.vcr(ignore_localhost=True) + def test_max_marginal_relevance_search_with_filter( + self, weaviate_url: str, embedding_openai: OpenAIEmbeddings + ) -> None: + """Test end to end construction and MRR search.""" + texts = ["foo", "bar", "baz"] + metadatas = [{"page": i} for i in range(len(texts))] + + docsearch = Weaviate.from_texts( + texts, embedding_openai, metadatas=metadatas, weaviate_url=weaviate_url + ) + where_filter = {"path": ["page"], "operator": "Equal", "valueNumber": 0} + # if lambda=1 the algorithm should be equivalent to standard ranking + standard_ranking = docsearch.similarity_search( + "foo", k=2, where_filter=where_filter + ) + output = docsearch.max_marginal_relevance_search( + "foo", k=2, fetch_k=3, lambda_mult=1.0, where_filter=where_filter + ) + assert output == standard_ranking + + # if lambda=0 the algorithm should favour maximal diversity + output = docsearch.max_marginal_relevance_search( + "foo", k=2, fetch_k=3, lambda_mult=0.0, where_filter=where_filter + ) + assert output == [ + Document(page_content="foo", metadata={"page": 0}), + ]