test(memory): 添加线程记忆更新器 JSON 修复测试
验证 update_memory 在模型返回包含未转义内部引号的 JSON 时能正确解析并保存用户偏好和事实数据。
This commit is contained in:
parent
252cd71fe0
commit
a1eff2fa12
@ -1,3 +1,5 @@
|
||||
from unittest.mock import patch
|
||||
|
||||
from deerflow.agents.memory.thread_updater import ThreadMemoryUpdater
|
||||
|
||||
|
||||
@ -18,3 +20,65 @@ def test_scrub_sensitive_tolerates_non_numeric_confidence():
|
||||
assert len(cleaned["facts"]) == 2
|
||||
assert cleaned["facts"][0]["confidence"] == 0.5
|
||||
assert cleaned["facts"][1]["confidence"] == 0.5
|
||||
|
||||
|
||||
def test_update_memory_repairs_model_json_with_unescaped_inner_quotes():
|
||||
class _Storage:
|
||||
def __init__(self):
|
||||
self.saved = None
|
||||
|
||||
def load(self, _thread_id):
|
||||
return None
|
||||
|
||||
def save(self, _thread_id, data, expected_version=None):
|
||||
self.saved = {
|
||||
"thread_id": _thread_id,
|
||||
"data": data,
|
||||
"expected_version": expected_version,
|
||||
}
|
||||
return True
|
||||
|
||||
fake_storage = _Storage()
|
||||
fake_model = type(
|
||||
"M",
|
||||
(),
|
||||
{
|
||||
"invoke": lambda self, prompt: type(
|
||||
"R",
|
||||
(),
|
||||
{
|
||||
"content": """
|
||||
{
|
||||
"user": {
|
||||
"topOfMind": {
|
||||
"summary": "反感“作为 AI"这种句式,认为回答不用寒暄直接说重点。",
|
||||
"updatedAt": "2026-06-11T07:13:11Z"
|
||||
}
|
||||
},
|
||||
"history": {},
|
||||
"facts": [
|
||||
{
|
||||
"content": "偏好直接回答,不喜欢“作为 AI"式开场",
|
||||
"category": "preference",
|
||||
"confidence": 0.92
|
||||
}
|
||||
]
|
||||
}
|
||||
""".strip()
|
||||
},
|
||||
)()
|
||||
},
|
||||
)()
|
||||
messages = [type("Msg", (), {"type": "human", "content": "请直接回答重点,不要寒暄。"})()]
|
||||
|
||||
with (
|
||||
patch("deerflow.agents.memory.thread_updater.get_thread_memory_storage", return_value=fake_storage),
|
||||
patch.object(ThreadMemoryUpdater, "_get_model", return_value=fake_model),
|
||||
):
|
||||
result = ThreadMemoryUpdater().update_memory(messages, "thread-test")
|
||||
|
||||
assert result is True
|
||||
assert fake_storage.saved is not None
|
||||
assert fake_storage.saved["expected_version"] == 0
|
||||
assert fake_storage.saved["data"]["user"]["topOfMind"]["summary"].startswith("反感“作为 AI")
|
||||
assert fake_storage.saved["data"]["facts"][0]["content"].startswith("偏好直接回答")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user