refactor: remove core provider model definitions compat

This commit is contained in:
Peter Steinberger
2026-03-27 17:02:24 +00:00
parent 3628451aa3
commit 67f609ea9a
19 changed files with 124 additions and 382 deletions

View File

@@ -1 +1,6 @@
export { buildKimiCodingProvider } from "./provider-catalog.js";
export {
buildKimiCodingProvider,
KIMI_CODING_BASE_URL,
KIMI_CODING_DEFAULT_MODEL_ID,
} from "./provider-catalog.js";
export { KIMI_CODING_MODEL_REF, KIMI_MODEL_REF } from "./onboard.js";

View File

@@ -1 +1,13 @@
export { buildMinimaxPortalProvider, buildMinimaxProvider } from "./provider-catalog.js";
export {
buildMinimaxApiModelDefinition,
buildMinimaxModelDefinition,
DEFAULT_MINIMAX_BASE_URL,
MINIMAX_API_BASE_URL,
MINIMAX_API_COST,
MINIMAX_CN_API_BASE_URL,
MINIMAX_HOSTED_COST,
MINIMAX_HOSTED_MODEL_ID,
MINIMAX_HOSTED_MODEL_REF,
MINIMAX_LM_STUDIO_COST,
} from "./model-definitions.js";

View File

@@ -0,0 +1,9 @@
export { applyMistralConfig, applyMistralProviderConfig, MISTRAL_DEFAULT_MODEL_REF } from "./onboard.js";
export {
buildMistralCatalogModels,
buildMistralModelDefinition,
MISTRAL_BASE_URL,
MISTRAL_DEFAULT_COST,
MISTRAL_DEFAULT_MODEL_ID,
MISTRAL_DEFAULT_MODEL_REF,
} from "./model-definitions.js";

View File

@@ -3,7 +3,6 @@ import {
resolveAgentModelFallbackValues,
resolveAgentModelPrimaryValue,
} from "../../src/config/model-input.js";
import { buildMistralModelDefinition as buildCoreMistralModelDefinition } from "../../src/plugins/provider-model-definitions.js";
import {
createConfigWithFallbacks,
createLegacyProviderConfig,
@@ -52,11 +51,12 @@ describe("mistral onboard", () => {
expect(mistralDefault?.maxTokens).toBe(16384);
});
it("keeps the core and bundled mistral defaults aligned", () => {
it("uses the bundled mistral default model definition", () => {
const bundled = buildBundledMistralModelDefinition();
const core = buildCoreMistralModelDefinition();
const cfg = applyMistralProviderConfig({});
const defaultModel = cfg.models?.providers?.mistral?.models.find((model) => model.id === bundled.id);
expect(core).toMatchObject({
expect(defaultModel).toMatchObject({
id: bundled.id,
contextWindow: bundled.contextWindow,
maxTokens: bundled.maxTokens,

View File

@@ -1,13 +1,44 @@
export {
buildModelStudioDefaultModelDefinition,
buildModelStudioModelDefinition,
MODELSTUDIO_CN_BASE_URL,
MODELSTUDIO_DEFAULT_COST,
MODELSTUDIO_DEFAULT_MODEL_ID,
MODELSTUDIO_DEFAULT_MODEL_REF,
MODELSTUDIO_GLOBAL_BASE_URL,
} from "openclaw/plugin-sdk/provider-models";
import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-models";
import {
MODELSTUDIO_BASE_URL,
MODELSTUDIO_DEFAULT_COST as MODELSTUDIO_PROVIDER_DEFAULT_COST,
MODELSTUDIO_DEFAULT_MODEL_ID as MODELSTUDIO_PROVIDER_DEFAULT_MODEL_ID,
MODELSTUDIO_MODEL_CATALOG,
} from "./provider-catalog.js";
export const MODELSTUDIO_GLOBAL_BASE_URL = MODELSTUDIO_BASE_URL;
export const MODELSTUDIO_CN_BASE_URL = "https://coding.dashscope.aliyuncs.com/v1";
export const MODELSTUDIO_DEFAULT_COST = MODELSTUDIO_PROVIDER_DEFAULT_COST;
export const MODELSTUDIO_DEFAULT_MODEL_ID = MODELSTUDIO_PROVIDER_DEFAULT_MODEL_ID;
export const MODELSTUDIO_DEFAULT_MODEL_REF = `modelstudio/${MODELSTUDIO_DEFAULT_MODEL_ID}`;
export const MODELSTUDIO_STANDARD_CN_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1";
export const MODELSTUDIO_STANDARD_GLOBAL_BASE_URL =
"https://dashscope-intl.aliyuncs.com/compatible-mode/v1";
export function buildModelStudioModelDefinition(params: {
id: string;
name?: string;
reasoning?: boolean;
input?: string[];
cost?: ModelDefinitionConfig["cost"];
contextWindow?: number;
maxTokens?: number;
}): ModelDefinitionConfig {
const catalog = MODELSTUDIO_MODEL_CATALOG.find((model) => model.id === params.id);
return {
id: params.id,
name: params.name ?? catalog?.name ?? params.id,
reasoning: params.reasoning ?? catalog?.reasoning ?? false,
input:
(params.input as ("text" | "image")[]) ??
(catalog?.input ? [...catalog.input] : ["text"]),
cost: params.cost ?? catalog?.cost ?? MODELSTUDIO_DEFAULT_COST,
contextWindow: params.contextWindow ?? catalog?.contextWindow ?? 262_144,
maxTokens: params.maxTokens ?? catalog?.maxTokens ?? 65_536,
};
}
export function buildModelStudioDefaultModelDefinition(): ModelDefinitionConfig {
return buildModelStudioModelDefinition({ id: MODELSTUDIO_DEFAULT_MODEL_ID });
}

View File

@@ -5,14 +5,14 @@ import type {
export const MODELSTUDIO_BASE_URL = "https://coding-intl.dashscope.aliyuncs.com/v1";
export const MODELSTUDIO_DEFAULT_MODEL_ID = "qwen3.5-plus";
const MODELSTUDIO_DEFAULT_COST = {
export const MODELSTUDIO_DEFAULT_COST = {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
};
const MODELSTUDIO_MODEL_CATALOG: ReadonlyArray<ModelDefinitionConfig> = [
export const MODELSTUDIO_MODEL_CATALOG: ReadonlyArray<ModelDefinitionConfig> = [
{
id: "qwen3.5-plus",
name: "qwen3.5-plus",

View File

@@ -1 +1,2 @@
export { buildMoonshotProvider } from "./provider-catalog.js";
export { buildMoonshotProvider, MOONSHOT_BASE_URL, MOONSHOT_DEFAULT_MODEL_ID } from "./provider-catalog.js";
export { MOONSHOT_CN_BASE_URL, MOONSHOT_DEFAULT_MODEL_REF } from "./onboard.js";

View File

@@ -3,3 +3,4 @@ export {
QIANFAN_DEFAULT_MODEL_ID,
buildQianfanProvider,
} from "./provider-catalog.js";
export { QIANFAN_DEFAULT_MODEL_REF } from "./onboard.js";

View File

@@ -1,5 +1,2 @@
export { buildVercelAiGatewayProvider } from "./provider-catalog.js";
export {
applyVercelAiGatewayConfig,
VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF,
} from "./onboard.js";
export { applyVercelAiGatewayConfig, VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF } from "./onboard.js";

View File

@@ -1 +1,11 @@
export { applyZaiConfig, applyZaiProviderConfig, ZAI_DEFAULT_MODEL_REF } from "./onboard.js";
export {
buildZaiModelDefinition,
resolveZaiBaseUrl,
ZAI_CN_BASE_URL,
ZAI_CODING_CN_BASE_URL,
ZAI_CODING_GLOBAL_BASE_URL,
ZAI_DEFAULT_COST,
ZAI_DEFAULT_MODEL_ID,
ZAI_GLOBAL_BASE_URL,
} from "./model-definitions.js";

View File

@@ -1,9 +1,6 @@
import { describe, expect, it } from "vitest";
import { resolveAgentModelPrimaryValue } from "../../src/config/model-input.js";
import {
ZAI_CODING_CN_BASE_URL,
ZAI_GLOBAL_BASE_URL,
} from "../../src/plugins/provider-model-definitions.js";
import { ZAI_CODING_CN_BASE_URL, ZAI_GLOBAL_BASE_URL } from "./model-definitions.js";
import { applyZaiConfig, applyZaiProviderConfig } from "./onboard.js";
describe("zai onboard", () => {

View File

@@ -2,10 +2,7 @@ import { mkdtempSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { describe, expect, it } from "vitest";
import {
MOONSHOT_BASE_URL as MOONSHOT_AI_BASE_URL,
MOONSHOT_CN_BASE_URL,
} from "../plugins/provider-model-definitions.js";
import { MOONSHOT_BASE_URL as MOONSHOT_AI_BASE_URL, MOONSHOT_CN_BASE_URL } from "../../extensions/moonshot/api.js";
import { captureEnv } from "../test-utils/env.js";
import { resolveImplicitProvidersForTest } from "./models-config.e2e-harness.js";
import { applyNativeStreamingUsageCompat } from "./models-config.providers.js";

View File

@@ -9,9 +9,8 @@ import { createProviderApiKeyAuthMethod } from "../plugins/provider-api-key-auth
import { providerApiKeyAuthRuntime } from "../plugins/provider-api-key-auth.runtime.js";
import {
MINIMAX_CN_API_BASE_URL,
ZAI_CODING_CN_BASE_URL,
ZAI_CODING_GLOBAL_BASE_URL,
} from "../plugins/provider-model-definitions.js";
} from "../../extensions/minimax/api.js";
import { ZAI_CODING_CN_BASE_URL, ZAI_CODING_GLOBAL_BASE_URL } from "../../extensions/zai/api.js";
import type { ProviderAuthMethod, ProviderPlugin } from "../plugins/types.js";
import type { WizardPrompter } from "../wizard/prompts.js";
import { applyAuthChoice, resolvePreferredProviderForAuthChoice } from "./auth-choice.js";

View File

@@ -5,10 +5,12 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite
import {
MINIMAX_API_BASE_URL,
MINIMAX_CN_API_BASE_URL,
} from "../../extensions/minimax/api.js";
import {
ZAI_CODING_CN_BASE_URL,
ZAI_CODING_GLOBAL_BASE_URL,
ZAI_GLOBAL_BASE_URL,
} from "../plugins/provider-model-definitions.js";
} from "../../extensions/zai/api.js";
import { makeTempWorkspace } from "../test-helpers/workspace.js";
import { withEnvAsync } from "../test-utils/env.js";
import {

View File

@@ -159,7 +159,7 @@ export {
MODELSTUDIO_DEFAULT_MODEL_ID,
MODELSTUDIO_DEFAULT_MODEL_REF,
MODELSTUDIO_GLOBAL_BASE_URL,
} from "../plugins/provider-model-definitions.js";
} from "../../extensions/modelstudio/model-definitions.js";
export function buildKilocodeModelDefinition(): ModelDefinitionConfig {
return {

View File

@@ -869,7 +869,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["provider-catalog.js"],
publicSurfaceArtifacts: ["api.js", "provider-catalog.js"],
packageName: "@openclaw/byteplus-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw BytePlus provider plugin",
@@ -1075,7 +1075,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["onboard.js", "provider-catalog.js"],
publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js"],
packageName: "@openclaw/deepseek-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw DeepSeek provider plugin",
@@ -6394,7 +6394,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["onboard.js", "provider-catalog.js"],
publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js"],
packageName: "@openclaw/huggingface-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw Hugging Face provider plugin",
@@ -7729,7 +7729,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["onboard.js", "provider-catalog.js", "shared.js"],
publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js", "shared.js"],
packageName: "@openclaw/kilocode-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw Kilo Gateway provider plugin",
@@ -7773,7 +7773,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["onboard.js", "provider-catalog.js"],
publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js"],
packageName: "@openclaw/kimi-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw Kimi provider plugin",
@@ -8099,7 +8099,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["onboard.js", "provider-catalog.js"],
publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js"],
packageName: "@openclaw/litellm-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw LiteLLM provider plugin",
@@ -9562,6 +9562,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
built: "index.js",
},
publicSurfaceArtifacts: [
"api.js",
"image-generation-provider.js",
"media-understanding-provider.js",
"model-definitions.js",
@@ -9657,6 +9658,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
built: "index.js",
},
publicSurfaceArtifacts: [
"api.js",
"media-understanding-provider.js",
"model-definitions.js",
"onboard.js",
@@ -9707,7 +9709,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["model-definitions.js", "onboard.js", "provider-catalog.js"],
publicSurfaceArtifacts: ["api.js", "model-definitions.js", "onboard.js", "provider-catalog.js"],
packageName: "@openclaw/modelstudio-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw Model Studio provider plugin",
@@ -9794,6 +9796,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
built: "index.js",
},
publicSurfaceArtifacts: [
"api.js",
"media-understanding-provider.js",
"onboard.js",
"provider-catalog.js",
@@ -11237,7 +11240,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["provider-catalog.js"],
publicSurfaceArtifacts: ["api.js", "provider-catalog.js"],
packageName: "@openclaw/nvidia-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw NVIDIA provider plugin",
@@ -11334,6 +11337,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
built: "index.js",
},
publicSurfaceArtifacts: [
"api.js",
"cli-backend.js",
"image-generation-provider.js",
"media-understanding-provider.js",
@@ -11491,6 +11495,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
built: "index.js",
},
publicSurfaceArtifacts: [
"api.js",
"media-understanding-provider.js",
"onboard.js",
"provider-catalog.js",
@@ -11731,7 +11736,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["onboard.js", "provider-catalog.js"],
publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js"],
packageName: "@openclaw/qianfan-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw Qianfan provider plugin",
@@ -14324,7 +14329,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["onboard.js", "provider-catalog.js"],
publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js"],
packageName: "@openclaw/synthetic-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw Synthetic provider plugin",
@@ -16724,7 +16729,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["onboard.js", "provider-catalog.js"],
publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js"],
packageName: "@openclaw/together-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw Together provider plugin",
@@ -17001,7 +17006,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["onboard.js", "provider-catalog.js"],
publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js"],
packageName: "@openclaw/venice-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw Venice provider plugin",
@@ -17044,7 +17049,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["onboard.js", "provider-catalog.js"],
publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js"],
packageName: "@openclaw/vercel-ai-gateway-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw Vercel AI Gateway provider plugin",
@@ -17755,7 +17760,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["provider-catalog.js"],
publicSurfaceArtifacts: ["api.js", "provider-catalog.js"],
packageName: "@openclaw/volcengine-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw Volcengine provider plugin",
@@ -18495,7 +18500,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
source: "./index.ts",
built: "index.js",
},
publicSurfaceArtifacts: ["onboard.js", "provider-catalog.js"],
publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js"],
packageName: "@openclaw/xiaomi-provider",
packageVersion: "2026.3.26",
packageDescription: "OpenClaw Xiaomi provider plugin",
@@ -18539,6 +18544,7 @@ export const GENERATED_BUNDLED_PLUGIN_METADATA = [
built: "index.js",
},
publicSurfaceArtifacts: [
"api.js",
"detect.js",
"media-understanding-provider.js",
"model-definitions.js",

View File

@@ -1,3 +1,10 @@
import { HUGGINGFACE_DEFAULT_MODEL_REF } from "../../extensions/huggingface/api.js";
import { LITELLM_DEFAULT_MODEL_REF } from "../../extensions/litellm/api.js";
import { OPENROUTER_DEFAULT_MODEL_REF } from "../../extensions/openrouter/api.js";
import { TOGETHER_DEFAULT_MODEL_REF } from "../../extensions/together/api.js";
import { VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF } from "../../extensions/vercel-ai-gateway/api.js";
import { XIAOMI_DEFAULT_MODEL_REF } from "../../extensions/xiaomi/api.js";
import { ZAI_DEFAULT_MODEL_REF } from "../../extensions/zai/api.js";
import { resolveOpenClawAgentDir } from "../agents/agent-paths.js";
import { upsertAuthProfile } from "../agents/auth-profiles.js";
import type { SecretInput } from "../config/types.secrets.js";
@@ -7,15 +14,6 @@ import {
writeOAuthCredentials,
type WriteOAuthCredentialsOptions,
} from "./provider-auth-helpers.js";
import { HUGGINGFACE_DEFAULT_MODEL_REF } from "../../extensions/huggingface/api.js";
import { LITELLM_DEFAULT_MODEL_REF } from "../../extensions/litellm/api.js";
import { OPENROUTER_DEFAULT_MODEL_REF } from "../../extensions/openrouter/api.js";
import { TOGETHER_DEFAULT_MODEL_REF } from "../../extensions/together/api.js";
import {
VERCEL_AI_GATEWAY_DEFAULT_MODEL_REF,
} from "../../extensions/vercel-ai-gateway/api.js";
import { XIAOMI_DEFAULT_MODEL_REF } from "../../extensions/xiaomi/api.js";
import { ZAI_DEFAULT_MODEL_REF } from "../../extensions/zai/api.js";
import { KILOCODE_DEFAULT_MODEL_REF } from "./provider-model-kilocode.js";
const resolveAuthAgentDir = (agentDir?: string) => agentDir ?? resolveOpenClawAgentDir();

View File

@@ -1,323 +0,0 @@
import type { ModelDefinitionConfig } from "../config/types.models.js";
import {
KILOCODE_DEFAULT_CONTEXT_WINDOW,
KILOCODE_DEFAULT_COST,
KILOCODE_DEFAULT_MAX_TOKENS,
KILOCODE_DEFAULT_MODEL_ID,
KILOCODE_DEFAULT_MODEL_NAME,
} from "./provider-model-kilocode.js";
import { MINIMAX_DEFAULT_MODEL_ID, MINIMAX_TEXT_MODEL_CATALOG } from "./provider-model-minimax.js";
const KIMI_CODING_BASE_URL = "https://api.kimi.com/coding/";
const KIMI_CODING_MODEL_ID = "kimi-code";
const KIMI_CODING_MODEL_REF = `kimi/${KIMI_CODING_MODEL_ID}`;
const DEFAULT_MINIMAX_BASE_URL = "https://api.minimax.io/v1";
const MINIMAX_API_BASE_URL = "https://api.minimax.io/anthropic";
const MINIMAX_CN_API_BASE_URL = "https://api.minimaxi.com/anthropic";
const MINIMAX_HOSTED_MODEL_ID = MINIMAX_DEFAULT_MODEL_ID;
const MINIMAX_HOSTED_MODEL_REF = `minimax/${MINIMAX_HOSTED_MODEL_ID}`;
const DEFAULT_MINIMAX_CONTEXT_WINDOW = 200000;
const DEFAULT_MINIMAX_MAX_TOKENS = 8192;
const MINIMAX_API_COST = { input: 0.3, output: 1.2, cacheRead: 0.03, cacheWrite: 0.12 };
const MINIMAX_HOSTED_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
const MINIMAX_LM_STUDIO_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
const MISTRAL_BASE_URL = "https://api.mistral.ai/v1";
const MISTRAL_DEFAULT_MODEL_ID = "mistral-large-latest";
const MISTRAL_DEFAULT_MODEL_REF = `mistral/${MISTRAL_DEFAULT_MODEL_ID}`;
const MISTRAL_DEFAULT_CONTEXT_WINDOW = 262144;
const MISTRAL_DEFAULT_MAX_TOKENS = 16384;
const MISTRAL_DEFAULT_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
const MODELSTUDIO_CN_BASE_URL = "https://coding.dashscope.aliyuncs.com/v1";
const MODELSTUDIO_GLOBAL_BASE_URL = "https://coding-intl.dashscope.aliyuncs.com/v1";
const MODELSTUDIO_DEFAULT_MODEL_ID = "qwen3.5-plus";
const MODELSTUDIO_DEFAULT_MODEL_REF = `modelstudio/${MODELSTUDIO_DEFAULT_MODEL_ID}`;
const MODELSTUDIO_DEFAULT_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
const MODELSTUDIO_MODEL_CATALOG = {
"qwen3.5-plus": {
name: "qwen3.5-plus",
reasoning: false,
input: ["text", "image"],
contextWindow: 1000000,
maxTokens: 65536,
},
"qwen3-max-2026-01-23": {
name: "qwen3-max-2026-01-23",
reasoning: false,
input: ["text"],
contextWindow: 262144,
maxTokens: 65536,
},
"qwen3-coder-next": {
name: "qwen3-coder-next",
reasoning: false,
input: ["text"],
contextWindow: 262144,
maxTokens: 65536,
},
"qwen3-coder-plus": {
name: "qwen3-coder-plus",
reasoning: false,
input: ["text"],
contextWindow: 1000000,
maxTokens: 65536,
},
"MiniMax-M2.5": {
name: "MiniMax-M2.5",
reasoning: false,
input: ["text"],
contextWindow: 1000000,
maxTokens: 65536,
},
"glm-5": {
name: "glm-5",
reasoning: false,
input: ["text"],
contextWindow: 202752,
maxTokens: 16384,
},
"glm-4.7": {
name: "glm-4.7",
reasoning: false,
input: ["text"],
contextWindow: 202752,
maxTokens: 16384,
},
"kimi-k2.5": {
name: "kimi-k2.5",
reasoning: false,
input: ["text", "image"],
contextWindow: 262144,
maxTokens: 32768,
},
} as const;
const MOONSHOT_BASE_URL = "https://api.moonshot.ai/v1";
const MOONSHOT_CN_BASE_URL = "https://api.moonshot.cn/v1";
const MOONSHOT_DEFAULT_MODEL_ID = "kimi-k2.5";
const MOONSHOT_DEFAULT_MODEL_REF = `moonshot/${MOONSHOT_DEFAULT_MODEL_ID}`;
const MOONSHOT_DEFAULT_CONTEXT_WINDOW = 256000;
const MOONSHOT_DEFAULT_MAX_TOKENS = 8192;
const MOONSHOT_DEFAULT_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
const QIANFAN_BASE_URL = "https://qianfan.baidubce.com/v2";
const QIANFAN_DEFAULT_MODEL_ID = "deepseek-v3.2";
const QIANFAN_DEFAULT_MODEL_REF = `qianfan/${QIANFAN_DEFAULT_MODEL_ID}`;
const XAI_BASE_URL = "https://api.x.ai/v1";
const XAI_DEFAULT_MODEL_ID = "grok-4";
const XAI_DEFAULT_MODEL_REF = `xai/${XAI_DEFAULT_MODEL_ID}`;
const XAI_DEFAULT_CONTEXT_WINDOW = 131072;
const XAI_DEFAULT_MAX_TOKENS = 8192;
const XAI_DEFAULT_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
const ZAI_CODING_GLOBAL_BASE_URL = "https://api.z.ai/api/coding/paas/v4";
const ZAI_CODING_CN_BASE_URL = "https://open.bigmodel.cn/api/coding/paas/v4";
const ZAI_GLOBAL_BASE_URL = "https://api.z.ai/api/paas/v4";
const ZAI_CN_BASE_URL = "https://open.bigmodel.cn/api/paas/v4";
const ZAI_DEFAULT_MODEL_ID = "glm-5";
const ZAI_DEFAULT_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
const ZAI_MODEL_CATALOG = {
"glm-5": { name: "GLM-5", reasoning: true },
"glm-5-turbo": { name: "GLM-5 Turbo", reasoning: true },
"glm-4.7": { name: "GLM-4.7", reasoning: true },
"glm-4.7-flash": { name: "GLM-4.7 Flash", reasoning: true },
"glm-4.7-flashx": { name: "GLM-4.7 FlashX", reasoning: true },
} as const;
function buildMinimaxModelDefinition(params: {
id: string;
name?: string;
reasoning?: boolean;
cost: ModelDefinitionConfig["cost"];
contextWindow: number;
maxTokens: number;
}): ModelDefinitionConfig {
const catalog = MINIMAX_TEXT_MODEL_CATALOG[params.id as keyof typeof MINIMAX_TEXT_MODEL_CATALOG];
return {
id: params.id,
name: params.name ?? catalog?.name ?? `MiniMax ${params.id}`,
reasoning: params.reasoning ?? catalog?.reasoning ?? false,
input: ["text"],
cost: params.cost,
contextWindow: params.contextWindow,
maxTokens: params.maxTokens,
};
}
function buildMinimaxApiModelDefinition(modelId: string): ModelDefinitionConfig {
return buildMinimaxModelDefinition({
id: modelId,
cost: MINIMAX_API_COST,
contextWindow: DEFAULT_MINIMAX_CONTEXT_WINDOW,
maxTokens: DEFAULT_MINIMAX_MAX_TOKENS,
});
}
function buildMistralModelDefinition(): ModelDefinitionConfig {
return {
id: MISTRAL_DEFAULT_MODEL_ID,
name: "Mistral Large",
reasoning: false,
input: ["text", "image"],
cost: MISTRAL_DEFAULT_COST,
contextWindow: MISTRAL_DEFAULT_CONTEXT_WINDOW,
maxTokens: MISTRAL_DEFAULT_MAX_TOKENS,
};
}
function buildModelStudioModelDefinition(params: {
id: string;
name?: string;
reasoning?: boolean;
input?: string[];
cost?: ModelDefinitionConfig["cost"];
contextWindow?: number;
maxTokens?: number;
}): ModelDefinitionConfig {
const catalog = MODELSTUDIO_MODEL_CATALOG[params.id as keyof typeof MODELSTUDIO_MODEL_CATALOG];
return {
id: params.id,
name: params.name ?? catalog?.name ?? params.id,
reasoning: params.reasoning ?? catalog?.reasoning ?? false,
input:
(params.input as ("text" | "image")[]) ??
([...(catalog?.input ?? ["text"])] as ("text" | "image")[]),
cost: params.cost ?? MODELSTUDIO_DEFAULT_COST,
contextWindow: params.contextWindow ?? catalog?.contextWindow ?? 262144,
maxTokens: params.maxTokens ?? catalog?.maxTokens ?? 65536,
};
}
function buildModelStudioDefaultModelDefinition(): ModelDefinitionConfig {
return buildModelStudioModelDefinition({ id: MODELSTUDIO_DEFAULT_MODEL_ID });
}
function createMoonshotModelDefinition(): ModelDefinitionConfig {
return {
id: MOONSHOT_DEFAULT_MODEL_ID,
name: "Kimi K2.5",
reasoning: false,
input: ["text", "image"],
cost: MOONSHOT_DEFAULT_COST,
contextWindow: MOONSHOT_DEFAULT_CONTEXT_WINDOW,
maxTokens: MOONSHOT_DEFAULT_MAX_TOKENS,
};
}
function buildXaiModelDefinition(): ModelDefinitionConfig {
return {
id: XAI_DEFAULT_MODEL_ID,
name: "Grok 4",
reasoning: false,
input: ["text"],
cost: XAI_DEFAULT_COST,
contextWindow: XAI_DEFAULT_CONTEXT_WINDOW,
maxTokens: XAI_DEFAULT_MAX_TOKENS,
};
}
function resolveZaiBaseUrl(endpoint?: string): string {
switch (endpoint) {
case "coding-cn":
return ZAI_CODING_CN_BASE_URL;
case "global":
return ZAI_GLOBAL_BASE_URL;
case "cn":
return ZAI_CN_BASE_URL;
case "coding-global":
return ZAI_CODING_GLOBAL_BASE_URL;
default:
return ZAI_GLOBAL_BASE_URL;
}
}
function buildZaiModelDefinition(params: {
id: string;
name?: string;
reasoning?: boolean;
cost?: ModelDefinitionConfig["cost"];
contextWindow?: number;
maxTokens?: number;
}): ModelDefinitionConfig {
const catalog = ZAI_MODEL_CATALOG[params.id as keyof typeof ZAI_MODEL_CATALOG];
return {
id: params.id,
name: params.name ?? catalog?.name ?? `GLM ${params.id}`,
reasoning: params.reasoning ?? catalog?.reasoning ?? true,
input: ["text"],
cost: params.cost ?? ZAI_DEFAULT_COST,
contextWindow: params.contextWindow ?? 204800,
maxTokens: params.maxTokens ?? 131072,
};
}
export {
DEFAULT_MINIMAX_BASE_URL,
MINIMAX_API_BASE_URL,
MINIMAX_API_COST,
MINIMAX_CN_API_BASE_URL,
MINIMAX_HOSTED_COST,
MINIMAX_HOSTED_MODEL_ID,
MINIMAX_HOSTED_MODEL_REF,
MINIMAX_LM_STUDIO_COST,
MISTRAL_BASE_URL,
MISTRAL_DEFAULT_COST,
MISTRAL_DEFAULT_MODEL_ID,
MISTRAL_DEFAULT_MODEL_REF,
MODELSTUDIO_CN_BASE_URL,
MODELSTUDIO_DEFAULT_COST,
MODELSTUDIO_DEFAULT_MODEL_ID,
MODELSTUDIO_DEFAULT_MODEL_REF,
MODELSTUDIO_GLOBAL_BASE_URL,
MOONSHOT_BASE_URL,
MOONSHOT_CN_BASE_URL,
MOONSHOT_DEFAULT_MODEL_ID,
MOONSHOT_DEFAULT_MODEL_REF,
QIANFAN_BASE_URL,
QIANFAN_DEFAULT_MODEL_ID,
QIANFAN_DEFAULT_MODEL_REF,
XAI_BASE_URL,
XAI_DEFAULT_COST,
XAI_DEFAULT_MODEL_ID,
XAI_DEFAULT_MODEL_REF,
ZAI_CN_BASE_URL,
ZAI_CODING_CN_BASE_URL,
ZAI_CODING_GLOBAL_BASE_URL,
ZAI_DEFAULT_COST,
ZAI_DEFAULT_MODEL_ID,
ZAI_GLOBAL_BASE_URL,
KIMI_CODING_BASE_URL,
KIMI_CODING_MODEL_ID,
KIMI_CODING_MODEL_REF,
KILOCODE_DEFAULT_CONTEXT_WINDOW,
KILOCODE_DEFAULT_COST,
KILOCODE_DEFAULT_MAX_TOKENS,
KILOCODE_DEFAULT_MODEL_ID,
buildMinimaxApiModelDefinition,
buildMinimaxModelDefinition,
buildMistralModelDefinition,
buildModelStudioDefaultModelDefinition,
buildModelStudioModelDefinition,
buildXaiModelDefinition,
buildZaiModelDefinition,
resolveZaiBaseUrl,
};
export function buildMoonshotModelDefinition(): ModelDefinitionConfig {
return createMoonshotModelDefinition();
}
export function buildKilocodeModelDefinition(): ModelDefinitionConfig {
return {
id: KILOCODE_DEFAULT_MODEL_ID,
name: KILOCODE_DEFAULT_MODEL_NAME,
reasoning: true,
input: ["text", "image"],
cost: KILOCODE_DEFAULT_COST,
contextWindow: KILOCODE_DEFAULT_CONTEXT_WINDOW,
maxTokens: KILOCODE_DEFAULT_MAX_TOKENS,
};
}

View File

@@ -4,7 +4,7 @@ import {
ZAI_CODING_CN_BASE_URL,
ZAI_CODING_GLOBAL_BASE_URL,
ZAI_GLOBAL_BASE_URL,
} from "./provider-model-definitions.js";
} from "../../extensions/zai/api.js";
export type ZaiEndpointId = "global" | "cn" | "coding-global" | "coding-cn";