diff --git a/src/memos/api/handlers/memory_handler.py b/src/memos/api/handlers/memory_handler.py index 689e2b16b..f0f3f39b9 100644 --- a/src/memos/api/handlers/memory_handler.py +++ b/src/memos/api/handlers/memory_handler.py @@ -15,6 +15,7 @@ MemoryResponse, ) from memos.log import get_logger +from memos.mem_cube.navie import NaiveMemCube from memos.mem_os.utils.format_utils import ( convert_graph_to_tree_forworkmem, ensure_unique_tree_ids, @@ -162,11 +163,13 @@ def handle_get_subgraph( raise -def handle_get_memories(get_mem_req: GetMemoryRequest, naive_mem_cube: Any) -> GetMemoryResponse: +def handle_get_memories( + get_mem_req: GetMemoryRequest, naive_mem_cube: NaiveMemCube +) -> GetMemoryResponse: # TODO: Implement get memory with filter memories = naive_mem_cube.text_mem.get_all(user_name=get_mem_req.mem_cube_id)["nodes"] preferences: list[TextualMemoryItem] = [] - if get_mem_req.include_preference: + if get_mem_req.include_preference and naive_mem_cube.pref_mem is not None: filter_params: dict[str, Any] = {} if get_mem_req.user_id is not None: filter_params["user_id"] = get_mem_req.user_id @@ -183,10 +186,11 @@ def handle_get_memories(get_mem_req: GetMemoryRequest, naive_mem_cube: Any) -> G ) -def handle_delete_memories(delete_mem_req: DeleteMemoryRequest, naive_mem_cube: Any): +def handle_delete_memories(delete_mem_req: DeleteMemoryRequest, naive_mem_cube: NaiveMemCube): try: naive_mem_cube.text_mem.delete(delete_mem_req.memory_ids) - naive_mem_cube.pref_mem.delete(delete_mem_req.memory_ids) + if naive_mem_cube.pref_mem is not None: + naive_mem_cube.pref_mem.delete(delete_mem_req.memory_ids) except Exception as e: logger.error(f"Failed to delete memories: {e}", exc_info=True) return DeleteMemoryResponse( diff --git a/src/memos/memories/textual/prefer_text_memory/extractor.py b/src/memos/memories/textual/prefer_text_memory/extractor.py index 72daa31cd..f23135754 100644 --- a/src/memos/memories/textual/prefer_text_memory/extractor.py +++ b/src/memos/memories/textual/prefer_text_memory/extractor.py @@ -114,10 +114,7 @@ def _process_single_chunk_explicit( "embedding": self.embedder.embed([pref["context_summary"]])[0], } - 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} + extract_info = {**basic_info, **pref, **vector_info, **info} metadata = PreferenceTextualMemoryMetadata( type=msg_type, preference_type="explicit_preference", **extract_info @@ -144,16 +141,7 @@ def _process_single_chunk_implicit( "embedding": self.embedder.embed([implicit_pref["context_summary"]])[0], } - 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, - } + extract_info = {**basic_info, **implicit_pref, **vector_info, **info} metadata = PreferenceTextualMemoryMetadata( type=msg_type, preference_type="implicit_preference", **extract_info