@@ -367,7 +367,8 @@ def _add_message_consumer(self, messages: list[ScheduleMessageItem]) -> None:
367367 if kb_log_content :
368368 event = self .create_event_log (
369369 label = "knowledgeBaseUpdate" ,
370- log_content = f"Knowledge Base Memory Update: { len (kb_log_content )} changes." ,
370+ from_memory_type = USER_INPUT_TYPE ,
371+ to_memory_type = LONG_TERM_MEMORY_TYPE ,
371372 user_id = msg .user_id ,
372373 mem_cube_id = msg .mem_cube_id ,
373374 mem_cube = self .current_mem_cube ,
@@ -376,6 +377,9 @@ def _add_message_consumer(self, messages: list[ScheduleMessageItem]) -> None:
376377 memory_len = len (kb_log_content ),
377378 memcube_name = self ._map_memcube_name (msg .mem_cube_id ),
378379 )
380+ event .log_content = (
381+ f"Knowledge Base Memory Update: { len (kb_log_content )} changes."
382+ )
379383 event .task_id = msg .task_id
380384 self ._submit_web_logs ([event ])
381385 else :
@@ -504,6 +508,8 @@ def process_message(message: ScheduleMessageItem):
504508 text_mem = text_mem ,
505509 user_name = user_name ,
506510 custom_tags = info .get ("custom_tags" , None ),
511+ task_id = message .task_id ,
512+ info = info ,
507513 )
508514
509515 logger .info (
@@ -529,6 +535,8 @@ def _process_memories_with_reader(
529535 text_mem : TreeTextMemory ,
530536 user_name : str ,
531537 custom_tags : list [str ] | None = None ,
538+ task_id : str | None = None ,
539+ info : dict | None = None ,
532540 ) -> None :
533541 """
534542 Process memories using mem_reader for enhanced memory processing.
@@ -540,6 +548,7 @@ def _process_memories_with_reader(
540548 text_mem: Text memory instance
541549 custom_tags: Optional list of custom tags for memory processing
542550 """
551+ kb_log_content : list [dict ] = []
543552 try :
544553 # Get the mem_reader from the parent MOSCore
545554 if not hasattr (self , "mem_reader" ) or self .mem_reader is None :
@@ -602,6 +611,90 @@ def _process_memories_with_reader(
602611 logger .info (
603612 f"Added { len (enhanced_mem_ids )} enhanced memories: { enhanced_mem_ids } "
604613 )
614+
615+ # LOGGING BLOCK START
616+ # This block is replicated from _add_message_consumer to ensure consistent logging
617+ is_cloud_env = (
618+ os .getenv ("MEMSCHEDULER_RABBITMQ_EXCHANGE_NAME" ) == "memos-memory-change"
619+ )
620+ if is_cloud_env :
621+ # New: Knowledge Base Logging (Cloud Service)
622+ kb_log_content = []
623+ for item in flattened_memories :
624+ kb_log_content .append (
625+ {
626+ "log_source" : "KNOWLEDGE_BASE_LOG" ,
627+ "trigger_source" : info .get ("trigger_source" , "Messages" )
628+ if info
629+ else "Messages" ,
630+ "operation" : "ADD" ,
631+ "memory_id" : item .id ,
632+ "content" : item .memory ,
633+ "original_content" : None ,
634+ "source_doc_id" : getattr (item .metadata , "source_doc_id" , None ),
635+ }
636+ )
637+ if kb_log_content :
638+ event = self .create_event_log (
639+ label = "knowledgeBaseUpdate" ,
640+ from_memory_type = USER_INPUT_TYPE ,
641+ to_memory_type = LONG_TERM_MEMORY_TYPE ,
642+ user_id = user_id ,
643+ mem_cube_id = mem_cube_id ,
644+ mem_cube = self .current_mem_cube ,
645+ memcube_log_content = kb_log_content ,
646+ metadata = None ,
647+ memory_len = len (kb_log_content ),
648+ memcube_name = self ._map_memcube_name (mem_cube_id ),
649+ )
650+ event .log_content = (
651+ f"Knowledge Base Memory Update: { len (kb_log_content )} changes."
652+ )
653+ event .task_id = task_id
654+ self ._submit_web_logs ([event ])
655+ else :
656+ # Existing: Playground/Default Logging
657+ add_content_legacy : list [dict ] = []
658+ add_meta_legacy : list [dict ] = []
659+ for item_id , item in zip (
660+ enhanced_mem_ids , flattened_memories , strict = False
661+ ):
662+ key = getattr (item .metadata , "key" , None ) or transform_name_to_key (
663+ name = item .memory
664+ )
665+ add_content_legacy .append (
666+ {"content" : f"{ key } : { item .memory } " , "ref_id" : item_id }
667+ )
668+ add_meta_legacy .append (
669+ {
670+ "ref_id" : item_id ,
671+ "id" : item_id ,
672+ "key" : item .metadata .key ,
673+ "memory" : item .memory ,
674+ "memory_type" : item .metadata .memory_type ,
675+ "status" : item .metadata .status ,
676+ "confidence" : item .metadata .confidence ,
677+ "tags" : item .metadata .tags ,
678+ "updated_at" : getattr (item .metadata , "updated_at" , None )
679+ or getattr (item .metadata , "update_at" , None ),
680+ }
681+ )
682+ if add_content_legacy :
683+ event = self .create_event_log (
684+ label = "addMemory" ,
685+ from_memory_type = USER_INPUT_TYPE ,
686+ to_memory_type = LONG_TERM_MEMORY_TYPE ,
687+ user_id = user_id ,
688+ mem_cube_id = mem_cube_id ,
689+ mem_cube = self .current_mem_cube ,
690+ memcube_log_content = add_content_legacy ,
691+ metadata = add_meta_legacy ,
692+ memory_len = len (add_content_legacy ),
693+ memcube_name = self ._map_memcube_name (mem_cube_id ),
694+ )
695+ event .task_id = task_id
696+ self ._submit_web_logs ([event ])
697+ # LOGGING BLOCK END
605698 else :
606699 logger .info ("No enhanced memories generated by mem_reader" )
607700 else :
@@ -630,10 +723,47 @@ def _process_memories_with_reader(
630723 logger .info ("Remove and Refresh Memories" )
631724 logger .debug (f"Finished add { user_id } memory: { mem_ids } " )
632725
633- except Exception :
726+ except Exception as exc :
634727 logger .error (
635728 f"Error in _process_memories_with_reader: { traceback .format_exc ()} " , exc_info = True
636729 )
730+ with contextlib .suppress (Exception ):
731+ is_cloud_env = (
732+ os .getenv ("MEMSCHEDULER_RABBITMQ_EXCHANGE_NAME" ) == "memos-memory-change"
733+ )
734+ if is_cloud_env :
735+ if not kb_log_content :
736+ trigger_source = (
737+ info .get ("trigger_source" , "Messages" ) if info else "Messages"
738+ )
739+ kb_log_content = [
740+ {
741+ "log_source" : "KNOWLEDGE_BASE_LOG" ,
742+ "trigger_source" : trigger_source ,
743+ "operation" : "ADD" ,
744+ "memory_id" : mem_id ,
745+ "content" : None ,
746+ "original_content" : None ,
747+ "source_doc_id" : None ,
748+ }
749+ for mem_id in mem_ids
750+ ]
751+ event = self .create_event_log (
752+ label = "knowledgeBaseUpdate" ,
753+ from_memory_type = USER_INPUT_TYPE ,
754+ to_memory_type = LONG_TERM_MEMORY_TYPE ,
755+ user_id = user_id ,
756+ mem_cube_id = mem_cube_id ,
757+ mem_cube = self .current_mem_cube ,
758+ memcube_log_content = kb_log_content ,
759+ metadata = None ,
760+ memory_len = len (kb_log_content ),
761+ memcube_name = self ._map_memcube_name (mem_cube_id ),
762+ )
763+ event .log_content = f"Knowledge Base Memory Update failed: { exc !s} "
764+ event .task_id = task_id
765+ event .status = "failed"
766+ self ._submit_web_logs ([event ])
637767
638768 def _mem_reorganize_message_consumer (self , messages : list [ScheduleMessageItem ]) -> None :
639769 logger .info (f"Messages { messages } assigned to { MEM_ORGANIZE_LABEL } handler." )
0 commit comments