- 引入 MemoryRouterXL 与 v5/v6 流式多线程训练/编码管线 - 修复 prepare_memory_router_dataset 候选池重建缺陷(mega 家族 3568x 加速,输出逐字节相同) - 修复 v5 被破坏的拒答与多跳标签(train 未知样本 319 -> 16319,multi_hop 平均正例 1.00 -> 2.00) - 同存储预算下 V2-128 v6 逐轴 22/22 通过:Top-1 41.12% -> 94.62%,未知拒答 0.00% -> 100.00% - 记录三条被实测推翻的显然优化(logits_to_keep=1 反而慢 55%、XL 容量未带来收益) - 记忆手术跨架构可移植性 14/14,读写关闭时与原生模型逐位相同
34 lines
1.5 KiB
Python
34 lines
1.5 KiB
Python
import unittest
|
|
|
|
from V2_dpskw.qwen_integration import infer_memory_metadata
|
|
|
|
|
|
class NaturalMemorySafetyTest(unittest.TestCase):
|
|
def test_explicit_fact_gets_structured_version_metadata(self) -> None:
|
|
item = infer_memory_metadata("请记住:我的常用时区是Asia/Shanghai。")
|
|
self.assertEqual(item["kind"], "fact")
|
|
self.assertEqual(item["entity"], "user")
|
|
self.assertEqual(item["attribute"], "常用时区")
|
|
self.assertEqual(item["value"], "Asia/Shanghai")
|
|
self.assertTrue(item["should_write"])
|
|
|
|
def test_correction_is_structured_but_not_collapsed_into_a_question(self) -> None:
|
|
item = infer_memory_metadata("更正一下:我的工作地点改为深圳,旧值不再有效。")
|
|
self.assertEqual(item["kind"], "correction")
|
|
self.assertEqual(item["attribute"], "工作地点")
|
|
self.assertEqual(item["value"], "深圳")
|
|
|
|
def test_explicit_forget_never_becomes_a_new_record(self) -> None:
|
|
item = infer_memory_metadata("请删除关于我的水果偏好的记忆。")
|
|
self.assertEqual(item["kind"], "forget")
|
|
self.assertFalse(item["should_write"])
|
|
self.assertEqual(item["attribute"], "水果偏好")
|
|
|
|
def test_question_and_hypothetical_are_not_facts(self) -> None:
|
|
self.assertEqual(infer_memory_metadata("我的常住城市是什么?")["kind"], "query")
|
|
self.assertEqual(infer_memory_metadata("如果我的常住城市改成成都,会怎样?")["kind"], "query")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|