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

Realtime Session Update Configuration

未关闭
#2,199 0 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

@LuminaX-alt 已经在做这个了。

开始于 2025年8月2日。

  • #31 来自 @LuminaX-alt —— 未关闭
  • #3730 来自 @sylvesterkaczmarek —— 未关闭

评估

难度
3/5
预计耗时
1-2 天
新手友好度
42/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
停滞
技术栈
python
领域
api

调研方向

从 openai.resources.beta.realtime.AsyncRealtimeConnection.send 开始,检查 SessionUpdateEvent 如何使用 exclude_defaults=True 进行序列化。将 Session 模型的 turn_detection 默认值与 SessionCreatedEvent 和 SessionUpdatedEvent 示例中显示的服务器端 VAD 值进行比较。当带有 turn_detection=None 的 SessionUpdateEvent 能够按预期更改 realtime 会话配置时,即视为完成。

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

描述

bug sdk
Confirm this is an issue with the Python library and not an underlying OpenAI API
  • This is an issue with the Python library
Describe the bug

The intended behavior is to disable server-side VAD for the OpenAI Realtime model. We are using LiveKit to facilitate the websocket connection, but the bug is in the OpenAI library.

In particular, the openai.resources.beta.realtime.AsyncRealtimeConnection.send method uses event.to_json(use_api_names=True, exclude_defaults=True, exclude_unset=True) to serialize the SessionUpdateEvent. The issue is with the exclude_defaults=True parameter which doesn't include any values that are equal to their default values.

We have confirmed the two serial SessionUpdateEvents get composed, so a change from the first event is reflected in the resulting configuration of the second event. This makes the exclude_defaults=True argument particularly problematic because there is now no way to ever change a default and then change it back.

There are a couple of problems here. For VAD in particular, despite the default value of turn_detection=None in Session(BaseModel), it is in fact not None and instead some default server-side VAD values. When you try to pass None in the SessionUpdateEvent you can't change the turn_detection value because (1) exclude_defaults=True prevents you and (2) the default value is inconsistent with what actually exists by default.

There are two solutions:

  • Remove exclude_defaults=True
  • Update the default turn_detection in Session
To Reproduce

Please follow the steps below.

Code snippets

When running python minimal_worker.py console using LiveKit agents on branch dev-1.0 with the following model configuration:

agent = VoiceAgent(
    instructions="You are a helpful assistant that can answer questions and help with tasks.",
    llm=openai.realtime.RealtimeModel(
        model="gpt-4o-realtime-preview-2024-12-17",
        voice="alloy"
    )
)

Then, within the _main_task of RealtimeSession, we hardcode the turn_detection=None parameter as follows:

self._msg_ch.send_nowait(
    SessionUpdateEvent(
        type="session.update",
        session=session_update_event.Session(
            model=self._realtime_model._opts.model,  # type: ignore
            voice=self._realtime_model._opts.voice,  # type: ignore
            input_audio_transcription=input_audio_transcription,
            turn_detection=None
        ),
        event_id=utils.shortuuid("session_update_"),
    )
)

The issue here is that turn_detection never gets updated properly according to the SessionUpdatedEvent. This is related to the problem that this PR was attempting to solve.

For example, we get:

  • The SessionCreatedEvent with the default turn_detector. By the way, even after passing the query param to the websocket uri turn_detector= for a null value, it still returns with server-side VAD.
SessionCreatedEvent(..., turn_detection=TurnDetection(create_response=True, interrupt_response=True, prefix_padding_ms=300, silence_duration_ms=200, threshold=0.5, type='server_vad'), ...) type='session.created')
  • After passing the turn_detector=None argument to the SessionUpdateEvent as mentioned above, we still eventually observe the SessionUpdatedEvent.
SessionUpdatedEvent(..., turn_detection=TurnDetection(create_response=True, interrupt_response=True, prefix_padding_ms=300, silence_duration_ms=200, threshold=0.5, type='server_vad'), ...), type='session.updated')
OS

macOS

Python version

Python v3.13

Library version

openai v1.66.3

主要语言
Python
星标
31.8k
派生
7.3k
平均合并
1 天 3 小时
30 天内合并 PR
131

环境准备

在 Codespaces 中打开

在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。

从这里开始

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

openai/openai-python 的其他 Issue

查看 openai/openai-python 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

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