Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

GPTLiveModel: interrupting a turn while a tool is running leaves the call unanswered and the session stops replying

已关闭
#7,679 7 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

@Li-john1021 已经在做这个了。

开始于 2026年10月9日。

  • #7700 来自 @Li-john1021 —— 已关闭,未合并
  • #7753 来自 @longcw —— 已关闭,未合并
  • #7759 来自 @longcw —— 已合并

评估

难度
4/5
预计耗时
3-5 天
新手友好度
30/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
python

调研方向

Start in the realtime generation task in livekit-agents/livekit/agents/voice/agent_activity.py (around lines 4608-4640), where interrupted turns commit only finished tool results, and trace how _backend_open_calls is populated and cleared. Follow the existing _interrupted_tool_output handoff path to see how an error output is produced. Done means an interrupted, still-running call receives exactly one output, function_tools_executed fires, and the session replies to the next question. Reproduce it with a delayed tool and session.interrupt(force=True) first.

由索引模型根据 Issue 内容生成。

描述

Bug Description

With GPTLiveModel, if session.interrupt() is called while the voice model is still speaking its filler and a delegated tool call is running, that call never gets an output. On an interrupted turn, the realtime generation task only commits results of tools that already finished (code). For the tool that is still running, no FunctionCallOutput is produced, function_tools_executed is not emitted, and no response.item.create is sent. The call stays in _backend_open_calls, and from then on the session does not reply to the user at all.

#6785 made every call get exactly one output, but this case (a tool still running when the turn is interrupted) is still left without one.

Expected Behavior

The call is answered when the interrupted turn drops it (for example with an error output, as _interrupted_tool_output does for a handoff), so the conversation can continue.

Reproduction Steps
async def lookup_fee(product: str) -> str:
    await asyncio.sleep(8)
    return "The renewal fee is 1,480 yen."

model = openai.realtime.GPTLiveModel(responses_options={"model": "gpt-6-luna"})
session = AgentSession(llm=model)
await session.start(agent=Agent(instructions="Always call lookup_fee for prices.",
                                tools=[function_tool(lookup_fee)]))
# ask a price question; 0.5 s after the tool starts, while the filler is still playing:
session.interrupt(force=True)
# ~20 s later, ask another question

In voice tests:

  • interrupt during the filler while the tool runs: 4/4 runs never sent the tool output, and the second question got no reply (it was transcribed, but no server events came for ~35 s until close)
  • interrupt after the filler (agent thinking): 3/3 normal
  • interrupt a reply that has no tool call: 3/3 normal
  • same as the first case, then send a FunctionCallOutput for the open call 3 s later: 3/3 recovered and the second question was answered
Operating System

Windows 11

Models Used

GPT-Live (gpt-live-1) with a Responses backend (gpt-6-luna)

Package Versions
livekit==1.1.18
livekit-agents==1.8.3
livekit-plugins-openai==1.8.3
python==3.13

The code path above is unchanged in 1.8.5.

Additional Context

Our app calls session.interrupt(force=True) from error recovery and before a SIP transfer, so this can leave a phone call silent. Sending an output for the open call ourselves after the interrupt works around it.

主要语言
Python
星标
14.6k
派生
3.9k
平均合并
2 天 7 小时
30 天内合并 PR
228

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

livekit/agents 的其他 Issue

查看 livekit/agents 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。