fix: validate ownership of managed reasoning parameters

This commit is contained in:
2026-09-09 01:24:54 -04:00
parent 4ed144c9e4
commit 1ee74c35a8
2 changed files with 121 additions and 0 deletions
+64
View File
@@ -847,3 +847,67 @@ class TestEffectiveEffort:
assert (
effective_effort(request_effort=None, source_effort=None, enable_thinking=None) is None
)
class TestThinkingWireOwnership:
"""开启片段只能表达开启,不能携带隐式强度。"""
@pytest.mark.parametrize(
"base",
[
{"reasoning_effort": "high"},
{"reasoning_effort": None},
{"depth": "auto"},
{"output_config": {"effort": "low"}},
],
)
@pytest.mark.parametrize("effort", [None, Effort.AUTO, Effort.HIGH])
def test_on_base_cannot_hide_a_tier(self, base, effort):
profile = ProviderProfile(
name="custom",
thinking=ThinkingWire(off={"depth": "none"}, on_base=base, effort_key="depth"),
strip_think_tags=False,
)
with pytest.raises(ThinkingUnsupportedError, match="on_base"):
resolve_thinking(profile, None, effort, model="custom-model")
class TestThinkingRawOwnership:
"""纯规则覆盖标准、自定义根与无意图逃生口。"""
@pytest.mark.parametrize(
"raw",
[
{"reasoning_effort": "high"},
{"enable_thinking": True},
{"thinking": {}},
{"thinking_budget": 100},
{"reasoning": {}},
{"thinkingConfig": {}},
{"output_config": {"effort": None}},
{"depth.key": None},
{"off_control": {}},
],
)
@pytest.mark.parametrize("effort", [Effort.NONE, Effort.AUTO, Effort.HIGH])
def test_control_roots_rejected_without_mutating_input(self, raw, effort):
from copy import deepcopy
from polygateway.thinking import validate_thinking_raw
wire = ThinkingWire(off={"off_control": False}, on_base={}, effort_key="depth.key")
before = deepcopy(raw)
with pytest.raises(ThinkingUnsupportedError):
validate_thinking_raw(raw, effort=effort, wire=wire, origin="test")
assert raw == before
validate_thinking_raw(raw, effort=None, wire=wire, origin="test")
assert raw == before
def test_output_format_is_not_effort_unless_wire_owns_root(self):
from polygateway.thinking import validate_thinking_raw
raw = {"output_config": {"format": "json"}, "temperature": 0, "seed": 7}
validate_thinking_raw(raw, effort=Effort.AUTO, wire=None, origin="test")
wire = ThinkingWire(off=None, on_base={"output_config": {"enabled": True}}, effort_key=None)
with pytest.raises(ThinkingUnsupportedError):
validate_thinking_raw(raw, effort=Effort.AUTO, wire=wire, origin="test")