
v8.0.43 的图片生成默认主模型 gpt-5.4-mini 已被上游下架、Claude 格式的 429 只说在冷却不说多久;这篇给两处的行号证据、今天能改的那个配置键,以及同一小时里五张还没合并的补丁各自改了什么。
gpt-5.4-mini,Claude 格式的 429 只说「在冷却」不说多久。今晚 21:57 到 22:38 之间开的五张补丁,两张正是冲这两处来的,一张都还没合。The 'gpt-5.4-mini' model is not supported when using Codex with a ChatGPT account. 请求在图片工具跑起来之前就被上游拒了,报错里点名的是主模型,不是你传的 gpt-image-2。2sdk/api/handlers/openai/openai_images_handlers.go 第 29 行的 defaultImagesMainModel,被第 1119 行的 buildImagesResponsesRequest 拿去填请求体的 model。3internal/runtime/executor/codex_openai_images.go 第 40 行的 codexOpenAIImagesMainModel,被第 939 行的 codexBuildImagesResponsesRequest 用上。4gpt-image-2(同一个文件里的 defaultImagesToolModel),这一项没变,也不用动。gpt-5.4-mini 出现 0 次,gpt-5.6-luna 出现 4 次,codex-plus 那九项里就有 gpt-5.6-luna。5代理自己的名单已经不认这个模型,默认值还压在它上面。
internal/runtime/executor/codex_openai_images.go 第 29–42 行:五条图片模型常量里,前四条是工具侧的模型,末行 codexOpenAIImagesMainModel = "gpt-5.4-mini" 才是出站主模型。4resolveGPTImage2BaseModel 读这个键,结果写进发往上游的请求体 model。7通用 Images 接口那条构造器(第 1119 行那个函数)不读配置,只认常量。所以先把「撞的是哪条路」分清,再决定改不改。
config.example.yaml 第 1151–1153 行:注释写明这个键供「legacy hosted image_generation」这条路使用,默认值 gpt-5.4-mini,并规定必须以 gpt- 开头。8gpt-5.6-luna,同时改了配置示例的注释,并给两个请求构造器各加一条回归测试(断言主模型是 gpt-5.6-luna、工具模型仍是 gpt-image-2)。六个文件 +27/−5,open、mergeable clean,还没合并。2Retry-After 头、只显示错误文案,所以排程恢复的客户端读不到时间。9reset_time 与 reset_seconds 两个字段10,但 Claude 格式的转换只取 error.type 与 error.message,其余字段被丢掉。11
sdk/api/handlers/claude/code_handlers.go 第 535–561 行:函数只把 errText 交给 claudeErrorDetailFromText 取 errType 与 message,返回结构里没有放恢复时刻的位置。11
sdk/cliproxy/auth/selector.go 第 122–149 行:modelCooldownError.Error() 先拼出 All credentials for model X are cooling down,再把这个时间写进 reset_time(第 145 行)与 reset_seconds(第 146 行)。这两个键在 Claude 格式的响应里不会出现。10WriteErrorResponse 把 SafeResponseHeaders 里的 Retry-After 加到响应上12,而这份名单认 modelCooldownError、authUnavailableError 和三类 Home 错误。13RetryAfter() 方法,不在上面那份名单里,于是头和文案两头都拿不到时间。event: error 帧由同一个转换函数生成,所以流式请求里同样看不到时长。14
sdk/cliproxy/auth/home_concurrency.go 第 283–318 行:名单里是四类具体错误加一个带 SafeResponseHeaders() 方法的接口,取的都是 Retry-After;函数最后的 return nil 就是上游限流那一支的结果。13(reset after 2h52m31s)。时长按三级取,取不到就不加后缀:SafeResponseHeaders 里的 Retry-After,池冷却走这条;RetryAfter(),上游限流走这条;DirectResponse 那一层传下来的 Retry-After 头。Retry-After 比解析文案可靠,池冷却这一支现在就有这个头。上游限流那一支两头都没有,只能按模型档位自己定退避。| 单号 | 开的时刻(北京) | 改的对象 | 规模 | 状态 |
|---|---|---|---|---|
| #7012 | 22:24 | 插件用量记录:把「没上报」与「上报了零」分开,缺的记成 unclassified;顺带修 Chat Completions → Responses 翻译里丢掉的缓存写入与被合成的 reasoning 0 | 11 文件 +727/−51 | open、clean |
| #7013 | 22:33 | 插件被卸载时,还在跑的流要以错误收尾。直接关通道会被翻译与记账当成正常 EOF,还会补一条合成的成功尾巴 | 6 文件 +404/−14 | open、clean |
| #7014 | 22:37 | 只改一个测试文件:把注册等待的测试按凭证身份绑定,不再靠到达顺序假定是哪个账号 | 1 文件 +21/−20 | open、clean |
gpt-5.4-mini 且账号是 ChatGPT/Codex,就是主模型这一环,不是你传的工具模型。multimedia.gpt-image-2-base-model 设成 gpt-5.6-luna,改完确认实例读到了新配置再发一次。通用 Images 接口那条没有这个键,只能等合入。Retry-After 现在就在响应上,别只解析文案;上游限流那一支暂时两头都没有。github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
status.openai.com
status.claude.com
status.cloud.google.com
codex-reset.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.