use super::{
ExtraField, ModelOption, ProviderPreset, GROUP_ANTHROPIC, GROUP_CHINA, GROUP_INTERNATIONAL,
GROUP_LOCAL,
};
use crate::kind::{Kind, Protocol};
const NO_EXTRA: &[ExtraField] = &[];
const CLAUDE_MODELS: &[ModelOption] = &[
ModelOption::plain("claude-opus-5-5"),
ModelOption::plain("claude-opus-5"),
ModelOption::plain("claude-sonnet-5"),
ModelOption::plain("claude-fable-5-1"),
ModelOption::plain("claude-fable-5"),
ModelOption::plain("claude-haiku-4-5"),
ModelOption::plain("claude-opus-4-8"),
];
pub(super) const CHAT_PRESETS: &[ProviderPreset] = &[
ProviderPreset {
key: "anthropic_official",
vendor_id: "anthropic",
kind: Kind::Chat,
group_key: GROUP_ANTHROPIC.0,
group_label: GROUP_ANTHROPIC.1,
label_key: "providerTemplate.anthropicOfficial.label",
label: "Anthropic 官方",
hint_key: Some("providerTemplate.anthropicOfficial.hint"),
hint: Some("密钥以 sk-ant- 开头;固定走 https://api.anthropic.com"),
base_url: None,
model: "claude-opus-5-5",
models: CLAUDE_MODELS,
protocol: Protocol::Anthropic,
match_hosts: &["api.anthropic.com"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: Some("https://console.anthropic.com/settings/keys"),
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "claude_code",
vendor_id: "claude_code",
kind: Kind::Chat,
group_key: GROUP_ANTHROPIC.0,
group_label: GROUP_ANTHROPIC.1,
label_key: "providerTemplate.claudeCode.label",
label: "Claude Code 客户端(自定义接口地址)",
hint_key: Some("providerTemplate.claudeCode.hint"),
hint: Some("走 /v1/messages 端点;适合密钥限定此端点的中转 / 代理服务"),
base_url: None,
model: "claude-opus-5",
models: CLAUDE_MODELS,
protocol: Protocol::Anthropic,
match_hosts: &[],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: None,
is_local: false,
verified_at: Some("2026-09-22"),
},
ProviderPreset {
key: "codex",
vendor_id: "codex",
kind: Kind::Chat,
group_key: GROUP_ANTHROPIC.0,
group_label: GROUP_ANTHROPIC.1,
label_key: "providerTemplate.codex.label",
label: "Codex 客户端(自定义接口地址)",
hint_key: Some("providerTemplate.codex.hint"),
hint: Some("走 /v1/chat/completions;适合密钥限定 Codex 端点的中转服务"),
base_url: None,
model: "gpt-5.6-terra",
models: &[
ModelOption::plain("gpt-6-sol"),
ModelOption::plain("gpt-6-astra"),
ModelOption::plain("gpt-6-luna"),
ModelOption::plain("gpt-5.6-terra"),
ModelOption::plain("gpt-5.6-sol"),
ModelOption::plain("gpt-5.6-luna"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &[],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: None,
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "deepseek",
vendor_id: "deepseek",
kind: Kind::Chat,
group_key: GROUP_CHINA.0,
group_label: GROUP_CHINA.1,
label_key: "providerTemplate.deepseek.label",
label: "DeepSeek",
hint_key: Some("providerTemplate.deepseek.hint"),
hint: Some("deepseek-flash / v4-pro;国内直连,不需要代理"),
base_url: Some("https://api.deepseek.com/v1"),
model: "deepseek-flash",
models: &[
ModelOption::with_limits("deepseek-flash", 1_000_000, 384_000),
ModelOption::with_limits("deepseek-v4-pro", 1_000_000, 384_000),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["api.deepseek.com"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: Some("https://platform.deepseek.com/api_keys"),
is_local: false,
verified_at: Some("2026-09-17"),
},
ProviderPreset {
key: "zhipu",
vendor_id: "zhipu",
kind: Kind::Chat,
group_key: GROUP_CHINA.0,
group_label: GROUP_CHINA.1,
label_key: "providerTemplate.zhipu.label",
label: "智谱 GLM",
hint_key: Some("providerTemplate.zhipu.hint"),
hint: Some("端点是 /v4 不是 /v1 —— 照抄预填地址即可"),
base_url: Some("https://open.bigmodel.cn/api/paas/v4"),
model: "glm-5.3",
models: &[
ModelOption::plain("glm-5.3"),
ModelOption::plain("glm-5.3-flash"),
ModelOption::with_context("glm-5", 200_000),
ModelOption::plain("glm-4.7"),
ModelOption::plain("glm-4.6"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["open.bigmodel.cn"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: Some("https://open.bigmodel.cn/usercenter/apikeys"),
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "qwen",
vendor_id: "aliyun",
kind: Kind::Chat,
group_key: GROUP_CHINA.0,
group_label: GROUP_CHINA.1,
label_key: "providerTemplate.qwen.label",
label: "通义千问(阿里云百炼)",
hint_key: Some("providerTemplate.qwen.hint"),
hint: Some("默认北京地域;新加坡站把 dashscope 换成 dashscope-intl"),
base_url: Some("https://dashscope.aliyuncs.com/compatible-mode/v1"),
model: "qwen-plus",
models: &[
ModelOption::plain("qwen3-max"),
ModelOption::plain("qwen-plus"),
ModelOption::plain("qwen-max"),
ModelOption::plain("qwen-turbo"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["dashscope.aliyuncs.com"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: Some("https://bailian.console.aliyun.com/"),
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "moonshot",
vendor_id: "moonshot",
kind: Kind::Chat,
group_key: GROUP_CHINA.0,
group_label: GROUP_CHINA.1,
label_key: "providerTemplate.moonshot.label",
label: "月之暗面 Kimi",
hint_key: Some("providerTemplate.moonshot.hint"),
hint: Some("国内站 api.moonshot.cn;国际站把 .cn 换成 .ai"),
base_url: Some("https://api.moonshot.cn/v1"),
model: "kimi-k3",
models: &[
ModelOption::plain("kimi-k3"),
ModelOption::plain("kimi-k2-0711-preview"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["api.moonshot.cn", "api.moonshot.ai"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: Some("https://platform.moonshot.cn/console/api-keys"),
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "siliconflow",
vendor_id: "siliconflow",
kind: Kind::Chat,
group_key: GROUP_CHINA.0,
group_label: GROUP_CHINA.1,
label_key: "providerTemplate.siliconflow.label",
label: "硅基流动 SiliconFlow",
hint_key: Some("providerTemplate.siliconflow.hint"),
hint: Some("聚合平台,在架清单变动快 —— 建议点「获取」拉当天真实清单"),
base_url: Some("https://api.siliconflow.cn/v1"),
model: "deepseek-ai/DeepSeek-V3",
models: &[
ModelOption::plain("deepseek-ai/DeepSeek-V3"),
ModelOption::plain("Qwen/Qwen2.5-72B-Instruct"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["api.siliconflow.cn"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: Some("https://cloud.siliconflow.cn/account/ak"),
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "volcengine_ark",
vendor_id: "volcengine",
kind: Kind::Chat,
group_key: GROUP_CHINA.0,
group_label: GROUP_CHINA.1,
label_key: "providerTemplate.volcengineArk.label",
label: "火山方舟(豆包)",
hint_key: Some("providerTemplate.volcengineArk.hint"),
hint: Some("模型 id 带发布日期后缀,换代就变 —— 建议点「获取」拉当天真实清单"),
base_url: Some("https://ark.cn-beijing.volces.com/api/v3"),
model: "doubao-seed-1-6-251015",
models: &[
ModelOption::plain("doubao-seed-2-1-pro-260628"),
ModelOption::plain("doubao-seed-1-6-251015"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["ark.cn-beijing.volces.com"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: Some("https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey"),
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "tencent_tokenhub",
vendor_id: "tencent",
kind: Kind::Chat,
group_key: GROUP_CHINA.0,
group_label: GROUP_CHINA.1,
label_key: "providerTemplate.tencentTokenhub.label",
label: "腾讯 TokenHub",
hint_key: Some("providerTemplate.tencentTokenhub.hint"),
hint: Some(
"混元老地址 api.hunyuan.cloud.tencent.com 已停止新增模型,密钥需在 TokenHub 重新申请",
),
base_url: Some("https://tokenhub.tencentmaas.com/v1"),
model: "hy3-preview",
models: &[
ModelOption::plain("hy3-preview"),
ModelOption::plain("deepseek-v4-flash"),
ModelOption::plain("deepseek-v4-pro"),
ModelOption::plain("glm-5.1"),
ModelOption::plain("kimi-k2.6"),
ModelOption::plain("minimax-m2.7"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["tokenhub.tencentmaas.com"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: Some("https://console.cloud.tencent.com/tokenhub/apikey"),
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "minimax",
vendor_id: "minimax",
kind: Kind::Chat,
group_key: GROUP_CHINA.0,
group_label: GROUP_CHINA.1,
label_key: "providerTemplate.minimax.label",
label: "MiniMax(稀宇科技)",
hint_key: Some("providerTemplate.minimax.hint"),
hint: Some("国内站地址;海外账号的密钥在这里用不了"),
base_url: Some("https://api.minimax.chat/v1"),
model: "MiniMax-M1",
models: &[
ModelOption::plain("MiniMax-M1"),
ModelOption::plain("abab6.5s-chat"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["api.minimax.chat"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: None,
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "qianfan",
vendor_id: "baidu",
kind: Kind::Chat,
group_key: GROUP_CHINA.0,
group_label: GROUP_CHINA.1,
label_key: "providerTemplate.qianfan.label",
label: "百度千帆",
hint_key: Some("providerTemplate.qianfan.hint"),
hint: Some("文心系列;用千帆 v2 接口的 API Key,不是旧版 AK / SK"),
base_url: Some("https://qianfan.baidubce.com/v2"),
model: "ernie-4.5-turbo-128k",
models: &[ModelOption::plain("ernie-4.5-turbo-128k")],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["qianfan.baidubce.com"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: None,
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "stepfun",
vendor_id: "stepfun",
kind: Kind::Chat,
group_key: GROUP_CHINA.0,
group_label: GROUP_CHINA.1,
label_key: "providerTemplate.stepfun.label",
label: "阶跃星辰",
hint_key: Some("providerTemplate.stepfun.hint"),
hint: Some("Step 系列;flash 档便宜快,长文本选 16k 档"),
base_url: Some("https://api.stepfun.com/v1"),
model: "step-1-flash",
models: &[
ModelOption::plain("step-1-flash"),
ModelOption::plain("step-2-16k"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["api.stepfun.com"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: None,
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "baichuan",
vendor_id: "baichuan",
kind: Kind::Chat,
group_key: GROUP_CHINA.0,
group_label: GROUP_CHINA.1,
label_key: "providerTemplate.baichuan.label",
label: "百川智能",
hint_key: Some("providerTemplate.baichuan.hint"),
hint: Some("Baichuan 系列,国内直连"),
base_url: Some("https://api.baichuan-ai.com/v1"),
model: "Baichuan4-Turbo",
models: &[
ModelOption::plain("Baichuan4-Turbo"),
ModelOption::plain("Baichuan3-Turbo-128k"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["api.baichuan-ai.com"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: None,
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "mimo",
vendor_id: "xiaomi",
kind: Kind::Chat,
group_key: GROUP_CHINA.0,
group_label: GROUP_CHINA.1,
label_key: "providerTemplate.mimo.label",
label: "小米 MiMo",
hint_key: Some("providerTemplate.mimo.hint"),
hint: Some("小米自研;flash 档便宜快"),
base_url: Some("https://api.xiaomimimo.com/v1"),
model: "mimo-v2-flash",
models: &[
ModelOption::plain("mimo-v2-flash"),
ModelOption::plain("mimo-v2-pro"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["api.xiaomimimo.com"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: None,
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "openai_official",
vendor_id: "openai",
kind: Kind::Chat,
group_key: GROUP_INTERNATIONAL.0,
group_label: GROUP_INTERNATIONAL.1,
label_key: "providerTemplate.openaiOfficial.label",
label: "OpenAI 官方",
hint_key: Some("providerTemplate.openaiOfficial.hint"),
hint: Some("国内访问需要代理"),
base_url: Some("https://api.openai.com/v1"),
model: "gpt-5.6-terra",
models: &[
ModelOption::plain("gpt-6-astra"),
ModelOption::plain("gpt-6-sol"),
ModelOption::plain("gpt-6-luna"),
ModelOption::plain("gpt-5.6-sol"),
ModelOption::plain("gpt-5.6-terra"),
ModelOption::plain("gpt-5.6-luna"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["api.openai.com"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: Some("https://platform.openai.com/api-keys"),
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "openrouter",
vendor_id: "openrouter",
kind: Kind::Chat,
group_key: GROUP_INTERNATIONAL.0,
group_label: GROUP_INTERNATIONAL.1,
label_key: "providerTemplate.openrouter.label",
label: "OpenRouter",
hint_key: Some("providerTemplate.openrouter.hint"),
hint: Some("模型 id 形如「厂商/模型」,与各家原生 id 不同名"),
base_url: Some("https://openrouter.ai/api/v1"),
model: "anthropic/claude-sonnet-5",
models: &[
ModelOption::plain("anthropic/claude-sonnet-5"),
ModelOption::plain("anthropic/claude-opus-5.5"),
ModelOption::plain("openai/gpt-6-astra"),
ModelOption::plain("openai/gpt-6-sol"),
ModelOption::plain("openai/gpt-6-luna"),
ModelOption::plain("moonshotai/kimi-k3"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["openrouter.ai"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: Some("https://openrouter.ai/keys"),
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "gemini",
vendor_id: "google",
kind: Kind::Chat,
group_key: GROUP_INTERNATIONAL.0,
group_label: GROUP_INTERNATIONAL.1,
label_key: "providerTemplate.gemini.label",
label: "Google Gemini(OpenAI 兼容层)",
hint_key: Some("providerTemplate.gemini.hint"),
hint: Some("版本段 v1beta 不在末尾,照抄整串即可"),
base_url: Some("https://generativelanguage.googleapis.com/v1beta/openai"),
model: "gemini-3.8-flash",
models: &[
ModelOption::plain("gemini-3.8-flash"),
ModelOption::plain("gemini-3.1-pro-preview"),
ModelOption::plain("gemini-3.5-flash-lite"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["generativelanguage.googleapis.com"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: Some("https://aistudio.google.com/apikey"),
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "groq",
vendor_id: "groq",
kind: Kind::Chat,
group_key: GROUP_INTERNATIONAL.0,
group_label: GROUP_INTERNATIONAL.1,
label_key: "providerTemplate.groq.label",
label: "Groq",
hint_key: Some("providerTemplate.groq.hint"),
hint: Some("推理速度快;国内访问通常需要代理"),
base_url: Some("https://api.groq.com/openai/v1"),
model: "llama-3.3-70b-versatile",
models: &[
ModelOption::plain("llama-3.3-70b-versatile"),
ModelOption::plain("llama-3.1-8b-instant"),
ModelOption::plain("openai/gpt-oss-120b"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["api.groq.com"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: Some("https://console.groq.com/keys"),
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "xai",
vendor_id: "xai",
kind: Kind::Chat,
group_key: GROUP_INTERNATIONAL.0,
group_label: GROUP_INTERNATIONAL.1,
label_key: "providerTemplate.xai.label",
label: "xAI Grok",
hint_key: Some("providerTemplate.xai.hint"),
hint: Some("只支持 OpenAI 协议 —— Anthropic 兼容层已于 2026-08-01 下线"),
base_url: Some("https://api.x.ai/v1"),
model: "grok-4.5",
models: &[
ModelOption::plain("grok-4.7"),
ModelOption::plain("grok-4.6"),
ModelOption::plain("grok-4.5"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["api.x.ai"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: Some("https://console.x.ai/"),
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "together",
vendor_id: "together",
kind: Kind::Chat,
group_key: GROUP_INTERNATIONAL.0,
group_label: GROUP_INTERNATIONAL.1,
label_key: "providerTemplate.together.label",
label: "Together AI",
hint_key: Some("providerTemplate.together.hint"),
hint: Some("开源模型托管;国内访问通常需要代理"),
base_url: Some("https://api.together.xyz/v1"),
model: "meta-llama/Llama-3.3-70B-Instruct-Turbo",
models: &[ModelOption::plain(
"meta-llama/Llama-3.3-70B-Instruct-Turbo",
)],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["api.together.xyz"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: None,
is_local: false,
verified_at: None,
},
ProviderPreset {
key: "ollama",
vendor_id: "ollama",
kind: Kind::Chat,
group_key: GROUP_LOCAL.0,
group_label: GROUP_LOCAL.1,
label_key: "providerTemplate.ollama.label",
label: "Ollama(本地)",
hint_key: Some("providerTemplate.ollama.hint"),
hint: Some("需先本机跑起 ollama serve;默认端口 11434,通常不需要密钥"),
base_url: Some("http://localhost:11434/v1"),
model: "qwen3:8b",
models: &[
ModelOption::plain("qwen3:8b"),
ModelOption::plain("llama3.1:8b"),
ModelOption::plain("deepseek-r1:7b"),
],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["localhost:11434", "127.0.0.1:11434"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: None,
is_local: true,
verified_at: None,
},
ProviderPreset {
key: "lmstudio",
vendor_id: "lmstudio",
kind: Kind::Chat,
group_key: GROUP_LOCAL.0,
group_label: GROUP_LOCAL.1,
label_key: "providerTemplate.lmstudio.label",
label: "LM Studio(本地)",
hint_key: Some("providerTemplate.lmstudio.hint"),
hint: Some("在 LM Studio 里开启本地服务器;模型名取决于你加载了哪个"),
base_url: Some("http://localhost:1234/v1"),
model: "",
models: &[],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["localhost:1234", "127.0.0.1:1234"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: None,
is_local: true,
verified_at: None,
},
ProviderPreset {
key: "vllm",
vendor_id: "vllm",
kind: Kind::Chat,
group_key: GROUP_LOCAL.0,
group_label: GROUP_LOCAL.1,
label_key: "providerTemplate.vllm.label",
label: "vLLM / 自建推理服务",
hint_key: Some("providerTemplate.vllm.hint"),
hint: Some("任何暴露 OpenAI 兼容端点的自建服务都可用这档"),
base_url: Some("http://localhost:8000/v1"),
model: "",
models: &[],
protocol: Protocol::OpenAiCompatible,
match_hosts: &["localhost:8000", "127.0.0.1:8000"],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: None,
is_local: true,
verified_at: None,
},
ProviderPreset {
key: super::CUSTOM_PRESET_KEY,
vendor_id: "custom",
kind: Kind::Chat,
group_key: GROUP_LOCAL.0,
group_label: GROUP_LOCAL.1,
label_key: "providerTemplate.openaiCompatibleCustom.label",
label: "其它 OpenAI 兼容(自定义接口地址)",
hint_key: Some("providerTemplate.openaiCompatibleCustom.hint"),
hint: Some("上面都不匹配时用这档,自己填接口地址与模型名"),
base_url: None,
model: "",
models: &[],
protocol: Protocol::OpenAiCompatible,
match_hosts: &[],
extra_fields: NO_EXTRA,
default_extra: &[],
apply_url: None,
is_local: false,
verified_at: None,
},
];