diff --git a/python/sglang/srt/constrained/json_schema_validation.py b/python/sglang/srt/constrained/json_schema_validation.py index b8d779dd6..976e68e7e 100644 --- a/python/sglang/srt/constrained/json_schema_validation.py +++ b/python/sglang/srt/constrained/json_schema_validation.py @@ -224,17 +224,20 @@ def validate_outlines_json_schema(schema: Any) -> None: ) if "properties" in subschema: - ignored_object_constraints = sorted( - {"additionalProperties", "maxProperties", "minProperties"}.intersection( - subschema - ) - ) + ignored_object_constraints = { + "additionalProperties", + "maxProperties", + "minProperties", + }.intersection(subschema) + if subschema.get("additionalProperties") is False: + # The properties regex already excludes undeclared keys. + ignored_object_constraints.discard("additionalProperties") if ignored_object_constraints: _raise_unsupported( "outlines", pointer, "properties cannot be combined with " - + ", ".join(ignored_object_constraints), + + ", ".join(sorted(ignored_object_constraints)), ) if "prefixItems" in subschema: diff --git a/test/registered/unit/constrained/test_json_schema_validation.py b/test/registered/unit/constrained/test_json_schema_validation.py index 4fbc63e3d..9fd5f077c 100644 --- a/test/registered/unit/constrained/test_json_schema_validation.py +++ b/test/registered/unit/constrained/test_json_schema_validation.py @@ -127,6 +127,7 @@ class TestOutlinesJSONSchemaValidation(unittest.TestCase): }, }, "required": ["name"], + "additionalProperties": False, } ) @@ -155,7 +156,7 @@ class TestOutlinesJSONSchemaValidation(unittest.TestCase): { "type": "object", "properties": {"name": {"type": "string"}}, - "additionalProperties": False, + "additionalProperties": True, }, { "type": "array",