From 67f609ea9ae04b856e6125f959e987d6bd8574ab Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 27 Mar 2026 17:02:24 +0000 Subject: [PATCH] refactor: remove core provider model definitions compat --- extensions/kimi-coding/api.ts | 7 +- extensions/minimax/api.ts | 12 + extensions/mistral/api.ts | 9 + extensions/mistral/onboard.test.ts | 8 +- extensions/modelstudio/model-definitions.ts | 49 ++- extensions/modelstudio/provider-catalog.ts | 4 +- extensions/moonshot/api.ts | 3 +- extensions/qianfan/api.ts | 1 + extensions/vercel-ai-gateway/api.ts | 5 +- extensions/zai/api.ts | 10 + extensions/zai/onboard.test.ts | 5 +- .../models-config.providers.moonshot.test.ts | 5 +- src/commands/auth-choice.test.ts | 5 +- ...oard-non-interactive.provider-auth.test.ts | 4 +- src/plugin-sdk/provider-models.ts | 2 +- .../bundled-plugin-metadata.generated.ts | 36 +- src/plugins/provider-auth-storage.ts | 16 +- src/plugins/provider-model-definitions.ts | 323 ------------------ src/plugins/provider-zai-endpoint.ts | 2 +- 19 files changed, 124 insertions(+), 382 deletions(-) create mode 100644 extensions/mistral/api.ts delete mode 100644 src/plugins/provider-model-definitions.ts diff --git a/extensions/kimi-coding/api.ts b/extensions/kimi-coding/api.ts index ec4aea0122f..42b5368a85f 100644 --- a/extensions/kimi-coding/api.ts +++ b/extensions/kimi-coding/api.ts @@ -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"; diff --git a/extensions/minimax/api.ts b/extensions/minimax/api.ts index 88763421f86..dbb444f3e62 100644 --- a/extensions/minimax/api.ts +++ b/extensions/minimax/api.ts @@ -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"; diff --git a/extensions/mistral/api.ts b/extensions/mistral/api.ts new file mode 100644 index 00000000000..f671e7a7e35 --- /dev/null +++ b/extensions/mistral/api.ts @@ -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"; diff --git a/extensions/mistral/onboard.test.ts b/extensions/mistral/onboard.test.ts index 21c5e4f3124..f327001e31c 100644 --- a/extensions/mistral/onboard.test.ts +++ b/extensions/mistral/onboard.test.ts @@ -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, diff --git a/extensions/modelstudio/model-definitions.ts b/extensions/modelstudio/model-definitions.ts index 789a19dedeb..df82fa20712 100644 --- a/extensions/modelstudio/model-definitions.ts +++ b/extensions/modelstudio/model-definitions.ts @@ -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 }); +} diff --git a/extensions/modelstudio/provider-catalog.ts b/extensions/modelstudio/provider-catalog.ts index 0908155a5f8..88639e6c8e2 100644 --- a/extensions/modelstudio/provider-catalog.ts +++ b/extensions/modelstudio/provider-catalog.ts @@ -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 = [ +export const MODELSTUDIO_MODEL_CATALOG: ReadonlyArray = [ { id: "qwen3.5-plus", name: "qwen3.5-plus", diff --git a/extensions/moonshot/api.ts b/extensions/moonshot/api.ts index a8440c9d377..f7c5068dda4 100644 --- a/extensions/moonshot/api.ts +++ b/extensions/moonshot/api.ts @@ -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"; diff --git a/extensions/qianfan/api.ts b/extensions/qianfan/api.ts index 3555169d86e..79a8808b21e 100644 --- a/extensions/qianfan/api.ts +++ b/extensions/qianfan/api.ts @@ -3,3 +3,4 @@ export { QIANFAN_DEFAULT_MODEL_ID, buildQianfanProvider, } from "./provider-catalog.js"; +export { QIANFAN_DEFAULT_MODEL_REF } from "./onboard.js"; diff --git a/extensions/vercel-ai-gateway/api.ts b/extensions/vercel-ai-gateway/api.ts index 5b447aa036a..a1d9846b141 100644 --- a/extensions/vercel-ai-gateway/api.ts +++ b/extensions/vercel-ai-gateway/api.ts @@ -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"; diff --git a/extensions/zai/api.ts b/extensions/zai/api.ts index d4f64f232fc..f2c4dc6a256 100644 --- a/extensions/zai/api.ts +++ b/extensions/zai/api.ts @@ -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"; diff --git a/extensions/zai/onboard.test.ts b/extensions/zai/onboard.test.ts index 2e1ecbd3b40..5fe1fd732d9 100644 --- a/extensions/zai/onboard.test.ts +++ b/extensions/zai/onboard.test.ts @@ -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", () => { diff --git a/src/agents/models-config.providers.moonshot.test.ts b/src/agents/models-config.providers.moonshot.test.ts index 9312e778409..0c3acc565b2 100644 --- a/src/agents/models-config.providers.moonshot.test.ts +++ b/src/agents/models-config.providers.moonshot.test.ts @@ -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"; diff --git a/src/commands/auth-choice.test.ts b/src/commands/auth-choice.test.ts index 0a1ec3cf7dc..62b56a03873 100644 --- a/src/commands/auth-choice.test.ts +++ b/src/commands/auth-choice.test.ts @@ -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"; diff --git a/src/commands/onboard-non-interactive.provider-auth.test.ts b/src/commands/onboard-non-interactive.provider-auth.test.ts index 5a20ed2d61f..0749757b0c4 100644 --- a/src/commands/onboard-non-interactive.provider-auth.test.ts +++ b/src/commands/onboard-non-interactive.provider-auth.test.ts @@ -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 { diff --git a/src/plugin-sdk/provider-models.ts b/src/plugin-sdk/provider-models.ts index a4e840ee2f6..d829edde23b 100644 --- a/src/plugin-sdk/provider-models.ts +++ b/src/plugin-sdk/provider-models.ts @@ -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 { diff --git a/src/plugins/bundled-plugin-metadata.generated.ts b/src/plugins/bundled-plugin-metadata.generated.ts index 9449f267283..011f0a5401e 100644 --- a/src/plugins/bundled-plugin-metadata.generated.ts +++ b/src/plugins/bundled-plugin-metadata.generated.ts @@ -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", diff --git a/src/plugins/provider-auth-storage.ts b/src/plugins/provider-auth-storage.ts index dad241dd7fe..93fb0c05600 100644 --- a/src/plugins/provider-auth-storage.ts +++ b/src/plugins/provider-auth-storage.ts @@ -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(); diff --git a/src/plugins/provider-model-definitions.ts b/src/plugins/provider-model-definitions.ts deleted file mode 100644 index d7452264596..00000000000 --- a/src/plugins/provider-model-definitions.ts +++ /dev/null @@ -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, - }; -} diff --git a/src/plugins/provider-zai-endpoint.ts b/src/plugins/provider-zai-endpoint.ts index 501adfc96c3..f2a0d903213 100644 --- a/src/plugins/provider-zai-endpoint.ts +++ b/src/plugins/provider-zai-endpoint.ts @@ -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";