From 8be42bb0d411cb446814b7d01947c8bd9f2ec1dd Mon Sep 17 00:00:00 2001 From: Eugene Yurtsev Date: Fri, 12 Jul 2024 17:06:37 -0400 Subject: [PATCH] x --- libs/core/langchain_core/vectorstores/base.py | 50 ++++++++++++++++++- .../example_selectors/test_similarity.py | 13 +---- 2 files changed, 50 insertions(+), 13 deletions(-) diff --git a/libs/core/langchain_core/vectorstores/base.py b/libs/core/langchain_core/vectorstores/base.py index cad6ffeedc3..5476747190d 100644 --- a/libs/core/langchain_core/vectorstores/base.py +++ b/libs/core/langchain_core/vectorstores/base.py @@ -54,7 +54,7 @@ if TYPE_CHECKING: AsyncCallbackManagerForRetrieverRun, CallbackManagerForRetrieverRun, ) - from langchain_core.indexing.base import DeleteResponse, UpsertResponse + from langchain_core.indexing.base import DeleteResponse, Sort, T, UpsertResponse from langchain_core.documents.base import Document from langchain_core.indexing import BaseIndex @@ -516,6 +516,54 @@ class VectorStore(BaseIndex[Document]): "search_type to be 'similarity', 'similarity_score_threshold' or 'mmr'." ) + def delete_by_filter( + self, + filter: Union[Dict[str, Any], List[Dict[str, Any]]], + /, + **kwargs: Any, + ) -> DeleteResponse: + """Delete documents by filter. + + Args: + filter: Filter to apply to documents. + **kwargs: Other keyword arguments that subclasses might use. + + Returns: + DeleteResponse: A response object that contains the list of IDs that were + successfully deleted from the vectorstore and the list of IDs that failed + to be deleted. + + .. versionadded:: 0.2.15 + """ + raise NotImplementedError( + f"{self.__class__.__name__} does not yet support delete_by_filter." + ) + + def get_by_filter( + self, + *, + filter: Optional[Union[Dict[str, Any], List[Dict[str, Any]]]] = None, + limit: Optional[int] = None, + sort: Optional[Sort] = None, + **kwargs: Any, + ) -> Iterable[T]: + """Get documents by filter. + + Args: + filter: Filter to apply to documents. + limit: Maximum number of documents to return. + sort: Sort order for the returned documents. + **kwargs: Other keyword arguments that subclasses might use. + + Returns: + Iterable of documents that match the filter. + + .. versionadded:: 0.2.15 + """ + raise NotImplementedError( + f"{self.__class__.__name__} does not yet support get_by_filter." + ) + @abstractmethod def similarity_search( self, query: str, k: int = 4, **kwargs: Any diff --git a/libs/core/tests/unit_tests/example_selectors/test_similarity.py b/libs/core/tests/unit_tests/example_selectors/test_similarity.py index d9009f7bf1b..2cd50ca8dd2 100644 --- a/libs/core/tests/unit_tests/example_selectors/test_similarity.py +++ b/libs/core/tests/unit_tests/example_selectors/test_similarity.py @@ -1,4 +1,4 @@ -from typing import Any, Iterable, List, Optional, Sequence, cast +from typing import Any, Iterable, List, Optional, cast from langchain_core.documents import Document from langchain_core.embeddings import Embeddings, FakeEmbeddings @@ -6,7 +6,6 @@ from langchain_core.example_selectors import ( MaxMarginalRelevanceExampleSelector, SemanticSimilarityExampleSelector, ) -from langchain_core.indexing.base import DeleteResponse from langchain_core.vectorstores import VectorStore @@ -32,16 +31,6 @@ class DummyVectorStore(VectorStore): self.metadatas.extend(metadatas) return ["dummy_id"] - def get_by_ids(self, ids: Sequence[str], /) -> List[Document]: - raise NotImplementedError() - - def delete_by_ids( - self, - ids: Sequence[str], - /, - ) -> DeleteResponse: - raise NotImplementedError() - def similarity_search( self, query: str, k: int = 4, **kwargs: Any ) -> List[Document]: