diff --git a/config/platform-infra/sub2api-codex-pool.yaml b/config/platform-infra/sub2api-codex-pool.yaml index fd73e785..c6f3fed5 100644 --- a/config/platform-infra/sub2api-codex-pool.yaml +++ b/config/platform-infra/sub2api-codex-pool.yaml @@ -36,9 +36,9 @@ runtime: durationMinutes: 1 description: 明确命中上游并发或速率限制时短时冷却当前账号。 - statusCode: 400 - keywords: [input must be a list] + keywords: [input must be a list, selected model is at capacity] durationMinutes: 1 - description: 明确命中 Responses input 列表兼容错误时短时冷却并切换账号。 + description: 明确命中 Responses input 列表兼容错误或模型容量不足时短时冷却并切换账号。 - statusCode: 500 keywords: [failed to validate api key, do request failed] durationMinutes: 1 diff --git a/docs/MDTODO/details/sub2api-upstream-reliability/R2.21_Task_Report.md b/docs/MDTODO/details/sub2api-upstream-reliability/R2.21_Task_Report.md new file mode 100644 index 00000000..37d30a05 --- /dev/null +++ b/docs/MDTODO/details/sub2api-upstream-reliability/R2.21_Task_Report.md @@ -0,0 +1,54 @@ +# R2.21 任务报告 + +## 结果 + +- owning YAML:`config/platform-infra/sub2api-codex-pool.yaml`。 +- 通用模板:`runtime.templates[codex-upstream-failover]`。 +- HTTP 400 规则新增精确关键词: + - `selected model is at capacity` +- 冷却时间保持 1 分钟。 +- 未修改 Sub2API 源码、版本、外部哨兵、账号优先级、容量或分组。 + +## 下发范围 + +- 通过受控 `runtime apply --accounts ... --template codex-upstream-failover` 精准更新 9 个既有模板 API-key 账号: + - `https://ai.whistlelads.com plus 0.03`,ID 28; + - `https://api.lwylink.xyz plus 0.05`,ID 30; + - `https://api.lwylink.xyz pro 0.1`,ID 29; + - `https://api.recurdream.com plus 0.02`,ID 35; + - `https://sub.yjxm1221.top plus 0.025`,ID 27; + - `https://sub.yjxm1221.top pro 0.06`,ID 19; + - `https://sub2.pokexiao.com plus 0.03`,ID 31; + - `https://sub2.pokexiao.com pro 0.05`,ID 32; + - `https://www.xiaobaishu.org plus 0.01`,ID 37。 +- `lyon9801 0.0`,ID 15,保持 `TEMP_ENABLED=false`、0 条规则。 +- 邮箱命名的非 API-key 账号保持 0 条规则。 + +## 验证 + +- 首次 dry-run: + - `selected=9`; + - `changed=9`; + - 所有账号均为 `update`; + - 没有写入。 +- confirmed apply: + - `writeSucceeded=9`; + - `writeFailed=0`; + - `reconciled=9`; + - `mismatched=0`。 +- 批量自动对账 dry-run: + - `selected=9`; + - `changed=0`; + - 9 个账号全部 `noop`。 +- 代表账号 ID 28 原生 runtime 回读: + - 类型为 `apikey`; + - `pool_mode=false`; + - HTTP 400 关键词同时包含 `input must be a list` 和 `selected model is at capacity`; + - `duration_minutes=1`。 +- lyon ID 15 原生 runtime 回读确认仍未启用临时不可调度。 + +## 同步边界 + +- 整池 `codex-pool sync` dry-run 因当前主机缺少 YAML 引用的两个本地 Codex profile 文件而被受控 CLI 阻止,未产生运行面写入。 +- 当前 9 个目标账号在原生 runtime 中均标记为 `runtime-manual`,因此按既有所有权规则使用精准 runtime CRUD 下发。 +- owning YAML 已持久化同一通用模板;后续本地 profile 来源恢复后,正常 `sync` 会继续保持该规则。 diff --git a/docs/MDTODO/sub2api-upstream-reliability.md b/docs/MDTODO/sub2api-upstream-reliability.md index 1e80500c..4fba09d4 100644 --- a/docs/MDTODO/sub2api-upstream-reliability.md +++ b/docs/MDTODO/sub2api-upstream-reliability.md @@ -240,6 +240,10 @@ ### R2.20 [completed] 只读调查近期客户可见 `Selected model is at capacity. Please try a different model.`:使用 Sub2API 原生所有分组错误与代表 request trace 核对真实状态码、账号、模型、流式提交阶段、内置 classifier、临时不可调度规则、同账号重试和切号结果,判断能否通过官方现有配置自动切号并给出最小调优方案;不修改 Sub2API 源码、版本、runtime、YAML、外部哨兵或生产运行面,完成任务后将详细报告写入[任务报告](./details/sub2api-upstream-reliability/R2.20_Task_Report.md)。 +### R2.21 [completed] + +经用户明确授权,将 `Selected model is at capacity. Please try a different model.` 作为 HTTP 400 精确关键词加入 owning YAML 的通用非 auth 上游临时不可调度模板,冷却一分钟;先 dry-run 核对账号类型与既有模板归属,再按原生 runtime 显示的 `runtime-manual` 所有权通过精准批量 CRUD 下发 PK01 并自动回读对账,保持 lyon、非 API-key 账号、受保护手动账号、Sub2API 源码、版本和外部哨兵不变,完成任务后将详细报告写入[任务报告](./details/sub2api-upstream-reliability/R2.21_Task_Report.md)。 + ## R3 [completed] 增加 Sub2API 客户余额精准批量充值 CLI:支持从原生最近24小时用量提取活跃用户并生成每人增加20美元的补偿计划,也支持显式用户ID或账号 selector;默认 dry-run 输出完整账号、用户ID、当前余额、增额和目标余额,写入必须显式 --confirm 并自动回读对账。本轮只实现并验证 dry-run,禁止实际充值,必须等待用户再次明确授权,完成任务后将详细报告写入[任务报告](./details/sub2api-upstream-reliability/R3_Task_Report.md)。