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() 不会直接抛出原始错误,而是返回带有修复建议的结构化诊断结果:
自动重试
SDK 会在以下情况下自动重试:- 429 —— 触发限流(遵循
Retry-After响应头,最多等待 60 秒) - 5xx —— 服务器错误(指数退避:1 秒、2 秒、4 秒,最长 8 秒)
客户端错误(400、401、403、404)不会被重试。非幂等的 POST 请求(
complete、research、video)的超时不会被重试——重新发起请求可能导致请求被重复执行并重复计费;如果确实需要重试,请自行实现重试逻辑并配合Idempotency-Key使用。完整的重试模型(包括流式空闲超时)请参见超时与重试。 配置方式:
取消请求
TheoStream.cancel() 会中止正在进行的流式请求,且不会抛出异常。底层的 fetch 会通过 AbortController 被中止;后续事件将不再到达,迭代器会正常结束。
