fix: validate ownership of managed reasoning parameters
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user