From 5ff748ca369ec1ba2527af401914b112a9f02d55 Mon Sep 17 00:00:00 2001 From: wu21-web Date: Sat, 15 Aug 2026 23:51:53 +0900 Subject: [PATCH 1/5] add gemini providers and tests --- internal/llm/providers.go | 16 ++++++++++++++++ internal/llm/providers_test.go | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/internal/llm/providers.go b/internal/llm/providers.go index 71c3afb14..0bdc23067 100644 --- a/internal/llm/providers.go +++ b/internal/llm/providers.go @@ -78,6 +78,22 @@ var registry = []Provider{ "xai/grok-4", }, }, + { + Name: "gemini", + DisplayName: "Google Gemini API", + Protocol: ProtocolOpenAIChatCompletions, + BaseURL: "https://generativelanguage.googleapis.com/v1beta/openai", + EnvVar: "GEMINI_API_KEY", + Models: []string{ + "gemini-3-flash", + "gemini-3.5-flash", + "gemini-3.6-flash", + "gemini-3.1-flash-lite", + "gemini-3.5-flash-lite", + "gemini-3.1-pro", + "gemini-3-flash-preview", + }, + }, { Name: "dashscope", DisplayName: "Alibaba DashScope API", diff --git a/internal/llm/providers_test.go b/internal/llm/providers_test.go index a66c9dbd5..48389c36c 100644 --- a/internal/llm/providers_test.go +++ b/internal/llm/providers_test.go @@ -75,7 +75,7 @@ func TestListProviders_Order(t *testing.T) { if len(providers) < 3 { t.Fatalf("expected at least 3 providers, got %d", len(providers)) } - expected := []string{"anthropic", "baidu-qianfan", "dashscope", "dashscope-tokenplan", "deepseek", "edenai", "hy-tokenplan", "iflytek", "kimi", "kimi-global", "litellm", "mimo", "minimax", "minimax-cn", "mistral", "novita", "ollama-cloud", "openai", "siliconflow", "siliconflow-cn", "tencent-tokenhub", "volcengine", "xai", "z-ai", "z-ai-coding"} + expected := []string{"anthropic", "baidu-qianfan", "dashscope", "dashscope-tokenplan", "deepseek", "edenai", "gemini", "hy-tokenplan", "iflytek", "kimi", "kimi-global", "litellm", "mimo", "minimax", "minimax-cn", "mistral", "novita", "ollama-cloud", "openai", "siliconflow", "siliconflow-cn", "tencent-tokenhub", "volcengine", "xai", "z-ai", "z-ai-coding"} if len(providers) != len(expected) { t.Fatalf("expected %d providers, got %d", len(expected), len(providers)) } From c045982eb1cd5f0d1bfa7a3fc7cb7f08dae4e4ec Mon Sep 17 00:00:00 2001 From: wu21-web Date: Sat, 15 Aug 2026 23:52:11 +0900 Subject: [PATCH 2/5] docs: update --- pages/src/content/docs/en/configuration.md | 1 + pages/src/content/docs/ja/configuration.md | 1 + pages/src/content/docs/ru/configuration.md | 1 + pages/src/content/docs/zh/configuration.md | 1 + 4 files changed, 4 insertions(+) diff --git a/pages/src/content/docs/en/configuration.md b/pages/src/content/docs/en/configuration.md index f5a61fb95..a5ea5eabf 100644 --- a/pages/src/content/docs/en/configuration.md +++ b/pages/src/content/docs/en/configuration.md @@ -46,6 +46,7 @@ environment variable. |---|---|---|---| | `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` | | `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` | +| `gemini` | openai | `https://generativelanguage.googleapis.com/v1beta/openai` | `GEMINI_API_KEY` | | `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` | | `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` | | `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` | diff --git a/pages/src/content/docs/ja/configuration.md b/pages/src/content/docs/ja/configuration.md index 8fd5e2a1f..867e7f4b5 100644 --- a/pages/src/content/docs/ja/configuration.md +++ b/pages/src/content/docs/ja/configuration.md @@ -44,6 +44,7 @@ ocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx |---|---|---|---| | `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` | | `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` | +| `gemini` | openai | `https://generativelanguage.googleapis.com/v1beta/openai` | `GEMINI_API_KEY` | | `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` | | `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` | | `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` | diff --git a/pages/src/content/docs/ru/configuration.md b/pages/src/content/docs/ru/configuration.md index 0b86dacc8..f9742afee 100644 --- a/pages/src/content/docs/ru/configuration.md +++ b/pages/src/content/docs/ru/configuration.md @@ -49,6 +49,7 @@ API-ключ. Если `providers..api_key` не задан, OCR испо |---|---|---|---| | `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` | | `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` | +| `gemini` | openai | `https://generativelanguage.googleapis.com/v1beta/openai` | `GEMINI_API_KEY` | | `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` | | `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` | | `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` | diff --git a/pages/src/content/docs/zh/configuration.md b/pages/src/content/docs/zh/configuration.md index e33f24385..c57b51745 100644 --- a/pages/src/content/docs/zh/configuration.md +++ b/pages/src/content/docs/zh/configuration.md @@ -43,6 +43,7 @@ ocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx |---|---|---|---| | `anthropic` | anthropic | `https://api.anthropic.com` | `ANTHROPIC_API_KEY` | | `openai` | openai | `https://api.openai.com/v1` | `OPENAI_API_KEY` | +| `gemini` | openai | `https://generativelanguage.googleapis.com/v1beta/openai` | `GEMINI_API_KEY` | | `dashscope` | openai | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_API_KEY` | | `dashscope-tokenplan` | openai | `https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1` | `DASHSCOPE_TOKENPLAN_KEY` | | `volcengine` | openai | `https://ark.cn-beijing.volces.com/api/v3` | `ARK_API_KEY` | From c604451cc5f6f12986f48ff0b5f8db1bcf117458 Mon Sep 17 00:00:00 2001 From: wu21-web Date: Sat, 15 Aug 2026 23:53:41 +0900 Subject: [PATCH 3/5] chore: add more models --- internal/llm/providers.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/llm/providers.go b/internal/llm/providers.go index 0bdc23067..6d7762037 100644 --- a/internal/llm/providers.go +++ b/internal/llm/providers.go @@ -92,6 +92,9 @@ var registry = []Provider{ "gemini-3.5-flash-lite", "gemini-3.1-pro", "gemini-3-flash-preview", + "gemini-2.5-flash", + "gemini-2.5-flash-lite", + "gemini-2.5-pro", }, }, { From d329e081e1e6ed09ce3fe37d27ca3fd7fb766f17 Mon Sep 17 00:00:00 2001 From: Tao Xin Date: Sun, 16 Aug 2026 00:09:09 +0900 Subject: [PATCH 4/5] chore: reorder models --- internal/llm/providers.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/llm/providers.go b/internal/llm/providers.go index 6d7762037..d43bb74c5 100644 --- a/internal/llm/providers.go +++ b/internal/llm/providers.go @@ -85,16 +85,16 @@ var registry = []Provider{ BaseURL: "https://generativelanguage.googleapis.com/v1beta/openai", EnvVar: "GEMINI_API_KEY", Models: []string{ + "gemini-2.5-flash-lite", + "gemini-2.5-flash", + "gemini-2.5-pro", "gemini-3-flash", - "gemini-3.5-flash", - "gemini-3.6-flash", + "gemini-3-flash-preview", "gemini-3.1-flash-lite", - "gemini-3.5-flash-lite", "gemini-3.1-pro", - "gemini-3-flash-preview", - "gemini-2.5-flash", - "gemini-2.5-flash-lite", - "gemini-2.5-pro", + "gemini-3.5-flash-lite", + "gemini-3.5-flash", + "gemini-3.6-flash", }, }, { From 37dc1ce67fba4934486e19baf2deb231a6ba5dd6 Mon Sep 17 00:00:00 2001 From: Kite <254839944+lizhengfeng101@users.noreply.github.com> Date: Tue, 18 Aug 2026 21:05:33 +0800 Subject: [PATCH 5/5] fix: Apply suggestion from @lizhengfeng101 --- internal/llm/providers.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/internal/llm/providers.go b/internal/llm/providers.go index d43bb74c5..e02d0a276 100644 --- a/internal/llm/providers.go +++ b/internal/llm/providers.go @@ -85,10 +85,6 @@ var registry = []Provider{ BaseURL: "https://generativelanguage.googleapis.com/v1beta/openai", EnvVar: "GEMINI_API_KEY", Models: []string{ - "gemini-2.5-flash-lite", - "gemini-2.5-flash", - "gemini-2.5-pro", - "gemini-3-flash", "gemini-3-flash-preview", "gemini-3.1-flash-lite", "gemini-3.1-pro",