diff --git a/langchain/retrievers/self_query/pinecone.py b/langchain/retrievers/self_query/pinecone.py index c4e0b8441d..53083df016 100644 --- a/langchain/retrievers/self_query/pinecone.py +++ b/langchain/retrievers/self_query/pinecone.py @@ -30,7 +30,7 @@ class PineconeTranslator(Visitor): f"Received disallowed comparator {func}. Allowed " f"comparators are {self.allowed_comparators}" ) - return f"${func}" + return f"${func.value}" def visit_operation(self, operation: Operation) -> Dict: args = [arg.accept(self) for arg in operation.arguments] diff --git a/tests/unit_tests/retrievers/self_query/__init__.py b/tests/unit_tests/retrievers/self_query/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/unit_tests/retrievers/self_query/test_pinecone.py b/tests/unit_tests/retrievers/self_query/test_pinecone.py new file mode 100644 index 0000000000..2927fccd67 --- /dev/null +++ b/tests/unit_tests/retrievers/self_query/test_pinecone.py @@ -0,0 +1,29 @@ +from langchain.chains.query_constructor.ir import ( + Comparator, + Comparison, + Operation, + Operator, +) +from langchain.retrievers.self_query.pinecone import PineconeTranslator + +DEFAULT_TRANSLATOR = PineconeTranslator() + + +def test_visit_comparison() -> None: + comp = Comparison(comparator=Comparator.LT, attribute="foo", value=["1", "2"]) + expected = {"foo": {"$lt": ["1", "2"]}} + actual = DEFAULT_TRANSLATOR.visit_comparison(comp) + assert expected == actual + + +def test_visit_operation() -> None: + op = Operation( + operator=Operator.AND, + arguments=[ + Comparison(comparator=Comparator.LT, attribute="foo", value=2), + Comparison(comparator=Comparator.EQ, attribute="bar", value="baz"), + ], + ) + expected = {"$and": [{"foo": {"$lt": 2}}, {"bar": {"$eq": "baz"}}]} + actual = DEFAULT_TRANSLATOR.visit_operation(op) + assert expected == actual