Classify malformed-multimodal rejects as invalid_request (#27451)

Co-authored-by: cctry <cctry@meta.com>
Co-authored-by: cctry <cctry@fb.com>
This commit is contained in:
Lianmin Zheng
2026-06-06 10:19:22 -07:00
committed by GitHub
co-authored by cctry cctry
parent bd7fea0740
commit 88a7b0fd30
2 changed files with 25 additions and 2 deletions
+15 -1
View File
@@ -726,7 +726,21 @@ async def generate_request(obj: GenerateReqInput, request: Request):
):
yield b"data: " + dumps_json(out) + b"\n\n"
except ValueError as e:
out = {"error": {"message": str(e)}}
# A client disconnect also surfaces here. It's a client-side
# cancellation, not a server error or bad input -- log it and
# stop (the request was already aborted upstream) instead of
# emitting a 400.
if request is not None and await request.is_disconnected():
logger.info(f"[http_server] Client disconnected: {e}")
return
out = {
"error": {
"message": str(e),
"type": "invalid_request_error",
"code": 400,
"retryable": False,
}
}
logger.error(f"[http_server] Error: {e}")
yield b"data: " + dumps_json(out) + b"\n\n"
yield b"data: [DONE]\n\n"
@@ -549,8 +549,17 @@ class BaseMultimodalProcessor(ABC):
elif modality == Modality.AUDIO:
return load_audio(data, audio_sample_rate)
except ValueError as e:
# Bad input (e.g. invalid base64) -> 400, not 500.
data_str = str(data)
if len(data_str) > 100:
data_str = data_str[:100] + "..."
raise ValueError(f"Error while loading data {data_str}: {e}") from e
except Exception as e:
raise RuntimeError(f"Error while loading data {data}: {e}")
data_str = str(data)
if len(data_str) > 100:
data_str = data_str[:100] + "..."
raise RuntimeError(f"Error while loading data {data_str}: {e}") from e
@staticmethod
def _get_preprocessed_input_format(data):