fix(vector-stores): Supabase 1000-row cap, RLS init probe, and col_info crash (#6695)

This commit is contained in:
Kartik
2026-07-31 20:36:41 +05:30
committed by GitHub
parent 8d45fb3c9a
commit 29fa41558c
5 changed files with 277 additions and 93 deletions
+55 -8
View File
@@ -1,9 +1,10 @@
from unittest.mock import Mock, patch
import logging
from unittest.mock import MagicMock, Mock, patch
import pytest
from mem0.configs.vector_stores.supabase import IndexMeasure, IndexMethod
from mem0.vector_stores.supabase import Supabase
from mem0.vector_stores.supabase import VECS_MAX_QUERY_LIMIT, Supabase
@pytest.fixture
@@ -14,13 +15,12 @@ def mock_vecs_client():
@pytest.fixture
def mock_collection():
collection = Mock()
collection = MagicMock()
collection.name = "test_collection"
collection.vectors = 100
collection.dimension = 1536
collection.index_method = "hnsw"
collection.distance_metric = "cosine_distance"
collection.describe.return_value = collection
collection.index = "ix_vector_cosine_ops_hnsw_m16_efc64_abc1234"
collection.is_indexed_for_measure.return_value = True
collection.__len__.return_value = 100
return collection
@@ -141,10 +141,57 @@ def test_col_info(supabase_instance, mock_collection):
"name": "test_collection",
"count": 100,
"dimension": 1536,
"index": {"method": "hnsw", "metric": "cosine_distance"},
"index": {
"name": "ix_vector_cosine_ops_hnsw_m16_efc64_abc1234",
"measure": "cosine_distance",
"is_indexed": True,
},
}
def test_search_clamps_top_k_to_vecs_limit(supabase_instance, mock_collection, caplog):
mock_collection.query.return_value = []
with caplog.at_level(logging.WARNING, logger="mem0.vector_stores.supabase"):
supabase_instance.search(query="", vectors=[[0.1, 0.2, 0.3]], top_k=5000)
mock_collection.query.assert_called_once_with(
data=[[0.1, 0.2, 0.3]], limit=VECS_MAX_QUERY_LIMIT, filters=None, include_metadata=True, include_value=True
)
assert "5000" in caplog.text
assert str(VECS_MAX_QUERY_LIMIT) in caplog.text
def test_search_does_not_clamp_top_k_within_limit(supabase_instance, mock_collection):
mock_collection.query.return_value = []
supabase_instance.search(query="", vectors=[[0.1, 0.2, 0.3]], top_k=5)
mock_collection.query.assert_called_once_with(
data=[[0.1, 0.2, 0.3]], limit=5, filters=None, include_metadata=True, include_value=True
)
def test_list_clamps_top_k_to_vecs_limit(supabase_instance, mock_collection, caplog):
mock_collection.query.return_value = []
mock_collection.fetch.return_value = []
with caplog.at_level(logging.WARNING, logger="mem0.vector_stores.supabase"):
supabase_instance.list(top_k=5000)
_, kwargs = mock_collection.query.call_args
assert kwargs["limit"] == VECS_MAX_QUERY_LIMIT
assert "5000" in caplog.text
assert str(VECS_MAX_QUERY_LIMIT) in caplog.text
def test_col_info_does_not_raise(supabase_instance):
info = supabase_instance.col_info()
assert isinstance(info, dict)
assert info["name"] == "test_collection"
def test_preprocess_filters(supabase_instance):
# Test single filter
single_filter = {"category": "test"}