diff --git a/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py b/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py index f3d6ba03..7e28c174 100644 --- a/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py +++ b/src/memos/memories/textual/tree_text_memory/retrieve/searcher.py @@ -674,6 +674,8 @@ def _retrieve_simple( ) logger.info(f"[SIMPLESEARCH] Items count: {len(items)}") documents = [getattr(item, "memory", "") for item in items] + if not documents: + return [] documents_embeddings = self.embedder.embed(documents) similarity_matrix = cosine_similarity_matrix(documents_embeddings) selected_indices, _ = find_best_unrelated_subgroup(documents, similarity_matrix) diff --git a/src/memos/multi_mem_cube/composite_cube.py b/src/memos/multi_mem_cube/composite_cube.py index 42085640..c1017bfa 100644 --- a/src/memos/multi_mem_cube/composite_cube.py +++ b/src/memos/multi_mem_cube/composite_cube.py @@ -1,9 +1,10 @@ from __future__ import annotations -from concurrent.futures import ThreadPoolExecutor, as_completed +from concurrent.futures import as_completed from dataclasses import dataclass from typing import TYPE_CHECKING, Any +from memos.context.context import ContextThreadPoolExecutor from memos.multi_mem_cube.views import MemCubeView @@ -52,7 +53,7 @@ def _search_single_cube(view: SingleCubeView) -> dict[str, Any]: return view.search_memories(search_req) # parallel search for each cube - with ThreadPoolExecutor(max_workers=2) as executor: + with ContextThreadPoolExecutor(max_workers=2) as executor: future_to_view = { executor.submit(_search_single_cube, view): view for view in self.cube_views }