Skip to content

Commit 5be059a

Browse files
authored
Merge pull request #49 from moonpyt/feature/1121
modify mem0
2 parents 7985011 + 074fdc5 commit 5be059a

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

spoon_toolkits/memory/mem0_tools.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -189,34 +189,53 @@ class UpdateMemoryTool(Mem0ToolBase):
189189
"properties": {
190190
"memory_id": {"type": "string"},
191191
"text": {"type": "string"},
192-
"metadata": {"type": "object"}
192+
"metadata": {"type": "object"},
193+
"user_id": {"type": "string"}
193194
},
194195
"required": ["memory_id"]
195196
}
196197

197-
async def execute(self, memory_id: str, text: str = None, metadata: dict = None) -> ToolResult:
198+
async def execute(self, memory_id: str, text: str = None, metadata: dict = None, **kwargs) -> ToolResult:
198199
if not text and not metadata:
199200
return ToolResult(error="Provide text or metadata to update.")
200201

201202
client = self._get_client()
202203
if not client: return ToolResult(error="Client not ready")
203204

204-
return await self._safe_run(client.update, memory_id=memory_id, text=text, metadata=metadata)
205+
# Build params but exclude metadata to avoid conflict with explicit parameter
206+
params = self._build_params(metadata=None, **kwargs)
207+
# Merge explicit metadata with params metadata if both exist
208+
if metadata:
209+
if "metadata" in params:
210+
params["metadata"] = {**params["metadata"], **metadata}
211+
else:
212+
params["metadata"] = metadata
213+
214+
# MemoryClient.update() only accepts memory_id, text, metadata
215+
# Remove unsupported parameters like user_id, collection, filters
216+
update_params = {k: v for k, v in params.items() if k in ("metadata",)}
217+
218+
return await self._safe_run(client.update, memory_id=memory_id, text=text, **update_params)
205219

206220

207221
class DeleteMemoryTool(Mem0ToolBase):
208222
name: str = "delete_memory"
209223
description: str = "Delete a stored memory by ID."
210224
parameters: dict = {
211225
"type": "object",
212-
"properties": {"memory_id": {"type": "string"}},
226+
"properties": {
227+
"memory_id": {"type": "string"},
228+
"user_id": {"type": "string"}
229+
},
213230
"required": ["memory_id"]
214231
}
215232

216-
async def execute(self, memory_id: str) -> ToolResult:
233+
async def execute(self, memory_id: str, **kwargs) -> ToolResult:
217234
client = self._get_client()
218235
if not client: return ToolResult(error="Client not ready")
219236

237+
# MemoryClient.delete() only accepts memory_id, not user_id or other params
238+
# So we don't pass any additional params to delete()
220239
return await self._safe_run(client.delete, memory_id=memory_id)
221240

222241
__all__ = [

0 commit comments

Comments
 (0)