[Bugfix] Reject tokenizer-less Qwen VL processor init (#54886)
Signed-off-by: Luyi Xiao <81631911+luyixiao95@users.noreply.github.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Luyi Xiao committed
Sep 3, 2026 at 21:25 UTC
8a728663c1c3eeace834a95f5654fa653cc1998c
3 files changed
+14
tests/model_executor/test_qwen3_omni.py
+1
@@ -144,6 +144,7 @@ def test_qwen3_omni_get_updates_use_audio_in_video(
144
145
# Create a mock context
146
mock_ctx = Mock(spec=InputProcessingContext)
147
+ mock_ctx.tokenizer = mock_tokenizer
148
149
# Create processing info
150
info = Qwen3OmniMoeThinkerProcessingInfo(mock_ctx)
vllm/model_executor/models/terratorch.py
+3
@@ -169,6 +169,9 @@ class TerratorchInputBuilder(BaseDummyInputsBuilder[TerratorchProcessingInfo]):
169
170
171
class TerratorchMultiModalProcessor(BaseMultiModalProcessor[TerratorchProcessingInfo]):
172
+ # Terratorch models, including Prithvi, consume tokenizer-free inputs.
173
+ requires_tokenizer = False
174
+
175
def _get_mm_fields_config(
176
self,
177
hf_inputs: BatchFeature,
vllm/multimodal/processing/processor.py
+10
@@ -8,6 +8,7 @@ from enum import Enum
8
from functools import lru_cache
9
from typing import (
10
TYPE_CHECKING,
11
+ ClassVar,
12
Generic,
13
NamedTuple,
14
Protocol,
@@ -1033,6 +1034,8 @@ class BaseMultiModalProcessor(ABC, Generic[_I]):
1034
Not to be confused with `transformers.ProcessorMixin`.
1035
"""
1036
1037
+ requires_tokenizer: ClassVar[bool] = True
1038
+
1039
def __init__(
1040
self,
1041
info: _I,
@@ -1042,6 +1045,13 @@ class BaseMultiModalProcessor(ABC, Generic[_I]):
1045
) -> None:
1046
super().__init__()
1047
1048
+ if self.requires_tokenizer and info.ctx.tokenizer is None:
1049
+ raise ValueError(
1050
+ f"{type(self).__name__} requires a tokenizer and cannot be "
1051
+ "initialized when `skip_tokenizer_init=True`. Disable "
1052
+ "`--skip-tokenizer-init`."
1053
+ )
1054
+
1055
self.info = info
1056
self.dummy_inputs = dummy_inputs
1057
self.cache = cache