From 66446bd118fa9388daf2c47a5ceca41ca2dd05f5 Mon Sep 17 00:00:00 2001 From: Soumil Rathi Date: Mon, 13 Apr 2026 11:50:56 -0700 Subject: [PATCH] =?UTF-8?q?fix:=20address=20reviewer=20bugs=20=E2=80=94=20?= =?UTF-8?q?metadata=20mutation,=20test=20args,=20embedding=20dict,=20outpu?= =?UTF-8?q?t=5Fformat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Fix _create_procedural_memory metadata mutation: use spread operator instead of in-place dict assignment (sync + async) 2. Fix test_add assertion: remove trailing None arg that doesn't match _add_to_vector_store(messages, metadata, filters, infer) signature 3. Restore output_format: "v1.1" in TS client search payload as fallback 4. Fix infer=False path: pass {text: embedding} dict to _create_memory instead of raw embedding list to avoid redundant embed() calls (sync + async) Co-Authored-By: Claude Opus 4.6 (1M context) --- mem0-ts/src/client/mem0.ts | 1 + mem0/memory/main.py | 8 ++++---- tests/test_main.py | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/mem0-ts/src/client/mem0.ts b/mem0-ts/src/client/mem0.ts index 0efbd9748..33032c234 100644 --- a/mem0-ts/src/client/mem0.ts +++ b/mem0-ts/src/client/mem0.ts @@ -286,6 +286,7 @@ export default class MemoryClient { this._captureEvent("search", [payloadKeys]); const payload: Record = { query, + output_format: "v1.1", ...camelToSnakeKeys(options ?? {}), }; diff --git a/mem0/memory/main.py b/mem0/memory/main.py index 04245c570..b4407fabf 100644 --- a/mem0/memory/main.py +++ b/mem0/memory/main.py @@ -517,7 +517,7 @@ class Memory(MemoryBase): msg_content = message_dict["content"] msg_embeddings = self.embedding_model.embed(msg_content, "add") - mem_id = self._create_memory(msg_content, msg_embeddings, per_msg_meta) + mem_id = self._create_memory(msg_content, {msg_content: msg_embeddings}, per_msg_meta) returned_memories.append( { @@ -1434,7 +1434,7 @@ class Memory(MemoryBase): if metadata is None: raise ValueError("Metadata cannot be done for procedural memory.") - metadata["memory_type"] = MemoryType.PROCEDURAL.value + metadata = {**metadata, "memory_type": MemoryType.PROCEDURAL.value} embeddings = self.embedding_model.embed(procedural_memory, memory_action="add") memory_id = self._create_memory(procedural_memory, {procedural_memory: embeddings}, metadata=metadata) capture_event("mem0._create_procedural_memory", self, {"memory_id": memory_id, "sync_type": "sync"}) @@ -1756,7 +1756,7 @@ class AsyncMemory(MemoryBase): msg_content = message_dict["content"] msg_embeddings = await asyncio.to_thread(self.embedding_model.embed, msg_content, "add") - mem_id = await self._create_memory(msg_content, msg_embeddings, per_msg_meta) + mem_id = await self._create_memory(msg_content, {msg_content: msg_embeddings}, per_msg_meta) returned_memories.append( { @@ -2688,7 +2688,7 @@ class AsyncMemory(MemoryBase): if metadata is None: raise ValueError("Metadata cannot be done for procedural memory.") - metadata["memory_type"] = MemoryType.PROCEDURAL.value + metadata = {**metadata, "memory_type": MemoryType.PROCEDURAL.value} embeddings = await asyncio.to_thread(self.embedding_model.embed, procedural_memory, memory_action="add") memory_id = await self._create_memory(procedural_memory, {procedural_memory: embeddings}, metadata=metadata) capture_event("mem0._create_procedural_memory", self, {"memory_id": memory_id, "sync_type": "async"}) diff --git a/tests/test_main.py b/tests/test_main.py index a8a61bdff..ff4a97b2e 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -86,7 +86,7 @@ def test_add(memory_instance, version, enable_graph): assert result["results"] == [{"memory": "Test memory", "event": "ADD"}] memory_instance._add_to_vector_store.assert_called_once_with( - [{"role": "user", "content": "Test message"}], {"user_id": "test_user"}, {"user_id": "test_user"}, True, None + [{"role": "user", "content": "Test message"}], {"user_id": "test_user"}, {"user_id": "test_user"}, True ) # Remove the conditional assertion for _add_to_graph