模型路由系统负责 API provider 选择、模型别名解析、模型名规范化和运行时模型决策。测试重点是纯函数和环境变量驱动的逻辑。
| 文件 | 关键导出 |
|---|---|
src/utils/model/aliases.ts |
MODEL_ALIASES, MODEL_FAMILY_ALIASES, isModelAlias, isModelFamilyAlias |
src/utils/model/providers.ts |
APIProvider, getAPIProvider, isFirstPartyAnthropicBaseUrl |
src/utils/model/model.ts |
firstPartyNameToCanonical, getCanonicalName, parseUserSpecifiedModel, normalizeModelStringForAPI, getRuntimeMainLoopModel, getDefaultMainLoopModelSetting |
'claude-sonnet-4-6-20250514' → false'gpt-4' → false'Sonnet' → false(别名是小写)'https://api.anthropic.com' → true'https://my-proxy.com' → false'https://api-staging.anthropic.com' + ant → true'claude-opus-4-6-20250514' → 'claude-opus-4-6''claude-sonnet-4-6-20250514' → 'claude-sonnet-4-6''claude-haiku-4-5-20251001' → 'claude-haiku-4-5''us.anthropic.claude-opus-4-6-v1:0' → 'claude-opus-4-6''claude-3-7-sonnet-20250219' → 'claude-3-7-sonnet''claude-3-5-sonnet''claude-3-5-haiku''claude-3-opus''Claude-Opus-4-6' → 'claude-opus-4-6''unknown-model' → 'unknown-model''sonnet[1m]' → 模型名 + '[1m]''my-Custom-Model' 保留大小写'custom-model[1m]' → 'custom-model[1m]'' sonnet ' → 正确解析| 依赖 | Mock 方式 | 说明 |
|---|---|---|
process.env.CLAUDE_CODE_USE_BEDROCK/VERTEX/FOUNDRY |
直接设置/恢复 | provider 选择 |
process.env.ANTHROPIC_BASE_URL |
直接设置/恢复 | URL 检测 |
process.env.USER_TYPE |
直接设置/恢复 | staging URL 和 ant 功能 |
getModelStrings() |
mock.module | 返回固定模型 ID |
getMainLoopModelOverride |
mock.module | 会话中模型覆盖 |
getSettings_DEPRECATED |
mock.module | 用户设置中的模型 |
getUserSpecifiedModelSetting |
mock.module | getRuntimeMainLoopModel 依赖 |
isModelAllowed |
mock.module | allowlist 检查 |