error.code 分支处理,不要依赖 HTTP 状态码或文案。
对话补全、Responses 和 Embeddings 的错误会带上
request_id,同时通过 X-Request-ID 响应头返回。请保存它:支持人员凭它定位单次调用。控制台用量日志始终显示汇总和图表;客户账户默认不显示逐条请求列表,需要核查某次调用时,请把请求 ID 发给 support@omnirelay.ai。
请求参数错误会在可定位时返回 error.param,例如 temperature 或 reasoning.effort;此字段只包含参数名,不包含参数值。请同时核对模型能力与推理强度组合限制。Responses 返回原生参数名。平台预算/协议校验发生在发送前;模型服务方以 HTTP 400 或 422 拒绝请求时释放预留、不收费;能识别的错误码和安全字段路径会返回,否则返回 invalid_parameter。部分模型会忽略不支持的字段而不报错,这类调用正常成功,不返回 error.param。
data: 事件中返回同样的 error 对象(对话补全),或返回带 code 和 message 的 error 事件(Responses),且不会以 [DONE] 结束。
错误码
模型服务方错误(upstream_*)
这些错误码表示调用已到达模型服务方,并在服务方侧出错。是否收费取决于模型输出是否已经送达你:
- 尚未送达任何输出:预留立即释放,不收费。非流式调用、以及在首个输出前失败的流式调用都属于这种情况。
- 已送达部分输出(流式中途断开),或模型服务方的回答已到达但无法核验:调用转入人工核对,按模型服务方用量记录结算。不要自动重发;预留长时间未释放时,携请求 ID 联系支持。
upstream_rate_limited(429)见上表:它是处理前的拒绝,从不收费。
耗时超过约 25 秒的图片调用会在完成前先返回 200,因此上述错误也可能作为 200 响应的 JSON 正文返回,请先检查解析后的正文中是否有 error。
重试建议
真实推理不能仅凭 HTTP 状态判断是否收费,请关闭 SDK 自动重试,并按error.code 决定:
- 标明不收费的错误码(全部 4xx 拒绝、
upstream_rejected、channel_unavailable、runtime_maintenance)可以重试;rate_limited、concurrency_limited和upstream_rate_limited请退避后重试。 upstream_transport_error、upstream_timeout和流式相关错误码,对非流式调用或尚未送达输出的流式调用不收费,可以重试。- 转入核对的错误码,或已送达部分输出后断开的流式调用,不要自动重发;需要确认结果时,检查余额并携请求 ID 联系支持。
Python