forked from Karylab-cklius/vllm
Signed-off-by: Wayne Chiu <waynehacking8@gmail.com> Co-authored-by: Claude <noreply@anthropic.com>
51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
|
"""Request-time validation of structured output requests."""
|
|
|
|
import pytest
|
|
|
|
from vllm.config import StructuredOutputsConfig
|
|
from vllm.sampling_params import SamplingParams, StructuredOutputsParams
|
|
|
|
pytestmark = pytest.mark.cpu_test
|
|
|
|
JSON_SCHEMA = {
|
|
"type": "object",
|
|
"properties": {
|
|
"invoice_id": {"type": "string"},
|
|
"customer": {"type": "string"},
|
|
},
|
|
"required": ["invoice_id", "customer"],
|
|
"additionalProperties": False,
|
|
}
|
|
|
|
|
|
class _StubModelConfig:
|
|
def __init__(self, is_diffusion: bool):
|
|
self.is_diffusion = is_diffusion
|
|
|
|
|
|
def test_structured_outputs_rejected_for_diffusion_models():
|
|
"""Diffusion LLMs denoise the canvas in parallel, which is incompatible
|
|
with the token-by-token grammar FSM. The request must fail with a clear
|
|
validation error instead of an FSM rejection mid-generation (#45436)."""
|
|
params = SamplingParams(
|
|
structured_outputs=StructuredOutputsParams(json=JSON_SCHEMA)
|
|
)
|
|
with pytest.raises(ValueError, match="not yet supported for diffusion"):
|
|
params._validate_structured_outputs(
|
|
_StubModelConfig(is_diffusion=True),
|
|
StructuredOutputsConfig(),
|
|
tokenizer=None,
|
|
)
|
|
|
|
|
|
def test_plain_request_allowed_for_diffusion_models():
|
|
"""Requests without structured outputs are unaffected by the guard."""
|
|
params = SamplingParams()
|
|
params._validate_structured_outputs(
|
|
_StubModelConfig(is_diffusion=True),
|
|
StructuredOutputsConfig(),
|
|
tokenizer=None,
|
|
)
|