Mayo commited on
feat: add more cloud models
Browse files
README.md
CHANGED
|
@@ -256,7 +256,7 @@ LLMs are downloaded on demand when you activate a model. For constrained memory
|
|
| 256 |
|
| 257 |
Koharu supports hosted APIs from [OpenAI](https://platform.openai.com/), [Gemini](https://ai.google.dev/), [Claude](https://www.anthropic.com/api), and [DeepSeek](https://platform.deepseek.com/) instead of a local GGUF model.
|
| 258 |
|
| 259 |
-
Built-in cloud
|
| 260 |
|
| 261 |
#### Codex Image-to-Image Generation
|
| 262 |
|
|
|
|
| 256 |
|
| 257 |
Koharu supports hosted APIs from [OpenAI](https://platform.openai.com/), [Gemini](https://ai.google.dev/), [Claude](https://www.anthropic.com/api), and [DeepSeek](https://platform.deepseek.com/) instead of a local GGUF model.
|
| 258 |
|
| 259 |
+
Built-in cloud catalogs include current text-output models for OpenAI, Gemini, Claude, and DeepSeek, including GPT-5.5/5.4/5.x, Gemini 3.1/3/2.5/2.0, Claude Opus/Sonnet/Haiku 4.x, DeepSeek V4, and compatibility aliases such as `deepseek-chat` and `deepseek-reasoner`.
|
| 260 |
|
| 261 |
#### Codex Image-to-Image Generation
|
| 262 |
|
docs/en-US/explanation/models-and-providers.md
CHANGED
|
@@ -94,12 +94,12 @@ Machine-translation providers are pure translation services rather than chat mod
|
|
| 94 |
|
| 95 |
### Current built-in remote LLM models
|
| 96 |
|
| 97 |
-
The built-in
|
| 98 |
|
| 99 |
-
- OpenAI:
|
| 100 |
-
- Gemini:
|
| 101 |
-
- Claude:
|
| 102 |
-
- DeepSeek: `deepseek-chat`
|
| 103 |
- OpenAI-compatible APIs: models are discovered dynamically from the configured endpoint
|
| 104 |
|
| 105 |
### Machine-translation providers
|
|
|
|
| 94 |
|
| 95 |
### Current built-in remote LLM models
|
| 96 |
|
| 97 |
+
The built-in catalog for LLM-backed providers includes:
|
| 98 |
|
| 99 |
+
- OpenAI: GPT-5.5, GPT-5.4, GPT-5.x, GPT-4.1, o-series, GPT-4o, and legacy GPT chat models
|
| 100 |
+
- Gemini: Gemini 3.1, Gemini 3, Gemini 2.5, Gemini 2.0 text-output models, plus Gemma 4 hosted through the Gemini API
|
| 101 |
+
- Claude: current Claude Opus, Sonnet, and Haiku 4.x models, plus deprecated Claude 4 snapshots that remain available until their upstream retirement dates
|
| 102 |
+
- DeepSeek: DeepSeek V4 Flash, DeepSeek V4 Pro, and the `deepseek-chat` / `deepseek-reasoner` compatibility aliases
|
| 103 |
- OpenAI-compatible APIs: models are discovered dynamically from the configured endpoint
|
| 104 |
|
| 105 |
### Machine-translation providers
|
docs/ja-JP/explanation/models-and-providers.md
CHANGED
|
@@ -94,12 +94,12 @@ Koharu は、ローカルモデルをダウンロードせずに、リモート
|
|
| 94 |
|
| 95 |
### 現在の組み込みリモート LLM モデル
|
| 96 |
|
| 97 |
-
LLM ベースのプロバイダ
|
| 98 |
|
| 99 |
-
- OpenAI:
|
| 100 |
-
- Gemini:
|
| 101 |
-
- Claude:
|
| 102 |
-
- DeepSeek: `deepseek-chat`
|
| 103 |
- OpenAI 互換 API: モデル一覧は設定したエンドポイントから動的に取得されます
|
| 104 |
|
| 105 |
### 機械翻訳プロバイダ
|
|
|
|
| 94 |
|
| 95 |
### 現在の組み込みリモート LLM モデル
|
| 96 |
|
| 97 |
+
LLM ベースのプロバイダの組み込みカタログには次が含まれます。
|
| 98 |
|
| 99 |
+
- OpenAI: GPT-5.5、GPT-5.4、GPT-5.x、GPT-4.1、o シリーズ、GPT-4o、旧 GPT chat モデル
|
| 100 |
+
- Gemini: Gemini 3.1、Gemini 3、Gemini 2.5、Gemini 2.0 のテキスト出力モデル、および Gemini API でホストされる Gemma 4
|
| 101 |
+
- Claude: 現行の Claude Opus、Sonnet、Haiku 4.x モデル、および上流の終了日までは利用できる非推奨の Claude 4 スナップショット
|
| 102 |
+
- DeepSeek: DeepSeek V4 Flash、DeepSeek V4 Pro、`deepseek-chat` / `deepseek-reasoner` 互換エイリアス
|
| 103 |
- OpenAI 互換 API: モデル一覧は設定したエンドポイントから動的に取得されます
|
| 104 |
|
| 105 |
### 機械翻訳プロバイダ
|
docs/pt-BR/explanation/models-and-providers.md
CHANGED
|
@@ -94,12 +94,12 @@ Provedores de tradução automática são serviços de tradução puros, não mo
|
|
| 94 |
|
| 95 |
### Modelos remotos de LLM internos atuais
|
| 96 |
|
| 97 |
-
|
| 98 |
|
| 99 |
-
- OpenAI:
|
| 100 |
-
- Gemini:
|
| 101 |
-
- Claude:
|
| 102 |
-
- DeepSeek: `deepseek-chat`
|
| 103 |
- APIs compatíveis com OpenAI: os modelos são descobertos dinamicamente a partir do endpoint configurado
|
| 104 |
|
| 105 |
### Provedores de tradução automática
|
|
|
|
| 94 |
|
| 95 |
### Modelos remotos de LLM internos atuais
|
| 96 |
|
| 97 |
+
O catálogo interno dos provedores baseados em LLM inclui:
|
| 98 |
|
| 99 |
+
- OpenAI: GPT-5.5, GPT-5.4, GPT-5.x, GPT-4.1, série o, GPT-4o e modelos GPT chat legados
|
| 100 |
+
- Gemini: modelos de saída de texto Gemini 3.1, Gemini 3, Gemini 2.5 e Gemini 2.0, além do Gemma 4 hospedado pela Gemini API
|
| 101 |
+
- Claude: modelos Claude Opus, Sonnet e Haiku 4.x atuais, além de snapshots Claude 4 obsoletos que continuam disponíveis até as datas de desativação upstream
|
| 102 |
+
- DeepSeek: DeepSeek V4 Flash, DeepSeek V4 Pro e os aliases de compatibilidade `deepseek-chat` / `deepseek-reasoner`
|
| 103 |
- APIs compatíveis com OpenAI: os modelos são descobertos dinamicamente a partir do endpoint configurado
|
| 104 |
|
| 105 |
### Provedores de tradução automática
|
docs/zh-CN/explanation/models-and-providers.md
CHANGED
|
@@ -94,12 +94,12 @@ Koharu 也可以通过远程或自托管 API 翻译,而不下载本地模型
|
|
| 94 |
|
| 95 |
### 当前内置远程 LLM 模型
|
| 96 |
|
| 97 |
-
LLM 驱动提供商
|
| 98 |
|
| 99 |
-
- OpenAI
|
| 100 |
-
- Gemini
|
| 101 |
-
- Claude
|
| 102 |
-
- DeepSeek
|
| 103 |
- OpenAI 兼容 API:模型列表会从你配置的端点动态发现
|
| 104 |
|
| 105 |
### 机器翻译提供商
|
|
|
|
| 94 |
|
| 95 |
### 当前内置远程 LLM 模型
|
| 96 |
|
| 97 |
+
LLM 驱动提供商的内置目录包括:
|
| 98 |
|
| 99 |
+
- OpenAI:GPT-5.5、GPT-5.4、GPT-5.x、GPT-4.1、o 系列、GPT-4o,以及旧版 GPT chat 模型
|
| 100 |
+
- Gemini:Gemini 3.1、Gemini 3、Gemini 2.5、Gemini 2.0 文本输出模型,以及通过 Gemini API 托管的 Gemma 4
|
| 101 |
+
- Claude:当前可用的 Claude Opus、Sonnet、Haiku 4.x 模型,以及在上游退役日期前仍可用的已弃用 Claude 4 快照
|
| 102 |
+
- DeepSeek:DeepSeek V4 Flash、DeepSeek V4 Pro,以及 `deepseek-chat` / `deepseek-reasoner` 兼容别名
|
| 103 |
- OpenAI 兼容 API:模型列表会从你配置的端点动态发现
|
| 104 |
|
| 105 |
### 机器翻译提供商
|
koharu-llm/src/providers/mod.rs
CHANGED
|
@@ -118,12 +118,114 @@ pub struct ProviderConfig {
|
|
| 118 |
pub max_tokens: Option<u32>,
|
| 119 |
}
|
| 120 |
|
| 121 |
-
const OPENAI_MODELS: &[ProviderModelDescriptor] = &[
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 125 |
|
| 126 |
const GEMINI_MODELS: &[ProviderModelDescriptor] = &[
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 127 |
ProviderModelDescriptor {
|
| 128 |
id: "gemini-3.1-flash-lite-preview",
|
| 129 |
name: "Gemini 3.1 Flash-Lite Preview",
|
|
@@ -132,6 +234,34 @@ const GEMINI_MODELS: &[ProviderModelDescriptor] = &[
|
|
| 132 |
id: "gemini-3-flash-preview",
|
| 133 |
name: "Gemini 3 Flash Preview",
|
| 134 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 135 |
ProviderModelDescriptor {
|
| 136 |
id: "gemma-4-31b-it",
|
| 137 |
name: "Gemma 4 31B",
|
|
@@ -142,15 +272,67 @@ const GEMINI_MODELS: &[ProviderModelDescriptor] = &[
|
|
| 142 |
},
|
| 143 |
];
|
| 144 |
|
| 145 |
-
const CLAUDE_MODELS: &[ProviderModelDescriptor] = &[
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 149 |
|
| 150 |
-
const DEEPSEEK_MODELS: &[ProviderModelDescriptor] = &[
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 154 |
|
| 155 |
const MT_MODELS: &[ProviderModelDescriptor] = &[ProviderModelDescriptor {
|
| 156 |
id: "mt",
|
|
@@ -395,3 +577,63 @@ fn discover_openai_compatible_models(config: ProviderConfig) -> ProviderDiscover
|
|
| 395 |
.collect())
|
| 396 |
})
|
| 397 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 118 |
pub max_tokens: Option<u32>,
|
| 119 |
}
|
| 120 |
|
| 121 |
+
const OPENAI_MODELS: &[ProviderModelDescriptor] = &[
|
| 122 |
+
ProviderModelDescriptor {
|
| 123 |
+
id: "gpt-5.5",
|
| 124 |
+
name: "GPT-5.5",
|
| 125 |
+
},
|
| 126 |
+
ProviderModelDescriptor {
|
| 127 |
+
id: "gpt-5.4",
|
| 128 |
+
name: "GPT-5.4",
|
| 129 |
+
},
|
| 130 |
+
ProviderModelDescriptor {
|
| 131 |
+
id: "gpt-5.4-mini",
|
| 132 |
+
name: "GPT-5.4 mini",
|
| 133 |
+
},
|
| 134 |
+
ProviderModelDescriptor {
|
| 135 |
+
id: "gpt-5.4-nano",
|
| 136 |
+
name: "GPT-5.4 nano",
|
| 137 |
+
},
|
| 138 |
+
ProviderModelDescriptor {
|
| 139 |
+
id: "gpt-5.2",
|
| 140 |
+
name: "GPT-5.2",
|
| 141 |
+
},
|
| 142 |
+
ProviderModelDescriptor {
|
| 143 |
+
id: "gpt-5.1",
|
| 144 |
+
name: "GPT-5.1",
|
| 145 |
+
},
|
| 146 |
+
ProviderModelDescriptor {
|
| 147 |
+
id: "gpt-5",
|
| 148 |
+
name: "GPT-5",
|
| 149 |
+
},
|
| 150 |
+
ProviderModelDescriptor {
|
| 151 |
+
id: "gpt-5-mini",
|
| 152 |
+
name: "GPT-5 mini",
|
| 153 |
+
},
|
| 154 |
+
ProviderModelDescriptor {
|
| 155 |
+
id: "gpt-5-nano",
|
| 156 |
+
name: "GPT-5 nano",
|
| 157 |
+
},
|
| 158 |
+
ProviderModelDescriptor {
|
| 159 |
+
id: "gpt-5-chat-latest",
|
| 160 |
+
name: "GPT-5 Chat latest",
|
| 161 |
+
},
|
| 162 |
+
ProviderModelDescriptor {
|
| 163 |
+
id: "gpt-4.1",
|
| 164 |
+
name: "GPT-4.1",
|
| 165 |
+
},
|
| 166 |
+
ProviderModelDescriptor {
|
| 167 |
+
id: "gpt-4.1-mini",
|
| 168 |
+
name: "GPT-4.1 mini",
|
| 169 |
+
},
|
| 170 |
+
ProviderModelDescriptor {
|
| 171 |
+
id: "gpt-4.1-nano",
|
| 172 |
+
name: "GPT-4.1 nano",
|
| 173 |
+
},
|
| 174 |
+
ProviderModelDescriptor {
|
| 175 |
+
id: "o3",
|
| 176 |
+
name: "o3",
|
| 177 |
+
},
|
| 178 |
+
ProviderModelDescriptor {
|
| 179 |
+
id: "o4-mini",
|
| 180 |
+
name: "o4-mini",
|
| 181 |
+
},
|
| 182 |
+
ProviderModelDescriptor {
|
| 183 |
+
id: "o3-mini",
|
| 184 |
+
name: "o3-mini",
|
| 185 |
+
},
|
| 186 |
+
ProviderModelDescriptor {
|
| 187 |
+
id: "o1",
|
| 188 |
+
name: "o1",
|
| 189 |
+
},
|
| 190 |
+
ProviderModelDescriptor {
|
| 191 |
+
id: "o1-mini",
|
| 192 |
+
name: "o1-mini",
|
| 193 |
+
},
|
| 194 |
+
ProviderModelDescriptor {
|
| 195 |
+
id: "o1-preview",
|
| 196 |
+
name: "o1 preview",
|
| 197 |
+
},
|
| 198 |
+
ProviderModelDescriptor {
|
| 199 |
+
id: "gpt-4o",
|
| 200 |
+
name: "GPT-4o",
|
| 201 |
+
},
|
| 202 |
+
ProviderModelDescriptor {
|
| 203 |
+
id: "gpt-4o-mini",
|
| 204 |
+
name: "GPT-4o mini",
|
| 205 |
+
},
|
| 206 |
+
ProviderModelDescriptor {
|
| 207 |
+
id: "gpt-4-turbo",
|
| 208 |
+
name: "GPT-4 Turbo",
|
| 209 |
+
},
|
| 210 |
+
ProviderModelDescriptor {
|
| 211 |
+
id: "gpt-4",
|
| 212 |
+
name: "GPT-4",
|
| 213 |
+
},
|
| 214 |
+
ProviderModelDescriptor {
|
| 215 |
+
id: "gpt-3.5-turbo",
|
| 216 |
+
name: "GPT-3.5 Turbo",
|
| 217 |
+
},
|
| 218 |
+
];
|
| 219 |
|
| 220 |
const GEMINI_MODELS: &[ProviderModelDescriptor] = &[
|
| 221 |
+
ProviderModelDescriptor {
|
| 222 |
+
id: "gemini-3.1-pro-preview",
|
| 223 |
+
name: "Gemini 3.1 Pro Preview",
|
| 224 |
+
},
|
| 225 |
+
ProviderModelDescriptor {
|
| 226 |
+
id: "gemini-3.1-pro-preview-customtools",
|
| 227 |
+
name: "Gemini 3.1 Pro Preview Custom Tools",
|
| 228 |
+
},
|
| 229 |
ProviderModelDescriptor {
|
| 230 |
id: "gemini-3.1-flash-lite-preview",
|
| 231 |
name: "Gemini 3.1 Flash-Lite Preview",
|
|
|
|
| 234 |
id: "gemini-3-flash-preview",
|
| 235 |
name: "Gemini 3 Flash Preview",
|
| 236 |
},
|
| 237 |
+
ProviderModelDescriptor {
|
| 238 |
+
id: "gemini-2.5-pro",
|
| 239 |
+
name: "Gemini 2.5 Pro",
|
| 240 |
+
},
|
| 241 |
+
ProviderModelDescriptor {
|
| 242 |
+
id: "gemini-2.5-flash",
|
| 243 |
+
name: "Gemini 2.5 Flash",
|
| 244 |
+
},
|
| 245 |
+
ProviderModelDescriptor {
|
| 246 |
+
id: "gemini-2.5-flash-lite",
|
| 247 |
+
name: "Gemini 2.5 Flash-Lite",
|
| 248 |
+
},
|
| 249 |
+
ProviderModelDescriptor {
|
| 250 |
+
id: "gemini-2.0-flash",
|
| 251 |
+
name: "Gemini 2.0 Flash",
|
| 252 |
+
},
|
| 253 |
+
ProviderModelDescriptor {
|
| 254 |
+
id: "gemini-2.0-flash-001",
|
| 255 |
+
name: "Gemini 2.0 Flash 001",
|
| 256 |
+
},
|
| 257 |
+
ProviderModelDescriptor {
|
| 258 |
+
id: "gemini-2.0-flash-lite",
|
| 259 |
+
name: "Gemini 2.0 Flash-Lite",
|
| 260 |
+
},
|
| 261 |
+
ProviderModelDescriptor {
|
| 262 |
+
id: "gemini-2.0-flash-lite-001",
|
| 263 |
+
name: "Gemini 2.0 Flash-Lite 001",
|
| 264 |
+
},
|
| 265 |
ProviderModelDescriptor {
|
| 266 |
id: "gemma-4-31b-it",
|
| 267 |
name: "Gemma 4 31B",
|
|
|
|
| 272 |
},
|
| 273 |
];
|
| 274 |
|
| 275 |
+
const CLAUDE_MODELS: &[ProviderModelDescriptor] = &[
|
| 276 |
+
ProviderModelDescriptor {
|
| 277 |
+
id: "claude-opus-4-7",
|
| 278 |
+
name: "Claude Opus 4.7",
|
| 279 |
+
},
|
| 280 |
+
ProviderModelDescriptor {
|
| 281 |
+
id: "claude-sonnet-4-6",
|
| 282 |
+
name: "Claude Sonnet 4.6",
|
| 283 |
+
},
|
| 284 |
+
ProviderModelDescriptor {
|
| 285 |
+
id: "claude-haiku-4-5",
|
| 286 |
+
name: "Claude Haiku 4.5",
|
| 287 |
+
},
|
| 288 |
+
ProviderModelDescriptor {
|
| 289 |
+
id: "claude-opus-4-6",
|
| 290 |
+
name: "Claude Opus 4.6",
|
| 291 |
+
},
|
| 292 |
+
ProviderModelDescriptor {
|
| 293 |
+
id: "claude-opus-4-5-20251101",
|
| 294 |
+
name: "Claude Opus 4.5",
|
| 295 |
+
},
|
| 296 |
+
ProviderModelDescriptor {
|
| 297 |
+
id: "claude-opus-4-1-20250805",
|
| 298 |
+
name: "Claude Opus 4.1",
|
| 299 |
+
},
|
| 300 |
+
ProviderModelDescriptor {
|
| 301 |
+
id: "claude-sonnet-4-5-20250929",
|
| 302 |
+
name: "Claude Sonnet 4.5",
|
| 303 |
+
},
|
| 304 |
+
ProviderModelDescriptor {
|
| 305 |
+
id: "claude-haiku-4-5-20251001",
|
| 306 |
+
name: "Claude Haiku 4.5 snapshot",
|
| 307 |
+
},
|
| 308 |
+
ProviderModelDescriptor {
|
| 309 |
+
id: "claude-opus-4-20250514",
|
| 310 |
+
name: "Claude Opus 4 (deprecated)",
|
| 311 |
+
},
|
| 312 |
+
ProviderModelDescriptor {
|
| 313 |
+
id: "claude-sonnet-4-20250514",
|
| 314 |
+
name: "Claude Sonnet 4 (deprecated)",
|
| 315 |
+
},
|
| 316 |
+
];
|
| 317 |
|
| 318 |
+
const DEEPSEEK_MODELS: &[ProviderModelDescriptor] = &[
|
| 319 |
+
ProviderModelDescriptor {
|
| 320 |
+
id: "deepseek-v4-flash",
|
| 321 |
+
name: "DeepSeek V4 Flash",
|
| 322 |
+
},
|
| 323 |
+
ProviderModelDescriptor {
|
| 324 |
+
id: "deepseek-v4-pro",
|
| 325 |
+
name: "DeepSeek V4 Pro",
|
| 326 |
+
},
|
| 327 |
+
ProviderModelDescriptor {
|
| 328 |
+
id: "deepseek-chat",
|
| 329 |
+
name: "DeepSeek Chat",
|
| 330 |
+
},
|
| 331 |
+
ProviderModelDescriptor {
|
| 332 |
+
id: "deepseek-reasoner",
|
| 333 |
+
name: "DeepSeek Reasoner",
|
| 334 |
+
},
|
| 335 |
+
];
|
| 336 |
|
| 337 |
const MT_MODELS: &[ProviderModelDescriptor] = &[ProviderModelDescriptor {
|
| 338 |
id: "mt",
|
|
|
|
| 577 |
.collect())
|
| 578 |
})
|
| 579 |
}
|
| 580 |
+
|
| 581 |
+
#[cfg(test)]
|
| 582 |
+
mod tests {
|
| 583 |
+
use super::*;
|
| 584 |
+
|
| 585 |
+
fn ids(models: &[ProviderModelDescriptor]) -> Vec<&'static str> {
|
| 586 |
+
models.iter().map(|model| model.id).collect()
|
| 587 |
+
}
|
| 588 |
+
|
| 589 |
+
fn assert_contains_all(provider: &str, models: &[ProviderModelDescriptor], expected: &[&str]) {
|
| 590 |
+
let ids = ids(models);
|
| 591 |
+
for expected_id in expected {
|
| 592 |
+
assert!(
|
| 593 |
+
ids.contains(expected_id),
|
| 594 |
+
"{provider} model catalog should include {expected_id}"
|
| 595 |
+
);
|
| 596 |
+
}
|
| 597 |
+
}
|
| 598 |
+
|
| 599 |
+
#[test]
|
| 600 |
+
fn static_llm_provider_catalogs_cover_current_model_families() {
|
| 601 |
+
assert_contains_all(
|
| 602 |
+
"openai",
|
| 603 |
+
OPENAI_MODELS,
|
| 604 |
+
&[
|
| 605 |
+
"gpt-5.5",
|
| 606 |
+
"gpt-5.4-mini",
|
| 607 |
+
"gpt-5-mini",
|
| 608 |
+
"gpt-4.1",
|
| 609 |
+
"gpt-4o",
|
| 610 |
+
"o3",
|
| 611 |
+
],
|
| 612 |
+
);
|
| 613 |
+
assert_contains_all(
|
| 614 |
+
"gemini",
|
| 615 |
+
GEMINI_MODELS,
|
| 616 |
+
&[
|
| 617 |
+
"gemini-3.1-pro-preview",
|
| 618 |
+
"gemini-3.1-flash-lite-preview",
|
| 619 |
+
"gemini-2.5-flash",
|
| 620 |
+
"gemma-4-26b-a4b-it",
|
| 621 |
+
],
|
| 622 |
+
);
|
| 623 |
+
assert_contains_all(
|
| 624 |
+
"claude",
|
| 625 |
+
CLAUDE_MODELS,
|
| 626 |
+
&["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5"],
|
| 627 |
+
);
|
| 628 |
+
assert_contains_all(
|
| 629 |
+
"deepseek",
|
| 630 |
+
DEEPSEEK_MODELS,
|
| 631 |
+
&[
|
| 632 |
+
"deepseek-v4-flash",
|
| 633 |
+
"deepseek-v4-pro",
|
| 634 |
+
"deepseek-chat",
|
| 635 |
+
"deepseek-reasoner",
|
| 636 |
+
],
|
| 637 |
+
);
|
| 638 |
+
}
|
| 639 |
+
}
|