From b172642f7b9bc39c27c1492e3c25eefb8c33741a Mon Sep 17 00:00:00 2001 From: FenjuFu <92919259+FenjuFu@users.noreply.github.com> Date: Fri, 24 Jul 2026 10:28:22 +0800 Subject: [PATCH] feat(llm): add iFlytek Spark as a built-in provider MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Spark's official endpoint (https://spark-api-open.xf-yun.com/v1) is OpenAI-compatible, so it registers like the other OpenAI-protocol providers (deepseek, kimi, …). Adds the registry entry, the matching name in the provider-order test, and the provider table in the en/zh/ja configuration docs. Model ids are the domain values the HTTP endpoint accepts (4.0Ultra, generalv3.5, max-32k, generalv3, pro-128k, lite). Signed-off-by: FenjuFu <92919259+FenjuFu@users.noreply.github.com> --- internal/llm/providers.go | 15 +++++++++++++++ internal/llm/providers_test.go | 2 +- pages/src/content/docs/en/configuration.md | 1 + pages/src/content/docs/ja/configuration.md | 1 + pages/src/content/docs/zh/configuration.md | 1 + 5 files changed, 19 insertions(+), 1 deletion(-) diff --git a/internal/llm/providers.go b/internal/llm/providers.go index d3436793..d80262ab 100644 --- a/internal/llm/providers.go +++ b/internal/llm/providers.go @@ -168,6 +168,21 @@ var registry = []Provider{ "hy3-preview", }, }, + { + Name: "iflytek", + DisplayName: "iFlytek Spark API", + Protocol: ProtocolOpenAIChatCompletions, + BaseURL: "https://spark-api-open.xf-yun.com/v1", + EnvVar: "SPARK_API_KEY", + Models: []string{ + "4.0Ultra", + "generalv3.5", + "max-32k", + "generalv3", + "pro-128k", + "lite", + }, + }, { Name: "kimi", DisplayName: "Kimi Moonshot API", diff --git a/internal/llm/providers_test.go b/internal/llm/providers_test.go index 219de25c..772d806d 100644 --- a/internal/llm/providers_test.go +++ b/internal/llm/providers_test.go @@ -40,7 +40,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", "kimi", "litellm", "mimo", "minimax", "ollama-cloud", "openai", "tencent-tokenhub", "volcengine", "z-ai", "z-ai-coding"} + expected := []string{"anthropic", "baidu-qianfan", "dashscope", "dashscope-tokenplan", "deepseek", "edenai", "hy-tokenplan", "iflytek", "kimi", "litellm", "mimo", "minimax", "ollama-cloud", "openai", "tencent-tokenhub", "volcengine", "z-ai", "z-ai-coding"} if len(providers) != len(expected) { t.Fatalf("expected %d providers, got %d", len(expected), len(providers)) } diff --git a/pages/src/content/docs/en/configuration.md b/pages/src/content/docs/en/configuration.md index 63b5d777..ef4c380a 100644 --- a/pages/src/content/docs/en/configuration.md +++ b/pages/src/content/docs/en/configuration.md @@ -52,6 +52,7 @@ environment variable. | `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` | | `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` | | `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` | +| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` | | `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` | | `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` | | `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` | diff --git a/pages/src/content/docs/ja/configuration.md b/pages/src/content/docs/ja/configuration.md index da268426..3fa7ab7e 100644 --- a/pages/src/content/docs/ja/configuration.md +++ b/pages/src/content/docs/ja/configuration.md @@ -50,6 +50,7 @@ ocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx | `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` | | `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` | | `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` | +| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` | | `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` | | `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` | | `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` | diff --git a/pages/src/content/docs/zh/configuration.md b/pages/src/content/docs/zh/configuration.md index abbe443c..107e3c35 100644 --- a/pages/src/content/docs/zh/configuration.md +++ b/pages/src/content/docs/zh/configuration.md @@ -49,6 +49,7 @@ ocr config set providers.anthropic.api_key sk-ant-xxxxxxxxxx | `deepseek` | openai | `https://api.deepseek.com` | `DEEPSEEK_API_KEY` | | `tencent-tokenhub` | openai | `https://tokenhub.tencentmaas.com/v1` | `TENCENT_TOKENHUB_API_KEY` | | `hy-tokenplan` | openai | `https://api.lkeap.cloud.tencent.com/plan/v3` | `TENCENT_HUNYUAN_TOKENPLAN_KEY` | +| `iflytek` | openai | `https://spark-api-open.xf-yun.com/v1` | `SPARK_API_KEY` | | `kimi` | openai | `https://api.moonshot.cn/v1` | `MOONSHOT_API_KEY` | | `z-ai` | openai | `https://open.bigmodel.cn/api/paas/v4` | `Z_AI_API_KEY` | | `mimo` | openai | `https://api.xiaomimimo.com/v1` | `MIMO_API_KEY` |