From ac0fc6f01bba9cdabb9de4569f3c8bec9736bb18 Mon Sep 17 00:00:00 2001
From: CinematicDev <victoranyirah@gmail.com>
Date: Fri, 19 Jan 2024 10:23:53 -0800
Subject: [PATCH] Update supabase vecs metadata filter function to support
 multiple fields (#10133)

* Update vectors to filter to use updated vecs query language for multi-field query searches

* Initial commit

* cr

---------

Co-authored-by: Haotian Zhang <socool.king@gmail.com>
---
 llama_index/vector_stores/supabase.py | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/llama_index/vector_stores/supabase.py b/llama_index/vector_stores/supabase.py
index 24ccf369e6..340c14b553 100644
--- a/llama_index/vector_stores/supabase.py
+++ b/llama_index/vector_stores/supabase.py
@@ -1,5 +1,6 @@
 import logging
 import math
+from collections import defaultdict
 from typing import Any, List
 
 from llama_index.constants import DEFAULT_EMBEDDING_DIM
@@ -74,9 +75,13 @@ class SupabaseVectorStore(VectorStore):
 
     def _to_vecs_filters(self, filters: MetadataFilters) -> Any:
         """Convert llama filters to vecs filters. $eq is the only supported operator."""
-        vecs_filter = {}
+        vecs_filter = defaultdict(list)
+        filter_cond = f"${filters.condition}"
+
         for f in filters.legacy_filters():
-            vecs_filter[f.key] = {"$eq": f.value}
+            sub_filter = {}
+            sub_filter[f.key] = {"$eq": f.value}
+            vecs_filter[filter_cond].append(sub_filter)
         return vecs_filter
 
     def add(self, nodes: List[BaseNode], **add_kwargs: Any) -> List[str]:
-- 
GitLab