chore(presets): refresh preset models to the latest vendor lineups

Move first-party, sponsor and relay presets to current model IDs so a
pasted Key works without editing the model list.

- Claude: opus/sonnet 5 -> 5.5, haiku 4.5 -> 5.5, fable 5 -> 5.1
- GPT: gpt-5.6-sol / gpt-6-sol -> gpt-6.1-sol; add gpt-6-astra/luna
- Gemini 3.6 Flash -> 3.8 Flash, 3.1 Pro preview -> 4 Argon;
  Grok 4.5 -> 4.7; GLM 5.1/5.2 -> 5.3 (+5.3 Flash);
  DeepSeek V4 Flash -> V4.1 Flash; Doubao 2.1 Pro 260628 -> 260915;
  StepFun Step Plan -> step-5-preview; add Kimi K3.1 Pro, Qwen3.8 Max,
  MiniMax M3.1 Flash where the site serves them
- Drop retired models: NVIDIA moonshotai/kimi-k3 (EOL 2026-10-15,
  now kimi-k2.6 without unverified Codex reasoning levels),
  MiMo V2.5 / V2.5 Pro, Claude Sonnet 4.5, MiniMax M2.7 on Tencent
  Token Plan Enterprise Pro
- Relay presets follow each site's own ID spelling and catalog;
  DIT.ai, BuyToken and hao.ai are left as configured from their docs;
  Soshow, SiliconFlow CN, OpenCode Zen and the Ark rolling alias stay
- MoArk Codex keeps the tested Kimi-K2.7-Code; K3.1 Pro and Qwen3.8
  Max stay out of its Codex catalog until their levels are verified

Tests updated to the new IDs; cross-app invariants unchanged.
This commit is contained in:
Jason committed 2026-10-24 22:56:15 +08:00
1 parent 28a2ebc0eb
commit 50a9d103d3
29 files changed
+2803 -1786

No files matched your search

+56 -57
View File
@@ -355,7 +355,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
modelRoutes: mappedRoutes(
"claude-sonnet-5-5",
"claude-opus-5-5",
"claude-haiku-4-5-20251001",
"claude-haiku-5-5",
true,
),
isPartner: true,
@@ -572,9 +572,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
mode: "direct",
apiFormat: "anthropic",
modelRoutes: mappedRoutes(
"anthropic/claude-sonnet-5",
"anthropic/claude-opus-5",
"anthropic/claude-haiku-4.5",
"anthropic/claude-sonnet-5.5",
"anthropic/claude-opus-5.5",
"anthropic/claude-haiku-5.5",
true,
),
isPartner: true,
@@ -592,7 +592,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
modelRoutes: mappedRoutes(
"claude-sonnet-5-5",
"claude-opus-5-5",
"claude-haiku-4-5",
"claude-haiku-5-5",
true,
),
endpointCandidates: ["https://api.88api.ai", "https://88api.ai"],
@@ -687,9 +687,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
mode: "proxy",
apiFormat: "anthropic",
modelRoutes: brandedRoutes(
"deepseek/deepseek-v4-flash-0731",
"deepseek/deepseek-v4-flash-0731",
"deepseek/deepseek-v4-flash-0731",
"deepseek/deepseek-v4.1-flash",
"deepseek/deepseek-v4.1-flash",
"deepseek/deepseek-v4.1-flash",
true,
),
endpointCandidates: ["https://api.ppio.com/anthropic"],
@@ -787,9 +787,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
mode: "proxy",
apiFormat: "anthropic",
modelRoutes: brandedRoutes(
"doubao-seed-2-1-pro-260628",
"doubao-seed-2-1-pro-260628",
"doubao-seed-2-1-pro-260628",
"doubao-seed-2-1-pro-260915",
"doubao-seed-2-1-pro-260915",
"doubao-seed-2-1-pro-260915",
),
isPartner: true,
partnerPromotionKey: "doubaoseed",
@@ -930,12 +930,12 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
baseUrl: "https://soleapi.com",
mode: "direct",
apiFormat: "anthropic",
// 上游 Haiku 模型 ID 带日期后缀,与角色路由 ID claude-haiku-4-5 不同,
// 上游模型 ID 与角色路由 ID(claude-sonnet-5 / claude-haiku-4-5)不同,
// 故用 mappedRoutes 显式映射而非 passthroughRoutes。
modelRoutes: mappedRoutes(
"claude-sonnet-5",
"claude-opus-5",
"claude-haiku-4-5-20251001",
"claude-sonnet-5-5",
"claude-opus-5-5",
"claude-haiku-5-5",
true,
),
endpointCandidates: ["https://soleapi.com"],
@@ -1201,9 +1201,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
mode: "proxy",
apiFormat: "gemini_native",
modelRoutes: brandedRoutes(
"gemini-3.6-flash",
"gemini-3.6-flash",
"gemini-3.6-flash",
"gemini-3.8-flash",
"gemini-3.8-flash",
"gemini-3.8-flash",
),
endpointCandidates: ["https://generativelanguage.googleapis.com"],
icon: "gemini",
@@ -1248,7 +1248,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
apiFormat: "openai_responses",
providerType: "xai_oauth",
requiresOAuth: true,
modelRoutes: brandedRoutes("grok-4.5", "grok-4.5", "grok-4.5"),
modelRoutes: brandedRoutes("grok-4.7", "grok-4.7", "grok-4.7"),
icon: "xai",
iconColor: "#000000",
},
@@ -1287,9 +1287,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
// 记 1048576)。[1m] 只是 Claude Desktop 本地标记,匹配前会被剥掉,
// 不会随请求发往上游
modelRoutes: brandedRoutes(
"deepseek-v4-flash",
"deepseek-v4-flash",
"deepseek-v4-flash",
"deepseek-v4.1-flash",
"deepseek-v4.1-flash",
"deepseek-v4.1-flash",
true,
),
endpointCandidates: ["https://opencode.ai/zen/go"],
@@ -1638,9 +1638,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
mode: "proxy",
apiFormat: "anthropic",
modelRoutes: brandedRoutes(
"step-3.5-flash-2603",
"step-3.5-flash-2603",
"step-3.5-flash-2603",
"step-5-preview",
"step-5-preview",
"step-5-preview",
),
endpointCandidates: ["https://api.stepfun.com/step_plan"],
icon: "stepfun",
@@ -1796,9 +1796,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
mode: "direct",
apiFormat: "anthropic",
modelRoutes: mappedRoutes(
"anthropic/claude-sonnet-5",
"anthropic/claude-opus-5",
"anthropic/claude-haiku-4.5",
"anthropic/claude-sonnet-5.5",
"anthropic/claude-opus-5.5",
"anthropic/claude-haiku-5.5",
true,
),
endpointCandidates: ["https://open.cherryin.net"],
@@ -1837,9 +1837,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
mode: "proxy",
apiFormat: "anthropic",
modelRoutes: mappedRoutes(
"anthropic/claude-sonnet-5",
"anthropic/claude-opus-5",
"anthropic/claude-haiku-4.5",
"anthropic/claude-sonnet-5.5",
"anthropic/claude-opus-5.5",
"anthropic/claude-haiku-5.5",
true,
),
icon: "openrouter",
@@ -1854,9 +1854,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
mode: "proxy",
apiFormat: "anthropic",
modelRoutes: mappedRoutes(
"anthropic/claude-sonnet-5",
"anthropic/claude-opus-5",
"anthropic/claude-haiku-4.5",
"anthropic/claude-sonnet-5-5",
"anthropic/claude-opus-5-5",
"anthropic/claude-haiku-5-5",
true,
),
endpointCandidates: ["https://api.therouter.ai"],
@@ -1892,9 +1892,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
mode: "proxy",
apiFormat: "anthropic",
modelRoutes: brandedRoutes(
"zai-org/glm-5.1",
"zai-org/glm-5.1",
"zai-org/glm-5.1",
"zai-org/glm-5.3",
"zai-org/glm-5.3",
"zai-org/glm-5.3-flash",
),
endpointCandidates: ["https://api.novita.ai/anthropic"],
icon: "novita",
@@ -2032,8 +2032,8 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
modelRoutes: [
{
routeId: CLAUDE_DESKTOP_ROLE_ROUTE_IDS.sonnet,
upstreamModel: "deepseek-ai/DeepSeek-V4-Flash-0731",
labelOverride: "deepseek-ai/DeepSeek-V4-Flash-0731",
upstreamModel: "deepseek-ai/DeepSeek-V4.1-Flash-1017",
labelOverride: "deepseek-ai/DeepSeek-V4.1-Flash-1017",
supports1m: true,
},
{
@@ -2288,10 +2288,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
mode: "proxy",
apiFormat: "openai_chat",
modelRoutes: brandedRoutes(
"moonshotai/kimi-k3",
"moonshotai/kimi-k3",
"moonshotai/kimi-k3",
true,
"moonshotai/kimi-k2.6",
"moonshotai/kimi-k2.6",
"moonshotai/kimi-k2.6",
),
icon: "nvidia",
iconColor: "#000000",
@@ -2356,7 +2355,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
modelRoutes: [
{
routeId: CLAUDE_DESKTOP_ROLE_ROUTE_IDS.fable,
upstreamModel: "claude-fable-5",
upstreamModel: "claude-fable-5-1",
supports1m: true,
},
],
@@ -2372,12 +2371,12 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
baseUrl: "https://api.aicodewith.ai",
mode: "proxy",
apiFormat: "anthropic",
// 上游 Haiku 模型 ID 带日期后缀,与角色路由 ID claude-haiku-4-5 不同,
// 上游模型 ID 与角色路由 ID(claude-sonnet-5 / claude-haiku-4-5)不同,
// 故用 mappedRoutes 显式映射而非 passthroughRoutes。
modelRoutes: mappedRoutes(
"claude-sonnet-5",
"claude-opus-5",
"claude-haiku-4-5-20251001",
"claude-sonnet-5-5",
"claude-opus-5-5",
"claude-haiku-5-5",
true,
),
endpointCandidates: ["https://api.aicodewith.ai"],
@@ -2395,7 +2394,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
modelRoutes: mappedRoutes(
"claude-sonnet-5-5",
"claude-opus-5-5",
"claude-haiku-4-5-20251001",
"claude-haiku-5-5",
true,
),
endpointCandidates: [
@@ -2418,7 +2417,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
modelRoutes: mappedRoutes(
"claude-sonnet-5-5",
"claude-opus-5-5",
"claude-haiku-4-5-20251001",
"claude-haiku-5-5",
true,
),
endpointCandidates: ["https://api.ikuncode.ai", "https://api.ikuncode.cc"],
@@ -2435,7 +2434,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
modelRoutes: mappedRoutes(
"claude-sonnet-5-5",
"claude-opus-5-5",
"claude-haiku-4-5-20251001",
"claude-haiku-5-5",
true,
),
endpointCandidates: ["https://www.runtoken.ai", "https://fast.runtoken.ai"],
@@ -2452,7 +2451,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
modelRoutes: mappedRoutes(
"claude-sonnet-5-5",
"claude-opus-5-5",
"claude-haiku-4-5-20251001",
"claude-haiku-5-5",
true,
),
icon: "botcf",
@@ -2467,9 +2466,9 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
mode: "direct",
apiFormat: "anthropic",
modelRoutes: mappedRoutes(
"claude-sonnet-5",
"claude-sonnet-5-5",
"claude-opus-5-5",
"claude-haiku-4-5-20251001",
"claude-haiku-5-5",
true,
),
endpointCandidates: [
@@ -2490,7 +2489,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
modelRoutes: mappedRoutes(
"claude-sonnet-5-5",
"claude-opus-5-5",
"claude-haiku-4-5",
"claude-haiku-5-5",
true,
),
icon: "tokenflux",
@@ -2506,7 +2505,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
modelRoutes: mappedRoutes(
"claude-sonnet-5-5",
"claude-opus-5-5",
"claude-haiku-4-5-20251001",
"claude-haiku-5-5",
true,
),
icon: "nekocode",
@@ -2522,7 +2521,7 @@ export const claudeDesktopProviderPresets: ClaudeDesktopProviderPreset[] = [
modelRoutes: mappedRoutes(
"claude-sonnet-5-5",
"claude-opus-5-5",
"claude-haiku-4-5-20251001",
"claude-haiku-5-5",
true,
),
icon: "aicoming",
+69 -69
View File
@@ -541,10 +541,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://router.shengsuanyun.com/api",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "anthropic/claude-sonnet-5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "anthropic/claude-haiku-4.5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "anthropic/claude-sonnet-5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-5",
ANTHROPIC_MODEL: "anthropic/claude-sonnet-5.5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "anthropic/claude-haiku-5.5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "anthropic/claude-sonnet-5.5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-5.5",
},
},
category: "aggregator",
@@ -662,10 +662,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://api.ppio.com/anthropic",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "deepseek/deepseek-v4-flash-0731[1M]",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "deepseek/deepseek-v4-flash-0731[1M]",
ANTHROPIC_DEFAULT_SONNET_MODEL: "deepseek/deepseek-v4-flash-0731[1M]",
ANTHROPIC_DEFAULT_OPUS_MODEL: "deepseek/deepseek-v4-flash-0731[1M]",
ANTHROPIC_MODEL: "deepseek/deepseek-v4.1-flash[1M]",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "deepseek/deepseek-v4.1-flash[1M]",
ANTHROPIC_DEFAULT_SONNET_MODEL: "deepseek/deepseek-v4.1-flash[1M]",
ANTHROPIC_DEFAULT_OPUS_MODEL: "deepseek/deepseek-v4.1-flash[1M]",
},
},
category: "aggregator",
@@ -775,10 +775,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://ark.cn-beijing.volces.com/api/compatible",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "doubao-seed-2-1-pro-260628",
ANTHROPIC_DEFAULT_SONNET_MODEL: "doubao-seed-2-1-pro-260628",
ANTHROPIC_DEFAULT_OPUS_MODEL: "doubao-seed-2-1-pro-260628",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "doubao-seed-2-1-pro-260628",
ANTHROPIC_MODEL: "doubao-seed-2-1-pro-260915",
ANTHROPIC_DEFAULT_SONNET_MODEL: "doubao-seed-2-1-pro-260915",
ANTHROPIC_DEFAULT_OPUS_MODEL: "doubao-seed-2-1-pro-260915",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "doubao-seed-2-1-pro-260915",
},
},
category: "cn_official",
@@ -1196,10 +1196,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://api.atlascloud.ai",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "zai-org/glm-5.1",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "zai-org/glm-5.1",
ANTHROPIC_DEFAULT_SONNET_MODEL: "zai-org/glm-5.1",
ANTHROPIC_DEFAULT_OPUS_MODEL: "zai-org/glm-5.1",
ANTHROPIC_MODEL: "zai-org/glm-5.3",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "zai-org/glm-5.3-flash",
ANTHROPIC_DEFAULT_SONNET_MODEL: "zai-org/glm-5.3",
ANTHROPIC_DEFAULT_OPUS_MODEL: "zai-org/glm-5.3",
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS: "1",
},
},
@@ -1235,10 +1235,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://generativelanguage.googleapis.com",
ANTHROPIC_API_KEY: "",
ANTHROPIC_MODEL: "gemini-3.6-flash",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "gemini-3.6-flash",
ANTHROPIC_DEFAULT_SONNET_MODEL: "gemini-3.6-flash",
ANTHROPIC_DEFAULT_OPUS_MODEL: "gemini-3.6-flash",
ANTHROPIC_MODEL: "gemini-3.8-flash",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "gemini-3.8-flash",
ANTHROPIC_DEFAULT_SONNET_MODEL: "gemini-3.8-flash",
ANTHROPIC_DEFAULT_OPUS_MODEL: "gemini-3.8-flash",
},
},
category: "third_party",
@@ -1282,10 +1282,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://opencode.ai/zen/go",
ANTHROPIC_API_KEY: "",
ANTHROPIC_MODEL: "deepseek-v4-flash[1M]",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "deepseek-v4-flash[1M]",
ANTHROPIC_DEFAULT_SONNET_MODEL: "deepseek-v4-flash[1M]",
ANTHROPIC_DEFAULT_OPUS_MODEL: "deepseek-v4-flash[1M]",
ANTHROPIC_MODEL: "deepseek-v4.1-flash[1M]",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "deepseek-v4.1-flash[1M]",
ANTHROPIC_DEFAULT_SONNET_MODEL: "deepseek-v4.1-flash[1M]",
ANTHROPIC_DEFAULT_OPUS_MODEL: "deepseek-v4.1-flash[1M]",
},
},
category: "third_party",
@@ -1308,7 +1308,7 @@ export const providerPresets: ProviderPreset[] = [
ANTHROPIC_BASE_URL: "https://opencode.ai/zen",
ANTHROPIC_API_KEY: "",
ANTHROPIC_MODEL: "claude-sonnet-5-5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "claude-haiku-4-5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "claude-haiku-5-5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "claude-sonnet-5-5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "claude-opus-5-5",
},
@@ -1739,10 +1739,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://api.stepfun.com/step_plan",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "step-3.5-flash-2603",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "step-3.5-flash-2603",
ANTHROPIC_DEFAULT_SONNET_MODEL: "step-3.5-flash-2603",
ANTHROPIC_DEFAULT_OPUS_MODEL: "step-3.5-flash-2603",
ANTHROPIC_MODEL: "step-5-preview",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "step-5-preview",
ANTHROPIC_DEFAULT_SONNET_MODEL: "step-5-preview",
ANTHROPIC_DEFAULT_OPUS_MODEL: "step-5-preview",
},
},
category: "cn_official",
@@ -1943,10 +1943,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://open.cherryin.net",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "anthropic/claude-sonnet-5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "anthropic/claude-haiku-4.5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "anthropic/claude-sonnet-5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-5",
ANTHROPIC_MODEL: "anthropic/claude-sonnet-5.5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "anthropic/claude-haiku-5.5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "anthropic/claude-sonnet-5.5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-5.5",
},
},
category: "aggregator",
@@ -1990,10 +1990,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://openrouter.ai/api",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "anthropic/claude-sonnet-5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "anthropic/claude-haiku-4.5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "anthropic/claude-sonnet-5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-5",
ANTHROPIC_MODEL: "anthropic/claude-sonnet-5.5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "anthropic/claude-haiku-5.5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "anthropic/claude-sonnet-5.5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-5.5",
},
},
category: "aggregator",
@@ -2009,10 +2009,10 @@ export const providerPresets: ProviderPreset[] = [
ANTHROPIC_BASE_URL: "https://api.therouter.ai",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_API_KEY: "",
ANTHROPIC_MODEL: "anthropic/claude-sonnet-5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "anthropic/claude-haiku-4.5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "anthropic/claude-sonnet-5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-5",
ANTHROPIC_MODEL: "anthropic/claude-sonnet-5-5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "anthropic/claude-haiku-5-5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "anthropic/claude-sonnet-5-5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "anthropic/claude-opus-5-5",
},
},
category: "aggregator",
@@ -2052,10 +2052,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://api.novita.ai/anthropic",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "zai-org/glm-5.1",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "zai-org/glm-5.1",
ANTHROPIC_DEFAULT_SONNET_MODEL: "zai-org/glm-5.1",
ANTHROPIC_DEFAULT_OPUS_MODEL: "zai-org/glm-5.1",
ANTHROPIC_MODEL: "zai-org/glm-5.3",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "zai-org/glm-5.3-flash",
ANTHROPIC_DEFAULT_SONNET_MODEL: "zai-org/glm-5.3",
ANTHROPIC_DEFAULT_OPUS_MODEL: "zai-org/glm-5.3",
},
},
category: "aggregator",
@@ -2263,7 +2263,7 @@ export const providerPresets: ProviderPreset[] = [
// 官方 Claude Code 接入文档(docs.deepinfra.com/integrations/anthropic.md,
// 2026-10-14 核对):base 为 /anthropic、不带 /v1,Bearer 与 x-api-key 都
// 收,默认的 AUTH_TOKEN 即可。档位与 ANTHROPIC_MODEL 照抄官方表:opus
// V4 Pro 0813、sonnet/主循环 V4 Flash 0731、haiku Ling-3.0-flash;不带日期
// V4 Pro 0813、sonnet/主循环 V4.1 Flash 1017(官方表仍写 V4 Flash 0731,已按站点现价目表上调)、haiku Ling-3.0-flash;不带日期
// 的 V4 Pro/Flash 是已被取代的早期预览,不用。官方另写的 fable、子代理与
// 最大输出变量照仓库惯例不加。/anthropic/v1/models 404,通用候选剥掉
// /anthropic 后的 /v1/models 公开可读,不覆写 modelsUrl
@@ -2271,10 +2271,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://api.deepinfra.com/anthropic",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "deepseek-ai/DeepSeek-V4-Flash-0731[1M]",
ANTHROPIC_MODEL: "deepseek-ai/DeepSeek-V4.1-Flash-1017[1M]",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "inclusionAI/Ling-3.0-flash",
ANTHROPIC_DEFAULT_SONNET_MODEL:
"deepseek-ai/DeepSeek-V4-Flash-0731[1M]",
"deepseek-ai/DeepSeek-V4.1-Flash-1017[1M]",
ANTHROPIC_DEFAULT_OPUS_MODEL: "deepseek-ai/DeepSeek-V4-Pro-0813[1M]",
},
},
@@ -2687,11 +2687,11 @@ export const providerPresets: ProviderPreset[] = [
env: {
// The proxy enforces both this origin and the Responses wire format.
ANTHROPIC_BASE_URL: "https://api.x.ai/v1",
ANTHROPIC_MODEL: "grok-4.5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "grok-4.5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "grok-4.5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "grok-4.5",
// Claude Code falls back to 200K for non-Claude model ids; grok-4.5
ANTHROPIC_MODEL: "grok-4.7",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "grok-4.7",
ANTHROPIC_DEFAULT_SONNET_MODEL: "grok-4.7",
ANTHROPIC_DEFAULT_OPUS_MODEL: "grok-4.7",
// Claude Code falls back to 200K for non-Claude model ids; grok-4.7
// has a 500K window (same as grok_config::DEFAULT_CONTEXT_WINDOW).
CLAUDE_CODE_MAX_CONTEXT_TOKENS: "500000",
},
@@ -2711,10 +2711,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://integrate.api.nvidia.com",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "moonshotai/kimi-k3[1M]",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "moonshotai/kimi-k3[1M]",
ANTHROPIC_DEFAULT_SONNET_MODEL: "moonshotai/kimi-k3[1M]",
ANTHROPIC_DEFAULT_OPUS_MODEL: "moonshotai/kimi-k3[1M]",
ANTHROPIC_MODEL: "moonshotai/kimi-k2.6",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "moonshotai/kimi-k2.6",
ANTHROPIC_DEFAULT_SONNET_MODEL: "moonshotai/kimi-k2.6",
ANTHROPIC_DEFAULT_OPUS_MODEL: "moonshotai/kimi-k2.6",
},
},
category: "aggregator",
@@ -2730,10 +2730,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://cc-api.pipellm.ai",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "claude-opus-5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "claude-haiku-4-5-20251001",
ANTHROPIC_DEFAULT_SONNET_MODEL: "claude-sonnet-5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "claude-opus-5",
ANTHROPIC_MODEL: "claude-opus-5-5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "claude-haiku-5-5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "claude-sonnet-5-5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "claude-opus-5-5",
},
},
category: "aggregator",
@@ -2859,10 +2859,10 @@ export const providerPresets: ProviderPreset[] = [
env: {
ANTHROPIC_BASE_URL: "https://api.jiekou.ai/anthropic",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "claude-fable-5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "claude-fable-5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "claude-fable-5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "claude-fable-5",
ANTHROPIC_MODEL: "claude-fable-5-1",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "claude-fable-5-1",
ANTHROPIC_DEFAULT_SONNET_MODEL: "claude-fable-5-1",
ANTHROPIC_DEFAULT_OPUS_MODEL: "claude-fable-5-1",
},
},
category: "aggregator",
@@ -2917,10 +2917,10 @@ export const providerPresets: ProviderPreset[] = [
// 官方文档(CC Switch 快速配置)指定 Claude Code 走 Anthropic 原生入口
ANTHROPIC_BASE_URL: "https://moark.com/anthropic",
ANTHROPIC_AUTH_TOKEN: "",
ANTHROPIC_MODEL: "deepseek-v4-flash-0731[1M]",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "deepseek-v4-flash-0731[1M]",
ANTHROPIC_DEFAULT_SONNET_MODEL: "deepseek-v4-flash-0731[1M]",
ANTHROPIC_DEFAULT_OPUS_MODEL: "deepseek-v4-flash-0731[1M]",
ANTHROPIC_MODEL: "deepseek-v4.1-flash[1M]",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "deepseek-v4.1-flash[1M]",
ANTHROPIC_DEFAULT_SONNET_MODEL: "deepseek-v4.1-flash[1M]",
ANTHROPIC_DEFAULT_OPUS_MODEL: "deepseek-v4.1-flash[1M]",
},
},
category: "aggregator",
+172 -173
View File
@@ -445,7 +445,7 @@ export const codexProviderPresets: CodexProviderPreset[] = [
config: generateThirdPartyConfig(
"packycode",
"https://www.packyapi.ai/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://www.packyapi.ai/v1",
@@ -464,8 +464,8 @@ export const codexProviderPresets: CodexProviderPreset[] = [
category: "third_party",
auth: generateThirdPartyAuth(""),
config: `model_provider = "custom"
model = "gpt-5.6-sol"
review_model = "gpt-5.6-sol"
model = "gpt-6.1-sol"
review_model = "gpt-6.1-sol"
model_reasoning_effort = "high"
disable_response_storage = true
@@ -488,7 +488,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"aicodemirror",
"https://api.aicodemirror.ai/api/codex/backend-api/codex",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://api.aicodemirror.ai/api/codex/backend-api/codex",
@@ -507,7 +507,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"patewayai",
"https://api.pateway.ai/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://api.pateway.ai/v1"],
isPartner: true,
@@ -541,7 +541,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"fenno",
"https://api.fenno.ai",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://api.fenno.ai"],
isPartner: true,
@@ -557,7 +557,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"runapi",
"https://runapi.host/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://runapi.host/v1", "https://runapi.co/v1"],
isPartner: true,
@@ -573,7 +573,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"openmodel",
"https://api.openmodel.ai/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
isPartner: true,
partnerPromotionKey: "openmodel",
@@ -588,7 +588,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"grooroute_pro",
"https://grooroute.pro/v1",
"gpt-6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://grooroute.pro/v1",
@@ -636,11 +636,12 @@ requires_openai_auth = true`,
category: "aggregator",
auth: generateThirdPartyAuth(""),
// gpt-5.6-sol 支持 /v1/responses,令牌选 codex 或 default 分组
// (gpt.ge/models/gpt-5.6-sol,2026-10-23)
// (gpt.ge/models/gpt-5.6-sol,2026-10-23);默认已上调 gpt-6.1-sol
// (2026-10-24 按官方阵容,站点目录需 Key 才可见,未实测)
config: generateThirdPartyConfig(
"vapi",
"https://api.gpt.ge/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
// 备用线路取自 gpt.ge/api/status 的 api_list(2026-10-23)
endpointCandidates: [
@@ -730,7 +731,9 @@ requires_openai_auth = true`,
// (文档给的完整端点 .../chat/completions),故 apiFormat=openai_chat 走
// 本地路由转换,与国内 Token Plan 预设同款。阵容与窗口按 FluxA 产品页模型表
// (glm-5.2 500k ≠ 国内版千帆平台 1M,国际 team 部署口径,勿按国内预设
// "修正");标注 Coming soon 的 deepseek-v4-pro-0813 / glm-5.3 不收。
// "修正");标注 Coming soon 的 deepseek-v4-pro-0813 不收;
// 2026-10-24 产品页已列 glm-5.3 / deepseek-v4.1-flash,新增为前置行(窗口取站点调研值,
// 未经 Key 实测),旧型号仍保留。
// Kimi K2.6 是定稿赞助文案点名的模型,FluxA 产品页模型表与百度国际站
// team 文档都没列它:id / 窗口取 FluxA baidu-ai-cloud 模型目录(categories
// 只有 text)与国内 Token Plan 预设(262144)双重印证,非臆造。
@@ -757,6 +760,12 @@ requires_openai_auth = true`,
contextWindow: 1048576,
inputModalities: ["text"],
},
{
model: "deepseek-v4.1-flash",
displayName: "DeepSeek V4.1 Flash",
contextWindow: 1048576,
inputModalities: ["text"],
},
{
model: "deepseek-v4-flash-0731",
displayName: "DeepSeek V4 Flash 0731",
@@ -775,6 +784,12 @@ requires_openai_auth = true`,
contextWindow: 131072,
inputModalities: ["text"],
},
{
model: "glm-5.3",
displayName: "GLM-5.3",
contextWindow: 1000000,
inputModalities: ["text"],
},
{
model: "glm-5.2",
displayName: "GLM-5.2",
@@ -813,7 +828,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"aigocode",
"https://api.aigocode.dev",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://api.aigocode.dev",
@@ -852,7 +867,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"aicoding",
"https://api.aicoding.inc",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://api.aicoding.inc"],
isPartner: true,
@@ -869,7 +884,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"subrouter",
"https://subrouter.ai/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://subrouter.ai/v1"],
isPartner: true,
@@ -885,7 +900,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"shengsuanyun",
"https://router.shengsuanyun.com/api/v1",
"openai/gpt-5.6-sol",
"openai/gpt-6.1-sol",
),
category: "aggregator",
isPartner: true,
@@ -901,7 +916,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"88api",
"https://api.88api.ai/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://api.88api.ai/v1", "https://88api.ai/v1"],
isPartner: true,
@@ -915,8 +930,8 @@ requires_openai_auth = true`,
category: "third_party",
auth: generateThirdPartyAuth(""),
config: `model_provider = "custom"
model = "gpt-5.6-sol"
review_model = "gpt-5.6-sol"
model = "gpt-6.1-sol"
review_model = "gpt-6.1-sol"
model_reasoning_effort = "high"
disable_response_storage = true
@@ -944,7 +959,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"9527code",
"https://9527.codes/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://9527.codes/v1",
@@ -964,7 +979,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"code0",
"https://code0.ai/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://code0.ai/v1"],
icon: "code0",
@@ -979,7 +994,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"teamorouter",
"https://api.teamorouter.cn/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://api.teamorouter.cn/v1",
@@ -997,14 +1012,14 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"ppio",
"https://api.ppio.com/openai/v1",
"deepseek/deepseek-v4-flash-0731",
"deepseek/deepseek-v4.1-flash",
),
endpointCandidates: ["https://api.ppio.com/openai/v1"],
apiFormat: "openai_chat",
modelCatalog: modelCatalog([
{
model: "deepseek/deepseek-v4-flash-0731",
displayName: "Deepseek V4 Flash 0731",
model: "deepseek/deepseek-v4.1-flash",
displayName: "DeepSeek V4.1 Flash",
contextWindow: 1048576,
inputModalities: ["text"],
},
@@ -1031,7 +1046,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"claudecn",
"https://claudecn.top/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
isPartner: true,
partnerPromotionKey: "claudecn",
@@ -1163,7 +1178,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"doubaoseed",
"https://ark.cn-beijing.volces.com/api/v3",
"doubao-seed-2-1-pro-260628",
"doubao-seed-2-1-pro-260915",
),
endpointCandidates: ["https://ark.cn-beijing.volces.com/api/v3"],
// 火山方舟主数据面 /api/v3 原生支持 Responses API(/api/v3/responses),无需路由接管转换
@@ -1172,7 +1187,7 @@ requires_openai_auth = true`,
// 让 Codex 直连显示模型并避免 custom 工具被网关拒绝
modelCatalog: modelCatalog([
{
model: "doubao-seed-2-1-pro-260628",
model: "doubao-seed-2-1-pro-260915",
displayName: "Doubao Seed 2.1 Pro",
contextWindow: 262144,
// 方舟深度思考文档(82379/1449737)7 值枚举中本模型无限制的通用四档;
@@ -1269,7 +1284,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"a6api",
"https://api.a6api.com/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://api.a6api.com/v1"],
isPartner: true,
@@ -1288,7 +1303,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"compshare",
"https://api.modelverse.cn/v1",
"gpt-6-astra",
"gpt-6.1-sol",
),
endpointCandidates: ["https://api.modelverse.cn/v1"],
category: "aggregator",
@@ -1309,7 +1324,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"compshare_coding",
"https://cp.compshare.cn/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://cp.compshare.cn/v1"],
category: "aggregator",
@@ -1342,7 +1357,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"sssaicode",
"https://node-hk.sssaicodeapi.com/api/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://node-hk.sssaicodeapi.com/api/v1",
@@ -1364,7 +1379,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"soleapi",
"https://soleapi.com/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://soleapi.com/v1"],
isPartner: true,
@@ -1379,7 +1394,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"micu",
"https://www.micuapi.ai/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://www.micuapi.ai/v1"],
category: "third_party",
@@ -1396,7 +1411,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"rightcode",
"https://www.rightapi.ai/codex/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
category: "third_party",
isPartner: true,
@@ -1412,7 +1427,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"cubence",
"https://api.cubence.com/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://api.cubence.com/v1",
@@ -1434,7 +1449,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"crazyrouter",
"https://cn.crazyrouter.com/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://cn.crazyrouter.com/v1"],
isPartner: true,
@@ -1450,7 +1465,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"dmxapi",
"https://www.dmxapi.cn/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://www.dmxapi.cn/v1"],
isPartner: true, // 合作伙伴
@@ -1466,8 +1481,8 @@ requires_openai_auth = true`,
category: "third_party",
auth: generateThirdPartyAuth(""),
config: `model_provider = "custom"
model = "gpt-5.6-sol"
review_model = "gpt-5.6-sol"
model = "gpt-6.1-sol"
review_model = "gpt-6.1-sol"
model_reasoning_effort = "high"
disable_response_storage = true
@@ -1493,8 +1508,8 @@ requires_openai_auth = true`,
category: "third_party",
auth: generateThirdPartyAuth(""),
config: `model_provider = "custom"
model = "gpt-5.6-sol"
review_model = "gpt-5.6-sol"
model = "gpt-6.1-sol"
review_model = "gpt-6.1-sol"
model_reasoning_effort = "high"
disable_response_storage = true
model_verbosity = "high"
@@ -1518,7 +1533,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"xycai",
"https://apicdn.xycai.us/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://apicdn.xycai.us/v1",
@@ -1536,11 +1551,12 @@ requires_openai_auth = true`,
category: "aggregator",
auth: generateThirdPartyAuth(""),
// 官方 Codex 文档(docs.modelflare.dev/guides/clients/codex,2026-10-15
// 核对):base 为 /v1、wire_api = "responses"、默认 gpt-5.6-sol
// 核对):base 为 /v1、wire_api = "responses"、默认 gpt-5.6-sol;
// 目录(modelflare.dev/api/pricing,2026-10-24)已有 gpt-6.1-sol,默认随之上调
config: generateThirdPartyConfig(
"modelflare",
"https://modelflare.dev/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://modelflare.dev/v1",
@@ -1561,7 +1577,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"alltokens",
"https://alltokens.cc/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
isPartner: true,
partnerPromotionKey: "alltokens",
@@ -1579,7 +1595,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"alltokens_si",
"https://alltokens.si/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
isPartner: true,
partnerPromotionKey: "alltokens_si",
@@ -1596,7 +1612,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"tuzi",
"https://api.tu-zi.com/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://api.tu-zi.com/v1",
@@ -1615,7 +1631,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"amux",
"https://api.amux.ai/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://api.amux.ai/v1"],
icon: "amux",
@@ -1627,7 +1643,7 @@ requires_openai_auth = true`,
category: "aggregator",
auth: generateThirdPartyAuth(""),
config: `model_provider = "custom"
model = "zai-org/glm-5.2"
model = "zai-org/glm-5.3"
disable_response_storage = true
[model_providers.custom]
@@ -1638,11 +1654,11 @@ requires_openai_auth = true`,
endpointCandidates: ["https://api.atlascloud.ai/v1"],
apiFormat: "openai_chat",
modelCatalog: modelCatalog([
// Coding Plan 当前收录的最新 GLM 是 5.2(2026-09-10);按量目录的
// 5.3 不在套餐内。窗口来自 https://api.atlascloud.ai/v1/models。
// 2026-10-24 公开目录 https://api.atlascloud.ai/v1/models 已有 GLM-5.3,
// 默认由 5.2 上调(Coding Plan 是否同步收录 5.3 未经 Key 实测)。
{
model: "zai-org/glm-5.2",
displayName: "GLM 5.2",
model: "zai-org/glm-5.3",
displayName: "GLM 5.3",
contextWindow: 1048576,
inputModalities: ["text"],
reasoningLevels: ["high"],
@@ -1670,7 +1686,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"soshow",
"https://maas.so-show.com/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
icon: "soshow",
},
@@ -2611,12 +2627,6 @@ requires_openai_auth = true`,
contextWindow: 262144,
reasoningLevels: ["none", "high"],
},
{
model: "minimax-m2.7",
displayName: "MiniMax M2.7",
contextWindow: 200000,
reasoningLevels: ["high"],
},
{
model: "minimax-m3",
displayName: "MiniMax M3",
@@ -3383,26 +3393,6 @@ requires_openai_auth = true`,
reasoningLevels: ["none", "low", "medium", "high"],
defaultReasoningLevel: "low",
},
{
model: "mimo-v2.5-pro",
displayName: "MiMo V2.5 Pro",
contextWindow: 1048576,
inputModalities: ["text"],
supportsParallelToolCalls: false,
baseInstructions: MIMO_CODEX_BASE_INSTRUCTIONS,
reasoningLevels: ["none", "low", "medium", "high"],
defaultReasoningLevel: "low",
},
{
model: "mimo-v2.5",
displayName: "MiMo V2.5",
contextWindow: 1048576,
inputModalities: ["text", "image"],
supportsParallelToolCalls: false,
baseInstructions: MIMO_CODEX_BASE_INSTRUCTIONS,
reasoningLevels: ["none", "low", "medium", "high"],
defaultReasoningLevel: "low",
},
]),
category: "cn_official",
icon: "xiaomimimo",
@@ -3447,26 +3437,6 @@ requires_openai_auth = true`,
reasoningLevels: ["none", "low", "medium", "high"],
defaultReasoningLevel: "low",
},
{
model: "mimo-v2.5-pro",
displayName: "MiMo V2.5 Pro",
contextWindow: 1048576,
inputModalities: ["text"],
supportsParallelToolCalls: false,
baseInstructions: MIMO_CODEX_BASE_INSTRUCTIONS,
reasoningLevels: ["none", "low", "medium", "high"],
defaultReasoningLevel: "low",
},
{
model: "mimo-v2.5",
displayName: "MiMo V2.5",
contextWindow: 1048576,
inputModalities: ["text", "image"],
supportsParallelToolCalls: false,
baseInstructions: MIMO_CODEX_BASE_INSTRUCTIONS,
reasoningLevels: ["none", "low", "medium", "high"],
defaultReasoningLevel: "low",
},
]),
category: "cn_official",
icon: "xiaomimimo",
@@ -3516,15 +3486,24 @@ requires_openai_auth = true`,
reasoningLevels: ["low", "high", "max"],
defaultReasoningLevel: "high",
},
// V4.1 Flash 不支持 low(传了按默认档处理)
// V4.1 Flash 不支持 low(传了按默认档处理);1017 是 2026-10-17 的新版
//(models.dev baseten,1M 窗口)
{
model: "deepseek-ai/DeepSeek-V4.1-Flash",
displayName: "DeepSeek V4.1 Flash",
model: "deepseek-ai/DeepSeek-V4.1-Flash-1017",
displayName: "DeepSeek V4.1 Flash 1017",
contextWindow: 1048576,
inputModalities: ["text", "image"],
reasoningLevels: ["none", "high", "max"],
defaultReasoningLevel: "high",
},
{
model: "zai-org/GLM-5.3-Fast",
displayName: "GLM-5.3 Fast",
contextWindow: 1048576,
inputModalities: ["text", "image"],
reasoningLevels: ["low", "high", "max"],
defaultReasoningLevel: "high",
},
]),
// 思考开关是嵌套的 chat_template_args.enable_thinking,与顶层
// enable_thinking 对不上,不声明开关;effort 按 OpenAPI 枚举
@@ -3657,31 +3636,20 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"nvidia",
"https://integrate.api.nvidia.com/v1",
"moonshotai/kimi-k3",
"moonshotai/kimi-k2.6",
),
endpointCandidates: ["https://integrate.api.nvidia.com/v1"],
apiFormat: "openai_chat",
modelCatalog: modelCatalog([
{
model: "moonshotai/kimi-k3",
displayName: "Kimi K3",
contextWindow: 1048576,
// NIM 上 moonshotai/kimi-k3 已于 2026-10-15 下线(410),K2.6 是现存唯一 Kimi;
// K2.6 在 NIM 的思考参数未实测,档位与 codexChatReasoning 先不声明
model: "moonshotai/kimi-k2.6",
displayName: "Kimi K2.6",
contextWindow: 262144,
inputModalities: ["text", "image"],
reasoningLevels: ["low", "high", "max"],
defaultReasoningLevel: "high",
},
]),
// NIM K3 始终思考,只接受 reasoning_effort: low/high/max,无 thinking:
// https://docs.api.nvidia.com/nim/re/reference/moonshotai-kimi-k3-infer
// API 未传 effort 时默认 max;此预设显式 high,与 config.toml 保持一致。
codexChatReasoning: {
supportsThinking: false,
supportsEffort: true,
thinkingParam: "none",
effortParam: "reasoning_effort",
effortValueMode: "passthrough",
outputFormat: "reasoning_content",
},
category: "aggregator",
icon: "nvidia",
iconColor: "#000000",
@@ -3998,7 +3966,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"deepinfra",
"https://api.deepinfra.com/v1",
"deepseek-ai/DeepSeek-V4-Flash-0731",
"deepseek-ai/DeepSeek-V4.1-Flash-1017",
),
endpointCandidates: ["https://api.deepinfra.com/v1"],
// 文档列了 function / web_search / namespace 工具,没写 custom 工具:
@@ -4007,14 +3975,14 @@ requires_openai_auth = true`,
apiFormat: "openai_responses",
// 平台没有逐模型档位声明(docs.deepinfra.com/chat/reasoning.md 只给通用
// 枚举),退回厂商官方档位:DeepSeek 同 DeepSeek 直连预设,Kimi K3、
// GLM-5.3 同各自官方预设,均为 low/high/max。GLM-5.2 档位口径不一,暂不
// 填。每档都含 high,与 config 的 model_reasoning_effort = "high" 一致,
// GLM-5.3 同各自官方预设,均为 low/high/max。GLM-5.2 已于 2026-10-24 从目录移除
// (公开 /v1/openai/models 已有 GLM-5.3)。每档都含 high,与 config 的 model_reasoning_effort = "high" 一致,
// 无需 defaultReasoningLevel。窗口取 https://api.deepinfra.com/models/<id>
// 同日元数据。首行 = 默认模型,须与 config 的 model 一致
modelCatalog: modelCatalog([
{
model: "deepseek-ai/DeepSeek-V4-Flash-0731",
displayName: "DeepSeek V4 Flash 0731",
model: "deepseek-ai/DeepSeek-V4.1-Flash-1017",
displayName: "DeepSeek V4.1 Flash 1017",
contextWindow: 1048576,
inputModalities: ["text"],
reasoningLevels: ["low", "high", "max"],
@@ -4041,10 +4009,11 @@ requires_openai_auth = true`,
reasoningLevels: ["low", "high", "max"],
},
{
model: "zai-org/GLM-5.2",
displayName: "GLM-5.2",
model: "zai-org/GLM-5.3-Flash",
displayName: "GLM-5.3 Flash",
contextWindow: 1048576,
inputModalities: ["text"],
inputModalities: ["text", "image"],
reasoningLevels: ["low", "high", "max"],
},
]),
category: "aggregator",
@@ -4183,6 +4152,20 @@ requires_openai_auth = true`,
inputModalities: ["text"],
reasoningLevels: ["high"],
},
{
model: "deepseek-ai/DeepSeek-V4.1-Flash",
displayName: "DeepSeek V4.1 Flash",
contextWindow: 1048000,
inputModalities: ["text", "image"],
reasoningLevels: ["high"],
},
{
model: "MiniMaxAI/MiniMax-M3.1-Flash",
displayName: "MiniMax M3.1 Flash",
contextWindow: 1049000,
inputModalities: ["text"],
reasoningLevels: ["high"],
},
]),
category: "aggregator",
icon: "nebius",
@@ -4394,6 +4377,13 @@ requires_openai_auth = true`,
inputModalities: ["text"],
reasoningLevels: ["high"],
},
{
model: "deepseek-ai/DeepSeek-V4.1-Flash-1017:baseten",
displayName: "DeepSeek V4.1 Flash 1017 (Baseten)",
contextWindow: 1048576,
inputModalities: ["text"],
reasoningLevels: ["high"],
},
]),
// 平台不按模型声明思考开关与 effort 语义:照 Novita,不下发推理控制参数
codexChatReasoning: {
@@ -4585,8 +4575,8 @@ requires_openai_auth = true`,
defaultReasoningLevel: "high",
},
{
model: "kimi-k3",
displayName: "Kimi K3",
model: "kimi-k3.1-pro",
displayName: "Kimi K3.1 Pro",
contextWindow: 1048576,
inputModalities: ["text", "image"],
reasoningLevels: ["max"],
@@ -4598,14 +4588,14 @@ requires_openai_auth = true`,
reasoningLevels: ["high", "max"],
},
{
model: "deepseek-v4-flash",
displayName: "DeepSeek V4 Flash",
model: "deepseek-v4.1-flash",
displayName: "DeepSeek V4.1 Flash",
contextWindow: 1048576,
reasoningLevels: ["low", "high", "max"],
},
{
model: "mimo-v2.5-pro",
displayName: "MiMo V2.5 Pro",
model: "mimo-v2.6-pro",
displayName: "MiMo V2.6 Pro",
contextWindow: 1048576,
},
]),
@@ -4642,7 +4632,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"aihubmix",
"https://aihubmix.com/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://aihubmix.com/v1",
@@ -4659,7 +4649,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"cherryin",
"https://open.cherryin.net/v1",
"openai/gpt-5.6-sol",
"openai/gpt-6.1-sol",
),
endpointCandidates: ["https://open.cherryin.net/v1"],
category: "aggregator",
@@ -4674,7 +4664,7 @@ requires_openai_auth = true`,
config: generateThirdPartyConfig(
"relaxycode",
"https://www.relaxycode.com/v1",
"gpt-5.6-sol",
"gpt-6-astra",
),
icon: "relaxcode",
},
@@ -4686,7 +4676,7 @@ requires_openai_auth = true`,
OPENAI_API_KEY: "",
},
config: `model_provider = "custom"
model = "gpt-5.6-sol"
model = "gpt-6.1-sol"
model_reasoning_effort = "high"
disable_response_storage = true
@@ -4710,7 +4700,7 @@ model_auto_compact_token_limit = 9000000`,
OPENAI_API_KEY: "",
},
config: `model_provider = "custom"
model = "gpt-5.6-sol"
model = "gpt-6.1-sol"
model_reasoning_effort = "medium"
disable_response_storage = true
@@ -4731,7 +4721,7 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
config: generateThirdPartyConfig(
"openrouter",
"https://openrouter.ai/api/v1",
"gpt-5.6-sol",
"openai/gpt-6.1-sol",
),
category: "aggregator",
icon: "openrouter",
@@ -4745,7 +4735,7 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
config: generateThirdPartyConfig(
"therouter",
"https://api.therouter.ai/v1",
"openai/gpt-5.3-codex",
"openai/gpt-6.1-sol",
),
endpointCandidates: ["https://api.therouter.ai/v1"],
category: "aggregator",
@@ -4759,14 +4749,14 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
config: generateThirdPartyConfig(
"jiekou",
"https://api.jiekou.ai/openai/v1",
"claude-fable-5",
"claude-fable-5-1",
),
endpointCandidates: ["https://api.jiekou.ai/openai/v1"],
apiFormat: "openai_chat",
modelCatalog: modelCatalog([
{
model: "claude-fable-5",
displayName: "Claude Fable 5",
model: "claude-fable-5-1",
displayName: "Claude Fable 5.1",
contextWindow: 1000000,
inputModalities: ["text", "image"],
},
@@ -4784,7 +4774,7 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
config: generateThirdPartyConfig(
"aicodewith",
"https://api.aicodewith.ai/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: ["https://api.aicodewith.ai/v1"],
category: "aggregator",
@@ -4822,6 +4812,16 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
displayName: "Qwen 3.8 Flash",
contextWindow: 1000000,
},
{
model: "moonshotai/Kimi-K3.1-Pro",
displayName: "Kimi K3.1 Pro",
contextWindow: 1048576,
},
{
model: "zai-org/GLM-5.3",
displayName: "GLM-5.3",
contextWindow: 1000000,
},
]),
category: "third_party",
icon: "commandcode",
@@ -4835,7 +4835,7 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
config: generateThirdPartyConfig(
"moark",
"https://moark.com/v1",
"deepseek-v4-flash-0731",
"deepseek-v4.1-flash",
),
endpointCandidates: ["https://moark.com/v1"],
// 显式写出协议,让预设自身信息完整、不必依赖表单推导:表单在预设缺少
@@ -4864,16 +4864,20 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
// qwen3-coder-plus 只有单档 none,默认随之回落 none。
// 首行 = 默认模型,须与 config 的 model 一致。
modelCatalog: modelCatalog([
// 2026-10-24 公开目录(ai.gitee.com/v1/models)起:flash 换 V4.1、Pro 用带
// 日期的 0813、qwen3-coder-plus 已不在目录。kimi-k3.1-pro / qwen3.8-max 的档位
// 平台未自证,官方档位又与 model_reasoning_effort = "high" 不兼容,先不进 Codex
// 目录,Kimi 保留仍在目录、档位已实测的 K2.7 Code;flash 沿用 DeepSeek 官方 low/high/max
{
model: "deepseek-v4-flash-0731",
displayName: "DeepSeek V4 Flash",
model: "deepseek-v4.1-flash",
displayName: "DeepSeek V4.1 Flash",
contextWindow: 1000000,
inputModalities: ["text"],
reasoningLevels: ["low", "high", "max"],
},
{
model: "DeepSeek-V4-Pro",
displayName: "DeepSeek V4 Pro",
model: "DeepSeek-V4-Pro-0813",
displayName: "DeepSeek V4 Pro 0813",
contextWindow: 1000000,
inputModalities: ["text"],
// MoArk 400 明文:'low', 'medium', 'high', 'xhigh', 'max'
@@ -4887,6 +4891,14 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
// MoArk 400 明文:none or low or medium or high or xhigh or max
reasoningLevels: ["none", "low", "medium", "high", "xhigh", "max"],
},
{
model: "GLM-5.3-Flash",
displayName: "GLM-5.3 Flash",
contextWindow: 1000000,
inputModalities: ["text", "image"],
// 平台未自证,退回智谱官方 Codex 目录的 low/high/max
reasoningLevels: ["low", "high", "max"],
},
{
model: "Kimi-K2.7-Code",
displayName: "Kimi K2.7 Code",
@@ -4895,19 +4907,6 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
// MoArk 400 明文:'none', 'minimal', 'low', 'medium', 'high', 'xhigh'
reasoningLevels: ["none", "minimal", "low", "medium", "high", "xhigh"],
},
{
model: "qwen3-coder-plus",
displayName: "Qwen3 Coder Plus",
contextWindow: 1000000,
inputModalities: ["text"],
// 实测 effort 完全不生效(none 与 ultra 的 reasoning_tokens 同为 0)。
// 不能留空:留空等于沿用原生模板的 none/high 两档、默认 high,Codex 仍会
// 给出一个不改变任何行为的"关闭/开启思考"选择器。声明单档 none 让
// apply_codex_reasoning_level_override 生成单档、默认回落 none;Codex 在
// 只有一个普通档位时直接应用、不显示选择界面。(空数组同样走保留模板的
// 早退分支,解决不了。)
reasoningLevels: ["none"],
},
]),
category: "aggregator",
icon: "moark",
@@ -4923,7 +4922,7 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
config: generateThirdPartyConfig(
"soruxgpt",
"https://ai.soruxgpt.com/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://ai.soruxgpt.com/v1",
@@ -4944,7 +4943,7 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
config: generateThirdPartyConfig(
"soruxgpt_coding",
"https://app.soruxgpt.com/api/codex",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://app.soruxgpt.com/api/codex",
@@ -4962,7 +4961,7 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
config: generateThirdPartyConfig(
"ikuncode",
"https://api.ikuncode.ai/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://api.ikuncode.ai/v1",
@@ -4979,7 +4978,7 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
config: generateThirdPartyConfig(
"runtoken",
"https://www.runtoken.ai/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://www.runtoken.ai/v1",
@@ -4996,7 +4995,7 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
config: generateThirdPartyConfig(
"botcf",
"https://botcf.com/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
icon: "botcf",
},
@@ -5010,7 +5009,7 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
config: generateThirdPartyConfig(
"yylx",
"https://app.yylx.io/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
endpointCandidates: [
"https://app.yylx.io/v1",
@@ -5028,7 +5027,7 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
config: generateThirdPartyConfig(
"tokenflux",
"https://tokenflux.dev/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
icon: "tokenflux",
},
@@ -5041,7 +5040,7 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
config: generateThirdPartyConfig(
"nekocode",
"https://nekoapi.ai/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
icon: "nekocode",
},
@@ -5054,7 +5053,7 @@ base_url = "https://cc-api.pipellm.ai/v1"`,
config: generateThirdPartyConfig(
"aicoming",
"https://api.aicoming.top/v1",
"gpt-5.6-sol",
"gpt-6.1-sol",
),
icon: "aicoming",
},
+60 -60
View File
@@ -60,11 +60,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://www.packyapi.ai",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://www.packyapi.ai",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "PackyCode",
category: "third_party",
isPartner: true,
@@ -85,11 +85,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
env: {
GOOGLE_GEMINI_BASE_URL: "https://apinebula.ai",
GEMINI_API_KEY: "",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://apinebula.ai",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "APINebula",
category: "third_party",
isPartner: true,
@@ -104,11 +104,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://api.aicodemirror.ai/api/gemini",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://api.aicodemirror.ai/api/gemini",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "AICodeMirror",
category: "third_party",
isPartner: true,
@@ -124,11 +124,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://api.openmodel.ai",
GEMINI_MODEL: "gemini-3.1-pro-preview",
GEMINI_MODEL: "gemini-4-argon",
},
},
baseURL: "https://api.openmodel.ai",
model: "gemini-3.1-pro-preview",
model: "gemini-4-argon",
description: "OpenModel",
category: "aggregator",
isPartner: true,
@@ -193,11 +193,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://router.shengsuanyun.com/api",
GEMINI_MODEL: "google/gemini-3.6-flash",
GEMINI_MODEL: "google/gemini-3.8-flash",
},
},
baseURL: "https://router.shengsuanyun.com/api",
model: "google/gemini-3.6-flash",
model: "google/gemini-3.8-flash",
description: "Shengsuanyun",
category: "aggregator",
isPartner: true,
@@ -211,11 +211,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://api.aigocode.dev",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://api.aigocode.dev",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "AIGoCode",
category: "third_party",
isPartner: true,
@@ -235,11 +235,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://api.qnaigc.com/bypass/vertex",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://api.qnaigc.com/bypass/vertex",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "Qiniu",
category: "aggregator",
isPartner: true,
@@ -257,11 +257,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://api.aicoding.inc",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://api.aicoding.inc",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "AICoding",
category: "third_party",
isPartner: true,
@@ -277,11 +277,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://subrouter.ai/v1beta",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://subrouter.ai/v1beta",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "SubRouter",
category: "aggregator",
isPartner: true,
@@ -317,11 +317,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
env: {
GOOGLE_GEMINI_BASE_URL: "https://api.apikey.fan",
GEMINI_API_KEY: "",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://api.apikey.fan",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "APIKEY.FUN",
category: "third_party",
isPartner: true,
@@ -341,11 +341,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
env: {
GOOGLE_GEMINI_BASE_URL: "https://9527.codes",
GEMINI_API_KEY: "",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://9527.codes",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "9527CODE",
category: "aggregator",
isPartner: true,
@@ -364,11 +364,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://code0.ai",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://code0.ai",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "Code0",
category: "aggregator",
icon: "code0",
@@ -380,11 +380,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://api.a6api.com",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://api.a6api.com",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "A6API",
category: "aggregator",
isPartner: true,
@@ -398,11 +398,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://node-hk.sssaicodeapi.com/api",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://node-hk.sssaicodeapi.com/api",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "SSSAiCode",
category: "third_party",
isPartner: true,
@@ -442,11 +442,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://api.cubence.com",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://api.cubence.com",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "Cubence",
category: "third_party",
isPartner: true,
@@ -467,11 +467,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://cn.crazyrouter.com",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://cn.crazyrouter.com",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "CrazyRouter",
category: "third_party",
isPartner: true,
@@ -488,11 +488,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
env: {
GOOGLE_GEMINI_BASE_URL: "https://sudocode.us",
GEMINI_API_KEY: "",
GEMINI_MODEL: "gemini-3.1-flash-lite",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://sudocode.us",
model: "gemini-3.1-flash-lite",
model: "gemini-3.8-flash",
description: "SudoCode.us",
category: "third_party",
isPartner: true,
@@ -507,11 +507,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
env: {
GOOGLE_GEMINI_BASE_URL: "https://apicdn.xycai.us",
GEMINI_API_KEY: "",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://apicdn.xycai.us",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "XycAi",
category: "aggregator",
isPartner: true,
@@ -531,11 +531,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
env: {
GOOGLE_GEMINI_BASE_URL: "https://modelflare.dev",
GEMINI_API_KEY: "",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://modelflare.dev",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "Modelflare",
category: "aggregator",
isPartner: true,
@@ -619,7 +619,7 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
env: {
GOOGLE_GEMINI_BASE_URL: "https://e-flowcode.cc",
GEMINI_API_KEY: "",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
config: {
general: {
@@ -639,7 +639,7 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
},
},
baseURL: "https://e-flowcode.cc",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "E-FlowCode",
category: "third_party",
endpointCandidates: ["https://e-flowcode.cc"],
@@ -654,11 +654,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
env: {
GOOGLE_GEMINI_BASE_URL: "https://open.cherryin.net",
GEMINI_API_KEY: "",
GEMINI_MODEL: "google/gemini-3.6-flash",
GEMINI_MODEL: "google/gemini-3.8-flash",
},
},
baseURL: "https://open.cherryin.net",
model: "google/gemini-3.6-flash",
model: "google/gemini-3.8-flash",
description: "CherryIN",
category: "aggregator",
endpointCandidates: ["https://open.cherryin.net"],
@@ -671,11 +671,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://openrouter.ai/api",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://openrouter.ai/api",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "OpenRouter",
category: "aggregator",
icon: "openrouter",
@@ -688,11 +688,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://api.therouter.ai",
GEMINI_MODEL: "gemini-3.6-flash",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://api.therouter.ai",
model: "gemini-3.6-flash",
model: "gemini-3.8-flash",
description: "TheRouter",
category: "aggregator",
endpointCandidates: ["https://api.therouter.ai"],
@@ -705,11 +705,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://api.aicodewith.ai/gemini_cli",
GEMINI_MODEL: "gemini-3.1-pro-preview",
GEMINI_MODEL: "gemini-4-argon",
},
},
baseURL: "https://api.aicodewith.ai/gemini_cli",
model: "gemini-3.1-pro-preview",
model: "gemini-4-argon",
description: "AICodeWith",
category: "aggregator",
endpointCandidates: ["https://api.aicodewith.ai/gemini_cli"],
@@ -723,11 +723,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://ai.soruxgpt.com",
GEMINI_MODEL: "gemini-3.1-pro-preview",
GEMINI_MODEL: "gemini-4-argon",
},
},
baseURL: "https://ai.soruxgpt.com",
model: "gemini-3.1-pro-preview",
model: "gemini-4-argon",
description: "SoruxGPT",
category: "aggregator",
endpointCandidates: [
@@ -746,11 +746,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://api.ikuncode.ai",
GEMINI_MODEL: "gemini-3.1-pro-preview",
GEMINI_MODEL: "gemini-4-argon",
},
},
baseURL: "https://api.ikuncode.ai",
model: "gemini-3.1-pro-preview",
model: "gemini-4-argon",
description: "IKunCode",
category: "aggregator",
endpointCandidates: ["https://api.ikuncode.ai", "https://api.ikuncode.cc"],
@@ -763,11 +763,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://www.runtoken.ai",
GEMINI_MODEL: "gemini-3.1-pro-preview",
GEMINI_MODEL: "gemini-4-argon",
},
},
baseURL: "https://www.runtoken.ai",
model: "gemini-3.1-pro-preview",
model: "gemini-4-argon",
description: "RunToken",
category: "aggregator",
endpointCandidates: ["https://www.runtoken.ai", "https://fast.runtoken.ai"],
@@ -781,11 +781,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://app.yylx.io",
GEMINI_MODEL: "gemini-3.1-pro-preview",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://app.yylx.io",
model: "gemini-3.1-pro-preview",
model: "gemini-3.8-flash",
description: "YYLX",
category: "aggregator",
endpointCandidates: [
@@ -802,11 +802,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://tokenflux.dev",
GEMINI_MODEL: "gemini-3.1-pro",
GEMINI_MODEL: "gemini-3.8-flash",
},
},
baseURL: "https://tokenflux.dev",
model: "gemini-3.1-pro",
model: "gemini-3.8-flash",
description: "TokenFlux",
category: "aggregator",
icon: "tokenflux",
@@ -818,11 +818,11 @@ export const geminiProviderPresets: GeminiProviderPreset[] = [
settingsConfig: {
env: {
GOOGLE_GEMINI_BASE_URL: "https://api.aicoming.top",
GEMINI_MODEL: "gemini-3.1-pro-preview",
GEMINI_MODEL: "gemini-4-argon",
},
},
baseURL: "https://api.aicoming.top",
model: "gemini-3.1-pro-preview",
model: "gemini-4-argon",
description: "AIComing",
category: "aggregator",
icon: "aicoming",
+5 -4
View File
@@ -15,7 +15,7 @@
* - OpenCode Go 上游自 2026-08 起已提供 grok-4.5,但暂仍不收录:
* 订阅制网关是否纳入 Grok 预设属产品决策,收录前需单独评估。
* - 只收聚合站与第三方中转站,默认模型统一为 grok-4.5;
* OpenRouter 系命名空间的路由站用 "x-ai/grok-4.5"。
* OpenRouter 系命名空间的路由站用 "x-ai/grok-4.7"。
*
* config 字段沿用 Codex 风格 TOML 作为载体:Grok 表单只从中提取
* base_url / model / wire_api 三个字段(extractCodex* 工具),再重建
@@ -58,7 +58,7 @@ export const grokBuildOfficialPreset: GrokBuildProviderPreset = {
};
/** OpenRouter 系命名空间路由站的 Grok 模型 id */
const OPENROUTER_STYLE_GROK_MODEL = "x-ai/grok-4.5";
const OPENROUTER_STYLE_GROK_MODEL = "x-ai/grok-4.7";
const grokAuth = (): Record<string, any> => ({ OPENAI_API_KEY: "" });
@@ -663,7 +663,7 @@ export const grokBuildProviderPresets: GrokBuildProviderPreset[] = [
websiteUrl: "https://x.ai/api",
apiKeyUrl: "https://console.x.ai",
auth: grokAuth(),
config: grokPresetConfig("xAI (Grok)", "https://api.x.ai/v1"),
config: grokPresetConfig("xAI (Grok)", "https://api.x.ai/v1", "grok-4.7"),
endpointCandidates: ["https://api.x.ai/v1"],
apiFormat: "openai_responses",
category: "third_party",
@@ -759,7 +759,8 @@ export const grokBuildProviderPresets: GrokBuildProviderPreset[] = [
config: grokPresetConfig(
"TheRouter",
"https://api.therouter.ai/v1",
OPENROUTER_STYLE_GROK_MODEL,
// TheRouter 的 xAI 前缀是 xai/(不是 x-ai/)
"xai/grok-4.7",
),
endpointCandidates: ["https://api.therouter.ai/v1"],
category: "aggregator",
File diff suppressed because it is too large. Load diff
+6 -5
View File
@@ -17,8 +17,8 @@ const allJieKouPresetGroups = [
["Hermes", hermesProviderPresets],
] as const;
const defaultModelId = "claude-fable-5";
const defaultModelName = "Claude Fable 5";
const defaultModelId = "claude-fable-5-1";
const defaultModelName = "Claude Fable 5.1";
const anthropicBaseUrl = "https://api.jiekou.ai/anthropic";
const openAiBaseUrl = "https://api.jiekou.ai/openai/v1";
const brandDetails = {
@@ -128,9 +128,10 @@ describe("JieKou AI provider presets", () => {
},
});
expect(Object.keys(preset.settingsConfig.models)).toEqual([
defaultModelId,
"claude-opus-5-5",
"claude-fable-5-1",
"claude-sonnet-5-5",
"claude-haiku-5-5",
defaultModelId,
]);
expect(`${preset.settingsConfig.options.baseURL}/chat/completions`).toBe(
"https://api.jiekou.ai/openai/v1/chat/completions",
@@ -153,7 +154,7 @@ describe("JieKou AI provider presets", () => {
input: ["text", "image"],
contextWindow: 1000000,
maxTokens: 128000,
cost: { input: 10, output: 50, cacheRead: 1, cacheWrite: 12.5 },
cost: { input: 10, output: 50, cacheRead: 0.25, cacheWrite: 12.5 },
}),
]),
},
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+18
View File
@@ -318,6 +318,15 @@ export const piModelCatalog = {
maxTokens: 131_072,
},
},
"moonshotai/kimi-k3.1-pro": {
capabilities: {
name: "Kimi K3.1 Pro",
reasoning: true,
input: ["text", "image"],
contextWindow: 1_048_576,
maxTokens: 131_072,
},
},
"openai/gpt-5": {
capabilities: {
name: "GPT-5",
@@ -800,6 +809,15 @@ export const piModelCatalog = {
maxTokens: 128000,
},
},
"openai/gpt-6.1-sol": {
capabilities: {
name: "GPT-6.1 Sol",
reasoning: true,
input: ["text", "image"],
contextWindow: 272000,
maxTokens: 128000,
},
},
"openai/gpt-6-sol": {
capabilities: {
name: "GPT-6 Sol",
+269 -224
View File
@@ -241,13 +241,12 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
@@ -267,8 +266,8 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
piModel("openai/gpt-5.6-sol", {
id: "gpt-5.6-sol",
piModel("openai/gpt-6.1-sol", {
id: "gpt-6.1-sol",
}),
piModel("openai/gpt-6-astra", { id: "gpt-6-astra" }),
],
@@ -289,11 +288,11 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
],
},
@@ -339,8 +338,8 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
piModel("openai/gpt-5.6-sol", {
id: "gpt-5.6-sol",
piModel("openai/gpt-6.1-sol", {
id: "gpt-6.1-sol",
}),
],
},
@@ -360,16 +359,15 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
@@ -391,9 +389,10 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
models: [
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-sonnet-5.5", { id: "claude-sonnet-5-5" }),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5-20251001",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
category: "aggregator",
@@ -474,6 +473,7 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
models: [
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-sonnet-5.5", { id: "claude-sonnet-5-5" }),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
category: "aggregator",
@@ -501,6 +501,13 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
id: "deepseek-v4-pro-0813",
contextWindow: 1_048_576,
}),
// V4.1 Flash 1017 为较新的带日期构建,窗口与最大输出取站点目录
piModel("deepseek/deepseek-flash", {
id: "deepseek-v4.1-flash-1017",
name: "DeepSeek V4.1 Flash 1017",
contextWindow: 1_000_000,
maxTokens: 384_000,
}),
// V4.1 Flash 平台标注可看图,目录里的 V4 Flash 只收文本
piModel("deepseek/deepseek-v4-flash", {
id: "deepseek-v4.1-flash",
@@ -547,12 +554,12 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
id: "deepseek-v4-flash-0731",
name: "DeepSeek V4 Flash 0731",
}),
piModel("deepseek/deepseek-v4-flash", { id: "deepseek-v4-flash" }),
piModel("deepseek/deepseek-flash", { id: "deepseek-v4.1-flash" }),
piModel("deepseek/deepseek-v3.2", { id: "deepseek-v3.2" }),
piModel("zai/glm-5.2", { id: "glm-5.2" }),
piModel("zai/glm-5.3", { id: "glm-5.3" }),
piModel("zai/glm-5.1", { id: "glm-5.1" }),
piModel("zai/glm-5", { id: "glm-5" }),
piModel("moonshotai/kimi-k2.6", { id: "kimi-k2.6" }),
piModel("moonshotai/kimi-k3", { id: "kimi-k3" }),
],
},
category: "aggregator",
@@ -571,12 +578,13 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
category: "third_party",
@@ -621,11 +629,11 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
],
},
@@ -646,8 +654,8 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
piModel("openai/gpt-5.6-sol", {
id: "gpt-5.6-sol",
piModel("openai/gpt-6.1-sol", {
id: "gpt-6.1-sol",
}),
piModel("openai/gpt-6-astra", { id: "gpt-6-astra" }),
],
@@ -669,15 +677,12 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-opus-5", {
id: "anthropic/claude-opus-5",
}),
piModel("anthropic/claude-sonnet-5", {
id: "anthropic/claude-sonnet-5",
}),
piModel("anthropic/claude-opus-5.5", {
id: "anthropic/claude-opus-5.5",
}),
piModel("anthropic/claude-sonnet-5.5", {
id: "anthropic/claude-sonnet-5.5",
}),
piModel("anthropic/claude-fable-5.1", {
id: "anthropic/claude-fable-5.1",
}),
@@ -701,8 +706,8 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
models: [
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-sonnet-5.5", { id: "claude-sonnet-5-5" }),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
@@ -723,15 +728,16 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
category: "third_party",
@@ -750,16 +756,15 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
@@ -779,8 +784,8 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
piModel("openai/gpt-5.6-sol", {
id: "gpt-5.6-sol",
piModel("openai/gpt-6.1-sol", {
id: "gpt-6.1-sol",
}),
piModel("openai/gpt-6-astra", { id: "gpt-6-astra" }),
],
@@ -800,6 +805,8 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
piModel("openai/gpt-6.1-sol", { id: "gpt-6.1-sol" }),
piModel("openai/gpt-6-astra", { id: "gpt-6-astra" }),
piModel("openai/gpt-5.6-sol", {
id: "gpt-5.6-sol",
}),
@@ -823,14 +830,16 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
models: [
{
...piModel("deepseek/deepseek-v4-flash", {
id: "deepseek/deepseek-v4-flash-0731",
name: "Deepseek V4 Flash 0731",
id: "deepseek/deepseek-v4.1-flash",
name: "DeepSeek V4.1 Flash",
contextWindow: 1_048_576,
maxTokens: 393_216,
thinkingProfile: "deepseekV4",
}),
compat: { ...DEEPSEEK_THINKING_COMPAT },
},
piModel("moonshotai/kimi-k3.1-pro", { id: "moonshotai/kimi-k3.1-pro" }),
piModel("zai/glm-5.3", { id: "zai-org/glm-5.3" }),
],
},
category: "aggregator",
@@ -850,16 +859,15 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
@@ -961,7 +969,7 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
apiKey: "",
models: [
piModel("volcengine/doubao-seed-2.1-pro", {
id: "doubao-seed-2-1-pro-260628",
id: "doubao-seed-2-1-pro-260915",
}),
],
},
@@ -982,8 +990,8 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
piModel("openai/gpt-5.6-sol", {
id: "gpt-5.6-sol",
piModel("openai/gpt-6.1-sol", {
id: "gpt-6.1-sol",
}),
piModel("openai/gpt-6-astra", { id: "gpt-6-astra" }),
],
@@ -1004,9 +1012,11 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
piModel("openai/gpt-6.1-sol", { id: "gpt-6.1-sol" }),
piModel("openai/gpt-6-astra", {
id: "gpt-6-astra",
}),
piModel("openai/gpt-6-luna", { id: "gpt-6-luna" }),
],
},
category: "aggregator",
@@ -1025,11 +1035,11 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
],
},
@@ -1050,14 +1060,14 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
piModel("anthropic/claude-haiku-4.5-20251001", {
id: "claude-haiku-4-5-20251001",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
],
},
@@ -1077,12 +1087,13 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
category: "third_party",
@@ -1102,8 +1113,8 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-responses",
apiKey: "",
models: [
piModel("openai/gpt-5.6-sol", {
id: "gpt-5.6-sol",
piModel("openai/gpt-6.1-sol", {
id: "gpt-6.1-sol",
}),
],
},
@@ -1124,11 +1135,11 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
],
},
@@ -1149,11 +1160,11 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
@@ -1175,11 +1186,11 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
],
},
@@ -1201,12 +1212,12 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-responses",
apiKey: "",
models: [
piModel("openai/gpt-5.6-sol", {
id: "gpt-5.6-sol",
piModel("openai/gpt-6.1-sol", {
id: "gpt-6.1-sol",
}),
piModel("openai/gpt-6-sol", { id: "gpt-6-sol" }),
piModel("openai/gpt-6-luna", { id: "gpt-6-luna" }),
piModel("openai/gpt-6-astra", { id: "gpt-6-astra" }),
piModel("openai/gpt-6-luna", { id: "gpt-6-luna" }),
],
},
category: "third_party",
@@ -1226,8 +1237,8 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-responses",
apiKey: "",
models: [
piModel("openai/gpt-5.6-sol", {
id: "gpt-5.6-sol",
piModel("openai/gpt-6.1-sol", {
id: "gpt-6.1-sol",
}),
piModel("openai/gpt-6-sol", { id: "gpt-6-sol" }),
piModel("openai/gpt-6-astra", { id: "gpt-6-astra" }),
@@ -1251,9 +1262,9 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-responses",
apiKey: "",
models: [
piModel("openai/gpt-5.6-sol", { id: "gpt-5.6-sol" }),
piModel("openai/gpt-6-sol", { id: "gpt-6-sol" }),
piModel("openai/gpt-6.1-sol", { id: "gpt-6.1-sol" }),
piModel("openai/gpt-6-astra", { id: "gpt-6-astra" }),
piModel("openai/gpt-6-luna", { id: "gpt-6-luna" }),
],
},
category: "aggregator",
@@ -1274,9 +1285,9 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-responses",
apiKey: "",
models: [
piModel("openai/gpt-5.6-sol", { id: "gpt-5.6-sol" }),
piModel("openai/gpt-6-sol", { id: "gpt-6-sol" }),
piModel("openai/gpt-6.1-sol", { id: "gpt-6.1-sol" }),
piModel("openai/gpt-6-astra", { id: "gpt-6-astra" }),
piModel("openai/gpt-6-luna", { id: "gpt-6-luna" }),
],
},
category: "aggregator",
@@ -1298,8 +1309,7 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
piModel("openai/gpt-5.6-sol", { id: "gpt-5.6-sol" }),
piModel("openai/gpt-6-sol", { id: "gpt-6-sol" }),
piModel("openai/gpt-6.1-sol", { id: "gpt-6.1-sol" }),
piModel("openai/gpt-6-astra", { id: "gpt-6-astra" }),
],
},
@@ -1319,8 +1329,8 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
piModel("openai/gpt-5.6-sol", {
id: "gpt-5.6-sol",
piModel("openai/gpt-6.1-sol", {
id: "gpt-6.1-sol",
}),
piModel("openai/gpt-6-astra", { id: "gpt-6-astra" }),
],
@@ -1339,10 +1349,9 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
piModel("zai/glm-5.1", {
id: "zai-org/glm-5.1",
name: "GLM 5.1",
}),
piModel("zai/glm-5.3", { id: "zai-org/glm-5.3" }),
piModel("zai/glm-5.3-flash", { id: "zai-org/glm-5.3-flash" }),
piModel("moonshotai/kimi-k3", { id: "moonshotai/kimi-k3" }),
],
},
category: "aggregator",
@@ -1842,18 +1851,6 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
{
...piModel("xiaomi/mimo-v2.5-pro", {
id: "mimo-v2.5-pro",
}),
compat: { ...XIAOMI_THINKING_COMPAT },
},
{
...piModel("xiaomi/mimo-v2.5", {
id: "mimo-v2.5",
}),
compat: { ...XIAOMI_THINKING_COMPAT },
},
{
...piModel("xiaomi/mimo-v2.6-pro", { id: "mimo-v2.6-pro" }),
compat: XIAOMI_THINKING_COMPAT,
@@ -1887,12 +1884,6 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
piModel("xiaomi/mimo-v2.5-pro", {
id: "mimo-v2.5-pro",
}),
piModel("xiaomi/mimo-v2.5", {
id: "mimo-v2.5",
}),
{
...piModel("xiaomi/mimo-v2.6-pro", { id: "mimo-v2.6-pro" }),
compat: XIAOMI_THINKING_COMPAT,
@@ -1919,16 +1910,19 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
apiKey: "",
models: [
{
...piModel("zai/glm-5.2", {
id: "glm-5.2",
name: "GLM 5.2",
...piModel("zai/glm-5.3", {
id: "glm-5.3",
thinkingProfile: "openCodeGoGlm52",
}),
compat: { ...OPENAI_COMPLETIONS_COMPAT },
},
{
...piModel("moonshotai/kimi-k2.7-code", {
id: "kimi-k2.7-code",
...piModel("zai/glm-5.3-flash", { id: "glm-5.3-flash" }),
compat: { ...OPENAI_COMPLETIONS_COMPAT },
},
{
...piModel("moonshotai/kimi-k3.1-pro", {
id: "kimi-k3.1-pro",
}),
compat: { ...OPENAI_COMPLETIONS_COMPAT },
},
@@ -1940,15 +1934,25 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
compat: { ...DEEPSEEK_THINKING_COMPAT },
},
{
...piModel("deepseek/deepseek-v4-flash", {
id: "deepseek-v4-flash",
...piModel("deepseek/deepseek-flash", {
id: "deepseek-v4.1-flash",
thinkingProfile: "deepseekV4",
}),
compat: { ...DEEPSEEK_THINKING_COMPAT },
},
{
...piModel("xiaomi/mimo-v2.5-pro", {
id: "mimo-v2.5-pro",
...piModel("xiaomi/mimo-v2.6-pro", {
id: "mimo-v2.6-pro",
}),
compat: { ...OPENAI_COMPLETIONS_COMPAT },
},
{
...piModel("qwen/qwen3.8-max", { id: "qwen3.8-max" }),
compat: { ...OPENAI_COMPLETIONS_COMPAT },
},
{
...piModel("minimax/minimax-m3.1-flash", {
id: "minimax-m3.1-flash",
}),
compat: { ...OPENAI_COMPLETIONS_COMPAT },
},
@@ -1970,13 +1974,13 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-haiku-5.5", { id: "claude-haiku-5-5" }),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
@@ -1995,11 +1999,11 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-sonnet-5", {
id: "anthropic/claude-sonnet-5",
piModel("anthropic/claude-opus-5.5", {
id: "anthropic/claude-opus-5.5",
}),
piModel("anthropic/claude-opus-5", {
id: "anthropic/claude-opus-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "anthropic/claude-sonnet-5.5",
}),
piModel("anthropic/claude-fable-5.1", {
id: "anthropic/claude-fable-5.1",
@@ -2020,15 +2024,15 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-sonnet-5", {
id: "anthropic/claude-sonnet-5",
}),
piModel("anthropic/claude-opus-5", {
id: "anthropic/claude-opus-5",
}),
piModel("anthropic/claude-opus-5.5", {
id: "anthropic/claude-opus-5.5",
}),
piModel("anthropic/claude-sonnet-5.5", {
id: "anthropic/claude-sonnet-5.5",
}),
piModel("anthropic/claude-haiku-5.5", {
id: "anthropic/claude-haiku-5.5",
}),
piModel("anthropic/claude-fable-5.1", {
id: "anthropic/claude-fable-5.1",
}),
@@ -2049,20 +2053,23 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
piModel("anthropic/claude-sonnet-5", {
id: "anthropic/claude-sonnet-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "anthropic/claude-sonnet-5-5",
}),
piModel("openai/gpt-5.3-codex", {
id: "openai/gpt-5.3-codex",
piModel("anthropic/claude-fable-5.1", {
id: "anthropic/claude-fable-5-1",
}),
piModel("openai/gpt-5.2", {
id: "openai/gpt-5.2",
piModel("openai/gpt-6.1-sol", {
id: "openai/gpt-6.1-sol",
}),
piModel("google/gemini-3.6-flash", {
id: "google/gemini-3.6-flash",
piModel("openai/gpt-6-astra", {
id: "openai/gpt-6-astra",
}),
piModel("qwen/qwen3-coder-480b", {
id: "qwen/qwen3-coder-480b",
piModel("google/gemini-3.8-flash", {
id: "google/gemini-3.8-flash",
}),
piModel("qwen/qwen3.8-max", {
id: "qwen/qwen3.8-max",
}),
],
},
@@ -2100,10 +2107,17 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
maxTokens: 262_144,
}),
piModel("deepseek/deepseek-flash", {
id: "deepseek-ai/DeepSeek-V4.1-Flash",
id: "deepseek-ai/DeepSeek-V4.1-Flash-1017",
name: "DeepSeek V4.1 Flash 1017",
contextWindow: 1_048_576,
maxTokens: 262_144,
}),
piModel("zai/glm-5.3", {
id: "zai-org/GLM-5.3-Fast",
name: "GLM-5.3 Fast",
input: ["text", "image"],
maxTokens: 262_144,
}),
],
},
category: "aggregator",
@@ -2120,12 +2134,17 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
piModel("zai/glm-5.1", {
id: "zai-org/glm-5.1",
}),
piModel("zai/glm-5.3", { id: "zai-org/glm-5.3" }),
piModel("zai/glm-5.3-flash", { id: "zai-org/glm-5.3-flash" }),
piModel("moonshotai/kimi-k3", { id: "moonshotai/kimi-k3" }),
piModel("moonshotai/kimi-k3.1-pro", { id: "moonshotai/kimi-k3.1-pro" }),
piModel("deepseek/deepseek-flash", {
id: "deepseek/deepseek-v4.1-flash",
}),
piModel("minimax/minimax-m3.1-flash", {
id: "minimax/minimax-m3.1-flash",
}),
piModel("qwen/qwen3.8-max", { id: "qwen/qwen3.8-max" }),
piModel("xiaomi/mimo-v2.6-pro", { id: "xiaomimimo/mimo-v2.6-pro" }),
],
},
category: "aggregator",
@@ -2143,8 +2162,8 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-completions",
apiKey: "",
models: [
piModel("moonshotai/kimi-k3", {
id: "moonshotai/kimi-k3",
piModel("moonshotai/kimi-k2.6", {
id: "moonshotai/kimi-k2.6",
}),
piModel("zai/glm-5.3", { id: "z-ai/glm-5.3" }),
piModel("zai/glm-5.3-flash", { id: "z-ai/glm-5.3-flash" }),
@@ -2311,8 +2330,8 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
models: [
{
...piModel("deepseek/deepseek-v4-flash", {
id: "deepseek-ai/DeepSeek-V4-Flash-0731",
name: "DeepSeek V4 Flash 0731",
id: "deepseek-ai/DeepSeek-V4.1-Flash-1017",
name: "DeepSeek V4.1 Flash 1017",
contextWindow: 1_048_576,
thinkingProfile: "deepseekV4",
}),
@@ -2333,11 +2352,7 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
thinkingProfile: "kimi3",
}),
piModel("zai/glm-5.3", { id: "zai-org/GLM-5.3" }),
piModel("zai/glm-5.2", {
id: "zai-org/GLM-5.2",
contextWindow: 1_048_576,
maxTokens: 163_840,
}),
piModel("zai/glm-5.3-flash", { id: "zai-org/GLM-5.3-Flash" }),
],
},
category: "aggregator",
@@ -2366,10 +2381,17 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
piModel("anthropic/claude-sonnet-5.5", {
id: "anthropic/claude-sonnet-5.5",
}),
piModel("anthropic/claude-fable-5.1", {
id: "anthropic/claude-fable-5.1",
}),
piModel("openai/gpt-6-astra", {
id: "openai/gpt-6-astra",
contextWindow: 1_050_000,
}),
piModel("openai/gpt-6-luna", {
id: "openai/gpt-6-luna",
contextWindow: 1_050_000,
}),
piModel("google/gemini-3.8-flash", {
id: "google/gemini-3.8-flash",
contextWindow: 1_000_000,
@@ -2408,6 +2430,13 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
id: "moonshotai/Kimi-K3",
contextWindow: 1_024_000,
}),
piModel("deepseek/deepseek-flash", {
id: "deepseek-ai/DeepSeek-V4.1-Flash",
}),
piModel("minimax/minimax-m3", { id: "MiniMaxAI/MiniMax-M3" }),
piModel("minimax/minimax-m3.1-flash", {
id: "MiniMaxAI/MiniMax-M3.1-Flash",
}),
piModel("moonshotai/kimi-k2.7-code", {
id: "moonshotai/Kimi-K2.7-Code",
input: ["text"],
@@ -2538,6 +2567,12 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
piModel("zai/glm-5.3", { id: "zai-org/GLM-5.3:baseten" }),
piModel("zai/glm-5.3-flash", { id: "zai-org/GLM-5.3-Flash:baseten" }),
piModel("moonshotai/kimi-k3", { id: "moonshotai/Kimi-K3:baseten" }),
piModel("deepseek/deepseek-flash", {
id: "deepseek-ai/DeepSeek-V4.1-Flash-1017:baseten",
name: "DeepSeek V4.1 Flash 1017",
contextWindow: 1_048_576,
maxTokens: 262_144,
}),
piModel("deepseek/deepseek-v4-pro", {
id: "deepseek-ai/DeepSeek-V4-Pro-0813:baseten",
contextWindow: 1_048_576,
@@ -2586,16 +2621,16 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
name: "claude-opus-5",
}),
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
name: "claude-sonnet-5",
}),
piModel("anthropic/claude-haiku-4.5-20251001", {
id: "claude-haiku-4-5-20251001",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
name: "claude-haiku-4-5-20251001",
}),
],
@@ -2614,8 +2649,8 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-responses",
apiKey: "",
models: [
piModel("openai/gpt-5.6-sol", {
id: "gpt-5.6-sol",
piModel("openai/gpt-6.1-sol", {
id: "gpt-6.1-sol",
name: "gpt-5.6-sol",
}),
piModel("openai/gpt-6-sol", { id: "gpt-6-sol" }),
@@ -2637,16 +2672,15 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "openai-responses",
apiKey: "",
models: [
piModel("openai/gpt-5.2-codex", {
id: "gpt-5.2-codex",
piModel("openai/gpt-6.1-sol", {
id: "gpt-6.1-sol",
name: "gpt-5.2-codex",
}),
piModel("openai/gpt-5.3-codex", {
id: "gpt-5.3-codex",
piModel("openai/gpt-6-sol", { id: "gpt-6-sol" }),
piModel("openai/gpt-6-astra", {
id: "gpt-6-astra",
name: "gpt-5.3-codex",
}),
piModel("openai/gpt-6-sol", { id: "gpt-6-sol" }),
piModel("openai/gpt-6-astra", { id: "gpt-6-astra" }),
],
},
category: "third_party",
@@ -2807,7 +2841,6 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
thinkingProfile: "offUnsupported",
}),
piModel("moonshotai/kimi-k2.6", { id: "kimi-k2.6" }),
piModel("minimax/minimax-m2.7", { id: "minimax-m2.7" }),
piModel("minimax/minimax-m3", { id: "minimax-m3" }),
{
...piModel("deepseek/deepseek-v4-flash", {
@@ -3193,15 +3226,16 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
api: "anthropic-messages",
apiKey: "",
models: [
piModel("anthropic/claude-opus-5", {
id: "claude-opus-5",
piModel("anthropic/claude-opus-5.5", {
id: "claude-opus-5-5",
}),
piModel("anthropic/claude-sonnet-5", {
id: "claude-sonnet-5",
piModel("anthropic/claude-sonnet-5.5", {
id: "claude-sonnet-5-5",
}),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
category: "aggregator",
@@ -3219,13 +3253,17 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
apiKey: "",
// 聚合网关,上游思考档位语义未逐一核对,交给 Pi 原生默认行为({})
models: [
piModel("deepseek/deepseek-v4-flash", {
id: "deepseek-v4-flash-0731",
piModel("deepseek/deepseek-flash", {
id: "deepseek-v4.1-flash",
}),
piModel("deepseek/deepseek-v4-pro", { id: "DeepSeek-V4-Pro" }),
piModel("deepseek/deepseek-v4-pro", { id: "DeepSeek-V4-Pro-0813" }),
piModel("zai/glm-5.3", { id: "GLM-5.3" }),
piModel("moonshotai/kimi-k2.7-code", { id: "Kimi-K2.7-Code" }),
piModel("qwen/qwen3-coder-plus", { id: "qwen3-coder-plus" }),
piModel("zai/glm-5.3-flash", { id: "GLM-5.3-Flash" }),
piModel("moonshotai/kimi-k3.1-pro", { id: "kimi-k3.1-pro" }),
piModel("qwen/qwen3.8-max", { id: "qwen3.8-max" }),
piModel("qwen/qwen3.8-flash", { id: "qwen3.8-flash" }),
piModel("minimax/minimax-m3", { id: "MiniMax-M3" }),
piModel("stepfun/step-3.7-flash", { id: "Step-3.7-Flash" }),
],
},
category: "aggregator",
@@ -3244,9 +3282,10 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
models: [
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-sonnet-5.5", { id: "claude-sonnet-5-5" }),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5-20251001",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
category: "aggregator",
@@ -3265,9 +3304,10 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
models: [
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-sonnet-5.5", { id: "claude-sonnet-5-5" }),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5-20251001",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
category: "aggregator",
@@ -3286,9 +3326,10 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
models: [
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-sonnet-5.5", { id: "claude-sonnet-5-5" }),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5-20251001",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
category: "aggregator",
@@ -3307,9 +3348,10 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
models: [
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-sonnet-5.5", { id: "claude-sonnet-5-5" }),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5-20251001",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
category: "aggregator",
@@ -3328,10 +3370,11 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
apiKey: "",
models: [
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-sonnet-5", { id: "claude-sonnet-5" }),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5-20251001",
piModel("anthropic/claude-sonnet-5.5", { id: "claude-sonnet-5-5" }),
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
category: "aggregator",
@@ -3350,9 +3393,10 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
models: [
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-sonnet-5.5", { id: "claude-sonnet-5-5" }),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
category: "aggregator",
@@ -3374,8 +3418,8 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
models: [
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-sonnet-5.5", { id: "claude-sonnet-5-5" }),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5-20251001",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
],
},
@@ -3395,9 +3439,10 @@ const piProviderPresetDefinitions: PiProviderPreset[] = [
models: [
piModel("anthropic/claude-opus-5.5", { id: "claude-opus-5-5" }),
piModel("anthropic/claude-sonnet-5.5", { id: "claude-sonnet-5-5" }),
piModel("anthropic/claude-haiku-4.5", {
id: "claude-haiku-4-5-20251001",
piModel("anthropic/claude-haiku-5.5", {
id: "claude-haiku-5-5",
}),
piModel("anthropic/claude-fable-5.1", { id: "claude-fable-5-1" }),
],
},
category: "aggregator",
+5
View File
@@ -317,6 +317,11 @@ export const piThinkingBindings: readonly PiThinkingBinding[] = [
api: "openai-responses",
profileId: "openaiResponsesGpt6Astra",
},
{
catalogKey: "openai/gpt-6.1-sol",
api: "openai-responses",
profileId: "openaiResponsesGpt56",
},
{
catalogKey: "openai/gpt-6-sol",
api: "openai-responses",
+67 -38
View File
@@ -19,8 +19,8 @@ const ppioPresetCollections = [
["Pi", piProviderPresets],
] as const;
const ppioModelId = "deepseek/deepseek-v4-flash-0731";
const ppioModelName = "Deepseek V4 Flash 0731";
const ppioModelId = "deepseek/deepseek-v4.1-flash";
const ppioModelName = "DeepSeek V4.1 Flash";
const ppioAnthropicEndpoint = "https://api.ppio.com/anthropic";
const ppioOpenAiEndpoint = "https://api.ppio.com/openai/v1";
const ppioChatCompletionsEndpoint = `${ppioOpenAiEndpoint}/chat/completions`;
@@ -132,7 +132,12 @@ describe("PPIO provider presets", () => {
apiKey: { label: "API Key", placeholder: "", editorValue: "" },
},
});
expect(Object.keys(opencode.settingsConfig.models)).toEqual([ppioModelId]);
expect(Object.keys(opencode.settingsConfig.models)).toEqual([
ppioModelId,
"moonshotai/kimi-k3.1-pro",
"zai-org/glm-5.3",
"deepseek/deepseek-v4-pro",
]);
expect(`${opencode.settingsConfig.options.baseURL}/chat/completions`).toBe(
ppioChatCompletionsEndpoint,
);
@@ -146,17 +151,6 @@ describe("PPIO provider presets", () => {
baseUrl: ppioOpenAiEndpoint,
apiKey: "",
api: "openai-completions",
models: [
{
id: ppioModelId,
name: ppioModelName,
reasoning: true,
input: ["text"],
contextWindow: 1048576,
maxTokens: 393216,
cost: { input: 0.14, output: 0.29, cacheRead: 0.03 },
},
],
},
templateValues: {
apiKey: { label: "API Key", placeholder: "sk-...", editorValue: "" },
@@ -166,6 +160,27 @@ describe("PPIO provider presets", () => {
modelCatalog: { [`ppio/${ppioModelId}`]: { alias: ppioModelName } },
},
});
expect(
(openclaw.settingsConfig.models ?? []).map((model) => model.id),
).toEqual([
ppioModelId,
"moonshotai/kimi-k3.1-pro",
"zai-org/glm-5.3",
"deepseek/deepseek-v4-pro",
"xiaomimimo/mimo-v2.6-pro",
"qwen/qwen3.8-max",
"minimax/minimax-m3.1-flash",
"stepfun/step-5-preview",
]);
expect(openclaw.settingsConfig.models?.[0]).toMatchObject({
id: ppioModelId,
name: ppioModelName,
reasoning: true,
input: ["text"],
contextWindow: 1048576,
maxTokens: 393216,
cost: { input: 0.14, output: 0.29, cacheRead: 0.03 },
});
expect(`${openclaw.settingsConfig.baseUrl}/chat/completions`).toBe(
ppioChatCompletionsEndpoint,
);
@@ -186,6 +201,17 @@ describe("PPIO provider presets", () => {
name: ppioModelName,
context_length: 1048576,
},
{
id: "moonshotai/kimi-k3.1-pro",
name: "Kimi K3.1 Pro",
context_length: 1048576,
},
{ id: "zai-org/glm-5.3", name: "GLM-5.3", context_length: 1000000 },
{
id: "deepseek/deepseek-v4-pro",
name: "DeepSeek V4 Pro",
context_length: 1000000,
},
],
},
suggestedDefaults: {
@@ -207,30 +233,33 @@ describe("PPIO provider presets", () => {
baseUrl: ppioOpenAiEndpoint,
api: "openai-completions",
apiKey: "",
models: [
{
id: ppioModelId,
name: ppioModelName,
reasoning: true,
input: ["text"],
contextWindow: 1048576,
maxTokens: 393216,
thinkingLevelMap: {
minimal: null,
low: null,
medium: null,
high: "high",
max: "max",
},
compat: {
supportsStore: false,
supportsDeveloperRole: false,
maxTokensField: "max_tokens",
requiresReasoningContentOnAssistantMessages: true,
thinkingFormat: "deepseek",
},
},
],
},
});
expect(pi.settingsConfig.models.map((model) => model.id)).toEqual([
ppioModelId,
"moonshotai/kimi-k3.1-pro",
"zai-org/glm-5.3",
]);
expect(pi.settingsConfig.models[0]).toMatchObject({
id: ppioModelId,
name: ppioModelName,
reasoning: true,
input: ["text"],
contextWindow: 1048576,
maxTokens: 393216,
thinkingLevelMap: {
minimal: null,
low: null,
medium: null,
high: "high",
max: "max",
},
compat: {
supportsStore: false,
supportsDeveloperRole: false,
maxTokensField: "max_tokens",
requiresReasoningContentOnAssistantMessages: true,
thinkingFormat: "deepseek",
},
});
expect(`${pi.settingsConfig.baseUrl}/chat/completions`).toBe(
@@ -137,10 +137,10 @@ exports[`ProviderForm 预设新增行金标 > claude > Nvidia 1`] = `
"env": {
"ANTHROPIC_AUTH_TOKEN": "sk-golden-test",
"ANTHROPIC_BASE_URL": "https://integrate.api.nvidia.com",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "moonshotai/kimi-k3[1M]",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "moonshotai/kimi-k3[1M]",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "moonshotai/kimi-k3[1M]",
"ANTHROPIC_MODEL": "moonshotai/kimi-k3[1M]",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "moonshotai/kimi-k2.6",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "moonshotai/kimi-k2.6",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "moonshotai/kimi-k2.6",
"ANTHROPIC_MODEL": "moonshotai/kimi-k2.6",
"CLAUDE_CODE_AUTO_MODE_SERVER": "0",
},
},
@@ -198,7 +198,7 @@ exports[`ProviderForm 预设新增行金标 > codex > E-FlowCode 1`] = `
"OPENAI_API_KEY": "sk-golden-test",
},
"config": "model_provider = "custom"
model = "gpt-5.6-sol"
model = "gpt-6.1-sol"
model_reasoning_effort = "high"
disable_response_storage = true
@@ -225,14 +225,6 @@ exports[`ProviderForm 预设新增行金标 > codex > Nvidia 1`] = `
"iconColor": "#000000",
"meta": {
"apiFormat": "openai_chat",
"codexChatReasoning": {
"effortParam": "reasoning_effort",
"effortValueMode": "passthrough",
"outputFormat": "reasoning_content",
"supportsEffort": true,
"supportsThinking": true,
"thinkingParam": "none",
},
"endpointAutoSelect": true,
},
"name": "Nvidia",
@@ -244,7 +236,7 @@ exports[`ProviderForm 预设新增行金标 > codex > Nvidia 1`] = `
"OPENAI_API_KEY": "sk-golden-test",
},
"config": "model_provider = "custom"
model = "moonshotai/kimi-k3"
model = "moonshotai/kimi-k2.6"
model_reasoning_effort = "high"
disable_response_storage = true
@@ -256,19 +248,13 @@ requires_openai_auth = true",
"modelCatalog": {
"models": [
{
"contextWindow": 1048576,
"defaultReasoningLevel": "high",
"displayName": "Kimi K3",
"contextWindow": 262144,
"displayName": "Kimi K2.6",
"inputModalities": [
"text",
"image",
],
"model": "moonshotai/kimi-k3",
"reasoningLevels": [
"low",
"high",
"max",
],
"model": "moonshotai/kimi-k2.6",
},
],
},
+4 -4
View File
@@ -64,10 +64,10 @@ describe("OpenCode Go Provider Preset", () => {
expect(env).toMatchObject({
ANTHROPIC_BASE_URL: "https://opencode.ai/zen/go",
ANTHROPIC_API_KEY: "",
ANTHROPIC_MODEL: "deepseek-v4-flash[1M]",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "deepseek-v4-flash[1M]",
ANTHROPIC_DEFAULT_SONNET_MODEL: "deepseek-v4-flash[1M]",
ANTHROPIC_DEFAULT_OPUS_MODEL: "deepseek-v4-flash[1M]",
ANTHROPIC_MODEL: "deepseek-v4.1-flash[1M]",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "deepseek-v4.1-flash[1M]",
ANTHROPIC_DEFAULT_SONNET_MODEL: "deepseek-v4.1-flash[1M]",
ANTHROPIC_DEFAULT_OPUS_MODEL: "deepseek-v4.1-flash[1M]",
});
// /messages 只认 x-api-key,Bearer 被网关静默忽略——勿换回 AUTH_TOKEN
expect(env).not.toHaveProperty("ANTHROPIC_AUTH_TOKEN");
+10 -14
View File
@@ -87,7 +87,7 @@ const expectedChatPresets = new Map<
"AtlasCloud",
{
baseUrl: "https://api.atlascloud.ai/v1",
contextWindows: { "zai-org/glm-5.2": 1048576 },
contextWindows: { "zai-org/glm-5.3": 1048576 },
},
],
[
@@ -101,7 +101,7 @@ const expectedChatPresets = new Map<
"Nvidia",
{
baseUrl: "https://integrate.api.nvidia.com/v1",
contextWindows: { "moonshotai/kimi-k3": 1048576 },
contextWindows: { "moonshotai/kimi-k2.6": 262144 },
},
],
[
@@ -111,10 +111,10 @@ const expectedChatPresets = new Map<
contextWindows: {
"glm-5.3": 1000000,
"glm-5.3-flash": 1000000,
"kimi-k3": 1048576,
"kimi-k3.1-pro": 1048576,
"deepseek-v4-pro": 1048576,
"deepseek-v4-flash": 1048576,
"mimo-v2.5-pro": 1048576,
"deepseek-v4.1-flash": 1048576,
"mimo-v2.6-pro": 1048576,
},
},
],
@@ -222,7 +222,7 @@ describe("Codex Chat provider presets", () => {
["BytePlus", { contextWindows: { "ark-code-latest": 256000 } }],
[
"Volcengine Doubao",
{ contextWindows: { "doubao-seed-2-1-pro-260628": 262144 } },
{ contextWindows: { "doubao-seed-2-1-pro-260915": 262144 } },
],
[
"千问AI平台",
@@ -280,8 +280,6 @@ describe("Codex Chat provider presets", () => {
"Xiaomi MiMo",
{
contextWindows: {
"mimo-v2.5-pro": 1048576,
"mimo-v2.5": 1048576,
"mimo-v2.6-pro": 1048576,
"mimo-v2.6-flash": 1048576,
"mimo-v2.6-pro-ultraspeed": 1048576,
@@ -292,8 +290,6 @@ describe("Codex Chat provider presets", () => {
"Xiaomi MiMo Token Plan (China)",
{
contextWindows: {
"mimo-v2.5-pro": 1048576,
"mimo-v2.5": 1048576,
"mimo-v2.6-pro": 1048576,
"mimo-v2.6-flash": 1048576,
},
@@ -381,7 +377,7 @@ describe("Codex Chat provider presets", () => {
it("ships per-model reasoningLevels for OpenCode Go mirroring models.dev", () => {
// Zen 网关的合法 effort 档位是逐模型的(models.dev reasoning_options,
// 2026-09-10):统一并集映射会把 high 发给仅声明 max 的 kimi-k3,
// 2026-09-10):统一并集映射会把 high 发给仅声明 max 的 kimi-k3.1-pro(原 kimi-k3),
// 此测试锁住逐模型表,防回退。
const preset = codexProviderPresets.find(
(item) => item.name === "OpenCode Go",
@@ -399,10 +395,10 @@ describe("Codex Chat provider presets", () => {
).toEqual({
"glm-5.3": ["low", "high", "max"],
"glm-5.3-flash": ["low", "high", "max"],
"kimi-k3": ["max"],
"kimi-k3.1-pro": ["max"],
"deepseek-v4-pro": ["high", "max"],
"deepseek-v4-flash": ["low", "high", "max"],
"mimo-v2.5-pro": null,
"deepseek-v4.1-flash": ["low", "high", "max"],
"mimo-v2.6-pro": null,
});
});
});
+20 -17
View File
@@ -44,7 +44,7 @@ describe("Codex preset pre-filled reasoning levels", () => {
// 方舟深度思考文档:本模型无限制的通用四档(minimal=关思考直接回答)
[
"Volcengine Doubao",
"doubao-seed-2-1-pro-260628",
"doubao-seed-2-1-pro-260915",
["minimal", "low", "medium", "high"],
],
// 混元官方枚举 low/high;hy3 开源 chat template 对其他值直接 raise
@@ -101,17 +101,22 @@ describe("Codex preset pre-filled reasoning levels", () => {
"MiniMax-M3.1-Flash",
["low", "medium", "high", "xhigh", "max"],
],
["Xiaomi MiMo", "mimo-v2.5-pro", ["none", "low", "medium", "high"], "low"],
["Xiaomi MiMo", "mimo-v2.5", ["none", "low", "medium", "high"], "low"],
["Xiaomi MiMo", "mimo-v2.6-pro", ["none", "low", "medium", "high"], "low"],
[
"Xiaomi MiMo Token Plan (China)",
"mimo-v2.5-pro",
"Xiaomi MiMo",
"mimo-v2.6-flash",
["none", "low", "medium", "high"],
"low",
],
[
"Xiaomi MiMo Token Plan (China)",
"mimo-v2.5",
"mimo-v2.6-pro",
["none", "low", "medium", "high"],
"low",
],
[
"Xiaomi MiMo Token Plan (China)",
"mimo-v2.6-flash",
["none", "low", "medium", "high"],
"low",
],
@@ -130,10 +135,8 @@ describe("Codex preset pre-filled reasoning levels", () => {
// SiliconFlow .cn:平台仅 high/max,显式 high 与预设配置一致。
["SiliconFlow", "deepseek-ai/DeepSeek-V4-Flash", ["high", "max"], "high"],
// 聚合平台尚未确认新 GLM 的开关/effort;单档不下发推理控制参数。
["AtlasCloud", "zai-org/glm-5.2", ["high"]],
["AtlasCloud", "zai-org/glm-5.3", ["high"]],
["Novita AI", "zai-org/glm-5.3", ["high"]],
// NIM K3 的官方枚举;显式 high 与预设配置一致。
["Nvidia", "moonshotai/kimi-k3", ["low", "high", "max"], "high"],
// Groq gpt-oss(Chat 路由):平台声明的 reasoning_effort 枚举
// low/medium/high(console.groq.com/docs/reasoning,2026-10-14),含 high,
// 无需显式默认
@@ -189,13 +192,13 @@ describe("Codex preset pre-filled reasoning levels", () => {
["Kimi For Coding", "k3-256k", ["low", "high", "max"], "high"],
// OpenCode Go(Zen 网关):opencode 客户端 variants() 严格按各模型在
// models.dev 的 reasoning_options 声明发 reasoning_effort(provider/
// transform.ts)——GLM5.3 两款有 low/high/max,Kimi K3 仅 max。
// transform.ts)——GLM5.3 两款有 low/high/max,Kimi K3.1 Pro 仅 max。
// 代理转换层按同一张表逐模型钳制;GLM 默认 high 与预设配置一致。
["OpenCode Go", "glm-5.3", ["low", "high", "max"], "high"],
["OpenCode Go", "glm-5.3-flash", ["low", "high", "max"], "high"],
["OpenCode Go", "kimi-k3", ["max"]],
["OpenCode Go", "kimi-k3.1-pro", ["max"]],
["OpenCode Go", "deepseek-v4-pro", ["high", "max"]],
["OpenCode Go", "deepseek-v4-flash", ["low", "high", "max"]],
["OpenCode Go", "deepseek-v4.1-flash", ["low", "high", "max"]],
// 千问官方 Codex 页只发布一份 model-catalog.local.json,且该元数据段落
// 位于套餐分页之前(help.aliyun.com/zh/model-studio/codex,2026-09-08
// 核对):qwen3.8-max 档位 low/medium/xhigh、默认 xhigh(≠ 模板回落的
@@ -242,7 +245,7 @@ describe("Codex preset pre-filled reasoning levels", () => {
["Baseten", "zai-org/GLM-5.3-Flash", ["low", "high", "max"], "high"],
[
"Baseten",
"deepseek-ai/DeepSeek-V4.1-Flash",
"deepseek-ai/DeepSeek-V4.1-Flash-1017",
["none", "high", "max"],
"high",
],
@@ -264,7 +267,7 @@ describe("Codex preset pre-filled reasoning levels", () => {
// 同 DeepSeek / Kimi / Zhipu GLM 直连预设
[
"DeepInfra",
"deepseek-ai/DeepSeek-V4-Flash-0731",
"deepseek-ai/DeepSeek-V4.1-Flash-1017",
["low", "high", "max"],
],
["DeepInfra", "deepseek-ai/DeepSeek-V4-Pro-0813", ["low", "high", "max"]],
@@ -352,7 +355,7 @@ describe("Codex preset pre-filled reasoning levels", () => {
// 无表不发 reasoning_effort)。ModelScope 是否透传思考字段未证实,不造
// 两态假开关。
const UNFILLED: Array<[string, string]> = [
["OpenCode Go", "mimo-v2.5-pro"],
["OpenCode Go", "mimo-v2.6-pro"],
["ModelScope", "ZhipuAI/GLM-5.2"],
// StepFun 无后缀 3.5-flash:官方未暴露 effort,单一常开思考态
["StepFun", "step-3.5-flash"],
@@ -362,8 +365,8 @@ describe("Codex preset pre-filled reasoning levels", () => {
["Baidu Qianfan Token Plan", "deepseek-v4-flash-0731"],
["Baidu Qianfan Token Plan", "glm-5.2"],
["Baidu Qianfan Token Plan", "kimi-k2.6"],
// DeepInfra GLM-5.2:平台未声明、各处口径不一,未实测前不造档位
["DeepInfra", "zai-org/GLM-5.2"],
// DeepInfra GLM-5.2 曾在此列(平台未声明、各处口径不一);2026-10-24
// 已从 DeepInfra 目录移除,不再断言
// Mistral AI:开推理后流式 content 为分块数组、转换层暂不解析,且
// 现有 effortValueMode 发不出 "none",第一版不下发推理参数、不填档位
["Mistral AI", "mistral-medium-3-5"],
@@ -37,6 +37,8 @@ describe("Command Code provider presets", () => {
"deepseek/deepseek-v4.1-flash",
"z-ai/glm-5.3-flash",
"Qwen/Qwen3.8-Flash",
"moonshotai/Kimi-K3.1-Pro",
"zai-org/GLM-5.3",
]);
expect(
preset?.modelCatalog?.some((model) => model.model.includes("claude")),
+1 -1
View File
@@ -6,7 +6,7 @@ import { openclawProviderPresets } from "@/config/openclawProviderPresets";
// contextWindow,二者必须一致。曾出现 OpenClaw 写成 128000、Codex 写成 262144 的
// 漂移,导致 OpenClaw 用户拿到过小的上下文窗口、长上下文提前压缩/截断。
describe("Volcengine Doubao preset consistency across apps", () => {
const DOUBAO_MODEL_ID = "doubao-seed-2-1-pro-260628";
const DOUBAO_MODEL_ID = "doubao-seed-2-1-pro-260915";
const EXPECTED_CONTEXT_WINDOW = 262144;
it("keeps the doubao context window in sync between OpenClaw and Codex", () => {
+2 -2
View File
@@ -23,7 +23,7 @@ describe("Xiaomi MiMo Token Plan presets", () => {
"xiaomi-mimo-token-plan/mimo-v2.6-pro",
);
expect(tokenPlan?.suggestedDefaults?.modelCatalog).toHaveProperty(
"xiaomi-mimo-token-plan/mimo-v2.5",
"xiaomi-mimo-token-plan/mimo-v2.6-flash",
);
});
@@ -41,7 +41,7 @@ describe("Xiaomi MiMo Token Plan presets", () => {
expect(rebased.model?.primary).toBe("my-mimo-plan/mimo-v2.6-pro");
expect(rebased.modelCatalog).toHaveProperty("my-mimo-plan/mimo-v2.6-pro");
expect(rebased.modelCatalog).toHaveProperty("my-mimo-plan/mimo-v2.5");
expect(rebased.modelCatalog).toHaveProperty("my-mimo-plan/mimo-v2.6-flash");
expect(rebased.modelCatalog).not.toHaveProperty(
"xiaomi-mimo-token-plan/mimo-v2.6-pro",
);
+32 -32
View File
@@ -10,7 +10,7 @@ import { getIcon, hasIcon } from "@/icons/extracted";
const WEBSITE_URL = "https://moark.com";
const API_KEY_URL = "https://moark.com/dashboard/tokens";
const DEFAULT_MODEL = "deepseek-v4-flash-0731";
const DEFAULT_MODEL = "deepseek-v4.1-flash";
describe("MoArk (模力方舟) provider presets", () => {
it("uses the Anthropic-native root endpoint for Claude Code", () => {
@@ -45,7 +45,7 @@ describe("MoArk (模力方舟) provider presets", () => {
expect(preset?.endpointCandidates).toEqual(["https://moark.com/v1"]);
expect(preset?.icon).toBe("moark");
expect(preset?.auth).toEqual({ OPENAI_API_KEY: "" });
expect(preset?.config).toContain('model = "deepseek-v4-flash-0731"');
expect(preset?.config).toContain('model = "deepseek-v4.1-flash"');
expect(preset?.config).toContain('base_url = "https://moark.com/v1"');
expect(preset?.config).toContain('wire_api = "responses"');
});
@@ -59,10 +59,10 @@ describe("MoArk (模力方舟) provider presets", () => {
// 缺 modelCatalog 时 Codex 退回通用元数据,/model 只会列出默认模型。
expect(catalog.map((model) => model.model)).toEqual([
DEFAULT_MODEL,
"DeepSeek-V4-Pro",
"DeepSeek-V4-Pro-0813",
"GLM-5.3",
"GLM-5.3-Flash",
"Kimi-K2.7-Code",
"qwen3-coder-plus",
]);
// 目录首行 = 默认模型,必须与 config.toml 的 model 一致。
@@ -77,10 +77,9 @@ describe("MoArk (模力方舟) provider presets", () => {
"text",
);
}
// Kimi K2.7 Code 与 OpenClaw 预设一致地支持图像输入。
// Kimi K2.7 Code 支持图像输入。
expect(
catalog.find((model) => model.model === "Kimi-K2.7-Code")
?.inputModalities,
catalog.find((model) => model.model === "Kimi-K2.7-Code")?.inputModalities,
).toEqual(["text", "image"]);
});
@@ -130,7 +129,7 @@ describe("MoArk (模力方舟) provider presets", () => {
// 实测自 https://moark.com/v1/responses:非法 reasoning_effort 触发的 400
// 里厂商给出的明文枚举。
expect(levels["DeepSeek-V4-Pro"]).toEqual([
expect(levels["DeepSeek-V4-Pro-0813"]).toEqual([
"low",
"medium",
"high",
@@ -153,21 +152,19 @@ describe("MoArk (模力方舟) provider presets", () => {
"high",
"xhigh",
]);
// 2026-10-24 目录刷新:qwen3-coder-plus 已下架;kimi-k3.1-pro / qwen3.8-max
// 的档位平台未自证、官方档位与 model_reasoning_effort = "high" 不兼容,
// 暂不进 Codex 目录(Pi / OpenCode / OpenClaw 预设照常收录)。
// MoArk 不校验该字段,退回 DeepSeek 官方目录的档位。
expect(levels[DEFAULT_MODEL]).toEqual(["low", "high", "max"]);
// MoArk 对 qwen3-coder-plus 完全不兑现 effort(none 与 ultra 的
// reasoning_tokens 同为 0)。留空不等于"没有档位":后端会把未填写理解为沿用
// 原生模板的 none/high 两档、默认 high,Codex 仍会给出一个不改变任何行为的
// 选择器,所以要显式声明单档 none。
expect(levels["qwen3-coder-plus"]).toEqual(["none"]);
// 留空不等于"没有档位":后端会把未填写理解为沿用原生模板的 none/high 两档、
// 默认 high,Codex 会给出未经平台证实的选择器。
// 只有单档时 Codex 直接应用、不显示选择界面;四款支持思考的模型必须保留多档
// 只有单档时 Codex 直接应用、不显示选择界面;支持思考的模型必须保留多档
// 且每档都含 high,后端才会保留模板默认 high,与 config 的
// model_reasoning_effort = "high" 一致。
const thinkingModels = (preset?.modelCatalog ?? []).filter(
(model) => model.model !== "qwen3-coder-plus",
);
expect(thinkingModels).toHaveLength(4);
// model_reasoning_effort = "high" 一致。目录里五款模型都支持思考。
const thinkingModels = preset?.modelCatalog ?? [];
expect(thinkingModels).toHaveLength(5);
for (const model of thinkingModels) {
expect(model.reasoningLevels, `${model.model} keeps high`).toContain(
"high",
@@ -197,10 +194,11 @@ describe("MoArk (模力方舟) provider presets", () => {
expect(modelIds).toEqual(
expect.arrayContaining([
DEFAULT_MODEL,
"DeepSeek-V4-Pro",
"DeepSeek-V4-Pro-0813",
"GLM-5.3",
"Kimi-K2.7-Code",
"qwen3-coder-plus",
"GLM-5.3-Flash",
"kimi-k3.1-pro",
"qwen3.8-max",
]),
);
});
@@ -221,20 +219,22 @@ describe("MoArk (模力方舟) provider presets", () => {
"https://api.moark.com/v1",
);
expect(models).toHaveProperty(DEFAULT_MODEL);
expect(models).toHaveProperty("Kimi-K2.7-Code");
expect(models[DEFAULT_MODEL]?.name).toBe("DeepSeek V4 Flash");
expect(models).toHaveProperty("kimi-k3.1-pro");
expect(models[DEFAULT_MODEL]?.name).toBe("DeepSeek V4.1 Flash");
// OpenCode only offers thinking variants for models flagged as reasoning;
// Qwen3 Coder Plus has no thinking mode and stays unflagged.
// OpenCode only offers thinking variants for models flagged as reasoning.
// The former non-thinking Qwen3 Coder Plus (left unflagged) was replaced by
// Qwen3.8 Max, which thinks, so every listed model is flagged now.
for (const id of [
DEFAULT_MODEL,
"DeepSeek-V4-Pro",
"DeepSeek-V4-Pro-0813",
"GLM-5.3",
"Kimi-K2.7-Code",
"GLM-5.3-Flash",
"kimi-k3.1-pro",
"qwen3.8-max",
]) {
expect(models[id]?.reasoning, `${id} reasoning`).toBe(true);
}
expect(models["qwen3-coder-plus"]?.reasoning).toBeUndefined();
});
it("uses the OpenAI Completions endpoint for OpenClaw", () => {
@@ -255,9 +255,9 @@ describe("MoArk (模力方舟) provider presets", () => {
expect(modelIds).toEqual(
expect.arrayContaining([
DEFAULT_MODEL,
"DeepSeek-V4-Pro",
"DeepSeek-V4-Pro-0813",
"GLM-5.3",
"Kimi-K2.7-Code",
"kimi-k3.1-pro",
]),
);
expect(preset?.suggestedDefaults?.model).toEqual({
@@ -277,7 +277,7 @@ describe("MoArk (模力方舟) provider presets", () => {
// OpenCode treats a missing limit as 0 and then skips auto-compaction
// (`isOverflow` returns false when `limit.context === 0`), so every model
// of a custom provider key must carry explicit capacity numbers.
expect(Object.keys(models)).toHaveLength(5);
expect(Object.keys(models)).toHaveLength(6);
for (const [id, model] of Object.entries(models)) {
expect(model.limit?.context, `${id} limit.context`).toBeGreaterThan(0);
expect(model.limit?.output, `${id} limit.output`).toBeGreaterThan(0);
+3 -3
View File
@@ -88,11 +88,11 @@ describe("AWS Bedrock OpenCode Provider Presets", () => {
for (const preset of presets) {
expect(preset).toBeDefined();
expect(preset!.settingsConfig.models["mimo-v2.5-pro"]).toMatchObject({
expect(preset!.settingsConfig.models["mimo-v2.6-pro"]).toMatchObject({
limit: { context: 1048576, output: 131072 },
modalities: { input: ["text"], output: ["text"] },
modalities: { input: ["text", "image"], output: ["text"] },
});
expect(preset!.settingsConfig.models["mimo-v2.5"]).toMatchObject({
expect(preset!.settingsConfig.models["mimo-v2.6-flash"]).toMatchObject({
limit: { context: 1048576, output: 131072 },
modalities: { input: ["text", "image"], output: ["text"] },
});
+5 -5
View File
@@ -157,10 +157,10 @@ describe("Pi provider presets", () => {
supportsDeveloperRole: false,
maxTokensField: "max_tokens",
};
expect(model("OpenCode Go", "glm-5.2").compat).toEqual(openCodeBase);
expect(model("OpenCode Go", "kimi-k2.7-code").compat).toEqual(openCodeBase);
expect(model("OpenCode Go", "mimo-v2.5-pro").compat).toEqual(openCodeBase);
for (const id of ["deepseek-v4-pro", "deepseek-v4-flash"]) {
expect(model("OpenCode Go", "glm-5.3").compat).toEqual(openCodeBase);
expect(model("OpenCode Go", "kimi-k3.1-pro").compat).toEqual(openCodeBase);
expect(model("OpenCode Go", "mimo-v2.6-pro").compat).toEqual(openCodeBase);
for (const id of ["deepseek-v4-pro", "deepseek-v4.1-flash"]) {
expect(model("OpenCode Go", id).compat).toEqual({
...openCodeBase,
requiresReasoningContentOnAssistantMessages: true,
@@ -168,7 +168,7 @@ describe("Pi provider presets", () => {
});
}
for (const id of ["mimo-v2.5-pro", "mimo-v2.5"]) {
for (const id of ["mimo-v2.6-pro", "mimo-v2.6-flash"]) {
expect(model("Xiaomi MiMo", id).compat).toEqual({
requiresReasoningContentOnAssistantMessages: true,
thinkingFormat: "deepseek",
+1 -1
View File
@@ -83,7 +83,7 @@ describe("Pi thinking profiles", () => {
}),
expect.objectContaining({
preset: "OpenCode Go",
modelId: "glm-5.2",
modelId: "glm-5.3",
profileId: "openCodeGoGlm52",
}),
expect.objectContaining({
@@ -40,7 +40,7 @@ describe("SubRouter provider presets", () => {
expect(preset?.endpointCandidates).toEqual(["https://subrouter.ai/v1"]);
expect(preset?.auth).toEqual({ OPENAI_API_KEY: "" });
expect(preset?.config).toContain('name = "subrouter"');
expect(preset?.config).toContain('model = "gpt-5.6-sol"');
expect(preset?.config).toContain('model = "gpt-6.1-sol"');
expect(preset?.config).toContain('base_url = "https://subrouter.ai/v1"');
expect(preset?.config).toContain('wire_api = "responses"');
});
@@ -53,11 +53,11 @@ describe("SubRouter provider presets", () => {
expect(preset).toBeDefined();
expect(preset?.baseURL).toBe("https://subrouter.ai/v1beta");
expect(preset?.endpointCandidates).toEqual(["https://subrouter.ai/v1beta"]);
expect(preset?.model).toBe("gemini-3.6-flash");
expect(preset?.model).toBe("gemini-3.8-flash");
const env = (preset?.settingsConfig as { env: Record<string, string> }).env;
expect(env.GOOGLE_GEMINI_BASE_URL).toBe("https://subrouter.ai/v1beta");
expect(env.GEMINI_MODEL).toBe("gemini-3.6-flash");
expect(env.GEMINI_MODEL).toBe("gemini-3.8-flash");
});
it("uses OpenAI-compatible config for OpenCode", () => {
@@ -71,7 +71,7 @@ describe("SubRouter provider presets", () => {
"https://subrouter.ai/v1",
);
expect(preset?.settingsConfig.options?.apiKey).toBe("");
expect(preset?.settingsConfig.models).toHaveProperty("gpt-5.6-sol");
expect(preset?.settingsConfig.models).toHaveProperty("gpt-6.1-sol");
});
it("uses OpenAI completions config for OpenClaw without hardcoded pricing", () => {
@@ -84,13 +84,13 @@ describe("SubRouter provider presets", () => {
expect(preset?.settingsConfig.baseUrl).toBe("https://subrouter.ai/v1");
expect(preset?.settingsConfig.api).toBe("openai-completions");
expect(model).toMatchObject({
id: "gpt-5.6-sol",
name: "GPT-5.6 Sol",
id: "gpt-6.1-sol",
name: "GPT-6.1 Sol",
contextWindow: 272000,
});
expect(model).not.toHaveProperty("cost");
expect(preset?.suggestedDefaults?.model).toEqual({
primary: "subrouter/gpt-5.6-sol",
primary: "subrouter/gpt-6.1-sol",
});
});
@@ -107,7 +107,7 @@ describe("SubRouter provider presets", () => {
api_mode: "chat_completions",
});
expect(preset?.suggestedDefaults?.model).toEqual({
default: "gpt-5.6-sol",
default: "gpt-6.1-sol",
provider: "subrouter",
});
});
@@ -21,10 +21,10 @@ describe("TheRouter OpenCode and OpenClaw presets", () => {
"https://api.therouter.ai/v1",
);
expect(preset?.settingsConfig.options?.setCacheKey).toBe(true);
expect(models).toHaveProperty("openai/gpt-5.3-codex");
expect(models).toHaveProperty("anthropic/claude-sonnet-5");
expect(models).toHaveProperty("google/gemini-3.6-flash");
expect(models["google/gemini-3.6-flash"]?.name).toBe("Gemini 3.6 Flash");
expect(models).toHaveProperty("openai/gpt-6.1-sol");
expect(models).toHaveProperty("anthropic/claude-sonnet-5-5");
expect(models).toHaveProperty("google/gemini-3.8-flash");
expect(models["google/gemini-3.8-flash"]?.name).toBe("Gemini 3.8 Flash");
});
it("uses OpenAI completions config for OpenClaw", () => {
@@ -42,23 +42,23 @@ describe("TheRouter OpenCode and OpenClaw presets", () => {
expect(preset?.settingsConfig.api).toBe("openai-completions");
expect(modelIds).toEqual(
expect.arrayContaining([
"anthropic/claude-sonnet-5",
"openai/gpt-5.3-codex",
"openai/gpt-5.2",
"google/gemini-3.6-flash",
"anthropic/claude-sonnet-5-5",
"openai/gpt-6.1-sol",
"openai/gpt-6-astra",
"google/gemini-3.8-flash",
]),
);
expect(
openClawModels.find((model) => model.id === "google/gemini-3.6-flash"),
openClawModels.find((model) => model.id === "google/gemini-3.8-flash"),
).toMatchObject({
name: "Gemini 3.6 Flash",
name: "Gemini 3.8 Flash",
cost: { input: 1.5, output: 9, cacheRead: 0.15 },
});
expect(preset?.suggestedDefaults?.model).toEqual({
primary: "therouter/anthropic/claude-sonnet-5",
primary: "therouter/anthropic/claude-sonnet-5-5",
fallbacks: [
"therouter/openai/gpt-5.2",
"therouter/google/gemini-3.6-flash",
"therouter/openai/gpt-6-astra",
"therouter/google/gemini-3.8-flash",
],
});
});
@@ -17,14 +17,14 @@ describe("TheRouter provider presets", () => {
expect(env.ANTHROPIC_BASE_URL).toBe("https://api.therouter.ai");
expect(env.ANTHROPIC_AUTH_TOKEN).toBe("");
expect(env.ANTHROPIC_API_KEY).toBe("");
expect(env.ANTHROPIC_MODEL).toBe("anthropic/claude-sonnet-5");
expect(env.ANTHROPIC_MODEL).toBe("anthropic/claude-sonnet-5-5");
expect(env.ANTHROPIC_DEFAULT_HAIKU_MODEL).toBe(
"anthropic/claude-haiku-4.5",
"anthropic/claude-haiku-5-5",
);
expect(env.ANTHROPIC_DEFAULT_SONNET_MODEL).toBe(
"anthropic/claude-sonnet-5",
"anthropic/claude-sonnet-5-5",
);
expect(env.ANTHROPIC_DEFAULT_OPUS_MODEL).toBe("anthropic/claude-opus-5");
expect(env.ANTHROPIC_DEFAULT_OPUS_MODEL).toBe("anthropic/claude-opus-5-5");
});
it("uses the OpenAI-compatible v1 endpoint for Codex", () => {
@@ -41,7 +41,7 @@ describe("TheRouter provider presets", () => {
expect(preset?.config).toContain('model_provider = "custom"');
expect(preset?.config).toContain("[model_providers.custom]");
expect(preset?.config).toContain('name = "therouter"');
expect(preset?.config).toContain('model = "openai/gpt-5.3-codex"');
expect(preset?.config).toContain('model = "openai/gpt-6.1-sol"');
expect(preset?.config).not.toContain("goals = true");
expect(preset?.config).toContain(
'base_url = "https://api.therouter.ai/v1"',
@@ -60,10 +60,10 @@ describe("TheRouter provider presets", () => {
expect(preset?.category).toBe("aggregator");
expect(preset?.endpointCandidates).toEqual(["https://api.therouter.ai"]);
expect(preset?.baseURL).toBe("https://api.therouter.ai");
expect(preset?.model).toBe("gemini-3.6-flash");
expect(preset?.model).toBe("gemini-3.8-flash");
const env = (preset?.settingsConfig as { env: Record<string, string> }).env;
expect(env.GOOGLE_GEMINI_BASE_URL).toBe("https://api.therouter.ai");
expect(env.GEMINI_MODEL).toBe("gemini-3.6-flash");
expect(env.GEMINI_MODEL).toBe("gemini-3.8-flash");
});
});
@@ -123,7 +123,6 @@ const products = [
"kimi-k2.7-code",
"kimi-k2.7-code-highspeed",
"kimi-k2.6",
"minimax-m2.7",
"minimax-m3",
"deepseek-v4-flash",
"deepseek-v4-pro",
@@ -470,9 +469,10 @@ describe("Tencent Token Plan provider presets", () => {
// 全部真 Key 实测(2026-08-31):
// - glm-5.3 始终思考且档位严格枚举 low/high/max(medium/xhigh 会 400)
// - kimi-k2.7-code(-highspeed) 仅接受 thinking:enabled
// - minimax-m2.7 与国内 auto 关思考被静默忽略 → 不列 none
// - 国内 auto 关思考被静默忽略 → 不列 none
// - 其余模型 thinking 开关真实生效 → 两态 none/high
// - minimax-m2.5 官方已除名且平台计划下线(2026-09-07 从全部 app 移除),不再断言
// - minimax-m2.7 平台标注 2026-11-17 下线,2026-10-24 从企业版移除
const epro = codexProviderPresets.find(
(item) => item.name === "Tencent Token Plan Enterprise Pro",
);
@@ -482,7 +482,6 @@ describe("Tencent Token Plan provider presets", () => {
expect(levels("glm-5.3")).toEqual(["low", "high", "max"]);
expect(levels("kimi-k2.7-code")).toEqual(["high"]);
expect(levels("kimi-k2.7-code-highspeed")).toEqual(["high"]);
expect(levels("minimax-m2.7")).toEqual(["high"]);
expect(levels("auto")).toEqual(["high"]); // 国内 auto 忽略关思考
expect(levels("glm-5.2")).toEqual(["none", "high"]);
expect(levels("kimi-k2.6")).toEqual(["none", "high"]);
+5 -5
View File
@@ -21,10 +21,10 @@ describe("xAI OAuth provider presets", () => {
});
expect((preset!.settingsConfig as any).env).toMatchObject({
ANTHROPIC_BASE_URL: "https://api.x.ai/v1",
ANTHROPIC_MODEL: "grok-4.5",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "grok-4.5",
ANTHROPIC_DEFAULT_SONNET_MODEL: "grok-4.5",
ANTHROPIC_DEFAULT_OPUS_MODEL: "grok-4.5",
ANTHROPIC_MODEL: "grok-4.7",
ANTHROPIC_DEFAULT_HAIKU_MODEL: "grok-4.7",
ANTHROPIC_DEFAULT_SONNET_MODEL: "grok-4.7",
ANTHROPIC_DEFAULT_OPUS_MODEL: "grok-4.7",
});
expect((preset!.settingsConfig as any).env).not.toHaveProperty(
"ANTHROPIC_API_KEY",
@@ -49,7 +49,7 @@ describe("xAI OAuth provider presets", () => {
});
expect(preset!.modelRoutes).toEqual([
expect.objectContaining({
upstreamModel: "grok-4.5",
upstreamModel: "grok-4.7",
supports1m: false,
}),
]);