From 04f412b2e28faec1da603115f8938918cabd2155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=91=E5=B8=83=E6=9E=97?= <11641432+heiheiyouyou@user.noreply.gitee.com> Date: Thu, 30 Oct 2025 19:11:03 +0800 Subject: [PATCH 1/2] fix Searcher input bug --- src/memos/memories/textual/tree.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/memos/memories/textual/tree.py b/src/memos/memories/textual/tree.py index 19bd3ba5b..53628d075 100644 --- a/src/memos/memories/textual/tree.py +++ b/src/memos/memories/textual/tree.py @@ -138,7 +138,6 @@ def get_searcher( self.reranker, internet_retriever=None, moscube=moscube, - search_strategy=self.search_strategy, ) else: searcher = Searcher( @@ -148,7 +147,6 @@ def get_searcher( self.reranker, internet_retriever=self.internet_retriever, moscube=moscube, - search_strategy=self.search_strategy, ) return searcher @@ -197,7 +195,7 @@ def search( bm25_retriever=self.bm25_retriever, internet_retriever=None, moscube=moscube, - vec_cot=self.vec_cot, + search_strategy=self.search_strategy, ) else: searcher = Searcher( @@ -208,7 +206,7 @@ def search( bm25_retriever=self.bm25_retriever, internet_retriever=self.internet_retriever, moscube=moscube, - vec_cot=self.vec_cot, + search_strategy=self.search_strategy, ) return searcher.search(query, top_k, info, mode, memory_type, search_filter) From 55f5835f2894806c70f8a0b7ca4f3fd293c97a07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=91=E5=B8=83=E6=9E=97?= <11641432+heiheiyouyou@user.noreply.gitee.com> Date: Tue, 9 Dec 2025 21:40:56 +0800 Subject: [PATCH 2/2] init component --- src/memos/mem_feedback/feedback.py | 2 +- src/memos/mem_scheduler/base_scheduler.py | 22 ++++++++++++++- .../init_components_for_scheduler.py | 27 ++++++++++++++++--- 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/src/memos/mem_feedback/feedback.py b/src/memos/mem_feedback/feedback.py index b986f7f13..831701b97 100644 --- a/src/memos/mem_feedback/feedback.py +++ b/src/memos/mem_feedback/feedback.py @@ -77,7 +77,7 @@ def __init__(self, config: MemFeedbackConfig): }, is_reorganize=self.is_reorganize, ) - self.searcher: Searcher = self.memory_manager.searcher + self.searcher: Searcher = None self.DB_IDX_READY = False def _batch_embed(self, texts: list[str], embed_bs: int = 5): diff --git a/src/memos/mem_scheduler/base_scheduler.py b/src/memos/mem_scheduler/base_scheduler.py index 64f7474f8..ec542ac2e 100644 --- a/src/memos/mem_scheduler/base_scheduler.py +++ b/src/memos/mem_scheduler/base_scheduler.py @@ -23,6 +23,7 @@ from memos.log import get_logger from memos.mem_cube.base import BaseMemCube from memos.mem_cube.general import GeneralMemCube +from memos.mem_feedback.simple_feedback import SimpleMemFeedback from memos.mem_scheduler.general_modules.init_components_for_scheduler import init_components from memos.mem_scheduler.general_modules.misc import AutoDroppingQueue as Queue from memos.mem_scheduler.general_modules.scheduler_logger import SchedulerLoggerModule @@ -185,12 +186,13 @@ def __init__(self, config: BaseSchedulerConfig): self.auth_config_path: str | Path | None = self.config.get("auth_config_path", None) self.auth_config = None self.rabbitmq_config = None + self.feedback_server = None def init_mem_cube( self, mem_cube: BaseMemCube, searcher: Searcher | None = None, - feedback_server: Searcher | None = None, + feedback_server: SimpleMemFeedback | None = None, ): if mem_cube is None: logger.error("mem_cube is None, cannot initialize", stack_info=True) @@ -291,6 +293,24 @@ def mem_cube(self) -> BaseMemCube: ) return self.current_mem_cube + @property + def feedback_server(self) -> SimpleMemFeedback: + """The memory cube associated with this MemChat.""" + if self._feedback_server is None: + logger.error("feedback_server is None when accessed", stack_info=True) + try: + self.components = init_components() + self._feedback_server: SimpleMemFeedback = self.components["feedback_server"] + except Exception: + logger.info( + "No environment available to initialize feedback_server. Using fallback feedback_server." + ) + return self._feedback_server + + @feedback_server.setter + def feedback_server(self, value: SimpleMemFeedback) -> None: + self._feedback_server = value + @mem_cube.setter def mem_cube(self, value: BaseMemCube) -> None: """The memory cube associated with this MemChat.""" diff --git a/src/memos/mem_scheduler/general_modules/init_components_for_scheduler.py b/src/memos/mem_scheduler/general_modules/init_components_for_scheduler.py index 6addb052a..8da6a2890 100644 --- a/src/memos/mem_scheduler/general_modules/init_components_for_scheduler.py +++ b/src/memos/mem_scheduler/general_modules/init_components_for_scheduler.py @@ -1,7 +1,7 @@ import json import os -from typing import Any +from typing import TYPE_CHECKING, Any from memos.api.config import APIConfig from memos.configs.embedder import EmbedderConfigFactory @@ -16,6 +16,7 @@ from memos.llms.factory import LLMFactory from memos.log import get_logger from memos.mem_cube.navie import NaiveMemCube +from memos.mem_feedback.simple_feedback import SimpleMemFeedback from memos.mem_reader.factory import MemReaderFactory from memos.memories.textual.prefer_text_memory.config import ( AdderConfigFactory, @@ -34,6 +35,10 @@ InternetRetrieverFactory, ) from memos.memories.textual.tree_text_memory.retrieve.retrieve_utils import FastTokenizer + + +if TYPE_CHECKING: + from memos.memories.textual.tree_text_memory.retrieve.searcher import Searcher from memos.reranker.factory import RerankerFactory from memos.vec_dbs.factory import VecDBFactory @@ -385,7 +390,21 @@ def init_components() -> dict[str, Any]: act_mem=None, para_mem=None, ) + + tree_mem: SimpleTreeTextMemory = naive_mem_cube.text_mem + searcher: Searcher = tree_mem.get_searcher( + manual_close_internet=os.getenv("ENABLE_INTERNET", "true").lower() == "false", + moscube=False, + process_llm=mem_reader.llm, + ) + # Initialize feedback server + feedback_server = SimpleMemFeedback( + llm=llm, + embedder=embedder, + graph_store=graph_db, + memory_manager=memory_manager, + mem_reader=mem_reader, + searcher=searcher, + ) # Return all components as a dictionary for easy access and extension - return { - "naive_mem_cube": naive_mem_cube, - } + return {"naive_mem_cube": naive_mem_cube, "feedback_server": feedback_server}