49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
import yaml
|
|
|
|
from opensquilla.identity.prompt import assemble_system_prompt
|
|
from opensquilla.identity.types import AgentProfile
|
|
|
|
GOLDEN_PATH = Path("tests/golden/public_release_open.yaml")
|
|
|
|
|
|
def _golden_cases() -> list[dict]:
|
|
data = yaml.safe_load(GOLDEN_PATH.read_text(encoding="utf-8"))
|
|
assert isinstance(data, dict)
|
|
cases = data.get("cases")
|
|
assert isinstance(cases, list)
|
|
return cases
|
|
|
|
|
|
def test_public_golden_file_uses_public_schema_and_no_removed_tool_names() -> None:
|
|
cases = _golden_cases()
|
|
|
|
assert {case["id"] for case in cases} == {
|
|
"canonical-image-tool",
|
|
"session-vs-channel-message",
|
|
"session-spawn-canonical-name",
|
|
"raw-http-is-owner-only",
|
|
}
|
|
for case in cases:
|
|
assert isinstance(case.get("prompt"), str) and case["prompt"]
|
|
assert "generate_image" not in " ".join(case.get("must_contain", []))
|
|
assert "spawn_subagent" not in " ".join(case.get("must_contain", []))
|
|
assert "send_message" not in " ".join(case.get("must_contain", []))
|
|
|
|
|
|
def test_public_golden_static_prompt_contract_matches_tool_policy() -> None:
|
|
prompt = assemble_system_prompt(
|
|
AgentProfile(agent_id="main", prompt_mode="full"),
|
|
tools=["image_generate", "sessions_spawn", "sessions_send", "message"],
|
|
)
|
|
|
|
assert "`image_generate`" in prompt
|
|
assert "`sessions_send`" in prompt
|
|
assert "`message` only for channel adapter delivery" in prompt
|
|
assert "generate_image" not in prompt
|
|
assert "spawn_subagent" not in prompt
|
|
assert "send_message" not in prompt
|