Field note · vLLM
IndexError in the multimodal processor when vLLM initializes Mistral Small 4
A change to how multimodal processors handle token inputs crashes Pixtral-architecture models during dummy-input construction, before the server ever accepts a request.
- Hardware
- NVIDIA DGX Spark · GB10 (SM121) · aarch64
- CUDA
- 13.0
- Driver
- 580.142
- Software
- vLLM 0.18.1rc1.dev171+g9c3ae04bf (main)
IndexError: list index out of rangeSymptom
Serving mistralai/Mistral-Small-4-119B-2603-NVFP4, the server never gets as far as accepting a request. It crashes during initialization, while vLLM is building a dummy multimodal input to size its encoder budget:
File "/usr/local/lib/python3.12/dist-packages/vllm/v1/engine/async_llm.py", line 143, in __init__
self.input_processor = InputProcessor(self.vllm_config, renderer)
File "/usr/local/lib/python3.12/dist-packages/vllm/v1/engine/input_processor.py", line 61, in __init__
mm_budget = MultiModalBudget(vllm_config, mm_registry)
File "/usr/local/lib/python3.12/dist-packages/vllm/multimodal/encoder_budget.py", line 87, in __init__
all_mm_max_toks_per_item = get_mm_max_toks_per_item(
File "/usr/local/lib/python3.12/dist-packages/vllm/multimodal/encoder_budget.py", line 32, in get_mm_max_toks_per_item
mm_inputs = mm_registry.get_dummy_mm_inputs(
File "/usr/local/lib/python3.12/dist-packages/vllm/multimodal/registry.py", line 240, in get_dummy_mm_inputs
mm_inputs = processor.apply(
File "/usr/local/lib/python3.12/dist-packages/vllm/multimodal/processing/processor.py", line 1685, in apply
) = self._cached_apply_hf_processor(inputs, timing_ctx)
File "/usr/local/lib/python3.12/dist-packages/vllm/model_executor/models/pixtral.py", line 277, in _cached_apply_hf_processor
prompt_ids, mm_info, _ = super()._cached_apply_hf_processor(inputs, timing_ctx)
File "/usr/local/lib/python3.12/dist-packages/vllm/multimodal/processing/processor.py", line 1496, in _cached_apply_hf_processor
mm_kwargs, mm_prompt_updates = self._merge_mm_kwargs(
File "/usr/local/lib/python3.12/dist-packages/vllm/multimodal/processing/processor.py", line 1374, in _merge_mm_kwargs
missing_kwargs_item = missing_kwargs[missing_next_idx]
Pixtral reaches that point through its own override of _cached_apply_hf_processor (pixtral.py:277) before landing in the shared _merge_mm_kwargs — which is why this is specific to the Pixtral architecture, not every multimodal model vLLM supports.
Root cause
Introduced by commit 502c41a8f, "[Model] Use helper function to run MM processors with token inputs (where applicable)" (PR #38018). That change altered how multimodal processors handle token inputs, and the Pixtral architecture — the vision-language architecture behind Mistral Small 4 — crashes while computing dummy multimodal inputs during initialization, before any real request is processed. The commit immediately before it, 290809456, works fine with this model.
Fix
Revert the regression:
git revert 502c41a8f
This is not a DGX Spark problem. The crash happens during model initialization, in shared multimodal-processing code, before any hardware-specific path is reached — it likely affects every Pixtral or Mistral Small 4 deployment running this vLLM revision, regardless of hardware. If you're hitting an IndexError at _merge_mm_kwargs during vLLM init on a Pixtral-family model, checking whether your build includes 502c41a8f is worth doing before looking anywhere else.