# R2.2.2 任务报告 ## 目标 执行三项客户错误调优: 1. 处理 `gpt-5.4-nano` 无候选。 2. 为 429 临时不可调度规则加入真实上游关键词 `upstream rate limit exceeded`。 3. 增加仅匹配 `concurrency limit exceeded` 与 `upstream service temporarily unavailable` 的 504 规则。 同时按用户追加要求增强精准批量 runtime API。 ## 模型能力结论 通过 Sub2API 原生账号接口 `GET /api/v1/admin/accounts/:id/models` 和 `POST /api/v1/admin/accounts/:id/models/sync-upstream` 检查账号 15、19、27-34: - 所有账号当前 `model_mapping` 均不包含 `gpt-5.4-nano`。 - 可实时同步的账号 19、27、28、32、33、34 的上游模型列表均不包含该模型。 - 账号 29、30、31 的上游模型同步返回 HTTP 403,不能据此声明支持。 - `lyon9801` 为 OAuth 账号,Sub2API 原生同步接口明确不支持该类型,当前映射也不包含该模型。 因此没有创建虚假的 `nano -> mini` 或同名映射。当前池的 `/v1/models` 不宣称支持 `gpt-5.4-nano`,直接请求继续快速返回无候选 404。后续只有真实上游模型列表或实测请求证明支持时,才通过显式 model-mapping CRUD 加入。 ## 配置调优 YAML 模板 `codex-upstream-failover` 保持一分钟冷却,并累计为六条状态规则: - 429:`concurrency limit exceeded`、`upstream rate limit exceeded`。 - 500:`failed to validate api key`、`do request failed`。 - 502、503、524:保留前序已验证的上游不可用、过载和并发关键词。 - 504:仅 `concurrency limit exceeded`、`upstream service temporarily unavailable`。 通过受控 runtime CLI 对账号 19、27-34 dry-run 后确认下发。逐账号回读均为 `ruleCount=6`、状态码 `429/500/502/503/504/524`,且匹配模板。账号 15 `lyon9801` 保持 `ruleCount=0`,没有应用临时不可调度。 ## CLI 增强 新增: - `runtime models --account `:同时显示脱敏 `model_mapping`、配置模型和原生上游实时模型。 - `runtime apply|delete --kind model-mapping`:显式单账号模型映射 CRUD,默认 dry-run。 - `runtime apply|delete --accounts `:一次受控作业内按显式账号集合顺序执行,拒绝隐式 all、重复账号和非 API-key 账号。 - 批量默认输出压缩为账号 ID、名称、change、mode、mutation 和汇总计数;`--full/--raw` 保留完整计划。 批量验收命令精确选择账号 `19,27,28,29,30,31,32,33,34`,结果为 `requestedCount=9`、`succeededCount=9`、`mutatedCount=0`,全部 noop,且未包含账号 15。 ## 即时观察 调优后拉取 20 分钟 runtime 错误窗口: - 匹配 12 个日志事件。 - 结构化上游状态为 502 一次、524 六次。 - 账号 27 仍出现四次并发限制文本,但该窗口跨越配置下发时刻,不能用于评价新规则最终效果。 - 账号 33 有一次 `gpt-5.6-sol` 与 ChatGPT Codex 账号不兼容的 400,属于独立模型路由问题。 - 未观察到配置写入造成的新类型异常。 父任务 R2.2 继续用后续完整窗口观察客户可见错误率、切号和冷却命中效果。 ## 验证 - `bun --check scripts/src/platform-infra-sub2api-codex/runtime.ts`:通过。 - `git diff --check`:通过。 - 九账号 runtime dry-run、confirm、逐账号 get:通过。 - 精准批量 dry-run:通过。 - 20 分钟 runtime errors:通过。