[Bug]: timestamp_granularities=[“segment”, “word”] only returns the last granularity for Whisper

当通过 LiteLLM Proxy 调用 /v1/audio/transcriptions ( whisper-1 ),并同时请求 timestamp_granularities=["segment", "word"] 时,代理的表单解析器只保留重复表单键的最后一个值,导致只有最后一个粒度生效,另一

快速结论:当通过 LiteLLM Proxy 调用 /v1/audio/transcriptions(whisper-1),并同时请求 timestamp_granularities=["segment", "word"] 时,代理的表单解析器只保留重复表单键的最后一个值,导致只有最后一个粒度生效,另一个被静默丢弃。

适用环境:LiteLLM Proxy,版本 v1.83.14-stable;调用模型 openai/whisper-1,请求参数 response_format="verbose_json"。Issue 未提及操作系统、Python、CUDA 或显卡信息。

最快修复方案:升级到 v1.100.0 或更高版本。该问题由 PR #37908 修复,首次发布于 v1.100.0。

注意事项:修复位于代理的表单解析逻辑(保持重复的 [] 表单字段全部值),并非 Whisper 请求参数命名本身。如果升级后仍复现,需要附带版本号和复现步骤回复 Issue。

问题场景

用户在 LiteLLM Proxy 中注册并调用 openai/whisper-1,通过 OpenAI SDK 请求 /v1/audio/transcriptions,使用 response_format="verbose_json" 并传入包含两个元素的 timestamp_granularities 数组。单值数组(["segment"]、["word"])返回正常,但包含两个值的组合请求永远只返回其中一个粒度。

报错原文

[Bug]: timestamp_granularities=["segment", "word"] only returns the last granularity for Whisper

['segment']         -> segments 10 words 0
['word']            -> segments 0  words 54
['word', 'segment'] -> segments 10 words 0
['segment', 'word'] -> segments 0  words 54

相关的四种调用结果表现为:

  • ["segment", "word"] → 只有 words,segments 为空
  • ["word", "segment"] → 只有 segments,words 为空
  • ["segment"] → segments 正常
  • ["word"] → words 正常

原因分析

Issue 作者给出最可能的原因:在 litellm/llms/openai/transcriptions/whisper_transformation.py 的 transform_audio_transcription_request 中,列表被存放在裸键 timestamp_granularities 下。OpenAI 的 multipart API 期望使用重复的带括号字段(timestamp_granularities[]=segment 和 timestamp_granularities[]=word),而普通列表在编码时会被折叠为一个值。

维护者确认的实际根因是代理的表单解析器:它过去只保留重复键的最后一个值,因此两个粒度中只有一个能传递给 Whisper。该问题与此前已修复的 #12407 / #10282(参数被完全丢弃)不同,之前的修复已存在,剩余问题是多值数组被截断为一个元素。

环境排查

  • 确认 LiteLLM Proxy 版本是否为 v1.83.14-stable 或更早的受影响版本。
  • 确认调用路径为 Proxy 的 /v1/audio/transcriptions,而非直接调用 OpenAI API。
  • 确认使用模型为 openai/whisper-1(whisper-1)。
  • 确认请求参数为 response_format="verbose_json",且 timestamp_granularities 传入包含两个元素的数组。
  • Issue 未提供操作系统、Python、CUDA、显卡、节点或依赖版本信息,这些项目无需作为必查项。

解决步骤

  1. 将 LiteLLM Proxy 升级到 v1.100.0 或更高版本,该版本包含 PR #37908 的修复。
  2. 升级后重新按照 Issue 的复现脚本调用:分别使用 ["segment"]、["word"]、["word", "segment"]、["segment", "word"] 进行请求。
  3. 如果仍复现该问题,按维护者要求在 Issue 中回复版本号和可复现的最小示例,以便重新打开 Issue。
  4. 在无法升级的临时场景中,可优先尝试拆分为两次请求:一次只传 ["segment"],一次只传 ["word"],再在应用侧合并结果(此做法为规避手段,Issue 未将其确认为官方修复方案)。

验证方法

升级到 v1.100.0 或更高版本后,复现脚本的输出中 ["segment", "word"] 和 ["word", "segment"] 都应同时返回 segments 和 words,即 segments > 0 且 words > 0,不再出现其中一个为空的情况。

参考来源

BerriAI/litellm #35937

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 27222

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注