TypeError: Object of type Omit is not JSON serializable

在 OpenAI Python SDK 的 Realtime 连接管理中,如果通过 manager.send() 发送的 dict 事件里带有 omit 之类的占位值,会在 JSON 序列化阶段抛出 TypeError: Object of type Omit is not JSON seriali

快速结论:在 OpenAI Python SDK 的 Realtime 连接管理中,如果通过 manager.send() 发送的 dict 事件里带有 omit 之类的占位值,会在 JSON 序列化阶段抛出 TypeError: Object of type Omit is not JSON serializable。优先排查事件里是否混入了 omit/NotGiven 这类未清理的 SDK 占位对象。

适用环境:Issue 中已确认涉及 OpenAI Python SDK、Realtime API、AsyncRealtimeConnectionManager.send() 与 RealtimeConnectionManager.send(),以及同步和异步客户端。Issue 未提供操作系统、Python、CUDA、显卡或模型版本信息,这些项目无需强行对号入座。

最快修复方案:升级到包含 PR #3944 的 OpenAI Python SDK 版本。该修复使排队的 Realtime 事件使用与已连接后发送相同的序列化处理,同步和异步客户端均受益。

注意事项:Issue 未给出具体修复版本号,需以实际发布版本为准;在无法升级时,可优先尝试在传入 manager.send() 前自行移除 omit/NotGiven 字段,但这属于临时规避,非 Issue 已验证的一步修复方案。

问题场景

用户使用 OpenAI Python SDK 的 Realtime 功能,在连接建立前通过 RealtimeConnectionManager.send() 或 AsyncRealtimeConnectionManager.send() 发送 dict 形式的事件。例如发送 response.cancel 事件时,把可选的 event_id 设置为 omit。此时预连接阶段的发送逻辑直接对该 dict 调用 json.dumps(),而不会像连接建立后的 connection.send() 那样先经过 maybe_transform() 清理 Omit/NotGiven 占位对象,从而触发序列化异常。

报错原文

TypeError: Object of type Omit is not JSON serializable

原因分析

最可能的原因是预连接阶段的 manager.send() 与连接完成后的 connection.send() 使用了不同的序列化路径。前者对 dict 事件直接执行 json.dumps(event),后者会先调用 maybe_transform(),把 SDK 内部用于表示“省略/未提供”的 Omit、NotGiven 等对象剔除或转换掉。因此,只要事件 dict 中存在 omit 这类占位值,预连接发送就会在 JSON 序列化环节失败。

环境排查

  • 确认 OpenAI Python SDK 版本:是否已包含 PR #3944 的修复。
  • 确认使用的是 Realtime 相关接口:RealtimeConnectionManager.send() 或 AsyncRealtimeConnectionManager.send()。
  • 检查发送的事件 dict 中是否包含 omit、NotGiven 或类似 SDK 占位对象。
  • 确认问题发生在“预连接”阶段,而不是连接建立后的 connection.send() 阶段。
  • Issue 未提供 Python、操作系统、CUDA、PyTorch、显卡等信息,无需额外核查这些项目。

解决步骤

  1. 先确认当前 SDK 版本是否已包含 PR #3944 的改动;若没有,升级到包含该修复的 OpenAI Python SDK 版本。
  2. 升级后,用同样的事件 dict 重新测试预连接发送,例如 {"type": "response.cancel", "event_id": omit}。
  3. 如果暂时无法升级,可优先尝试在调用 manager.send() 之前手动移除事件中的 omit/NotGiven 字段,避免不可序列化对象进入 json.dumps()。
  4. 若使用异步客户端,也同步验证 AsyncRealtimeConnectionManager.send(),因为 Issue 明确提到同步与异步客户端都在 PR #3944 的修复范围内。

验证方法

使用相同的复现代码重新执行,确认不再出现 TypeError: Object of type Omit is not JSON serializable。同时分别检查同步和异步客户端的预连接发送路径,确认事件能够正常排队并发送。Issue 中维护者表示已在 PR #3944 中修复并关闭,因此升级后行为应与已连接后的发送路径保持一致。

参考来源

openai/openai-python #3402

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 25339

发表回复

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