[Bugfix] Move chat completion response_format validation to Pydantic model_validator (#35510)
Signed-off-by: umut-polat <52835619+umut-polat@users.noreply.github.com>
This commit is contained in:
@@ -370,3 +370,15 @@ def test_system_message_warns_on_video(video_content):
|
|||||||
call_args = str(mock_logger.warning_once.call_args)
|
call_args = str(mock_logger.warning_once.call_args)
|
||||||
assert "System messages should only contain text" in call_args
|
assert "System messages should only contain text" in call_args
|
||||||
assert "video_url" in call_args
|
assert "video_url" in call_args
|
||||||
|
|
||||||
|
|
||||||
|
def test_json_schema_response_format_missing_schema():
|
||||||
|
"""When response_format type is 'json_schema' but the json_schema field
|
||||||
|
is not provided, request construction should raise a validation error
|
||||||
|
so the API returns 400 instead of 500."""
|
||||||
|
with pytest.raises(Exception, match="json_schema.*must be provided"):
|
||||||
|
ChatCompletionRequest(
|
||||||
|
model=MODEL_NAME,
|
||||||
|
messages=[{"role": "user", "content": "hello"}],
|
||||||
|
response_format={"type": "json_schema"},
|
||||||
|
)
|
||||||
|
|||||||
@@ -502,6 +502,34 @@ class ChatCompletionRequest(OpenAIBaseModel):
|
|||||||
skip_clone=True, # Created fresh per request, safe to skip clone
|
skip_clone=True, # Created fresh per request, safe to skip clone
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@model_validator(mode="before")
|
||||||
|
@classmethod
|
||||||
|
def validate_response_format(cls, data):
|
||||||
|
response_format = data.get("response_format")
|
||||||
|
if response_format is None:
|
||||||
|
return data
|
||||||
|
|
||||||
|
rf_type = (
|
||||||
|
response_format.get("type")
|
||||||
|
if isinstance(response_format, dict)
|
||||||
|
else getattr(response_format, "type", None)
|
||||||
|
)
|
||||||
|
|
||||||
|
if rf_type == "json_schema":
|
||||||
|
json_schema = (
|
||||||
|
response_format.get("json_schema")
|
||||||
|
if isinstance(response_format, dict)
|
||||||
|
else getattr(response_format, "json_schema", None)
|
||||||
|
)
|
||||||
|
if json_schema is None:
|
||||||
|
raise VLLMValidationError(
|
||||||
|
"When response_format type is 'json_schema', the "
|
||||||
|
"'json_schema' field must be provided.",
|
||||||
|
parameter="response_format",
|
||||||
|
)
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
@model_validator(mode="before")
|
@model_validator(mode="before")
|
||||||
@classmethod
|
@classmethod
|
||||||
def validate_stream_options(cls, data):
|
def validate_stream_options(cls, data):
|
||||||
|
|||||||
Reference in New Issue
Block a user