Skip to content

Commit 2bd332c

Browse files
📝 chore: Add mixed-input regression coverage to generate config tests (#607)
Code changes was requested by @binaryaaron. * #595 (comment) The following files were modified: * `tests/config/test_generate.py` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
1 parent ae26998 commit 2bd332c

1 file changed

Lines changed: 90 additions & 0 deletions

File tree

‎tests/config/test_generate.py‎

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,3 +119,93 @@ def test_from_params_accepts_nested_structured_generation(self) -> None:
119119
assert params.generation.structured_generation.enabled is True
120120
assert params.generation.structured_generation.schema_method == "json_schema"
121121
assert params.generation.structured_generation.backend == "outlines"
122+
123+
124+
@pytest.mark.unit
125+
class TestMixedInputMigration:
126+
"""Regression coverage for mixed-input: legacy flat keys coexist with nested structured_generation dict.
127+
128+
The migration contract: when both forms are present, legacy flat keys win as explicit overrides.
129+
Un-overridden nested dict fields are preserved.
130+
"""
131+
132+
def test_legacy_backend_overrides_nested_dict_backend(self) -> None:
133+
"""A legacy flat backend key beats the nested dict backend when both are supplied."""
134+
params = GenerateParameters.model_validate(
135+
{
136+
"structured_generation": {"enabled": True, "backend": "outlines"},
137+
"structured_generation_backend": "xgrammar",
138+
}
139+
)
140+
assert params.structured_generation.backend == "xgrammar"
141+
assert params.structured_generation.enabled is True # nested value preserved
142+
143+
def test_legacy_enabled_overrides_nested_dict_enabled(self) -> None:
144+
"""A legacy use_structured_generation key beats the nested dict enabled field."""
145+
params = GenerateParameters.model_validate(
146+
{
147+
"use_structured_generation": True,
148+
"structured_generation": {"enabled": False, "schema_method": "json_schema"},
149+
}
150+
)
151+
assert params.structured_generation.enabled is True
152+
assert params.structured_generation.schema_method == "json_schema" # preserved
153+
154+
def test_legacy_schema_method_overrides_nested_dict_schema_method(self) -> None:
155+
"""A legacy schema_method key beats the nested dict schema_method field."""
156+
params = GenerateParameters.model_validate(
157+
{
158+
"structured_generation_schema_method": "regex",
159+
"structured_generation": {"enabled": True, "schema_method": "json_schema"},
160+
}
161+
)
162+
assert params.structured_generation.schema_method == "regex"
163+
assert params.structured_generation.enabled is True # preserved
164+
165+
def test_from_params_legacy_backend_overrides_generation_section_backend(self) -> None:
166+
"""from_params: a top-level legacy backend key overrides the backend inside generation={}."""
167+
params = SafeSynthesizerParameters.from_params(
168+
generation={"structured_generation": {"enabled": True, "backend": "outlines"}},
169+
structured_generation_backend="xgrammar",
170+
)
171+
assert params.generation.structured_generation.backend == "xgrammar"
172+
assert params.generation.structured_generation.enabled is True # preserved
173+
174+
def test_from_params_legacy_enabled_overrides_structured_generation_kwarg(self) -> None:
175+
"""from_params: a top-level legacy use_structured_generation overrides structured_generation kwarg."""
176+
params = SafeSynthesizerParameters.from_params(
177+
structured_generation={"enabled": False, "schema_method": "json_schema"},
178+
use_structured_generation=True,
179+
)
180+
assert params.generation.structured_generation.enabled is True
181+
assert params.generation.structured_generation.schema_method == "json_schema" # preserved
182+
183+
def test_nested_dict_with_no_legacy_keys_uses_dict_values(self) -> None:
184+
"""When no legacy flat keys are present, nested dict values are used as-is."""
185+
params = GenerateParameters.model_validate(
186+
{
187+
"structured_generation": {
188+
"enabled": True,
189+
"backend": "outlines",
190+
"schema_method": "json_schema",
191+
}
192+
}
193+
)
194+
assert params.structured_generation.enabled is True
195+
assert params.structured_generation.backend == "outlines"
196+
assert params.structured_generation.schema_method == "json_schema"
197+
198+
def test_legacy_keys_with_no_nested_dict_are_migrated(self) -> None:
199+
"""When only legacy flat keys are present, migration produces the correct nested values."""
200+
params = GenerateParameters.model_validate(
201+
{
202+
"use_structured_generation": True,
203+
"structured_generation_backend": "xgrammar",
204+
"structured_generation_schema_method": "structural_tag",
205+
"structured_generation_use_single_sequence": True,
206+
}
207+
)
208+
assert params.structured_generation.enabled is True
209+
assert params.structured_generation.backend == "xgrammar"
210+
assert params.structured_generation.schema_method == "structural_tag"
211+
assert params.structured_generation.use_single_sequence is True

0 commit comments

Comments
 (0)