Files
EvoScientist/tests/test_memory_injection.py
T
m4 c2743251e9 Initial commit of EvoScientist framework
Self-evolving AI scientist framework built on LangGraph/LangChain with
CLI/TUI core, FastAPI gateway, and Next.js frontend.

Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
2026-07-13 08:07:45 +08:00

80 lines
2.3 KiB
Python

from types import SimpleNamespace
from unittest.mock import MagicMock, patch
from langchain_core.messages import SystemMessage
from EvoScientist.middleware.memory import EvoMemoryMiddleware, create_memory_middleware
class DummyRequest:
def __init__(self, *, messages=None, system_message="base"):
self.state = {"messages": messages or []}
self.runtime = None
self.system_message = SystemMessage(content=system_message)
def override(self, **kwargs):
clone = object.__new__(DummyRequest)
clone.__dict__ = dict(self.__dict__)
clone.__dict__.update(kwargs)
return clone
class Human:
def __init__(self, content):
self.content = content
def _middleware(**kwargs):
return EvoMemoryMiddleware(backend=MagicMock(), **kwargs)
def test_empty_memory_does_not_inject_placeholder():
mw = _middleware()
request = DummyRequest()
result = mw.modify_request(request)
assert result is request
def test_explicit_memory_request_injects_write_instructions(monkeypatch):
mw = _middleware()
request = DummyRequest(messages=[Human("请记住:默认使用中文回答")])
monkeypatch.setattr(
"EvoScientist.middleware.memory.EvoMemoryMiddleware._latest_user_text",
lambda _self, _request: "请记住:默认使用中文回答",
)
result = mw.modify_request(request)
assert result is not request
content = str(result.system_message.content)
assert "/memory/MEMORY.md" in content
assert "evo_memory" not in content
def test_existing_memory_is_bounded():
mw = _middleware(max_injected_chars=5)
request = DummyRequest()
request.state["evo_memory_content"] = "abcdefghijklmnopqrstuvwxyz"
result = mw.modify_request(request)
content = str(result.system_message.content)
assert "Earlier memory omitted" in content
assert "vwxyz" in content
assert "abcdefghij" not in content
@patch("EvoScientist.config.load_config")
def test_create_memory_middleware_reads_injection_config(mock_load_config, tmp_path):
mock_load_config.return_value = SimpleNamespace(
memory_injection_enabled=False,
memory_injection_max_chars=123,
)
mw = create_memory_middleware(memory_dir=str(tmp_path / "memory"))
assert mw._inject_memory is False
assert mw._max_injected_chars == 123