Qwen2-Audio 长音频崩溃修复,强制音频截断
值得花 5 分钟精读,但要连 PR body 一起读——合入后的代码只有一行 `truncation=True,`,真正有价值的是它背后的根因链路:`call_hf_processor()` 的 `setdefault("truncation", False)` 如何经 `Qwen2AudioProcessor` 泄漏进 Whisper 特征提取器,最终以 `input_features dim[2] expected 3000` 的方式拖垮 EngineCore。 关注三个设计决策:一是把修复放在最贴近模型语义的 `_preprocess_hf_mm_data()`,用"显式键优先于 `setdefault`"做局部覆盖,而不是修改共享的全局默认值,避免波及文本占位序列对齐;二是"静默截断"而非放宽校验,保持了 Qwen2-Audio 固定 30s 窗口的模型契约;三是接受 reviewer 建议删掉解释性注释,使根因知识只存在于 PR 描述中,后续维护者容易丢失上下文。 给后续动作两条建议:(1)把这个 case 固化成回归测试,例如在 `tests/models/multimodal/` 下用一段 >30s 的合成音频断言 `input_features` 形状为 3000 帧;(2)顺着同一透传路径排查其它音频类 MM 处理器(Whisper 系、Omni 系)是否同样依赖后端 `truncation=True` 默认值,把一次性修复升级为一次性排查。