A high-throughput and memory-efficient inference and serving engine for LLMs
Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git
Synced Nov 11, 15:00 UTC
[Misc] Improve error message for `is_multimodal` (#30483)
Signed-off-by: DarkLight1337 <tlleungac@connect.ust.hk>
Cyrus Leung committed
Dec 11, 2025 at 22:39 UTC
3a3b06ee706e6ff99b711b20a6c431b43e490dbc
3 files changed
+21
-7
vllm/model_executor/models/interfaces.py
+17
-3
@@ -53,6 +53,22 @@ The output embeddings must be one of the following formats:
53
"""
54
55
56
+def _require_is_multimodal(is_multimodal: Tensor | None) -> Tensor:
57
+ """
58
+ A helper function to be used in the context of
59
+ [vllm.model_executor.models.interfaces.SupportsMultiModal.embed_input_ids][]
60
+ to provide a better error message.
61
+ """
62
+ if is_multimodal is None:
63
+ raise ValueError(
64
+ "`embed_input_ids` now requires `is_multimodal` arg, "
65
+ "please update your model runner according to "
66
+ "https://github.com/vllm-project/vllm/pull/16229."
67
+ )
68
+
69
+ return is_multimodal
70
+
71
+
72
@runtime_checkable
73
class SupportsMultiModal(Protocol):
74
"""The interface required for all multi-modal models."""
@@ -190,12 +206,10 @@ class SupportsMultiModal(Protocol):
206
if multimodal_embeddings is None or len(multimodal_embeddings) == 0:
207
return inputs_embeds
208
193
- assert is_multimodal is not None
194
-
209
return _merge_multimodal_embeddings(
210
inputs_embeds=inputs_embeds,
211
multimodal_embeddings=multimodal_embeddings,
198
- is_multimodal=is_multimodal,
212
+ is_multimodal=_require_is_multimodal(is_multimodal),
213
)
214
215
vllm/model_executor/models/phi3v.py
+2
-3
@@ -64,6 +64,7 @@ from .interfaces import (
64
SupportsMultiModal,
65
SupportsPP,
66
SupportsQuant,
67
+ _require_is_multimodal,
68
)
69
from .utils import (
70
AutoWeightsLoader,
@@ -687,12 +688,10 @@ class Phi3VForCausalLM(nn.Module, SupportsMultiModal, SupportsPP, SupportsQuant)
688
if multimodal_embeddings is None or len(multimodal_embeddings) == 0:
689
return inputs_embeds
690
690
- assert is_multimodal is not None
691
-
691
return _merge_multimodal_embeddings(
692
inputs_embeds=inputs_embeds,
693
multimodal_embeddings=multimodal_embeddings,
695
- is_multimodal=is_multimodal,
694
+ is_multimodal=_require_is_multimodal(is_multimodal),
695
)
696
697
def forward(
vllm/model_executor/models/qwen3_vl.py
+2
-1
@@ -93,6 +93,7 @@ from .interfaces import (
93
SupportsMRoPE,
94
SupportsMultiModal,
95
SupportsPP,
96
+ _require_is_multimodal,
97
)
98
from .qwen2_5_vl import (
99
Qwen2_5_VisionAttention,
@@ -1572,7 +1573,7 @@ class Qwen3VLForConditionalGeneration(
1573
if multimodal_embeddings is None or len(multimodal_embeddings) == 0:
1574
return inputs_embeds
1575
1575
- assert is_multimodal is not None
1576
+ is_multimodal = _require_is_multimodal(is_multimodal)
1577
1578
if self.use_deepstack:
1579
(