Skip to main content

TheoApiError

所有 REST API 错误都会以带有结构化详情的 TheoApiError 实例抛出。

错误属性

错误类型

TheoApiError 是基类 —— 下面每种错误都是 TheoApiError 的实例,因此现有的 catch 代码块仍然可以正常工作。若需要精确处理,请基于子类(或 err.kind)分支:
  • TheoTimeoutError(kind: "timeout")—— SDK 在 timeoutMs(单次请求 / 流连接)或 streamIdleTimeoutMs(流空闲)超时后主动中止。相关超时预算保存在 .timeoutMs 中。不会在 POST 请求上自动重试。
  • TheoCancelledError(kind: "cancelled")—— 你通过 TheoStream.cancel() 或传给 waitForJob() 的 AbortSignal 主动中止了请求。
  • TheoUsageError(继承自 Error,而非 TheoApiError)—— 在发起任何网络调用之前,因误用而同步抛出,例如向 complete() / stream() 传入 mode: "research" | "video"(应改用异步任务方法)。

流式错误

SSE 的 error 事件携带的信封结构与 REST 错误响应体相同——两者可以复用同一套处理逻辑。
这一点与 0.1.x 版本不同,当时流式错误只有 { message }。完整的信封结构请参见流式补全参考文档。

首次运行诊断

theo.verify() 不会直接抛出原始错误,而是返回带有修复建议的结构化诊断结果:
遇到 401 错误时,应将此调用作为排查的第一步。常见故障场景请参见401 故障排查。

自动重试

SDK 会在以下情况下自动重试:
  • 429 —— 触发限流(遵循 Retry-After 响应头,最多等待 60 秒)
  • 5xx —— 服务器错误(指数退避:1 秒、2 秒、4 秒,最长 8 秒) 客户端错误(400、401、403、404)不会被重试。非幂等的 POST 请求(complete、research、video)的超时不会被重试——重新发起请求可能导致请求被重复执行并重复计费;如果确实需要重试,请自行实现重试逻辑并配合 Idempotency-Key 使用。完整的重试模型(包括流式空闲超时)请参见超时与重试。 配置方式:

取消请求

TheoStream.cancel() 会中止正在进行的流式请求,且不会抛出异常。底层的 fetch 会通过 AbortController 被中止;后续事件将不再到达,迭代器会正常结束。