@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 3a3b06ee70
Fork 0

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 (