Mayo commited on
Commit
96385f6
·
unverified ·
1 Parent(s): 0a32dea

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 defaults: OpenAI `gpt-5-mini`, Gemini `gemini-3.1-flash-lite-preview`, Claude `claude-haiku-4-5`, and DeepSeek `deepseek-chat`.
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 defaults for the LLM-backed providers are:
98
 
99
- - OpenAI: `gpt-5-mini` (`GPT-5 mini`)
100
- - Gemini: `gemini-3.1-flash-lite-preview` (`Gemini 3.1 Flash-Lite Preview`)
101
- - Claude: `claude-haiku-4-5` (`Claude Haiku 4.5`)
102
- - DeepSeek: `deepseek-chat` (`DeepSeek-V3.2-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: `gpt-5-mini` (`GPT-5 mini`)
100
- - Gemini: `gemini-3.1-flash-lite-preview` (`Gemini 3.1 Flash-Lite Preview`)
101
- - Claude: `claude-haiku-4-5` (`Claude Haiku 4.5`)
102
- - DeepSeek: `deepseek-chat` (`DeepSeek-V3.2-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.1Gemini 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
- Os padrões internos atuais para os provedores baseados em LLM são:
98
 
99
- - OpenAI: `gpt-5-mini` (`GPT-5 mini`)
100
- - Gemini: `gemini-3.1-flash-lite-preview` (`Gemini 3.1 Flash-Lite Preview`)
101
- - Claude: `claude-haiku-4-5` (`Claude Haiku 4.5`)
102
- - DeepSeek: `deepseek-chat` (`DeepSeek-V3.2-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: `gpt-5-mini` (`GPT-5 mini`)
100
- - Gemini: `gemini-3.1-flash-lite-preview` (`Gemini 3.1 Flash-Lite Preview`)
101
- - Claude: `claude-haiku-4-5` (`Claude Haiku 4.5`)
102
- - DeepSeek: `deepseek-chat` (`DeepSeek-V3.2-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.1Gemini 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] = &[ProviderModelDescriptor {
122
- id: "gpt-5-mini",
123
- name: "GPT-5 mini",
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] = &[ProviderModelDescriptor {
146
- id: "claude-haiku-4-5",
147
- name: "Claude Haiku 4.5",
148
- }];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
149
 
150
- const DEEPSEEK_MODELS: &[ProviderModelDescriptor] = &[ProviderModelDescriptor {
151
- id: "deepseek-chat",
152
- name: "DeepSeek-V3.2-Chat",
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
+ }