docs/model-remapping-logic.md
最后更新:2026-03-02
本文描述当前代理中的模型重映射链路(含 Gemini 3/3.1 Pro 调整后的行为)。
无论是 OpenAI 协议还是 Gemini 原生协议,请求模型都会经过两段处理:
src-tauri/src/proxy/common/model_mapping.rs 的 resolve_model_route。src-tauri/src/proxy/token_manager.rs 的 resolve_dynamic_model_for_account。使用该流程的入口:
src-tauri/src/proxy/handlers/openai.rssrc-tauri/src/proxy/handlers/gemini.rsresolve_model_route(original_model, custom_mapping) 的优先级从高到低为:
DYNAMIC_MODEL_FORWARDING_RULEScustom_mapping[original_model]* 字符数”比较,越具体优先级越高map_claude_model_to_gemini都不命中时,模型名原样透传。
当前策略是:具体模型 ID 直接透传;只有泛别名会归一化。
具体 ID(不做跨版本强制改写):
gemini-3-pro-high -> gemini-3-pro-highgemini-3-pro-low -> gemini-3-pro-lowgemini-3-pro-preview -> gemini-3-pro-previewgemini-3.1-pro-high -> gemini-3.1-pro-highgemini-3.1-pro-low -> gemini-3.1-pro-lowgemini-3.1-pro-preview -> gemini-3.1-pro-preview泛别名(仍映射到 preview 入口):
gemini-3-pro -> gemini-3-pro-previewgemini-3.1-pro -> gemini-3.1-pro-preview代码位置:
src-tauri/src/proxy/common/model_mapping.rs选中账号后,系统会读取该账号本地 quota 里的可用模型,判断当前模型是否可用。
行为如下:
quota.models[*].name。关键点:
代码位置:
src-tauri/src/proxy/token_manager.rs
get_available_models_from_jsonbuild_dynamic_model_candidatesresolve_dynamic_model_for_account可通过日志判断每一步是否触发:
[Router] 系统默认映射: <original> -> <mapped>[Dynamic-Model-Rewrite] account=<id> <from> -> <to>如果某次请求没有出现 Dynamic-Model-Rewrite,说明该账号直接使用了当前模型。
示例 A(不改写):
gemini-3-pro-highgemini-3-pro-highgemini-3-pro-high示例 B(发生回退改写):
gemini-3-pro-highgemini-3-pro-highgemini-3.1-pro-highgemini-3.1-pro-high示例 C(泛别名):
gemini-3-progemini-3-pro-preview该设计同时满足三点: