[Bug]: /v1/realtime with Gemini Live stalls after the first output_audio_transcript.delta when the turn is triggered by streamed audio (text

该现象通常出现在通过代理的 /v1/realtime 使用 Gemini Live 模型、且回合由流式音频(VAD)触发时:服务端其实仍在正常推送事件,但客户端读到第一个 response.output_audio_transcript.delta 后不再消费 socket,最终表现为“卡住 + k

快速结论:该现象通常出现在通过代理的 /v1/realtime 使用 Gemini Live 模型、且回合由流式音频(VAD)触发时:服务端其实仍在正常推送事件,但客户端读到第一个 response.output_audio_transcript.delta 后不再消费 socket,最终表现为“卡住 + keepalive 超时”。应优先排查并修复客户端接收循环本身,而不是改代理配置。

适用环境:LiteLLM 代理 main-stable 1.106.0 / 1.106.2(main-stable 与 main-latest)、v1.107.0-rc.2;模型 gemini/gemini-3.8-live;通过 /v1/realtime?model=... 使用 OpenAI realtime 协议;代理侧开启 gemini_live_defer_setup: true、模型 mode: realtime。Issue 未记录操作系统、Python、CUDA 或显卡环境。

最快修复方案:暂无确认的一步代理侧修复方案。Issue 作者最终确认根因在其客户端脚本:读取任务在收到第一个 response.output_audio_transcript.delta 时因闭包变量触发 UnboundLocalError 崩溃,之后不再读取 socket。修复该脚本后,VAD 触发的回合在 1.106.2 上可正常走完。

注意事项:服务端日志显示 Gemini 已返回多个 delta 和 usageMetadata,因此仅凭代理日志“看起来正常”不能排除客户端问题;需要同时抓取客户端读取任务的异常。问题报告中列出的输入方式(继续送静音、在 response.created 后停输入)、转写开关、audio/pcmu 与 audio/pcm 切换均未改变结果;其中 audio/pcmu 请求下代理仍输出 pcm16 24 kHz 这一现象未被确认为修复项,仅可视为潜在异常。

问题场景

用户通过 LiteLLM 代理的 /v1/realtime 端点接入 Gemini Live 模型,使用流式音频作为输入。当响应由音频输入(VAD)触发时,客户端依次收到 conversation.item.input_audio_transcription.completed、response.created、response.output_item.added、conversation.item.added、response.content_part.added 和一个 response.output_audio_transcript.delta 后不再收到任何事件;约 60 秒后代理侧 websocket 以 1011 keepalive ping timeout 断开。由文本项(conversation.item.create + response.create)触发的同一会话则一切正常,包括音频 delta、转写和 response.done。

报错原文

[Bug]: /v1/realtime with Gemini Live stalls after the first output_audio_transcript.delta when the turn is triggered by streamed audio (text-triggered turns work)

  0.3s session.updated
  3.9s conversation.item.input_audio_transcription.completed
  4.0s response.created
  4.0s response.output_item.added
  4.0s conversation.item.added
  4.0s response.content_part.added
  4.0s response.output_audio_transcript.delta                  (only one, then silence)
  ... 70 s later: ConnectionClosedError: sent 1011 (internal error) keepalive ping timeout; no close frame received

transformation.py:1253 - Realtime Response Transform: Gemini frame keys=['serverContent']
transformation.py:1633 - Realtime Response Transform: OpenAI event=response.output_audio_transcript.delta
transformation.py:1253 - Realtime Response Transform: Gemini frame keys=['serverContent', 'usageMetadata']
DEBUG:    > CLOSE 1011 (internal error) keepalive ping timeout [24 bytes]

原因分析

根据 Issue 作者的最终确认,根因不在代理或 Gemini Live:客户端脚本的 socket 读取任务在收到第一个 response.output_audio_transcript.delta 时抛出 UnboundLocalError(闭包变量在赋值前被引用)而崩溃,读取循环随之终止,socket 不再被消费。这会导致服务端发送的事件堆积,客户端表现为“只收到一个 delta 后静默”,随后因不响应 keepalive ping 而被代理以 1011 关闭。

可能的干扰因素:Issue 中提到代理在 input_audio_transcription.completed 时可能无条件注入 response.create(参考 #31726),以及未启用 gemini_live_defer_setup 时工具/指令可能丢失(#46685)。但这两点不是本例卡顿的原因,仅在代理侧行为需要进一步排查时作为参考。

环境排查

  • 确认 LiteLLM 版本:Issue 中涉及 1.106.0、1.106.2、v1.107.0-rc.2。
  • 确认代理配置中模型 mode: realtime、gemini_live_defer_setup: true。
  • 确认客户端使用 OpenAI realtime 协议连接 /v1/realtime?model=...。
  • 在客户端为接收循环加上异常捕获与日志,重点检查处理 response.output_audio_transcript.delta 的分支是否存在闭包变量未初始化或作用域错误。
  • 服务端开启 LITELLM_LOG=DEBUG,确认代理是否持续输出 OpenAI event=response.output_audio_transcript.delta 及 usageMetadata;若持续输出而客户端无输出,基本可定位为客户端读取问题。
  • Issue 未提供操作系统、Python、CUDA、PyTorch 版本,这些项目无需作为排查前提。

解决步骤

  1. 在客户端脚本中包裹接收循环(例如对 async for event in ws 或等价读取逻辑)的 try/except,将异常完整打印,包括 UnboundLocalError 的 traceback。
  2. 检查处理 response.output_audio_transcript.delta 的代码路径,确认所有闭包变量在使用前已赋值,避免在首次 delta 时进入未初始化分支。
  3. 修复脚本后重新发起由流式音频(VAD)触发的会话,保持代理配置不变。
  4. 若客户端异常已排除但仍卡顿,再对照 #31726 检查代理是否在转写完成时额外注入 response.create,以及是否启用了 gemini_live_defer_setup;此方向属于推测性排查,可优先尝试。

验证方法

修复客户端脚本后,重放同样的音频触发流程,确认客户端能持续收到多个 response.output_audio_transcript.delta、response.output_audio.delta,并最终收到 response.done;同时不再出现约 60 秒后的 1011 keepalive ping timeout。代理侧 DEBUG 日志应显示 Gemini 帧与转写事件被持续转换并写出。

参考来源

BerriAI/litellm #47975

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 29757

发表回复

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