diff --git a/src/memos/mem_reader/read_multi_model/utils.py b/src/memos/mem_reader/read_multi_model/utils.py index e42a564e4..c14710650 100644 --- a/src/memos/mem_reader/read_multi_model/utils.py +++ b/src/memos/mem_reader/read_multi_model/utils.py @@ -67,7 +67,7 @@ def _is_message_list(obj): return True -def coerce_scene_data(scene_data, scene_type: str) -> list[MessagesType]: +def coerce_scene_data(scene_data: SceneDataInput, scene_type: str) -> list[MessagesType]: """ Normalize ANY allowed SceneDataInput into: list[MessagesType]. Supports: diff --git a/src/memos/memories/textual/prefer_text_memory/extractor.py b/src/memos/memories/textual/prefer_text_memory/extractor.py index d5eab2aec..72daa31cd 100644 --- a/src/memos/memories/textual/prefer_text_memory/extractor.py +++ b/src/memos/memories/textual/prefer_text_memory/extractor.py @@ -113,7 +113,11 @@ def _process_single_chunk_explicit( vector_info = { "embedding": self.embedder.embed([pref["context_summary"]])[0], } - extract_info = {**basic_info, **pref, **vector_info, **info} + + inner_keys = set(PreferenceTextualMemoryMetadata.model_fields.keys()) + inner_info = {k: v for k, v in info.items() if k in inner_keys} + user_info = {k: v for k, v in info.items() if k not in inner_keys} + extract_info = {**basic_info, **pref, **vector_info, **inner_info, "info": user_info} metadata = PreferenceTextualMemoryMetadata( type=msg_type, preference_type="explicit_preference", **extract_info @@ -140,7 +144,16 @@ def _process_single_chunk_implicit( "embedding": self.embedder.embed([implicit_pref["context_summary"]])[0], } - extract_info = {**basic_info, **implicit_pref, **vector_info, **info} + inner_keys = set(PreferenceTextualMemoryMetadata.model_fields.keys()) + inner_info = {k: v for k, v in info.items() if k in inner_keys} + user_info = {k: v for k, v in info.items() if k not in inner_keys} + extract_info = { + **basic_info, + **implicit_pref, + **vector_info, + **inner_info, + "info": user_info, + } metadata = PreferenceTextualMemoryMetadata( type=msg_type, preference_type="implicit_preference", **extract_info diff --git a/src/memos/multi_mem_cube/single_cube.py b/src/memos/multi_mem_cube/single_cube.py index 2b79a416c..0e95ec5fa 100644 --- a/src/memos/multi_mem_cube/single_cube.py +++ b/src/memos/multi_mem_cube/single_cube.py @@ -496,6 +496,7 @@ def _process_pref_mem( label=PREF_ADD_LABEL, content=json.dumps(messages_list), timestamp=datetime.utcnow(), + info=add_req.info, ) self.mem_scheduler.memos_message_queue.submit_messages(messages=[message_item_pref]) self.logger.info(f"[SingleCubeView] cube={self.cube_id} Submitted PREF_ADD async")