CSSwitch 版本
v0.8.4
macOS 版本 + 芯片
macOS 26.6 (25G72) / arm64
用的是哪个 provider
自定义 / 其它
复现步骤
ai 撰写
[Bug] OpenCode Go 间歇性失败:30s 超时 502 + 上游 400「Thinking mode does not support this tool_choice」
环境
- CSSwitch 版本:v0.8.4(public artifact)
- macOS 版本 + 芯片:macOS 26.6 (25G72) / arm64
- Claude Science:
claude-science 0.1.18-dev.20260709.t211149.shab3f5130(官方 sandbox,CSSwitch 托管运行时)
- 用的是哪个 provider:OpenCode Go(
OpenCode Go — OpenAI Chat 模板,https://opencode.ai/zen/go/v1,Bearer key;也试过 custom-openai 模板同样复现)
- 网络:iPhone 个人热点(Wi-Fi)
复现步骤
- CSSwitch 选 OpenCode Go,一键启动沙箱
- 在 Science 里正常对话一段时间(几分钟到几十分钟)
- 对话开始持续失败:模型下拉变 No models,聊天提示 “Claude is temporarily unavailable — retrying… · Check service status”
- 等几分钟到十几分钟自动恢复;再隔一阵又复发
- 同一台机器切到国内 provider(硅基流动 / DeepSeek)后完全正常,不复发
期望结果 / 实际结果
期望:opencode.ai 上游可用时,Science 对话稳定。
实际:间歇性整段失败,自愈后又复发。Science 服务端日志出现三类错误:
1) 每次恰好 30 秒超时的 502(最常见)
[perf] llm: frame=908aed08 ttft=n/a total=30056ms in=0 out=0 ... model=claude-sonnet-5 result=error
[LLM] Streaming server error (attempt 1), retrying in 1.20s: Error: 502 {"type":"error","error":{"type":"api_error","message":"error sending request for url (https://opencode.ai/zen/go/v1/chat/completions)"}}
- 所有尝试
total 都精确落在 30000–30070 ms(网关 30s 总超时上限)
- 一次失败窗口内连续 attempt 1→10 全部 502 后放弃;计数:
error sending request ×109,Streaming server error ×106
2) 上游明确拒绝:thinking + tool_choice 组合
upstream 400: {"error":{"param":null,"type":"invalid_request_error","code":"invalid_request_error",
"message":"Error from provider (Console Go): Upstream request failed: [invalid_request_error] Thinking mode does not support this tool_choice"}}
这条是确凿的协议翻译问题:发往 opencode.ai 的请求同时带 thinking 模式与 tool_choice,被 Console Go 上游以 invalid_request_error 拒绝。
3) 翻译结果空内容
502 {"type":"error","error":{"type":"api_error","message":"OpenAI Chat response message has no content"}}
排除项(已实测,排除网络原因)
- 同一把 key、原生 OpenAI 格式
curl POST https://opencode.ai/zen/go/v1/chat/completions:网关故障期间仍稳定 200(~0.7–2s,10/10 全通)
- 同机
opencode CLI 连同一个 Cloudflare IP(2606:4700:78::90:0:141)正常不卡
- 网关出站为绕过 Clash 直连(IPv6
2408:844f:… → 2606:4700:78::90:0:141 ESTABLISHED,无 7897 代理连接);Clash 中 DOMAIN,opencode.ai,DIRECT 规则对网关无效
- 直连 IPv4 / IPv6、经 Clash 代理,在恢复窗口内均稳定 200——即问题只在“故障窗口”内出现,指向请求/协议层而非纯网络
附带观察
建议排查方向
Thinking mode does not support this tool_choice:确认 opencode-go 模板在 thinking 开启时是否仍下发了 tool_choice,应裁剪或降级
- 30s 总超时对 opencode.ai/zen/go 的聚合慢响应是否过紧;失败窗口是否与上游对该类型请求的慢处理相关
OpenAI Chat response message has no content 的触发条件(reasoning 空内容?)
期望结果 / 实际结果(含完整报错文字)
希望解决opencode go 连接不稳定问题
日志(可选,强烈建议)
确认
CSSwitch 版本
v0.8.4
macOS 版本 + 芯片
macOS 26.6 (25G72) / arm64
用的是哪个 provider
自定义 / 其它
复现步骤
ai 撰写
[Bug] OpenCode Go 间歇性失败:30s 超时 502 + 上游 400「Thinking mode does not support this tool_choice」
环境
claude-science 0.1.18-dev.20260709.t211149.shab3f5130(官方 sandbox,CSSwitch 托管运行时)OpenCode Go — OpenAI Chat模板,https://opencode.ai/zen/go/v1,Bearer key;也试过custom-openai模板同样复现)复现步骤
期望结果 / 实际结果
期望:opencode.ai 上游可用时,Science 对话稳定。
实际:间歇性整段失败,自愈后又复发。Science 服务端日志出现三类错误:
1) 每次恰好 30 秒超时的 502(最常见)
total都精确落在 30000–30070 ms(网关 30s 总超时上限)error sending request×109,Streaming server error×1062) 上游明确拒绝:thinking + tool_choice 组合
这条是确凿的协议翻译问题:发往 opencode.ai 的请求同时带 thinking 模式与
tool_choice,被 Console Go 上游以invalid_request_error拒绝。3) 翻译结果空内容
排除项(已实测,排除网络原因)
curl POST https://opencode.ai/zen/go/v1/chat/completions:网关故障期间仍稳定 200(~0.7–2s,10/10 全通)opencodeCLI 连同一个 Cloudflare IP(2606:4700:78::90:0:141)正常不卡2408:844f:… → 2606:4700:78::90:0:141ESTABLISHED,无 7897 代理连接);Clash 中DOMAIN,opencode.ai,DIRECT规则对网关无效附带观察
claudeAiFetch: 401 and refresh failed — treating as logged-out全程高频出现(本次日志 ×622,含已恢复的正常时段),疑似 v0.3.1 + Claude Science 0.1.15-dev:OAuth refresh 端点硬编码 → 沙箱永远 logged-out #15 相关;在 OpenCode Go 下与上述 502 并存,是否有关联请一并评估。建议排查方向
Thinking mode does not support this tool_choice:确认 opencode-go 模板在 thinking 开启时是否仍下发了tool_choice,应裁剪或降级OpenAI Chat response message has no content的触发条件(reasoning 空内容?)期望结果 / 实际结果(含完整报错文字)
希望解决opencode go 连接不稳定问题
日志(可选,强烈建议)
确认