@@ -235,8 +235,14 @@ async def _prepare_memory(self):
235235 assert _memory .name in memory_mapping , (
236236 f'{ _memory .name } not in memory_mapping, '
237237 f'which supports: { list (memory_mapping .keys ())} ' )
238- self .memory_tools .append (memory_mapping [_memory .name ](
239- self .config ))
238+ if _memory .name == 'mem0' :
239+ from .memory .mem0ai import SharedMemoryManager
240+ shared_memory = SharedMemoryManager .get_shared_memory (
241+ _memory )
242+ self .memory_tools .append (shared_memory )
243+ else :
244+ self .memory_tools .append (
245+ memory_mapping [_memory .name ](_memory ))
240246
241247 async def _prepare_planer (self ):
242248 """Load and initialize the planer component from the config."""
@@ -446,7 +452,21 @@ def _save_history(self, messages: List[Message], **kwargs):
446452 messages (List[Message]): Current message history to save.
447453 """
448454 query = messages [1 ].content
449- if not query or not self .task or self .task == 'subtask' :
455+ if not query :
456+ return
457+
458+ if self .memory_tools :
459+ user_id = None
460+ if hasattr (self .config , 'memory' ) and self .config .memory :
461+ for memory_config in self .config .memory :
462+ if hasattr (memory_config ,
463+ 'user_id' ) and memory_config .user_id :
464+ user_id = memory_config .user_id
465+ break
466+ for memory_tool in self .memory_tools :
467+ memory_tool ._add_memories_from_conversation (messages , user_id )
468+
469+ if not self .task or self .task == 'subtask' :
450470 return
451471 config : DictConfig = deepcopy (self .config ) # noqa
452472 config .runtime = self .runtime .to_dict ()
@@ -456,6 +476,21 @@ def _save_history(self, messages: List[Message], **kwargs):
456476 config = config ,
457477 messages = messages )
458478
479+ def _save_memory (self , messages : List [Message ], ** kwargs ):
480+ """
481+ Save memories to disk for future resuming.
482+
483+ Args:
484+ messages (List[Message]): Current message history to save.
485+ """
486+
487+ if self .memory_tools :
488+ agent_id = self .tag
489+ for memory_tool in self .memory_tools :
490+ memory_tool ._add_memories_from_procedural (
491+ messages , 'subagent' , agent_id , 'procedural_memory' )
492+ return
493+
459494 async def _run (self , messages : Union [List [Message ], str ],
460495 ** kwargs ) -> AsyncGenerator [Any , Any ]:
461496 """Run the agent, mainly contains a llm calling and tool calling loop.
@@ -512,6 +547,9 @@ async def _run(self, messages: Union[List[Message], str],
512547 # save history
513548 self ._save_history (messages , ** kwargs )
514549
550+ # save memory
551+ self ._save_memory (messages , ** kwargs )
552+
515553 await self ._loop_callback ('on_task_end' , messages )
516554 await self ._cleanup_tools ()
517555 yield messages
0 commit comments