refactor(provider): update sort orders and add new providers

This commit is contained in:
jxxghp
2026-05-08 13:42:31 +08:00
parent f157b61dfa
commit 3dbb68627f
+130 -130
View File
@@ -334,7 +334,7 @@ class LLMProviderManager(metaclass=Singleton):
provider_id="anthropic", provider_id="anthropic",
name="Anthropic", name="Anthropic",
default_base_url="https://api.anthropic.com/v1", default_base_url="https://api.anthropic.com/v1",
sort_order=25, sort_order=30,
api_key_hint="填写 Anthropic API Key。", api_key_hint="填写 Anthropic API Key。",
description="Anthropic Claude 官方端点。", description="Anthropic Claude 官方端点。",
), ),
@@ -346,15 +346,7 @@ class LLMProviderManager(metaclass=Singleton):
default_base_url="https://api.deepseek.com", default_base_url="https://api.deepseek.com",
api_key_hint="填写 DeepSeek API Key。", api_key_hint="填写 DeepSeek API Key。",
description="DeepSeek 官方平台。", description="DeepSeek 官方平台。",
sort_order=30, sort_order=40,
),
catalog_openai_provider(
provider_id="groq",
name="Groq",
default_base_url="https://api.groq.com/openai/v1",
sort_order=35,
api_key_hint="填写 Groq API Key。",
description="Groq 官方 OpenAI-compatible 端点。",
), ),
ProviderSpec( ProviderSpec(
id="openrouter", id="openrouter",
@@ -364,15 +356,7 @@ class LLMProviderManager(metaclass=Singleton):
default_base_url="https://openrouter.ai/api/v1", default_base_url="https://openrouter.ai/api/v1",
api_key_hint="填写 OpenRouter API Key。", api_key_hint="填写 OpenRouter API Key。",
description="OpenRouter 聚合模型平台。", description="OpenRouter 聚合模型平台。",
sort_order=40, sort_order=50,
),
catalog_openai_provider(
provider_id="xai",
name="xAI",
default_base_url="https://api.x.ai/v1",
sort_order=45,
api_key_hint="填写 xAI API Key。",
description="xAI 官方 OpenAI-compatible 端点。",
), ),
ProviderSpec( ProviderSpec(
id="github-copilot", id="github-copilot",
@@ -391,45 +375,22 @@ class LLMProviderManager(metaclass=Singleton):
), ),
model_list_strategy="github_copilot", model_list_strategy="github_copilot",
description="通过 GitHub Copilot 订阅接入。", description="通过 GitHub Copilot 订阅接入。",
sort_order=50, sort_order=60,
), ),
catalog_openai_provider( catalog_openai_provider(
provider_id="github-models", provider_id="github-models",
name="GitHub Models", name="GitHub Models",
default_base_url="https://models.github.ai/inference", default_base_url="https://models.github.ai/inference",
sort_order=55, sort_order=70,
api_key_label="GitHub Token", api_key_label="GitHub Token",
api_key_hint="填写具有 GitHub Models 访问权限的 GitHub Token。", api_key_hint="填写具有 GitHub Models 访问权限的 GitHub Token。",
description="GitHub Models 推理端点。", description="GitHub Models 推理端点。",
), ),
openai_provider(
provider_id="siliconflow",
name="硅基流动",
default_base_url="https://api.siliconflow.cn/v1",
sort_order=60,
models_dev_provider_id="siliconflow-cn",
base_url_presets=(
url_preset(
id="siliconflow-cn",
label="中国大陆",
value="https://api.siliconflow.cn/v1",
models_dev_provider_id="siliconflow-cn",
),
url_preset(
id="siliconflow-global",
label="Global",
value="https://api.siliconflow.com/v1",
models_dev_provider_id="siliconflow",
),
),
api_key_hint="填写硅基流动 API Key,可在中国大陆与 Global 端点间切换。",
description="SiliconFlow 官方兼容端点。",
),
catalog_openai_provider( catalog_openai_provider(
provider_id="moonshot", provider_id="moonshot",
name="Moonshot / Kimi", name="Moonshot / Kimi",
default_base_url="https://api.moonshot.cn/v1", default_base_url="https://api.moonshot.cn/v1",
sort_order=62, sort_order=80,
models_dev_provider_id="moonshotai-cn", models_dev_provider_id="moonshotai-cn",
base_url_presets=( base_url_presets=(
url_preset( url_preset(
@@ -456,11 +417,80 @@ class LLMProviderManager(metaclass=Singleton):
api_key_hint="填写 Moonshot / Kimi API Key,可在中国站、国际站与 Kimi for Coding 端点间切换。", api_key_hint="填写 Moonshot / Kimi API Key,可在中国站、国际站与 Kimi for Coding 端点间切换。",
description="Moonshot / Kimi 官方端点,支持通用 API 与 Kimi for Coding 预设。", description="Moonshot / Kimi 官方端点,支持通用 API 与 Kimi for Coding 预设。",
), ),
anthropic_provider(
provider_id="minimax",
name="MiniMax",
default_base_url="https://api.minimaxi.com/anthropic/v1",
sort_order=90,
models_dev_provider_id="minimax-cn",
base_url_presets=(
url_preset(
id="minimax-cn-general",
label="中国内地 / 通用",
value="https://api.minimaxi.com/anthropic/v1",
models_dev_provider_id="minimax-cn",
),
url_preset(
id="minimax-global-general",
label="国际站 / 通用",
value="https://api.minimax.io/anthropic/v1",
models_dev_provider_id="minimax",
),
url_preset(
id="minimax-cn-coding",
label="中国内地 / Coding Plan",
value="https://api.minimaxi.com/anthropic/v1",
models_dev_provider_id="minimax-cn-coding-plan",
),
url_preset(
id="minimax-global-coding",
label="国际站 / Coding Plan",
value="https://api.minimax.io/anthropic/v1",
models_dev_provider_id="minimax-coding-plan",
),
),
api_key_hint="填写 MiniMax API Key,可在中国内地、国际站、通用与 Coding Plan 目录间切换。",
description="MiniMax Anthropic-compatible 端点,支持通用与 Coding Plan 目录预设。",
),
catalog_openai_provider(
provider_id="xiaomi",
name="Xiaomi",
default_base_url="https://api.xiaomimimo.com/v1",
sort_order=100,
base_url_presets=(
url_preset(
id="xiaomi-standard",
label="标准端点",
value="https://api.xiaomimimo.com/v1",
models_dev_provider_id="xiaomi",
),
url_preset(
id="xiaomi-token-plan-cn",
label="Token Plan / 中国",
value="https://token-plan-cn.xiaomimimo.com/v1",
models_dev_provider_id="xiaomi-token-plan-cn",
),
url_preset(
id="xiaomi-token-plan-sgp",
label="Token Plan / 新加坡",
value="https://token-plan-sgp.xiaomimimo.com/v1",
models_dev_provider_id="xiaomi-token-plan-sgp",
),
url_preset(
id="xiaomi-token-plan-ams",
label="Token Plan / 欧洲",
value="https://token-plan-ams.xiaomimimo.com/v1",
models_dev_provider_id="xiaomi-token-plan-ams",
),
),
api_key_hint="填写 Xiaomi API Key,可在标准端点与各区域 Token Plan 端点间切换。",
description="小米 Mimo 兼容端点。",
),
openai_provider( openai_provider(
provider_id="zhipu", provider_id="zhipu",
name="智谱 GLM", name="智谱 GLM",
default_base_url="https://open.bigmodel.cn/api/paas/v4", default_base_url="https://open.bigmodel.cn/api/paas/v4",
sort_order=65, sort_order=110,
models_dev_provider_id="zhipuai", models_dev_provider_id="zhipuai",
base_url_presets=( base_url_presets=(
url_preset( url_preset(
@@ -480,33 +510,34 @@ class LLMProviderManager(metaclass=Singleton):
api_key_hint="填写智谱开放平台 API Key,可在 Token Plan / 通用 API 与 Coding Plan 端点间切换。", api_key_hint="填写智谱开放平台 API Key,可在 Token Plan / 通用 API 与 Coding Plan 端点间切换。",
description="智谱开放平台国内站,支持通用 API 与 GLM Coding Plan 端点。", description="智谱开放平台国内站,支持通用 API 与 GLM Coding Plan 端点。",
), ),
catalog_openai_provider( openai_provider(
provider_id="zai", provider_id="siliconflow",
name="Z.AI", name="硅基流动",
default_base_url="https://api.z.ai/api/paas/v4", default_base_url="https://api.siliconflow.cn/v1",
sort_order=66, sort_order=120,
models_dev_provider_id="siliconflow-cn",
base_url_presets=( base_url_presets=(
url_preset( url_preset(
id="zai-general", id="siliconflow-cn",
label="Token Plan / 通用 API", label="中国大陆",
value="https://api.z.ai/api/paas/v4", value="https://api.siliconflow.cn/v1",
models_dev_provider_id="zai", models_dev_provider_id="siliconflow-cn",
), ),
url_preset( url_preset(
id="zai-coding", id="siliconflow-global",
label="Coding Plan", label="Global",
value="https://api.z.ai/api/coding/paas/v4", value="https://api.siliconflow.com/v1",
models_dev_provider_id="zai-coding-plan", models_dev_provider_id="siliconflow",
), ),
), ),
api_key_hint="填写 Z.AI API Key,可在通用 API 与 Coding Plan 端点间切换。", api_key_hint="填写硅基流动 API Key,可在中国大陆与 Global 端点间切换。",
description="Z.AI 官方端点。", description="SiliconFlow 官方兼容端点。",
), ),
openai_provider( openai_provider(
provider_id="alibaba", provider_id="alibaba",
name="阿里云百炼", name="阿里云百炼",
default_base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", default_base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
sort_order=70, sort_order=130,
models_dev_provider_id="alibaba-cn", models_dev_provider_id="alibaba-cn",
base_url_presets=( base_url_presets=(
url_preset( url_preset(
@@ -559,7 +590,7 @@ class LLMProviderManager(metaclass=Singleton):
api_key_hint="填写百度千帆 API Key,可在通用 API 与 Coding Plan 端点间切换。通用 API 请使用 https://qianfan.baidubce.com/v2Coding Plan 请切换到 https://qianfan.baidubce.com/v2/coding。", api_key_hint="填写百度千帆 API Key,可在通用 API 与 Coding Plan 端点间切换。通用 API 请使用 https://qianfan.baidubce.com/v2Coding Plan 请切换到 https://qianfan.baidubce.com/v2/coding。",
supports_model_refresh=False, supports_model_refresh=False,
description="百度千帆 OpenAI-compatible V2 端点,支持通用 API 与 Coding Plan 地址预设。", description="百度千帆 OpenAI-compatible V2 端点,支持通用 API 与 Coding Plan 地址预设。",
sort_order=72, sort_order=140,
), ),
ProviderSpec( ProviderSpec(
id="jdcloud", id="jdcloud",
@@ -581,7 +612,7 @@ class LLMProviderManager(metaclass=Singleton):
api_key_hint="填写京东云 JoyBuilder API Key。通用 API 请使用 https://modelservice.jdcloud.com/v1Coding Plan 请切换到 https://modelservice.jdcloud.com/coding/openai/v1,不要把 /v1 当成 Coding Plan 地址。", api_key_hint="填写京东云 JoyBuilder API Key。通用 API 请使用 https://modelservice.jdcloud.com/v1Coding Plan 请切换到 https://modelservice.jdcloud.com/coding/openai/v1,不要把 /v1 当成 Coding Plan 地址。",
supports_model_refresh=False, supports_model_refresh=False,
description="京东云 JoyBuilder OpenAI-compatible 端点,支持通用 API 与 Coding Plan 地址预设。", description="京东云 JoyBuilder OpenAI-compatible 端点,支持通用 API 与 Coding Plan 地址预设。",
sort_order=74, sort_order=150,
), ),
ProviderSpec( ProviderSpec(
id="volcengine", id="volcengine",
@@ -590,7 +621,7 @@ class LLMProviderManager(metaclass=Singleton):
default_base_url="https://ark.cn-beijing.volces.com/api/v3", default_base_url="https://ark.cn-beijing.volces.com/api/v3",
api_key_hint="填写火山方舟 API Key。", api_key_hint="填写火山方舟 API Key。",
description="字节跳动火山引擎兼容端点。", description="字节跳动火山引擎兼容端点。",
sort_order=80, sort_order=160,
), ),
ProviderSpec( ProviderSpec(
id="tencent", id="tencent",
@@ -615,7 +646,7 @@ class LLMProviderManager(metaclass=Singleton):
api_key_hint="填写 Tencent API Key,可在 TokenHub 与 Coding Plan 端点间切换。", api_key_hint="填写 Tencent API Key,可在 TokenHub 与 Coding Plan 端点间切换。",
model_list_strategy="models_dev_only", model_list_strategy="models_dev_only",
description="腾讯兼容端点。", description="腾讯兼容端点。",
sort_order=90, sort_order=170,
), ),
ProviderSpec( ProviderSpec(
id="ollama-cloud", id="ollama-cloud",
@@ -625,7 +656,7 @@ class LLMProviderManager(metaclass=Singleton):
default_base_url="https://ollama.com/v1", default_base_url="https://ollama.com/v1",
api_key_hint="填写 Ollama Cloud API Key。", api_key_hint="填写 Ollama Cloud API Key。",
description="Ollama Cloud 云端模型服务。", description="Ollama Cloud 云端模型服务。",
sort_order=100, sort_order=180,
), ),
ProviderSpec( ProviderSpec(
id="nvidia", id="nvidia",
@@ -635,13 +666,13 @@ class LLMProviderManager(metaclass=Singleton):
default_base_url="https://integrate.api.nvidia.com/v1", default_base_url="https://integrate.api.nvidia.com/v1",
api_key_hint="填写 Nvidia API Key。", api_key_hint="填写 Nvidia API Key。",
description="Nvidia 集成推理平台。", description="Nvidia 集成推理平台。",
sort_order=110, sort_order=190,
), ),
catalog_openai_provider( catalog_openai_provider(
provider_id="opencode", provider_id="opencode",
name="OpenCode", name="OpenCode",
default_base_url="https://opencode.ai/zen/v1", default_base_url="https://opencode.ai/zen/v1",
sort_order=115, sort_order=200,
base_url_presets=( base_url_presets=(
url_preset( url_preset(
id="opencode-zen", id="opencode-zen",
@@ -659,80 +690,49 @@ class LLMProviderManager(metaclass=Singleton):
api_key_hint="填写 OpenCode API Key,可在 Zen 与 Go 端点间切换。", api_key_hint="填写 OpenCode API Key,可在 Zen 与 Go 端点间切换。",
description="OpenCode Zen / Go 端点。", description="OpenCode Zen / Go 端点。",
), ),
anthropic_provider( catalog_openai_provider(
provider_id="minimax", provider_id="groq",
name="MiniMax", name="Groq",
default_base_url="https://api.minimaxi.com/anthropic/v1", default_base_url="https://api.groq.com/openai/v1",
sort_order=120, sort_order=210,
models_dev_provider_id="minimax-cn", api_key_hint="填写 Groq API Key。",
base_url_presets=( description="Groq 官方 OpenAI-compatible 端点。",
url_preset(
id="minimax-cn-general",
label="中国内地 / 通用",
value="https://api.minimaxi.com/anthropic/v1",
models_dev_provider_id="minimax-cn",
),
url_preset(
id="minimax-global-general",
label="国际站 / 通用",
value="https://api.minimax.io/anthropic/v1",
models_dev_provider_id="minimax",
),
url_preset(
id="minimax-cn-coding",
label="中国内地 / Coding Plan",
value="https://api.minimaxi.com/anthropic/v1",
models_dev_provider_id="minimax-cn-coding-plan",
),
url_preset(
id="minimax-global-coding",
label="国际站 / Coding Plan",
value="https://api.minimax.io/anthropic/v1",
models_dev_provider_id="minimax-coding-plan",
),
),
api_key_hint="填写 MiniMax API Key,可在中国内地、国际站、通用与 Coding Plan 目录间切换。",
description="MiniMax Anthropic-compatible 端点,支持通用与 Coding Plan 目录预设。",
), ),
catalog_openai_provider( catalog_openai_provider(
provider_id="xiaomi", provider_id="xai",
name="Xiaomi", name="xAI",
default_base_url="https://api.xiaomimimo.com/v1", default_base_url="https://api.x.ai/v1",
sort_order=130, sort_order=220,
api_key_hint="填写 xAI API Key。",
description="xAI 官方 OpenAI-compatible 端点。",
),
catalog_openai_provider(
provider_id="zai",
name="Z.AI",
default_base_url="https://api.z.ai/api/paas/v4",
sort_order=230,
base_url_presets=( base_url_presets=(
url_preset( url_preset(
id="xiaomi-standard", id="zai-general",
label="标准端点", label="Token Plan / 通用 API",
value="https://api.xiaomimimo.com/v1", value="https://api.z.ai/api/paas/v4",
models_dev_provider_id="xiaomi", models_dev_provider_id="zai",
), ),
url_preset( url_preset(
id="xiaomi-token-plan-cn", id="zai-coding",
label="Token Plan / 中国", label="Coding Plan",
value="https://token-plan-cn.xiaomimimo.com/v1", value="https://api.z.ai/api/coding/paas/v4",
models_dev_provider_id="xiaomi-token-plan-cn", models_dev_provider_id="zai-coding-plan",
),
url_preset(
id="xiaomi-token-plan-sgp",
label="Token Plan / 新加坡",
value="https://token-plan-sgp.xiaomimimo.com/v1",
models_dev_provider_id="xiaomi-token-plan-sgp",
),
url_preset(
id="xiaomi-token-plan-ams",
label="Token Plan / 欧洲",
value="https://token-plan-ams.xiaomimimo.com/v1",
models_dev_provider_id="xiaomi-token-plan-ams",
), ),
), ),
api_key_hint="填写 Xiaomi API Key,可在标准端点与各区域 Token Plan 端点间切换。", api_key_hint="填写 Z.AI API Key,可在通用 API 与 Coding Plan 端点间切换。",
description="小米 Mimo 兼容端点。", description="Z.AI 官方端点。",
), ),
] ]
for sort_order, provider_entry in enumerate( for sort_order, provider_entry in enumerate(
catalog_openai_providers, catalog_openai_providers,
start=200, start=1000,
): ):
provider_id = provider_entry["id"] provider_id = provider_entry["id"]
overrides = provider_patches.get(provider_id, {}) overrides = provider_patches.get(provider_id, {})