Prhub

#46705 Migrate Voxtral to mistral-common 1.11.5 audio API

原始 PR 作者 juliendenize 合并时间 2026-06-27 02:06 文件变更 12 提交数 3 评论 2 代码增减 +22 / -29

执行摘要

迁移 Voxtral 至 mistral-common 1.11.5 音频 API

根据 PR body,目的是「prevent deprecation warnings」,即消除 mistral_common 旧版 API 的弃用警告,并适配新版本音频 API。作者在 Issue 评论中提到上游存在回归问题,需先在 mistral_common 修复后再更新版本。

该 PR 属于常规维护,展示了如何优雅地上游依赖 API 变化。对于维护多模态模型的开发人员有一定参考价值,但非关键变更,可按需阅读。

讨论亮点

作者在 Issue 评论中指出:由于 mistral-common 1.11.4 存在图像重排序的回归问题,导致测试失败,因此决定先在上游修复后发布 1.11.5 再更新此 PR。评论内容为:“Interesting there is a failure here. It is a regression test we lack in mistral-common regarding image re-ordering i'll first need to fix it in mistral-common, make a 1.11.5 and update here then :)”。此外无其他 reviewer 讨论,已由维护者 DarkLight1337 批准。

实现拆解

  1. 导入路径迁移:将 from mistral_common.audio import Audio 替换为 from mistral_common.tokens.tokenizers.audio import Audio,同时移除 RawAudio 的导入,该符号在新版 API 中已废弃。涉及文件:vllm/model_executor/models/voxtral.pyvllm/model_executor/models/voxtral_realtime.pyexamples/generate/multimodal/audio_language_offline.pytests/models/multimodal/generation/test_voxtral.pytests/models/multimodal/generation/test_voxtral_realtime.py

  2. 构造 API 替换

    • AudioChunk(input_audio=RawAudio.from_audio(audio_item)) 改为 AudioChunk.from_audio(audio_item)——新版 AudioChunk 提供了直接从 Audio 对象构造的类方法。
    • get_generation_prompt 中,将 TranscriptionRequestaudio 参数从 RawAudio.from_audio(audio) 改为 audio.to_base64(audio.format),即直接以 Base64 编码传递音频。
  3. 依赖版本升级:在 requirements/test/cuda.inrequirements/test/rocm.in 等测试依赖配置中,将 mistral_common[image,audio] 的最低版本从 >=1.11.3 提升至 >=1.11.5,以确保使用经过回归修复的稳定版本。

文件 模块 状态 重要度
vllm/model_executor/models/voxtral.py 多模态 modified 6.09
vllm/model_executor/models/voxtral_realtime.py 多模态 modified 5.56
examples/generate/multimodal/audio_language_offline.py 示例 modified 5.4
tests/models/multimodal/generation/test_voxtral.py Voxtral 测试 modified 4.58
tests/models/multimodal/generation/test_voxtral_realtime.py Voxtral 实时测试 modified 4.54
requirements/test/cuda.in 依赖配置 modified 2.85

关键符号

VoxtralProcessingInfo.get_dummy_processor_inputs VoxtralForConditionalGeneration.get_generation_prompt VoxtralForConditionalGeneration.get_speech_to_text_config VoxtralRealtimeForConditionalGeneration.get_generation_prompt run_voxtral (example) _get_prompt (test)

关键源码片段

vllm/model_executor/models/voxtral_realtime.py data-contract

Voxtral Realtime 模型主文件,同样需要导入和 API 迁移

# vllm/model_executor/models/voxtral_realtime.py ( 更改后 )
# 新导入
from mistral_common.tokens.tokenizers.audio import Audio, AudioConfig# 之前导入的 RawAudio 已移除
# ...def get_generation_prompt(
    cls,
    stt_params: SpeechToTextParams,
) -> PromptType:
    audio = Audio(audio, int(stt_config.sample_rate), format="wav")
    req = TranscriptionRequest(
        model=model_config.model,
        audio=audio.to_base64(audio.format), # 之前 : RawAudio.from_audio(audio)
        language=language,
        streaming=StreamingMode.OFFLINE,
    )
    # ...

评论区精华

mistral-common 回归问题导致测试失败 other

作者发现 mistral-common 1.11.4 存在图像重排序的回归问题,导致测试失败,需先在上游修复后再发布新版本更新此 PR。

结论:作者修复了 mistral-common 并发布 1.11.5,然后将 PR 更新至该版本。最终测试通过。 · 已解决

风险与影响

主要风险在于依赖升级:如果 mistral-common 1.11.5 引入其他兼容性问题,可能影响 Voxtral 模型运行。但由于 PR 同时更新了测试和示例,且仅在 Voxtral 相关路径中修改,风险范围限于该模型。另外,audio.to_base64() 的替换可能改变音频传输格式,需确认服务端是否支持 Base64 编码;从代码看 TranscriptionRequest 预期此格式,风险较低。

影响范围:仅影响使用 Voxtral 模型的用户,包括 Vixtral 和 Voxtral-Realtime 两个变体。影响程度:低——功能不变,仅内部 API 调用方式变化。用户无需修改代码,但需要升级 mistral-common 依赖至 >=1.11.5。CI 测试已覆盖核心路径,回归风险小。

依赖升级 窄影响面

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论