Skip to content

[Feature] 在混合轮转模式下本地账号池中 ChatGPT Free 账号不支持 sol 模型触发 400 错误,是否应该触发 failover 后进行轮转被聚合 API 兜底? #382

Description

@agermel

需求摘要

避免账号池里的free账号不支持sol模型从而阻塞账号池轮换

影响模块

Service

当前问题

背景

当前在 hybrid_rotation 模式下,如果模型同时配置了本地账号池和聚合 API,例如:

  • account_pool/default
  • aggregate_api/<aggregate_api_id>

请求会优先进入本地账号池。

如果账号池里存在 ChatGPT Free 账号,而该账号没有 gpt-5.6-sol 权限,上游会返回:

{"detail":"The 'gpt-5.6-sol' model is not supported when using Codex with a ChatGPT account."}

当前请求会直接返回这个 400 错误。

当前行为

当本地账号返回上述 400 后,网关会把该错误归类为 Other

Other 错误当前不会触发 failover,因此:

  • 不会继续尝试账号池里的其他账号
  • 不会进入聚合 API 兜底
  • 请求直接以 400 结束

这会导致一个不支持 sol 的 ChatGPT Free 账号阻断整个 hybrid 路由。

期望行为

希望确认:这类“当前 ChatGPT 账号不支持该模型”的 400,是否应该在 hybrid_rotation 下被视为可 failover 的账号能力不匹配错误。

如果允许 failover,期望行为是:

  1. 当前账号返回 unsupported-model 400
  2. 网关跳过当前账号
  3. 继续尝试账号池里的下一个候选账号
  4. 如果本地账号池耗尽,则进入聚合 API 兜底
  5. 最终请求可以由支持该模型的本地账号或聚合 API 完成

复现方式

  1. 配置一个 API Key 使用 hybrid_rotation
  2. 模型配置同时包含本地账号池和聚合 API 路由
  3. 本地账号池中包含多个 ChatGPT 账号:
    • 一个账号支持 gpt-5.6-sol
    • 其他 ChatGPT Free 账号不支持 gpt-5.6-sol
  4. 请求模型 gpt-5.6-sol
  5. 当轮转命中不支持该模型的 Free 账号时,请求直接返回 400

实际结果

请求返回:

{"detail":"The 'gpt-5.6-sol' model is not supported when using Codex with a ChatGPT account."}

后续账号和聚合 API 兜底没有执行。

影响

在混合轮转模式下,只要本地账号池中存在不支持目标模型的账号,请求就可能被该账号阻断。

这会影响以下场景:

  • 一个账号池混有 Free / Plus / Pro / Team 等不同能力账号
  • 部分账号支持 sol 模型,部分账号不支持
  • 用户配置了聚合 API 作为兜底,但 400 阶段提前结束
  • balanced / ordered 轮转命中不支持账号时,请求稳定失败

建议方案

可以考虑将特定 unsupported-model 400 识别为可 failover 错误,例如匹配:

model is not supported when using Codex with a ChatGPT account

触发条件建议限制在:

  • 当前响应来自本地 ChatGPT 账号
  • 当前还有后续账号候选,或当前模型存在可用聚合 API 路由
  • 当前错误文本明确表示账号不支持目标模型

处理方式:

  • 当前请求跳过该账号
  • 继续执行候选账号轮转
  • 候选账号耗尽后,按已有逻辑进入聚合 API fallback

需要维护者确认的问题

  1. 这种错误必须阻塞账号池轮换吗
  2. 是否应该视作可跳过的问题从而让继续轮换避免阻塞

期望方案

  • Hybrid 模式下,本地账号返回上述 unsupported-model 400 后,请求会继续尝试后续候选账号
  • 如果后续账号支持该模型,请求成功
  • 如果本地账号池全部不支持该模型,且模型配置了聚合 API 路由,请求进入聚合 API 兜底
  • 普通请求参数错误仍保持当前直接返回行为
  • 行为有回归测试覆盖

备选方案 / 补充上下文

No response

提交检查

  • 我已确认这不是单纯的使用问题或环境配置问题

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions