fix: use valid S3 entity index names (#5416)

Co-authored-by: Kartik <kartik.labhshetwar@mem0.ai>
This commit is contained in:
Yufeng He
2026-06-12 21:52:32 +08:00
committed by GitHub
parent f681889b14
commit e3f5ce7b41
3 changed files with 42 additions and 2 deletions
+7 -2
View File
@@ -341,6 +341,11 @@ def _build_session_scope(filters):
return "&".join(parts)
def _entity_collection_name(provider: str, collection_name: str) -> str:
separator = "-" if provider == "s3_vectors" else "_"
return f"{collection_name}{separator}entities"
setup_config()
logger = logging.getLogger(__name__)
@@ -417,7 +422,7 @@ class Memory(MemoryBase):
"""Lazily initialize entity store on first use."""
if self._entity_store is None:
entity_config = _safe_deepcopy_config(self.config.vector_store.config)
entity_collection = f"{self.collection_name}_entities"
entity_collection = _entity_collection_name(self.config.vector_store.provider, self.collection_name)
# Set collection name on the cloned config
if hasattr(entity_config, 'collection_name'):
entity_config.collection_name = entity_collection
@@ -1889,7 +1894,7 @@ class AsyncMemory(MemoryBase):
"""Lazily initialize entity store on first use."""
if self._entity_store is None:
entity_config = _safe_deepcopy_config(self.config.vector_store.config)
entity_collection = f"{self.collection_name}_entities"
entity_collection = _entity_collection_name(self.config.vector_store.provider, self.collection_name)
if hasattr(entity_config, 'collection_name'):
entity_config.collection_name = entity_collection
elif isinstance(entity_config, dict):
+9
View File
@@ -6,6 +6,7 @@ import pytest
from mem0 import Memory
from mem0.configs.base import MemoryConfig
from mem0.memory.main import _entity_collection_name
from mem0.memory.utils import normalize_facts
@@ -37,6 +38,14 @@ def test_create_memory(memory_client):
assert result["results"][0]["memory"] == data
def test_entity_collection_name_uses_dash_for_s3_vectors():
assert _entity_collection_name("s3_vectors", "test-index") == "test-index-entities"
def test_entity_collection_name_keeps_underscore_for_other_stores():
assert _entity_collection_name("qdrant", "mem0") == "mem0_entities"
def test_get_memory(memory_client):
data = "Name is John Doe."
memory_client.add([{"role": "user", "content": data}], user_id="test_user")
+26
View File
@@ -110,6 +110,32 @@ def test_memory_initialization_with_config(mock_boto_client, mock_llm, mock_embe
pytest.fail("Memory initialization failed")
def test_memory_entity_store_uses_s3_valid_index_name(mock_boto_client, mock_llm, mock_embedder):
mock_boto_client.get_vector_bucket.return_value = {}
mock_boto_client.get_index.return_value = {}
config = {
"vector_store": {
"provider": "s3_vectors",
"config": {
"vector_bucket_name": BUCKET_NAME,
"collection_name": INDEX_NAME,
"embedding_model_dims": EMBEDDING_DIMS,
"distance_metric": "cosine",
"region_name": REGION,
},
}
}
memory = Memory.from_config(config)
assert memory.entity_store is not None
index_names = [call.kwargs["indexName"] for call in mock_boto_client.get_index.call_args_list]
assert INDEX_NAME in index_names
assert f"{INDEX_NAME}-entities" in index_names
assert f"{INDEX_NAME}_entities" not in index_names
def test_insert(mock_boto_client):
"""Test inserting vectors."""
store = S3Vectors(