[Misc] Use VLLMValidationError in chat_utils content-part validation (#49217)
Signed-off-by: Umut Polat <52835619+umut-polat@users.noreply.github.com>
Umut Polat committed
Jul 23, 2026 at 08:48 UTC
239fc7355361ee60ea10756c10944041d8e38ded
1 file changed
+27
-13
vllm/entrypoints/chat_utils.py
+27
-13
@@ -968,7 +968,9 @@ class MultiModalContentParser(BaseMultiModalContentParser):
968
`tensor.shape[0]` placeholder tokens after tokenization.
969
"""
970
if not self.model_config.enable_prompt_embeds:
971
- raise ValueError(_ENABLE_PROMPT_EMBEDS_ERROR)
971
+ raise VLLMValidationError(
972
+ _ENABLE_PROMPT_EMBEDS_ERROR, parameter="prompt_embeds"
973
+ )
974
975
tensor = safe_load_prompt_embeds(self.model_config, data.encode())
976
self._tracker.add("prompt_embeds", (tensor, None))
@@ -987,8 +989,9 @@ class MultiModalContentParser(BaseMultiModalContentParser):
989
) -> None:
990
mm_config = self.model_config.get_multimodal_config()
991
if not mm_config.enable_mm_embeds:
990
- raise ValueError(
991
- "You must set `--enable-mm-embeds` to input `image_embeds`"
992
+ raise VLLMValidationError(
993
+ "You must set `--enable-mm-embeds` to input `image_embeds`",
994
+ parameter="image_embeds",
995
)
996
997
if isinstance(image_embeds, dict):
@@ -1014,8 +1017,9 @@ class MultiModalContentParser(BaseMultiModalContentParser):
1017
) -> None:
1018
mm_config = self.model_config.get_multimodal_config()
1019
if not mm_config.enable_mm_embeds:
1017
- raise ValueError(
1018
- "You must set `--enable-mm-embeds` to input `audio_embeds`"
1020
+ raise VLLMValidationError(
1021
+ "You must set `--enable-mm-embeds` to input `audio_embeds`",
1022
+ parameter="audio_embeds",
1023
)
1024
1025
if isinstance(audio_embeds, dict):
@@ -1117,7 +1121,9 @@ class AsyncMultiModalContentParser(BaseMultiModalContentParser):
1121
thread-pool executor via `safe_load_prompt_embeds_async`.
1122
"""
1123
if not self.model_config.enable_prompt_embeds:
1120
- raise ValueError(_ENABLE_PROMPT_EMBEDS_ERROR)
1124
+ raise VLLMValidationError(
1125
+ _ENABLE_PROMPT_EMBEDS_ERROR, parameter="prompt_embeds"
1126
+ )
1127
1128
self._tracker.add(
1129
"prompt_embeds", partial(self._load_prompt_embeds_async, data.encode())
@@ -1151,8 +1157,9 @@ class AsyncMultiModalContentParser(BaseMultiModalContentParser):
1157
) -> None:
1158
mm_config = self.model_config.get_multimodal_config()
1159
if not mm_config.enable_mm_embeds:
1154
- raise ValueError(
1155
- "You must set `--enable-mm-embeds` to input `image_embeds`"
1160
+ raise VLLMValidationError(
1161
+ "You must set `--enable-mm-embeds` to input `image_embeds`",
1162
+ parameter="image_embeds",
1163
)
1164
1165
if isinstance(image_embeds, dict):
@@ -1178,8 +1185,9 @@ class AsyncMultiModalContentParser(BaseMultiModalContentParser):
1185
) -> None:
1186
mm_config = self.model_config.get_multimodal_config()
1187
if not mm_config.enable_mm_embeds:
1181
- raise ValueError(
1182
- "You must set `--enable-mm-embeds` to input `audio_embeds`"
1188
+ raise VLLMValidationError(
1189
+ "You must set `--enable-mm-embeds` to input `audio_embeds`",
1190
+ parameter="audio_embeds",
1191
)
1192
1193
if isinstance(audio_embeds, dict):
@@ -1592,10 +1600,14 @@ def _parse_chat_message_content_mm_part(
1600
tool_reference = tool_reference_params.get("name", None)
1601
return "tool_reference", tool_reference
1602
# Raise an error if no 'type' or direct URL is found.
1595
- raise ValueError("Missing 'type' field in multimodal part.")
1603
+ raise VLLMValidationError(
1604
+ "Missing 'type' field in multimodal part.", parameter="type"
1605
+ )
1606
1607
if not isinstance(part_type, str):
1598
- raise ValueError("Invalid 'type' field in multimodal part.")
1608
+ raise VLLMValidationError(
1609
+ "Invalid 'type' field in multimodal part.", parameter="type"
1610
+ )
1611
return part_type, "unknown part_type content"
1612
1613
@@ -1732,7 +1744,9 @@ def _parse_chat_message_content_part(
1744
modality = "audio"
1745
elif part_type == "prompt_embeds":
1746
if not content:
1735
- raise ValueError(_PROMPT_EMBEDS_MISSING_DATA_ERROR)
1747
+ raise VLLMValidationError(
1748
+ _PROMPT_EMBEDS_MISSING_DATA_ERROR, parameter="prompt_embeds"
1749
+ )
1750
mm_parser.parse_prompt_embeds(cast(str, content))
1751
modality = "prompt_embeds"
1752
elif part_type == "audio_url":