42 lines
1.4 KiB
Python
42 lines
1.4 KiB
Python
"""世谱注入位置测试:before/after 相对 personality_summary。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from app.application.chat.send_message import _contract_system_messages
|
|
from app.modules.runtime.contract import RuntimeContract
|
|
|
|
|
|
def _contract(**kw: object) -> RuntimeContract:
|
|
base: dict[str, object] = {
|
|
"character_id": "c",
|
|
"session_id": "s",
|
|
"run_id": "r",
|
|
"model_hint": "m",
|
|
"trace_id": "t",
|
|
}
|
|
base.update(kw)
|
|
return RuntimeContract(**base)
|
|
|
|
|
|
def test_lorebook_before_precedes_personality() -> None:
|
|
c = _contract(personality_summary="人格X", lorebook_before="世界设定前")
|
|
msgs = _contract_system_messages(c)
|
|
assert msgs.index("世界设定前") < msgs.index("当前人格:\n人格X")
|
|
|
|
|
|
def test_lorebook_after_follows_personality() -> None:
|
|
c = _contract(personality_summary="人格X", lorebook_after="世界设定后")
|
|
msgs = _contract_system_messages(c)
|
|
assert msgs.index("当前人格:\n人格X") < msgs.index("世界设定后")
|
|
|
|
|
|
def test_no_lorebook_when_none() -> None:
|
|
msgs = _contract_system_messages(_contract())
|
|
assert not any("世界设定" in m for m in msgs)
|
|
|
|
|
|
def test_lorebook_without_personality_still_injects() -> None:
|
|
c = _contract(lorebook_before="前", lorebook_after="后")
|
|
msgs = _contract_system_messages(c)
|
|
assert "前" in msgs and "后" in msgs
|