Skip to content

[Feature Request] 支持模型级别的故障转移 #99

@huanghuoguoguo

Description

@huanghuoguoguo

背景

开启 Proxy 后,用户通过 takeover 机制不再感知 URL 和 API Key,但会指定 model 来选择使用的模型。多个 provider(如 coding plan)可能都支持同一个模型,这为模型级别的容灾提供了基础。

当前问题

现有的故障转移是 provider 级别 的:切换 provider 时会应用该 provider 的 model mapping,导致请求的模型名可能发生变化。

例如:

  • qwen provider mapping: claude-sonnet-4 → glm-4.7
  • 方舟 provider mapping: claude-sonnet-4 → minmax

当 qwen 失败切换到方舟时,请求的 model 从 glm-4.7 变成了 minmax,而方舟其实也支持 glm-4.7

需求

支持 模型级别的故障转移:根据请求指定的 model,只切换到支持该模型的 provider。

请求: { model: "glm-4.7", ... }
    ↓
Proxy 查询: 哪些 provider 支持 glm-4.7?
    - qwen: ✓
    - 方舟: ✓
    ↓
qwen 失败 → 方舟接管 → 仍然请求 "glm-4.7"

实现建议

模型列表缓存(而非持久化)

provider 的模型列表可能随时间变化,建议:

  1. 内存级缓存模型列表(不写入数据库)
  2. 极低频率定时刷新(如每天一次或每周一次)
  3. 提供手动刷新命令:cc-switch provider refresh-models <id>
  4. 或在 Proxy serve 时启动后台刷新任务

这样既避免数据库复杂度,又保持模型列表相对新鲜。

关联

  • 已有 fetch-models 命令可获取模型列表,但目前只用于展示
  • 可复用现有的模型扫描逻辑(OpenAI 兼容、Gemini 格式等)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions