From 716f021df845d18330b832d18a9454ffbb1c415a Mon Sep 17 00:00:00 2001 From: Hrushikesh Yadav <136978914+HrushiYadav@users.noreply.github.com> Date: Tue, 23 Jun 2026 16:38:28 +0530 Subject: [PATCH] fix(pinecone): map all comparison operators in _create_filter() (#5707) --- mem0/vector_stores/pinecone.py | 22 ++++++++++++++++++++-- tests/vector_stores/test_pinecone.py | 25 +++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/mem0/vector_stores/pinecone.py b/mem0/vector_stores/pinecone.py index 733db6ca8..8c6ded7d7 100644 --- a/mem0/vector_stores/pinecone.py +++ b/mem0/vector_stores/pinecone.py @@ -186,6 +186,17 @@ class PineconeDB(VectorStoreBase): return result + OPERATOR_MAP = { + "eq": "$eq", + "ne": "$ne", + "gt": "$gt", + "gte": "$gte", + "lt": "$lt", + "lte": "$lte", + "in": "$in", + "nin": "$nin", + } + def _create_filter(self, filters: Optional[Dict]) -> Dict: """ Create a filter dictionary from the provided filters. @@ -196,8 +207,15 @@ class PineconeDB(VectorStoreBase): pinecone_filter = {} for key, value in filters.items(): - if isinstance(value, dict) and "gte" in value and "lte" in value: - pinecone_filter[key] = {"$gte": value["gte"], "$lte": value["lte"]} + if isinstance(value, dict): + condition = {} + for op, operand in value.items(): + pc_op = self.OPERATOR_MAP.get(op) + if pc_op: + condition[pc_op] = operand + else: + condition[f"${op}"] = operand + pinecone_filter[key] = condition else: pinecone_filter[key] = {"$eq": value} diff --git a/tests/vector_stores/test_pinecone.py b/tests/vector_stores/test_pinecone.py index 06980fe82..1591bf098 100644 --- a/tests/vector_stores/test_pinecone.py +++ b/tests/vector_stores/test_pinecone.py @@ -196,3 +196,28 @@ def test_list_error_returns_list_not_dict(pinecone_db): result = pinecone_db.list(filters={"user_id": "alice"}, top_k=10) assert isinstance(result, list) assert result == [[]] + + +def test_create_filter_plain_value(pinecone_db): + result = pinecone_db._create_filter({"user_id": "alice"}) + assert result == {"user_id": {"$eq": "alice"}} + + +def test_create_filter_range(pinecone_db): + result = pinecone_db._create_filter({"age": {"gte": 18, "lte": 65}}) + assert result == {"age": {"$gte": 18, "$lte": 65}} + + +def test_create_filter_gt_operator(pinecone_db): + result = pinecone_db._create_filter({"score": {"gt": 0.5}}) + assert result == {"score": {"$gt": 0.5}} + + +def test_create_filter_in_operator(pinecone_db): + result = pinecone_db._create_filter({"status": {"in": ["active", "pending"]}}) + assert result == {"status": {"$in": ["active", "pending"]}} + + +def test_create_filter_ne_operator(pinecone_db): + result = pinecone_db._create_filter({"status": {"ne": "deleted"}}) + assert result == {"status": {"$ne": "deleted"}}