[GH-ISSUE #129] [Feature Request] Provider Pool 跨类型 Fallback:当 gemini-cli-oauth 配额耗尽时自动切换到 gemini-antigravity #105

Closed
opened 2026-02-27 07:18:00 +03:00 by kerem · 3 comments
Owner

Originally created by @chchuj on GitHub (Dec 23, 2025).
Original GitHub issue: https://github.com/justlovemaki/AIClient-2-API/issues/129

[Feature Request] Provider Pool 跨类型 Fallback:当某一类型账号配额耗尽时自动切换到其他兼容类型

功能描述 (Feature Description)

背景:在使用 Provider Pool 功能时,我配置了多个 gemini-cli-oauth 账号进行轮询负载均衡,同时也配置了 gemini-antigravity 账号。

需求:当某一 Provider Type(如 gemini-cli-oauth)下的所有账号都因 429 配额耗尽或被标记为 unhealthy 时,能够自动 fallback 到另一个兼容的 Provider Type(如 gemini-antigravity),而不是直接返回错误。

当前行为 (Current Behavior)

  1. Provider Pool 只在同一类型内进行轮询(Round-Robin)
  2. gemini-cli-oauth 池中的所有账号都耗尽 RPD 配额时,请求直接失败并返回 429 错误
  3. 即使 gemini-antigravity 池中有可用账号,也不会被使用
gemini-cli-oauth (2个账号)     gemini-antigravity (1个账号)
       ↓                              ✗ 不会自动使用
  [A] ←→ [B] (均 429)
       ↓
   返回 429 错误

预期行为 (Expected Behavior)

gemini-cli-oauth (2个账号)     gemini-antigravity (1个账号)
       ↓                              ↓
  [A] ←→ [B] (均 429)    →→→    [C] fallback 成功
       ↓
   返回正常响应

预期逻辑

  1. 尝试从主 Provider Type 池选取 healthy 账号
  2. 如果该类型所有账号都 unhealthy 或返回 429:
    • 查找配置的 fallback 类型
    • 从 fallback 类型的池中选取 healthy 账号
  3. 如果所有 fallback 类型也不可用,才返回错误

建议实现方式 (Suggested Implementation)

方案 A:在 config.json 中增加全局 fallback 链配置:

{
  "providerFallbackChain": {
    "gemini-cli-oauth": ["gemini-antigravity"],
    "gemini-antigravity": ["gemini-cli-oauth"],
    "claude-kiro-oauth": ["claude-custom"]
  }
}

方案 B:在 provider_pools.json 的类型级别配置:

{
  "gemini-cli-oauth": {
    "fallbackTypes": ["gemini-antigravity"],
    "providers": [...]
  }
}

环境信息 (Environment)

  • OS: Windows 11
  • AIClient-2-API 版本: 最新 main 分支
  • Node.js: v20.x

使用场景 (Use Case)

批量任务场景下,单一 Provider Type 的免费 RPD 配额容易在短时间内耗尽。通过跨类型 Fallback,可以充分利用多种 Provider 的独立配额,提高整体可用性和吞吐量。

Originally created by @chchuj on GitHub (Dec 23, 2025). Original GitHub issue: https://github.com/justlovemaki/AIClient-2-API/issues/129 # [Feature Request] Provider Pool 跨类型 Fallback:当某一类型账号配额耗尽时自动切换到其他兼容类型 ## 功能描述 (Feature Description) **背景**:在使用 Provider Pool 功能时,我配置了多个 `gemini-cli-oauth` 账号进行轮询负载均衡,同时也配置了 `gemini-antigravity` 账号。 **需求**:当某一 Provider Type(如 `gemini-cli-oauth`)下的所有账号都因 429 配额耗尽或被标记为 unhealthy 时,能够自动 fallback 到另一个兼容的 Provider Type(如 `gemini-antigravity`),而不是直接返回错误。 ## 当前行为 (Current Behavior) 1. Provider Pool 只在**同一类型内**进行轮询(Round-Robin) 2. 当 `gemini-cli-oauth` 池中的所有账号都耗尽 RPD 配额时,请求直接失败并返回 429 错误 3. 即使 `gemini-antigravity` 池中有可用账号,也不会被使用 ``` gemini-cli-oauth (2个账号) gemini-antigravity (1个账号) ↓ ✗ 不会自动使用 [A] ←→ [B] (均 429) ↓ 返回 429 错误 ``` ## 预期行为 (Expected Behavior) ``` gemini-cli-oauth (2个账号) gemini-antigravity (1个账号) ↓ ↓ [A] ←→ [B] (均 429) →→→ [C] fallback 成功 ↓ 返回正常响应 ``` **预期逻辑**: 1. 尝试从主 Provider Type 池选取 healthy 账号 2. 如果该类型所有账号都 unhealthy 或返回 429: - 查找配置的 fallback 类型 - 从 fallback 类型的池中选取 healthy 账号 3. 如果所有 fallback 类型也不可用,才返回错误 ## 建议实现方式 (Suggested Implementation) **方案 A**:在 `config.json` 中增加全局 fallback 链配置: ```json { "providerFallbackChain": { "gemini-cli-oauth": ["gemini-antigravity"], "gemini-antigravity": ["gemini-cli-oauth"], "claude-kiro-oauth": ["claude-custom"] } } ``` **方案 B**:在 `provider_pools.json` 的类型级别配置: ```json { "gemini-cli-oauth": { "fallbackTypes": ["gemini-antigravity"], "providers": [...] } } ``` ## 环境信息 (Environment) - OS: Windows 11 - AIClient-2-API 版本: 最新 main 分支 - Node.js: v20.x ## 使用场景 (Use Case) 批量任务场景下,单一 Provider Type 的免费 RPD 配额容易在短时间内耗尽。通过跨类型 Fallback,可以充分利用多种 Provider 的独立配额,提高整体可用性和吞吐量。
kerem closed this issue 2026-02-27 07:18:00 +03:00
Author
Owner

@justlovemaki commented on GitHub (Dec 23, 2025):

antigravity 和 gemini-cli 模型不一致怎么解决呢?
antigravity 出问题又需不需要再次降级到其它提供商呢?

<!-- gh-comment-id:3685035542 --> @justlovemaki commented on GitHub (Dec 23, 2025): antigravity 和 gemini-cli 模型不一致怎么解决呢? antigravity 出问题又需不需要再次降级到其它提供商呢?
Author
Owner

@chchuj commented on GitHub (Dec 23, 2025):

感谢回复!针对这两个问题,我的想法是:

1. 模型不一致问题

实际上 gemini-cli-oauthgemini-antigravity 支持的模型有很大重叠:

模型 gemini-cli-oauth gemini-antigravity
gemini-2.5-flash
gemini-2.5-pro
gemini-3-pro-preview
gemini-3-flash-preview

而且一般为了业务输出稳定,都会选择相同或相近的模型来降级。

建议方案

  • 在 fallback 时检查目标 Provider Type 是否支持当前请求的模型
  • 如果不支持,跳过该 fallback 类型,尝试下一个
  • 可以在配置中声明每个 Provider Type 的 supportedModels 列表用于预检查
{
  "providerFallbackChain": {
    "gemini-cli-oauth": {
      "fallbackTo": ["gemini-antigravity"],
      "modelMapping": {
        "gemini-2.5-flash": "gemini-2.5-flash"
      }
    }
  }
}

2. 多级降级问题

是的,可以支持链式 fallback:

gemini-cli-oauth → gemini-antigravity → openai-custom (付费兜底)

建议方案fallbackTo 改为数组,按顺序尝试:

{
  "providerFallbackChain": {
    "gemini-cli-oauth": ["gemini-antigravity", "openai-custom"],
    "gemini-antigravity": ["gemini-cli-oauth", "openai-custom"]
  }
}

遍历逻辑:

  1. 主类型所有账号不可用 → 尝试 fallback[0]
  2. fallback[0] 所有账号不可用 → 尝试 fallback[1]
  3. 全部不可用 → 返回错误

这样用户可以根据自己的需求配置降级链,同时保持向后兼容(不配置则不启用 fallback)。

<!-- gh-comment-id:3685049170 --> @chchuj commented on GitHub (Dec 23, 2025): 感谢回复!针对这两个问题,我的想法是: ## 1. 模型不一致问题 实际上 `gemini-cli-oauth` 和 `gemini-antigravity` 支持的模型有很大重叠: | 模型 | gemini-cli-oauth | gemini-antigravity | |------|------------------|-------------------| | gemini-2.5-flash | ✅ | ✅ | | gemini-2.5-pro | ✅ | ✅ | | gemini-3-pro-preview | ✅ | ✅ | | gemini-3-flash-preview | ✅ | ✅ | 而且一般为了业务输出稳定,都会选择相同或相近的模型来降级。 **建议方案**: - 在 fallback 时检查目标 Provider Type 是否支持当前请求的模型 - 如果不支持,跳过该 fallback 类型,尝试下一个 - 可以在配置中声明每个 Provider Type 的 `supportedModels` 列表用于预检查 ```json { "providerFallbackChain": { "gemini-cli-oauth": { "fallbackTo": ["gemini-antigravity"], "modelMapping": { "gemini-2.5-flash": "gemini-2.5-flash" } } } } ``` ## 2. 多级降级问题 是的,可以支持链式 fallback: ``` gemini-cli-oauth → gemini-antigravity → openai-custom (付费兜底) ``` **建议方案**:`fallbackTo` 改为数组,按顺序尝试: ```json { "providerFallbackChain": { "gemini-cli-oauth": ["gemini-antigravity", "openai-custom"], "gemini-antigravity": ["gemini-cli-oauth", "openai-custom"] } } ``` 遍历逻辑: 1. 主类型所有账号不可用 → 尝试 fallback[0] 2. fallback[0] 所有账号不可用 → 尝试 fallback[1] 3. 全部不可用 → 返回错误 这样用户可以根据自己的需求配置降级链,同时保持向后兼容(不配置则不启用 fallback)。
Author
Owner

@justlovemaki commented on GitHub (Dec 23, 2025):

已发布

<!-- gh-comment-id:3685899922 --> @justlovemaki commented on GitHub (Dec 23, 2025): 已发布
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/AIClient-2-API-justlovemaki#105
No description provided.