Files
2026-07-13 13:12:33 +08:00

92 lines
3.0 KiB
Python

"""Thinking-level precedence: CLI --thinking > [llm].thinking > router tiers.
Pins the resolution order that decides the delivered thinking budget in
scripted runs. A calling runner's hardcoded CLI ``--thinking`` flag
model_copies over the TOML ``[llm].thinking`` value, while config.toml router
tiers are dead config when the router is disabled. A config.toml-only edit to
the thinking level is therefore silently ignored while a runner flag persists;
these tests document each link of that chain.
"""
from __future__ import annotations
from types import SimpleNamespace
from typing import Any
from opensquilla.cli.agent_cmd import _with_agent_thinking_config
from opensquilla.engine import AgentConfig, ThinkingLevel
from opensquilla.engine.runtime import TurnRunner
from opensquilla.gateway.config import GatewayConfig
def _resolve_turn_thinking(
explicit_thinking: Any,
*,
turn_metadata: dict[str, Any] | None = None,
) -> bool | ThinkingLevel:
stub = SimpleNamespace(
_config=SimpleNamespace(llm=SimpleNamespace(thinking=explicit_thinking)),
_parse_thinking_level=TurnRunner._parse_thinking_level,
)
turn = SimpleNamespace(metadata=turn_metadata or {})
return TurnRunner._resolve_turn_thinking(stub, turn) # type: ignore[arg-type]
def test_explicit_llm_thinking_beats_router_tier_metadata() -> None:
resolved = _resolve_turn_thinking(
"high",
turn_metadata={"thinking_requested": True, "thinking_level": "xhigh"},
)
assert resolved is ThinkingLevel.HIGH
def test_router_tier_metadata_applies_only_when_config_thinking_absent() -> None:
resolved = _resolve_turn_thinking(
None,
turn_metadata={"thinking_requested": True, "thinking_level": "xhigh"},
)
assert resolved is ThinkingLevel.XHIGH
def test_invalid_explicit_thinking_forces_thinking_off() -> None:
resolved = _resolve_turn_thinking(
"garbage-level",
turn_metadata={"thinking_requested": True, "thinking_level": "xhigh"},
)
assert resolved is False
def test_thinking_defaults_off_without_config_or_router_metadata() -> None:
assert _resolve_turn_thinking(None) is False
def test_cli_thinking_flag_overrides_toml_llm_thinking(
monkeypatch: Any,
) -> None:
"""The runner-delivered CLI flag replaces the TOML value after load.
This is the runner delivery path: config.toml said nothing, the runner said
``--thinking xhigh``. It also means a config.toml-only edit to
``[llm].thinking`` is silently ignored while the runner flag persists.
"""
monkeypatch.delenv("OPENSQUILLA_LLM_THINKING", raising=False)
cfg = GatewayConfig(llm={"thinking": "high"})
updated = _with_agent_thinking_config(cfg, "xhigh")
assert updated.llm.thinking == "xhigh"
def test_resolve_thinking_budgets_for_high_and_xhigh() -> None:
assert AgentConfig(thinking=ThinkingLevel.HIGH).resolve_thinking(None) == (
True,
20_000,
)
assert AgentConfig(thinking=ThinkingLevel.XHIGH).resolve_thinking(None) == (
True,
50_000,
)