@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 8fd31f6245
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 8, 16:30 UTC

[Bugfix] Voxtral prompt/audio placeholder alignment (#34140)

Signed-off-by: Artus KG <artuskg@gmail.com>

Artus Krohn-Grimberghe committed Feb 9, 2026 at 20:30 UTC 8fd31f62452960efdd6dd7b912c388f487536b3c
1 file changed +21 -3
vllm/model_executor/models/voxtral.py
+21 -3
@@ -187,6 +187,7 @@ class VoxtralProcessingInfo(BaseProcessingInfo):
187 def get_data_parser(self):
188 return MultiModalDataParser(
189 target_sr=self.get_hf_processor().sampling_rate,
190 + target_channels=1,
191 expected_hidden_size=self._get_expected_hidden_size(),
192 )
193
@@ -289,10 +290,24 @@ class VoxtralMultiModalProcessor(BaseMultiModalProcessor[VoxtralProcessingInfo])
290 processor = self.info.get_hf_processor(**hf_processor_mm_kwargs)
291
292 audio_id = processor.audio_token_id
293 + out_mm_data = out_mm_kwargs.require_data()
294 + out_audio_items = out_mm_data.get("audio", [])
295
296 def get_replacement(item_idx: int):
294 - audios = mm_items.get_items("audio", AudioProcessorItems)
295 - audio_len = audios.get_audio_length(item_idx)
297 + if item_idx < len(out_audio_items):
298 + out_audio_data = out_audio_items[item_idx].get_data()
299 + audio_arr = out_audio_data["audio_arrays"]
300 + if isinstance(audio_arr, (torch.Tensor, np.ndarray)):
301 + audio_len = len(audio_arr)
302 + else:
303 + raise TypeError(
304 + "Unexpected type for audio_arrays in out_mm_kwargs: "
305 + f"{type(audio_arr)}"
306 + )
307 + else:
308 + # Fallback for unexpected processor outputs.
309 + audios = mm_items.get_items("audio", AudioProcessorItems)
310 + audio_len = audios.get_audio_length(item_idx)
311
312 nb_audio_tokens = processor.get_num_audio_tokens(audio_len)
313
@@ -495,7 +510,10 @@ class VoxtralForConditionalGeneration(
510 return TokensPrompt(
511 prompt_token_ids=tokenized.tokens,
512 multi_modal_data={
498 - "audio": (tokenized.audios[0].audio_array, stt_config.sample_rate)
513 + "audio": [
514 + (audio.audio_array, stt_config.sample_rate)
515 + for audio in tokenized.audios
516 + ],
517 },
518 )
519