refactor(memory): update memory registration and configuration handling

This commit is contained in:
jinli.yl 2026-01-29 14:18:53 +08:00
parent f00dd9be1b
commit 6e72bcac2e
6 changed files with 54 additions and 29 deletions

11
docs/REME2_README.md Normal file
View file

@ -0,0 +1,11 @@
# TODO
- [] halumem bench开发
- [] default版本开发for cli版本体验
- [] cli开发
- [] locomo bench开发
- [] task memory迁移
- [] mcp开发
- [] reme外层接口完善
- [] reme2 readme完善

View file

@ -67,8 +67,14 @@ reme_ai = [
"**/*.json",
]
reme = [
"**/*.yaml",
"**/*.py",
"**/*.json",
]
[tool.setuptools.dynamic]
version = { attr = "reme_ai.__version__" }
version = { attr = "reme.__version__" }
[project.urls]
Homepage = "https://github.com/agentscope-ai/ReMe"
@ -77,5 +83,6 @@ Repository = "https://github.com/agentscope-ai/ReMe"
[project.scripts]
reme = "reme_ai.main:main"
reme2 = "reme.reme:main"
# python -m build && twine upload dist/*

View file

@ -28,5 +28,10 @@ __all__ = [
]
for name in __all__:
tool_class = globals()[name]
R.op.register()(tool_class)
agent_class = globals()[name]
if (
isinstance(agent_class, type)
and issubclass(agent_class, BaseMemoryAgent)
and agent_class is not BaseMemoryAgent
):
R.op.register()(agent_class)

View file

@ -106,4 +106,7 @@ class Application:
def run_service(self):
"""Run the configured service (HTTP, MCP, or CMD)."""
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
self.service_context.service.run()

View file

@ -50,9 +50,9 @@ class ReMe(Application):
embedding_model: dict | None = None,
vector_store: dict | None = None,
token_counter: dict | None = None,
personal_memory_target: list[str] | None = None,
procedural_memory_target: list[str] | None = None,
tool_memory_target: list[str] | None = None,
target_user_names: list[str] | None = None,
target_task_names: list[str] | None = None,
target_tool_names: list[str] | None = None,
profile_dir: str = "reme_profile",
**kwargs,
):
@ -71,25 +71,25 @@ class ReMe(Application):
**kwargs,
)
memory_target_type_mapping: dict[str, MemoryType] = {}
if personal_memory_target:
for name in personal_memory_target:
assert name not in memory_target_type_mapping, f"Memory target name {name} is already used."
if target_user_names:
for name in target_user_names:
assert name not in memory_target_type_mapping, f"target_user_names={name} is already used."
memory_target_type_mapping[name] = MemoryType.PERSONAL
if procedural_memory_target:
for name in procedural_memory_target:
assert name not in memory_target_type_mapping, f"Memory target name {name} is already used."
if target_task_names:
for name in target_task_names:
assert name not in memory_target_type_mapping, f"target_task_names={name} is already used."
memory_target_type_mapping[name] = MemoryType.PROCEDURAL
if tool_memory_target:
for name in tool_memory_target:
assert name not in memory_target_type_mapping, f"Memory target name {name} is already used."
if target_tool_names:
for name in target_tool_names:
assert name not in memory_target_type_mapping, f"target_tool_names={name} is already used."
memory_target_type_mapping[name] = MemoryType.TOOL
self.service_context.memory_target_type_mapping = memory_target_type_mapping
self.profile_dir: str = profile_dir
def add_meta_memory(self, memory_type: str | MemoryType, memory_target: str):
def _add_meta_memory(self, memory_type: str | MemoryType, memory_target: str):
"""Register or validate a memory target with the given memory type."""
if memory_target in self.service_context.memory_target_type_mapping:
assert self.service_context.memory_target_type_mapping[memory_target] is memory_type
@ -172,30 +172,30 @@ class ReMe(Application):
if isinstance(user_name, str):
for message in format_messages:
message.name = user_name
self.add_meta_memory(MemoryType.PERSONAL, user_name)
self._add_meta_memory(MemoryType.PERSONAL, user_name)
elif isinstance(user_name, list):
for name in user_name:
self.add_meta_memory(MemoryType.PERSONAL, name)
self._add_meta_memory(MemoryType.PERSONAL, name)
else:
raise RuntimeError("user_name must be str or list[str]")
memory_agents.append(personal_summarizer)
if task_name:
if isinstance(task_name, str):
self.add_meta_memory(MemoryType.PROCEDURAL, task_name)
self._add_meta_memory(MemoryType.PROCEDURAL, task_name)
elif isinstance(task_name, list):
for name in task_name:
self.add_meta_memory(MemoryType.PROCEDURAL, name)
self._add_meta_memory(MemoryType.PROCEDURAL, name)
else:
raise RuntimeError("task_name must be str or list[str]")
memory_agents.append(procedural_summarizer)
if tool_name:
if isinstance(tool_name, str):
self.add_meta_memory(MemoryType.TOOL, tool_name)
self._add_meta_memory(MemoryType.TOOL, tool_name)
elif isinstance(tool_name, list):
for name in tool_name:
self.add_meta_memory(MemoryType.TOOL, name)
self._add_meta_memory(MemoryType.TOOL, name)
else:
raise RuntimeError("tool_name must be str or list[str]")
memory_agents.append(tool_summarizer)
@ -289,30 +289,30 @@ class ReMe(Application):
memory_agents = []
if user_name:
if isinstance(user_name, str):
self.add_meta_memory(MemoryType.PERSONAL, user_name)
self._add_meta_memory(MemoryType.PERSONAL, user_name)
elif isinstance(user_name, list):
for name in user_name:
self.add_meta_memory(MemoryType.PERSONAL, name)
self._add_meta_memory(MemoryType.PERSONAL, name)
else:
raise RuntimeError("user_name must be str or list[str]")
memory_agents.append(personal_retriever)
if task_name:
if isinstance(task_name, str):
self.add_meta_memory(MemoryType.PROCEDURAL, task_name)
self._add_meta_memory(MemoryType.PROCEDURAL, task_name)
elif isinstance(task_name, list):
for name in task_name:
self.add_meta_memory(MemoryType.PROCEDURAL, name)
self._add_meta_memory(MemoryType.PROCEDURAL, name)
else:
raise RuntimeError("task_name must be str or list[str]")
memory_agents.append(procedural_retriever)
if tool_name:
if isinstance(tool_name, str):
self.add_meta_memory(MemoryType.TOOL, tool_name)
self._add_meta_memory(MemoryType.TOOL, tool_name)
elif isinstance(tool_name, list):
for name in tool_name:
self.add_meta_memory(MemoryType.TOOL, name)
self._add_meta_memory(MemoryType.TOOL, name)
else:
raise RuntimeError("tool_name must be str or list[str]")
memory_agents.append(tool_retriever)

View file

@ -43,6 +43,5 @@ __all__ = [
for name in __all__:
tool_class = globals()[name]
# Only register classes that inherit from BaseMemoryTool
if isinstance(tool_class, type) and issubclass(tool_class, BaseMemoryTool) and tool_class is not BaseMemoryTool:
R.op.register()(tool_class)