1717from memos .mem_scheduler .schemas .general_schemas import (
1818 ADD_LABEL ,
1919 ANSWER_LABEL ,
20+ MEM_READ_LABEL ,
2021 QUERY_LABEL ,
2122)
2223from memos .mem_scheduler .schemas .message_schemas import ScheduleMessageItem
@@ -70,6 +71,7 @@ def __init__(self, config: MOSConfig, user_manager: UserManager | None = None):
7071 if self .enable_mem_scheduler :
7172 self ._mem_scheduler = self ._initialize_mem_scheduler ()
7273 self ._mem_scheduler .mem_cubes = self .mem_cubes
74+ self ._mem_scheduler .mem_reader = self .mem_reader
7375 else :
7476 self ._mem_scheduler : GeneralScheduler = None
7577
@@ -681,6 +683,12 @@ def add(
681683 logger .info (
682684 f"time add: get mem_cube_id check in mem_cubes time user_id: { target_user_id } time is: { time .time () - time_start_0 } "
683685 )
686+ sync_mode = self .mem_cubes [mem_cube_id ].text_mem .mode
687+ if sync_mode == "async" :
688+ assert self .mem_scheduler is not None , (
689+ "Mem-Scheduler must be working when use asynchronous memory adding."
690+ )
691+ logger .debug (f"Mem-reader mode is: { sync_mode } " )
684692 time_start_1 = time .time ()
685693 if (
686694 (messages is not None )
@@ -690,6 +698,7 @@ def add(
690698 logger .info (
691699 f"time add: messages is not None and enable_textual_memory and text_mem is not None time user_id: { target_user_id } time is: { time .time () - time_start_1 } "
692700 )
701+
693702 if self .mem_cubes [mem_cube_id ].config .text_mem .backend != "tree_text" :
694703 add_memory = []
695704 metadata = TextualMemoryMetadata (
@@ -707,21 +716,30 @@ def add(
707716 messages_list ,
708717 type = "chat" ,
709718 info = {"user_id" : target_user_id , "session_id" : target_session_id },
719+ mode = "fast" if sync_mode == "async" else "fine" ,
710720 )
711721 logger .info (
712722 f"time add: get mem_reader time user_id: { target_user_id } time is: { time .time () - time_start_2 } "
713723 )
714- mem_ids = []
715- for mem in memories :
716- mem_id_list : list [str ] = self .mem_cubes [mem_cube_id ].text_mem .add (mem )
717- mem_ids .extend (mem_id_list )
718- logger .info (
719- f"Added memory user { target_user_id } to memcube { mem_cube_id } : { mem_id_list } "
720- )
721-
724+ memories_flatten = [m for m_list in memories for m in m_list ]
725+ mem_ids : list [str ] = self .mem_cubes [mem_cube_id ].text_mem .add (memories_flatten )
726+ logger .info (
727+ f"Added memory user { target_user_id } to memcube { mem_cube_id } : { mem_ids } "
728+ )
722729 # submit messages for scheduler
723730 if self .enable_mem_scheduler and self .mem_scheduler is not None :
724731 mem_cube = self .mem_cubes [mem_cube_id ]
732+ if sync_mode == "async" :
733+ message_item = ScheduleMessageItem (
734+ user_id = target_user_id ,
735+ mem_cube_id = mem_cube_id ,
736+ mem_cube = mem_cube ,
737+ label = MEM_READ_LABEL ,
738+ content = json .dumps (mem_ids ),
739+ timestamp = datetime .utcnow (),
740+ )
741+ self .mem_scheduler .submit_messages (messages = [message_item ])
742+
725743 message_item = ScheduleMessageItem (
726744 user_id = target_user_id ,
727745 mem_cube_id = mem_cube_id ,
@@ -749,10 +767,12 @@ def add(
749767 messages_list = [
750768 [{"role" : "user" , "content" : memory_content }]
751769 ] # for only user-str input and convert message
770+
752771 memories = self .mem_reader .get_memory (
753772 messages_list ,
754773 type = "chat" ,
755774 info = {"user_id" : target_user_id , "session_id" : target_session_id },
775+ mode = "fast" if sync_mode == "async" else "fine" ,
756776 )
757777
758778 mem_ids = []
@@ -766,6 +786,16 @@ def add(
766786 # submit messages for scheduler
767787 if self .enable_mem_scheduler and self .mem_scheduler is not None :
768788 mem_cube = self .mem_cubes [mem_cube_id ]
789+ if sync_mode == "async" :
790+ message_item = ScheduleMessageItem (
791+ user_id = target_user_id ,
792+ mem_cube_id = mem_cube_id ,
793+ mem_cube = mem_cube ,
794+ label = MEM_READ_LABEL ,
795+ content = json .dumps (mem_ids ),
796+ timestamp = datetime .utcnow (),
797+ )
798+ self .mem_scheduler .submit_messages (messages = [message_item ])
769799 message_item = ScheduleMessageItem (
770800 user_id = target_user_id ,
771801 mem_cube_id = mem_cube_id ,
0 commit comments