项目文件夹

文件
2026-07-13 13:12:33 +08:00

108 行
3.6 KiB
Python

"""AgentEntryConfig.routing: additive per-agent tier overrides.
Mirrors ``SquillaRouterConfig`` tier normalization (canonical ``c0``–``c3``,
legacy ``t0``–``t3`` aliases, ``tier:``-prefixed forms) and proves the block is
additive: unset agents persist nothing new via ``to_toml_dict``.
"""
from __future__ import annotations
from opensquilla.gateway.config import (
AgentEntryConfig,
AgentRoutingConfig,
GatewayConfig,
)
def test_routing_block_defaults_to_none() -> None:
entry = AgentEntryConfig(id="research")
assert entry.routing is None
def test_routing_fields_default_to_none() -> None:
routing = AgentRoutingConfig()
assert routing.default_tier is None
assert routing.max_tier is None
def test_canonical_tiers_pass_through_unchanged() -> None:
routing = AgentRoutingConfig(default_tier="c0", max_tier="c3")
assert routing.default_tier == "c0"
assert routing.max_tier == "c3"
def test_legacy_alias_t2_normalizes_to_c2() -> None:
routing = AgentRoutingConfig(default_tier="t2", max_tier="t3")
assert routing.default_tier == "c2"
assert routing.max_tier == "c3"
def test_tier_prefixed_form_normalizes() -> None:
routing = AgentRoutingConfig(default_tier="tier:c1", max_tier="tier:t2")
assert routing.default_tier == "c1"
assert routing.max_tier == "c2"
def test_uppercase_and_whitespace_are_normalized() -> None:
routing = AgentRoutingConfig(default_tier=" T1 ", max_tier="TIER:C3")
assert routing.default_tier == "c1"
assert routing.max_tier == "c3"
def test_invalid_tier_kept_verbatim_matching_squilla_router() -> None:
# SquillaRouterConfig / engine.routing.policy use normalize-or-keep for bad
# tiers rather than rejecting; this block matches that rigor.
routing = AgentRoutingConfig(default_tier="x9", max_tier="nope")
assert routing.default_tier == "x9"
assert routing.max_tier == "nope"
def test_ordering_is_not_enforced() -> None:
# max_tier < default_tier is accepted: SquillaRouterConfig enforces no
# analogous ceiling constraint, so neither does this block.
routing = AgentRoutingConfig(default_tier="c3", max_tier="c0")
assert routing.default_tier == "c3"
assert routing.max_tier == "c0"
def test_agent_entry_carries_configured_routing_block() -> None:
entry = AgentEntryConfig(
id="research",
routing=AgentRoutingConfig(default_tier="t1", max_tier="c2"),
)
assert entry.routing is not None
assert entry.routing.default_tier == "c1"
assert entry.routing.max_tier == "c2"
def test_unset_routing_persists_nothing_in_to_toml_dict() -> None:
cfg = GatewayConfig(agents=[AgentEntryConfig(id="research")])
data = cfg.to_toml_dict()
agents = data["agents"]
assert len(agents) == 1
# Additive block absent when unset — nothing new stamped into the TOML.
assert "routing" not in agents[0]
def test_set_routing_round_trips_through_to_toml_dict() -> None:
cfg = GatewayConfig(
agents=[
AgentEntryConfig(
id="research",
routing=AgentRoutingConfig(default_tier="t2"),
)
]
)
data = cfg.to_toml_dict()
routing = data["agents"][0]["routing"]
# default_tier normalized to canonical; unset max_tier not persisted.
assert routing == {"default_tier": "c2"}
def test_bare_agent_to_toml_dict_is_byte_stable_vs_pre_change_shape() -> None:
# An agent that does not set routing dumps exactly the historical fields.
entry = AgentEntryConfig(id="research", enabled=True)
dumped = GatewayConfig(agents=[entry]).to_toml_dict()["agents"][0]
assert "routing" not in dumped
assert dumped["id"] == "research"