From 1cfa22acb1980576a949063f05ce2d3f0b3816a6 Mon Sep 17 00:00:00 2001 From: Shakker Date: Tue, 28 Apr 2026 05:40:06 +0100 Subject: [PATCH] feat: declare volcengine model catalog --- extensions/volcengine/models.ts | 71 +++------ extensions/volcengine/openclaw.plugin.json | 163 +++++++++++++++++++++ extensions/volcengine/provider-catalog.ts | 27 ++-- 3 files changed, 195 insertions(+), 66 deletions(-) diff --git a/extensions/volcengine/models.ts b/extensions/volcengine/models.ts index d4c15c0940a..e4f4d6d0b93 100644 --- a/extensions/volcengine/models.ts +++ b/extensions/volcengine/models.ts @@ -1,13 +1,19 @@ +import { buildManifestModelProviderConfig } from "openclaw/plugin-sdk/provider-catalog-shared"; import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared"; -import { - buildVolcModelDefinition, - VOLC_MODEL_GLM_4_7, - VOLC_MODEL_KIMI_K2_5, - VOLC_SHARED_CODING_MODEL_CATALOG, -} from "openclaw/plugin-sdk/volc-model-catalog-shared"; +import manifest from "./openclaw.plugin.json" with { type: "json" }; -export const DOUBAO_BASE_URL = "https://ark.cn-beijing.volces.com/api/v3"; -export const DOUBAO_CODING_BASE_URL = "https://ark.cn-beijing.volces.com/api/coding/v3"; +const DOUBAO_MANIFEST_PROVIDER = buildManifestModelProviderConfig({ + providerId: "volcengine", + catalog: manifest.modelCatalog.providers.volcengine, +}); + +const DOUBAO_CODING_MANIFEST_PROVIDER = buildManifestModelProviderConfig({ + providerId: "volcengine-plan", + catalog: manifest.modelCatalog.providers["volcengine-plan"], +}); + +export const DOUBAO_BASE_URL = DOUBAO_MANIFEST_PROVIDER.baseUrl; +export const DOUBAO_CODING_BASE_URL = DOUBAO_CODING_MANIFEST_PROVIDER.baseUrl; export const DOUBAO_DEFAULT_MODEL_ID = "doubao-seed-1-8-251228"; export const DOUBAO_CODING_DEFAULT_MODEL_ID = "ark-code-latest"; export const DOUBAO_DEFAULT_MODEL_REF = `volcengine/${DOUBAO_DEFAULT_MODEL_ID}`; @@ -19,46 +25,9 @@ export const DOUBAO_DEFAULT_COST = { cacheWrite: 0, }; -export const DOUBAO_MODEL_CATALOG = [ - { - id: "doubao-seed-code-preview-251028", - name: "doubao-seed-code-preview-251028", - reasoning: false, - input: ["text", "image"] as const, - contextWindow: 256000, - maxTokens: 4096, - }, - { - id: "doubao-seed-1-8-251228", - name: "Doubao Seed 1.8", - reasoning: false, - input: ["text", "image"] as const, - contextWindow: 256000, - maxTokens: 4096, - }, - VOLC_MODEL_KIMI_K2_5, - VOLC_MODEL_GLM_4_7, - { - id: "deepseek-v3-2-251201", - name: "DeepSeek V3.2", - reasoning: false, - input: ["text", "image"] as const, - contextWindow: 128000, - maxTokens: 4096, - }, -] as const; - -export const DOUBAO_CODING_MODEL_CATALOG = [ - ...VOLC_SHARED_CODING_MODEL_CATALOG, - { - id: "doubao-seed-code-preview-251028", - name: "Doubao Seed Code Preview", - reasoning: false, - input: ["text"] as const, - contextWindow: 256000, - maxTokens: 4096, - }, -] as const; +export const DOUBAO_MODEL_CATALOG: ModelDefinitionConfig[] = DOUBAO_MANIFEST_PROVIDER.models; +export const DOUBAO_CODING_MODEL_CATALOG: ModelDefinitionConfig[] = + DOUBAO_CODING_MANIFEST_PROVIDER.models; export type DoubaoCatalogEntry = (typeof DOUBAO_MODEL_CATALOG)[number]; export type DoubaoCodingCatalogEntry = (typeof DOUBAO_CODING_MODEL_CATALOG)[number]; @@ -66,5 +35,9 @@ export type DoubaoCodingCatalogEntry = (typeof DOUBAO_CODING_MODEL_CATALOG)[numb export function buildDoubaoModelDefinition( entry: DoubaoCatalogEntry | DoubaoCodingCatalogEntry, ): ModelDefinitionConfig { - return buildVolcModelDefinition(entry, DOUBAO_DEFAULT_COST); + return { + ...entry, + input: [...entry.input], + cost: { ...entry.cost }, + }; } diff --git a/extensions/volcengine/openclaw.plugin.json b/extensions/volcengine/openclaw.plugin.json index 893c9f7fd59..e9fdb8c2316 100644 --- a/extensions/volcengine/openclaw.plugin.json +++ b/extensions/volcengine/openclaw.plugin.json @@ -18,6 +18,169 @@ "providerAuthAliases": { "volcengine-plan": "volcengine" }, + "modelCatalog": { + "providers": { + "volcengine": { + "baseUrl": "https://ark.cn-beijing.volces.com/api/v3", + "api": "openai-completions", + "models": [ + { + "id": "doubao-seed-code-preview-251028", + "name": "doubao-seed-code-preview-251028", + "input": ["text", "image"], + "contextWindow": 256000, + "maxTokens": 4096, + "cost": { + "input": 0.0001, + "output": 0.0002, + "cacheRead": 0, + "cacheWrite": 0 + } + }, + { + "id": "doubao-seed-1-8-251228", + "name": "Doubao Seed 1.8", + "input": ["text", "image"], + "contextWindow": 256000, + "maxTokens": 4096, + "cost": { + "input": 0.0001, + "output": 0.0002, + "cacheRead": 0, + "cacheWrite": 0 + } + }, + { + "id": "kimi-k2-5-260127", + "name": "Kimi K2.5", + "input": ["text", "image"], + "contextWindow": 256000, + "maxTokens": 4096, + "cost": { + "input": 0.0001, + "output": 0.0002, + "cacheRead": 0, + "cacheWrite": 0 + } + }, + { + "id": "glm-4-7-251222", + "name": "GLM 4.7", + "input": ["text", "image"], + "contextWindow": 200000, + "maxTokens": 4096, + "cost": { + "input": 0.0001, + "output": 0.0002, + "cacheRead": 0, + "cacheWrite": 0 + } + }, + { + "id": "deepseek-v3-2-251201", + "name": "DeepSeek V3.2", + "input": ["text", "image"], + "contextWindow": 128000, + "maxTokens": 4096, + "cost": { + "input": 0.0001, + "output": 0.0002, + "cacheRead": 0, + "cacheWrite": 0 + } + } + ] + }, + "volcengine-plan": { + "baseUrl": "https://ark.cn-beijing.volces.com/api/coding/v3", + "api": "openai-completions", + "models": [ + { + "id": "ark-code-latest", + "name": "Ark Coding Plan", + "input": ["text"], + "contextWindow": 256000, + "maxTokens": 4096, + "cost": { + "input": 0.0001, + "output": 0.0002, + "cacheRead": 0, + "cacheWrite": 0 + } + }, + { + "id": "doubao-seed-code", + "name": "Doubao Seed Code", + "input": ["text"], + "contextWindow": 256000, + "maxTokens": 4096, + "cost": { + "input": 0.0001, + "output": 0.0002, + "cacheRead": 0, + "cacheWrite": 0 + } + }, + { + "id": "glm-4.7", + "name": "GLM 4.7 Coding", + "input": ["text"], + "contextWindow": 200000, + "maxTokens": 4096, + "cost": { + "input": 0.0001, + "output": 0.0002, + "cacheRead": 0, + "cacheWrite": 0 + } + }, + { + "id": "kimi-k2-thinking", + "name": "Kimi K2 Thinking", + "input": ["text"], + "contextWindow": 256000, + "maxTokens": 4096, + "cost": { + "input": 0.0001, + "output": 0.0002, + "cacheRead": 0, + "cacheWrite": 0 + } + }, + { + "id": "kimi-k2.5", + "name": "Kimi K2.5 Coding", + "input": ["text"], + "contextWindow": 256000, + "maxTokens": 4096, + "cost": { + "input": 0.0001, + "output": 0.0002, + "cacheRead": 0, + "cacheWrite": 0 + } + }, + { + "id": "doubao-seed-code-preview-251028", + "name": "Doubao Seed Code Preview", + "input": ["text"], + "contextWindow": 256000, + "maxTokens": 4096, + "cost": { + "input": 0.0001, + "output": 0.0002, + "cacheRead": 0, + "cacheWrite": 0 + } + } + ] + } + }, + "discovery": { + "volcengine": "static", + "volcengine-plan": "static" + } + }, "providerAuthChoices": [ { "provider": "volcengine", diff --git a/extensions/volcengine/provider-catalog.ts b/extensions/volcengine/provider-catalog.ts index 1e58d52fcec..e719bc2e18a 100644 --- a/extensions/volcengine/provider-catalog.ts +++ b/extensions/volcengine/provider-catalog.ts @@ -1,24 +1,17 @@ +import { buildManifestModelProviderConfig } from "openclaw/plugin-sdk/provider-catalog-shared"; import type { ModelProviderConfig } from "openclaw/plugin-sdk/provider-model-shared"; -import { - buildDoubaoModelDefinition, - DOUBAO_BASE_URL, - DOUBAO_CODING_BASE_URL, - DOUBAO_CODING_MODEL_CATALOG, - DOUBAO_MODEL_CATALOG, -} from "./models.js"; +import manifest from "./openclaw.plugin.json" with { type: "json" }; export function buildDoubaoProvider(): ModelProviderConfig { - return { - baseUrl: DOUBAO_BASE_URL, - api: "openai-completions", - models: DOUBAO_MODEL_CATALOG.map(buildDoubaoModelDefinition), - }; + return buildManifestModelProviderConfig({ + providerId: "volcengine", + catalog: manifest.modelCatalog.providers.volcengine, + }); } export function buildDoubaoCodingProvider(): ModelProviderConfig { - return { - baseUrl: DOUBAO_CODING_BASE_URL, - api: "openai-completions", - models: DOUBAO_CODING_MODEL_CATALOG.map(buildDoubaoModelDefinition), - }; + return buildManifestModelProviderConfig({ + providerId: "volcengine-plan", + catalog: manifest.modelCatalog.providers["volcengine-plan"], + }); }