3.4 KiB
3.4 KiB
R2.2.2 任务报告
目标
执行三项客户错误调优:
- 处理
gpt-5.4-nano无候选。 - 为 429 临时不可调度规则加入真实上游关键词
upstream rate limit exceeded。 - 增加仅匹配
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 <id>:同时显示脱敏model_mapping、配置模型和原生上游实时模型。runtime apply|delete --kind model-mapping:显式单账号模型映射 CRUD,默认 dry-run。runtime apply|delete --accounts <id-or-name,...>:一次受控作业内按显式账号集合顺序执行,拒绝隐式 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:通过。