refactor(memory): integrate procedural memory into extension module

This commit is contained in:
jinli.yl 2026-02-27 14:55:00 +08:00
parent 99c12535ca
commit 1d2cc36957
35 changed files with 58 additions and 20 deletions

View file

@ -4,7 +4,6 @@ from . import config
from . import core
from . import extension
from . import memory
from . import workflow
from .reme import ReMe
from .reme_cli import ReMeCli
from .reme_fb import ReMeFb
@ -16,7 +15,6 @@ __all__ = [
"core",
"extension",
"memory",
"workflow",
"ReMe",
"ReMeCli",
"ReMeFb",

View file

@ -1,5 +1,6 @@
"""Extension operations and tools."""
from . import procedural_memory
from .simple_chat import SimpleChat
from .stream_chat import StreamChat
from .test_op import TestOp
@ -7,6 +8,7 @@ from .translate_ts import TranslateTs
from ..core.registry_factory import R
__all__ = [
"procedural_memory",
"SimpleChat",
"StreamChat",
"TestOp",

View file

@ -5,11 +5,12 @@ from ....core.enumeration import Role, MemoryType
from ....core.schema import Message
from ....core.utils import format_messages
class ProceduralRetriever(BaseMemoryAgent):
"""Agent responsible for retrieving procedural memories."""
memory_type: MemoryType = MemoryType.PROCEDURAL
async def build_messages(self) -> list[Message]:
"""Build messages with system prompt and user message."""
if self.context.get("query"):
@ -21,15 +22,15 @@ class ProceduralRetriever(BaseMemoryAgent):
return [
Message(
role=Role.SYSTEM,
role=Role.SYSTEM,
content=self.prompt_format(
prompt_name="system_prompt",
meta_memory_info=await self._read_meta_memories(),
context=context,
)
),
),
Message(
role=Role.USER,
content=self.get_prompt("user_message")
role=Role.USER,
content=self.get_prompt("user_message"),
),
]
]

View file

@ -5,6 +5,7 @@ from ....core.enumeration import Role, MemoryType
from ....core.schema import Message
from ....core.utils import format_messages
class ProceduralSummarizer(BaseMemoryAgent):
"""Agent responsible for summarizing procedural memories."""
@ -13,18 +14,18 @@ class ProceduralSummarizer(BaseMemoryAgent):
async def build_messages(self) -> list[Message]:
return [
Message(
role=Role.SYSTEM,
role=Role.SYSTEM,
content=self.prompt_format(
prompt_name="system_prompt",
context=self.description + "\n" + format_messages(self.get_messages()),
outcome="successful task completion" if self.success else "task failure",
memory_type=self.memory_type.value,
memory_target=self.memory_target,
)
),
),
Message(
role=Role.USER,
content=self.get_prompt("user_message")
role=Role.USER,
content=self.get_prompt("user_message"),
),
]

View file

@ -20,13 +20,48 @@ from reme.core.schema.memory_chunk import MemoryChunk
def generate_random_text(length: int = 200) -> str:
"""Generate random text content."""
words = [
"python", "function", "class", "memory", "search", "algorithm",
"database", "vector", "embedding", "chunk", "file", "store",
"query", "result", "performance", "test", "data", "index",
"keyword", "text", "content", "process", "system", "module",
"import", "return", "value", "parameter", "method", "object",
"instance", "variable", "constant", "string", "integer", "float",
"list", "dictionary", "tuple", "set", "array", "matrix",
"python",
"function",
"class",
"memory",
"search",
"algorithm",
"database",
"vector",
"embedding",
"chunk",
"file",
"store",
"query",
"result",
"performance",
"test",
"data",
"index",
"keyword",
"text",
"content",
"process",
"system",
"module",
"import",
"return",
"value",
"parameter",
"method",
"object",
"instance",
"variable",
"constant",
"string",
"integer",
"float",
"list",
"dictionary",
"tuple",
"set",
"array",
"matrix",
]
text_words = []
current_length = 0
@ -59,6 +94,7 @@ def create_test_chunks(count: int = 1000, text_length: int = 10000) -> list[Memo
async def run_performance_test():
"""Run keyword_search performance test."""
# pylint: disable=protected-access
# Setup
test_db_path = Path("./test_keyword_perf")
test_db_path.mkdir(exist_ok=True)
@ -96,7 +132,7 @@ async def run_performance_test():
for _ in range(num_runs):
start = time.perf_counter()
results = await store.keyword_search(query, limit=10)
_ = await store.keyword_search(query, limit=10)
elapsed = time.perf_counter() - start
times.append(elapsed)