From 7d4aedae7c3e1ff4a1b1dea1f8df3257a7878d0a Mon Sep 17 00:00:00 2001 From: Harry Mellor <19981378+hmellor@users.noreply.github.com> Date: Fri, 9 May 2025 20:23:59 +0100 Subject: [PATCH] Handle error when `str` passed to `/v1/audio/transcriptions` (#17909) Signed-off-by: Harry Mellor <19981378+hmellor@users.noreply.github.com> --- vllm/entrypoints/openai/protocol.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/vllm/entrypoints/openai/protocol.py b/vllm/entrypoints/openai/protocol.py index 1aa4007413409..aa01e785f21a8 100644 --- a/vllm/entrypoints/openai/protocol.py +++ b/vllm/entrypoints/openai/protocol.py @@ -5,10 +5,11 @@ import json import re import time +from http import HTTPStatus from typing import Annotated, Any, ClassVar, Literal, Optional, Union import torch -from fastapi import UploadFile +from fastapi import HTTPException, UploadFile from pydantic import (BaseModel, ConfigDict, Field, TypeAdapter, ValidationInfo, field_validator, model_validator) from typing_extensions import TypeAlias @@ -1727,7 +1728,13 @@ class TranscriptionRequest(OpenAIBaseModel): @model_validator(mode="before") @classmethod - def validate_stream_options(cls, data): + def validate_transcription_request(cls, data): + if isinstance(data.get("file"), str): + raise HTTPException( + status_code=HTTPStatus.UNPROCESSABLE_ENTITY, + detail="Expected 'file' to be a file-like object, not 'str'.", + ) + stream_opts = ["stream_include_usage", "stream_continuous_usage_stats"] stream = data.get("stream", False) if any(bool(data.get(so, False)) for so in stream_opts) and not stream: