- [Full fetchAvailableModels Dynamic Catalog Alignment, Removal of Static Hardcoded Models & Adaptive Support] (Ref #3665):
- Native Authorized Model Catalog (available_models): Added
available_models: HashSet<String>toProxyToken, mirroring the raw model catalog delivered live by Google'sfetchAvailableModels. Acts as the single source of truth for account capabilities, enabling fully adaptive model dispatching. (Ref #3665) - Abolish Static Gate & 3-Step Dynamic Matching: Completely eliminated the legacy
model_quotas.contains_key(normalized)veto gate. Replaced it with a 3-step dynamic matching pipeline (Step A exact matching on raw ID, Step B tier suffix stripping viastrip_tier_suffixto match base model variants, Step C fallback to generic wildcard patterns only when all accounts are in cold start), completely eliminating false-positive 503 rejection on unindexed models. (Ref #3665) - Prune Redundant CLAUDE_TO_GEMINI Self-Mappings: Purged all redundant X -> X self-mappings for native
gemini-*andclaude-*models fromCLAUDE_TO_GEMINI, delegating transparent routing to dynamic pass-through andDYNAMIC_MODEL_FORWARDING_RULES; kept only true cross-vendor aliases (e.g.,gpt-*) and deprecated version transitions. (Ref #3665) - Completely Remove Specific Codename (argon) Hardcodings: Refactored
is_gemini_v4_or_aboveinmodel_specs.rsinto a pure numeric/semantic version parser (gemini-[4-9],>= 4.0), removing all hardcoded"argon"string checks. Upgradedget_thinking_budgetandget_max_output_tokensto generic tier deductions and base-name dynamic fallbacks, enabling zero-code-change support for future frontier models. (Ref #3665)
- Native Authorized Model Catalog (available_models): Added
- [Imminent Quota Floor to Eliminate False 429s & Stream Truncation Golden Triplet Contract] (PR #3666, Fixes #429, Fixes #458, Fixes #3635, Fixes #3661, Ref #3626, Ref #3639, Thanks to @cubelikeplayDaniel):
- Imminent Quota Floor (IMMINENT_QUOTA_FLOOR): Enforced a quota floor (
<= 10%) in EDF and P2C scheduling algorithms where critically depleted accounts are stripped of imminent reset deadline boosting and strictly fall back to sorting by absolute quota. Eradicates false-positiveRESOURCE_EXHAUSTEDerrors caused by 1%~2% accounts placed at head-of-line that instantly trigger 429 and exhaust circuit-breaker retry budgets. (PR #3666, Fixes #3661, Thanks to @cubelikeplayDaniel) - Atomic Proxy Switch File and Index Synchronization: Refactored
toggle_proxy_statusto atomically sync individual account credentials andaccounts.jsonunder anACCOUNT_INDEX_LOCKmutex, preventing state drift. (PR #3666, Thanks to @cubelikeplayDaniel) - Golden Triplet Termination Contract & Token Preservation: Added content generation detection (
has_content()) instream_lifecycle.rs. When deep reasoning or long-running streams encounter network disconnection or idle timeouts after generating content, the gateway gracefully emitscontent_block_stop,message_delta(stop_reason: end_turn), andmessage_stopgolden triplet sequence to satisfy client completion state machines (such as Claude Code), activating client-sidekeepPartialpreservation and eradicating token wastage and infinite re-thinking loops. (PR #3666, Fixes #429, Fixes #458, Fixes #3635, Thanks to @cubelikeplayDaniel)
- Imminent Quota Floor (IMMINENT_QUOTA_FLOOR): Enforced a quota floor (
- [全面接入 fetchAvailableModels 动态目录、彻底清理静态模型硬编码与新模型自适应支持] (Ref #3665):
- 原生授权模型集合 (available_models): 在
ProxyToken中新增available_models: HashSet<String>,直接镜像 Google 上游fetchAvailableModels实时下发的授权列表。作为账号模型能力的唯一权威来源,实现模型全生命周期自适应判定。 (Ref #3665) - 废除静态门禁与三步自适应匹配: 彻底废除旧的
model_quotas.contains_key(normalized)一票否决门禁,重构为动态三步匹配(Step A 精确匹配完整模型 ID、Step B 基于strip_tier_suffix剥离-high/-medium/-low档位后缀后匹配基名变体、Step C 仅在所有账号尚未刷新的冷启动期退回通用通配),彻底杜绝由于本地字典未登记新模型导致的误杀报错。 (Ref #3665) - 清理 CLAUDE_TO_GEMINI 冗余自映射: 移除
CLAUDE_TO_GEMINI映射表中所有gemini-*与claude-*原生模型的自映射条目,全面由动态透传分支与DYNAMIC_MODEL_FORWARDING_RULES原生接管;仅保留跨供应商别名(如gpt-*)及必要的已下线版本平滑降级。 (Ref #3665) - 彻底移除特定模型代号 (argon) 硬编码: 将
model_specs.rs的is_gemini_v4_or_above重构为通用的纯数值语义版本解析(gemini-[4-9]、>= 4.0),彻底移除了对代号"argon"的硬编码判断;思考预算get_thinking_budget与 Token 限额get_max_output_tokens升级为通用分档推导与基名动态回退,未来 Google 推出任意新模型(无论名称如何)均能零代码修改自适应调度。 (Ref #3665)
- 原生授权模型集合 (available_models): 在
- [引入濒危额度过滤消除假性 429 报错与补齐客户端断流终结契约] (PR #3666, Fixes #429, Fixes #458, Fixes #3635, Fixes #3661, Ref #3626, Ref #3639, Thanks to @cubelikeplayDaniel):
- 濒危额度提权剥离 (IMMINENT_QUOTA_FLOOR): 在 EDF(最早截止时间优先)与 P2C 调度算法中,将剩余配额
<= 10%的濒危账号强制剥离临期截止时间提权,严格按额度绝对值降级排序;彻底根除仅剩 1%~2% 极低额度账号因临期被排在队首、请求打过去瞬间耗尽配额触发 429 并击穿自适应重试容错导致误报RESOURCE_EXHAUSTED的缺陷。 (PR #3666, Fixes #3661, Thanks to @cubelikeplayDaniel) - 反代开关实体文件与索引原子同步: 彻底重构
toggle_proxy_status,统一由modules::account在ACCOUNT_INDEX_LOCK排他锁保护下原子同步账号实体文件与accounts.json索引,杜绝单向覆写引发的状态持久化漂移。 (PR #3666, Thanks to @cubelikeplayDaniel) - 黄金三元组终结契约与断流 Token 保全: 在
stream_lifecycle.rs统一流生命周期中增加内容产出检测(has_content());长思考或深度推理中途遭遇网络抖动或空闲超时时,网关优雅补发content_block_stop、message_delta(stop_reason: end_turn)和message_stop黄金三元组终结序列,满足 Claude Code 等终端客户端完成态契约,激活客户端keepPartial原生保全机制,彻底杜绝丢弃已生成 Token 与无限重新思考死循环。 (PR #3666, Fixes #429, Fixes #458, Fixes #3635, Thanks to @cubelikeplayDaniel)
- 濒危额度提权剥离 (IMMINENT_QUOTA_FLOOR): 在 EDF(最早截止时间优先)与 P2C 调度算法中,将剩余配额
What's Changed
- fix(scheduler,stream): 引入濒危额度过滤消除假性429并补齐断流三元组终结契约 (Fixes #429, #458, #3635, Ref #3626, #3639) by @cubelikeplayDaniel in #3666
Full Changelog: v4.9.8-beta.1...v4.9.8-beta.2