mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-19 16:17:56 +00:00
3.6 KiB
3.6 KiB
Why
OpenAI 分组在没有账号模型映射时,每次 Codex 客户端请求 Model Manifest 都会经由调度器挑选一个账号向上游拉取。调度结果受优先级、负载因子和限流窗口影响,而分组内账号的模型权限并不一致(例如部分账号拥有 Trusted Access for Cyber 的特殊模型),导致同一个 API Key 前后看到的模型列表不确定。此外 OAuth 账号的 manifest 拉取完全没有缓存,每次客户端刷新都直接打到 chatgpt.com。
What Changes
- 为平台为 OpenAI 的分组新增「使用特定账号获取 Codex Model Manifest」配置:一个默认关闭的开关、一个必须至少选择一个账号的多选账号列表,以及「选定账号全部不可用时回退调度器」的子选项(默认关闭,即返回 503)。
- 开关打开后,该分组的 API Key 请求 Codex Model Manifest 时只使用选定账号向上游拉取,忽略优先级、负载因子、限流与过载窗口;多个账号并发请求,
models按 slug 取并集后返回。部分账号失败时以成功部分合并;全部失败按配置返回 503 或回退到现有调度器路径。 - 管理端分组编辑对话框的 OpenAI 区块新增该配置的开关与带搜索的多选账号下拉,账号来源限定为当前分组内的 OpenAI 账号。创建对话框不展示该配置(分组创建时尚无账号绑定)。
- 分组复制时该配置重置为关闭。
- 普通
/v1/models与/models(无非空client_version)复用同一固定账号配置;API Key 请求标准上游模型列表,OAuth 从现有 Codex manifest 提取 ID,输出 OpenAI 列表。 - BREAKING:固定账号开启时,普通列表和 Codex manifest 都优先进行指定账号发现,随后按来源账号模型映射生成公开目录并应用分组过滤;显式模型映射不再短路固定账号发现。
- BREAKING(行为层面):Codex Model Manifest 缓存统一为 1 分钟新鲜(命中即返回,不请求上游)、1 到 5 分钟乐观返回缓存并后台刷新、超过 5 分钟同步等待上游刷新后再返回。缓存覆盖范围从仅 API Key 账号扩展到 OAuth 账号,固定账号模式的每个账号也走同一缓存。
Capabilities
New Capabilities
codex-manifest-pinned-accounts:OpenAI 分组的固定账号 Manifest 配置(数据模型、管理端校验与 UI)、运行时的固定账号并发拉取与合并、不可用时的回退策略。codex-manifest-cache:Codex Model Manifest 的按账号缓存策略:新鲜期、乐观期与强制刷新期的行为,以及对所有账号类型生效。
Modified Capabilities
Impact
- 数据库:
groups新增 JSONB 列codex_models_manifest_config,新增迁移文件;ent schema 与生成代码更新。 - 后端:
Group领域模型、分组仓储的创建与更新、API Key 加载分组的字段投影、认证快照缓存、管理端分组 DTO 与校验、分组复制逻辑;openai_codex_models_handler.go新增固定账号分支;openai_codex_models_service.go新增固定账号并发拉取与合并、缓存策略调整并扩展到 OAuth 路径。 - 管理端 API:
POST/PUT /admin/groups请求与响应新增codex_models_manifest_config字段;GET /admin/accounts已支持按分组过滤,无需改动。 - 前端:
GroupsView.vue编辑对话框 OpenAI 区块、types/index.ts、中英文 i18n。 - 上游影响:固定账号模式下每次缓存失效会向 N 个账号并发请求;缓存新鲜期延长到 1 分钟后,稳态上游请求量低于当前。