feat: add Claude Fable 5 model mapping across Claude Code and Desktop

- Wire claude-fable-5 as a fourth tier on both proxy paths, with a
  fable -> opus -> default fallback mirroring the official downgrade.
- Whitelist the fable- prefix for the Desktop 1.12603.1+ validator.
- Clarify fallbackModelHint (zh/en/ja/zh-TW): a blank tier on
  third-party endpoints forwards the literal model name and 404s.

Refs #3980, #4026, #4049.
This commit is contained in:
Jason
2026-06-13 19:11:59 +08:00
parent 6e519a7496
commit 4f8a79c273
13 changed files with 343 additions and 41 deletions
+3 -1
View File
@@ -194,6 +194,7 @@
"routeModelLabel": "Model role",
"routeRoleSonnet": "Sonnet",
"routeRoleOpus": "Opus",
"routeRoleFable": "Fable",
"routeRoleHaiku": "Haiku",
"labelOverrideLabel": "Menu display name",
"upstreamModelLabel": "Requested model",
@@ -1093,6 +1094,7 @@
"modelRoleLabel": "Model role",
"modelRoleSonnet": "Sonnet",
"modelRoleOpus": "Opus",
"modelRoleFable": "Fable",
"modelRoleHaiku": "Haiku",
"modelDisplayNameLabel": "Display name",
"modelDisplayNamePlaceholder": "e.g. DeepSeek V4 Pro",
@@ -1100,7 +1102,7 @@
"modelOneMHeader": "Declare 1M",
"modelOneMLabel": "1M",
"fallbackModelLabel": "Default fallback model",
"fallbackModelHint": "Used only when a Claude Code request does not clearly map to Sonnet, Opus, or Haiku. Usually safe to leave blank.",
"fallbackModelHint": "A fallback for requests that don't clearly map to Sonnet, Opus, Fable, or Haiku. Recommended for third-party/relay endpoints—otherwise such requests (including Haiku background subtasks) are forwarded under their original Claude model name and may fail if the upstream doesn't host it. Safe to leave blank for official endpoints.",
"quickSetModels": "Quick Set",
"quickSetSuccess": "Model name applied to all roles",
"advancedOptionsToggle": "Advanced Options",
+3 -1
View File
@@ -194,6 +194,7 @@
"routeModelLabel": "モデル役割",
"routeRoleSonnet": "Sonnet",
"routeRoleOpus": "Opus",
"routeRoleFable": "Fable",
"routeRoleHaiku": "Haiku",
"labelOverrideLabel": "メニュー表示名",
"upstreamModelLabel": "リクエストモデル",
@@ -1093,6 +1094,7 @@
"modelRoleLabel": "モデル役割",
"modelRoleSonnet": "Sonnet",
"modelRoleOpus": "Opus",
"modelRoleFable": "Fable",
"modelRoleHaiku": "Haiku",
"modelDisplayNameLabel": "表示名",
"modelDisplayNamePlaceholder": "例: DeepSeek V4 Pro",
@@ -1100,7 +1102,7 @@
"modelOneMHeader": "1M 対応を宣言",
"modelOneMLabel": "1M",
"fallbackModelLabel": "既定フォールバックモデル",
"fallbackModelHint": "Claude Code のリクエストが SonnetOpusHaiku のいずれにも明確に対応しない場合のみ使われます。通常は空欄で構いません。",
"fallbackModelHint": "SonnetOpus・Fable・Haiku のいずれにも明確に対応しないリクエストのフォールバックです。サードパーティ/中継エンドポイントでは設定を推奨します。設定しないと、これらのリクエスト(Haiku のバックグラウンドサブタスクを含む)が元の Claude モデル名のまま上流へ転送され、上流に該当モデルが無い場合は失敗することがあります。公式エンドポイントでは空欄で構いません。",
"quickSetModels": "一括設定",
"quickSetSuccess": "モデル名をすべての役割に適用しました",
"advancedOptionsToggle": "高級オプション",
+3 -1
View File
@@ -194,6 +194,7 @@
"routeModelLabel": "模型角色",
"routeRoleSonnet": "Sonnet",
"routeRoleOpus": "Opus",
"routeRoleFable": "Fable",
"routeRoleHaiku": "Haiku",
"labelOverrideLabel": "選單顯示名稱",
"upstreamModelLabel": "實際請求模型",
@@ -1065,6 +1066,7 @@
"modelRoleLabel": "模型角色",
"modelRoleSonnet": "Sonnet",
"modelRoleOpus": "Opus",
"modelRoleFable": "Fable",
"modelRoleHaiku": "Haiku",
"modelDisplayNameLabel": "顯示名稱",
"modelDisplayNamePlaceholder": "例如 DeepSeek V4 Pro",
@@ -1072,7 +1074,7 @@
"modelOneMHeader": "聲明支援 1M",
"modelOneMLabel": "1M",
"fallbackModelLabel": "備用模型",
"fallbackModelHint": "僅在 Claude Code 請求沒有明確落到 Sonnet、OpusHaiku 角色時使用;通常可以留空。",
"fallbackModelHint": "用於未明確落到 Sonnet、Opus、Fable、Haiku 角色的請求。使用第三方/中轉端點時建議填寫:否則這些請求(含 Haiku 背景子任務)會以原始 Claude 模型名透傳給上游,可能因上游無此模型而報錯。官方端點可留空。",
"quickSetModels": "一鍵設定",
"quickSetSuccess": "已將模型名稱套用至所有角色",
"advancedOptionsToggle": "進階選項",
+3 -1
View File
@@ -194,6 +194,7 @@
"routeModelLabel": "模型角色",
"routeRoleSonnet": "Sonnet",
"routeRoleOpus": "Opus",
"routeRoleFable": "Fable",
"routeRoleHaiku": "Haiku",
"labelOverrideLabel": "菜单显示名",
"upstreamModelLabel": "实际请求模型",
@@ -1093,6 +1094,7 @@
"modelRoleLabel": "模型角色",
"modelRoleSonnet": "Sonnet",
"modelRoleOpus": "Opus",
"modelRoleFable": "Fable",
"modelRoleHaiku": "Haiku",
"modelDisplayNameLabel": "显示名称",
"modelDisplayNamePlaceholder": "例如 DeepSeek V4 Pro",
@@ -1100,7 +1102,7 @@
"modelOneMHeader": "声明支持 1M",
"modelOneMLabel": "1M",
"fallbackModelLabel": "默认兜底模型",
"fallbackModelHint": "仅在 Claude Code 请求没有明确落到 Sonnet、OpusHaiku 角色时使用;通常可以留空。",
"fallbackModelHint": "用于未明确落到 Sonnet、Opus、Fable、Haiku 角色的请求。使用第三方/中转端点时建议填写:否则这些请求(含 Haiku 后台子任务)会以原始 Claude 模型名透传给上游,可能因上游无此模型而报错。官方端点可留空。",
"quickSetModels": "一键设置",
"quickSetSuccess": "已将模型名称应用到所有角色",
"advancedOptionsToggle": "高级选项",