























@@ -1,4 +1,6 @@
1+import { buildManifestModelProviderConfig } from "openclaw/plugin-sdk/provider-catalog-shared";
12import type { ModelDefinitionConfig } from "openclaw/plugin-sdk/provider-model-shared";
3+import manifest from "./openclaw.plugin.json" with { type: "json" };
2435export const ZAI_CODING_GLOBAL_BASE_URL = "https://api.z.ai/api/coding/paas/v4";
46export const ZAI_CODING_CN_BASE_URL = "https://open.bigmodel.cn/api/coding/paas/v4";
@@ -7,130 +9,23 @@ export const ZAI_CN_BASE_URL = "https://open.bigmodel.cn/api/paas/v4";
79export const ZAI_DEFAULT_MODEL_ID = "glm-5.1";
810export const ZAI_DEFAULT_MODEL_REF = `zai/${ZAI_DEFAULT_MODEL_ID}`;
91110-type ZaiCatalogEntry = {
11- name: string;
12-reasoning: boolean;
13-input: ModelDefinitionConfig["input"];
14- contextWindow: number;
15- maxTokens: number;
16-cost: ModelDefinitionConfig["cost"];
17-};
12+const ZAI_MANIFEST_CATALOG = manifest.modelCatalog.providers.zai;
13+const ZAI_MANIFEST_PROVIDER = buildManifestModelProviderConfig({
14+providerId: "zai",
15+catalog: ZAI_MANIFEST_CATALOG,
16+});
17+const ZAI_MODEL_CATALOG = new Map(
18+ZAI_MANIFEST_PROVIDER.models.map((model) => [model.id, model] as const),
19+);
182019-export const ZAI_DEFAULT_COST = {
20-input: 1,
21-output: 3.2,
22-cacheRead: 0.2,
23-cacheWrite: 0,
24-} satisfies ModelDefinitionConfig["cost"];
25-26-const ZAI_MODEL_CATALOG = {
27-"glm-5.1": {
28-name: "GLM-5.1",
29-reasoning: true,
30-input: ["text"],
31-contextWindow: 202800,
32-maxTokens: 131100,
33-cost: { input: 1.2, output: 4, cacheRead: 0.24, cacheWrite: 0 },
34-},
35-"glm-5": {
36-name: "GLM-5",
37-reasoning: true,
38-input: ["text"],
39-contextWindow: 202800,
40-maxTokens: 131100,
41-cost: ZAI_DEFAULT_COST,
42-},
43-"glm-5-turbo": {
44-name: "GLM-5 Turbo",
45-reasoning: true,
46-input: ["text"],
47-contextWindow: 202800,
48-maxTokens: 131100,
49-cost: { input: 1.2, output: 4, cacheRead: 0.24, cacheWrite: 0 },
50-},
51-"glm-5v-turbo": {
52-name: "GLM-5V Turbo",
53-reasoning: true,
54-input: ["text", "image"],
55-contextWindow: 202800,
56-maxTokens: 131100,
57-cost: { input: 1.2, output: 4, cacheRead: 0.24, cacheWrite: 0 },
58-},
59-"glm-4.7": {
60-name: "GLM-4.7",
61-reasoning: true,
62-input: ["text"],
63-contextWindow: 204800,
64-maxTokens: 131072,
65-cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 },
66-},
67-"glm-4.7-flash": {
68-name: "GLM-4.7 Flash",
69-reasoning: true,
70-input: ["text"],
71-contextWindow: 200000,
72-maxTokens: 131072,
73-cost: { input: 0.07, output: 0.4, cacheRead: 0, cacheWrite: 0 },
74-},
75-"glm-4.7-flashx": {
76-name: "GLM-4.7 FlashX",
77-reasoning: true,
78-input: ["text"],
79-contextWindow: 200000,
80-maxTokens: 128000,
81-cost: { input: 0.06, output: 0.4, cacheRead: 0.01, cacheWrite: 0 },
82-},
83-"glm-4.6": {
84-name: "GLM-4.6",
85-reasoning: true,
86-input: ["text"],
87-contextWindow: 204800,
88-maxTokens: 131072,
89-cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 },
90-},
91-"glm-4.6v": {
92-name: "GLM-4.6V",
93-reasoning: true,
94-input: ["text", "image"],
95-contextWindow: 128000,
96-maxTokens: 32768,
97-cost: { input: 0.3, output: 0.9, cacheRead: 0, cacheWrite: 0 },
98-},
99-"glm-4.5": {
100-name: "GLM-4.5",
101-reasoning: true,
102-input: ["text"],
103-contextWindow: 131072,
104-maxTokens: 98304,
105-cost: { input: 0.6, output: 2.2, cacheRead: 0.11, cacheWrite: 0 },
106-},
107-"glm-4.5-air": {
108-name: "GLM-4.5 Air",
109-reasoning: true,
110-input: ["text"],
111-contextWindow: 131072,
112-maxTokens: 98304,
113-cost: { input: 0.2, output: 1.1, cacheRead: 0.03, cacheWrite: 0 },
114-},
115-"glm-4.5-flash": {
116-name: "GLM-4.5 Flash",
117-reasoning: true,
118-input: ["text"],
119-contextWindow: 131072,
120-maxTokens: 98304,
121-cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
122-},
123-"glm-4.5v": {
124-name: "GLM-4.5V",
125-reasoning: true,
126-input: ["text", "image"],
127-contextWindow: 64000,
128-maxTokens: 16384,
129-cost: { input: 0.6, output: 1.8, cacheRead: 0, cacheWrite: 0 },
130-},
131-} as const satisfies Record<string, ZaiCatalogEntry>;
132-133-type ZaiCatalogId = keyof typeof ZAI_MODEL_CATALOG;
21+export const ZAI_DEFAULT_COST =
22+ZAI_MODEL_CATALOG.get("glm-5")?.cost ??
23+({
24+input: 1,
25+output: 3.2,
26+cacheRead: 0.2,
27+cacheWrite: 0,
28+} satisfies ModelDefinitionConfig["cost"]);
1342913530export function resolveZaiBaseUrl(endpoint?: string): string {
13631switch (endpoint) {
@@ -147,6 +42,10 @@ export function resolveZaiBaseUrl(endpoint?: string): string {
14742}
14843}
1494445+export function buildZaiCatalogModels(): ModelDefinitionConfig[] {
46+return ZAI_MANIFEST_PROVIDER.models.map((model) => ({ ...model, input: [...model.input] }));
47+}
48+15049export function buildZaiModelDefinition(params: {
15150id: string;
15251name?: string;
@@ -156,7 +55,7 @@ export function buildZaiModelDefinition(params: {
15655contextWindow?: number;
15756maxTokens?: number;
15857}): ModelDefinitionConfig {
159-const catalog = ZAI_MODEL_CATALOG[params.id as ZaiCatalogId];
58+const catalog = ZAI_MODEL_CATALOG.get(params.id);
16059return {
16160id: params.id,
16261name: params.name ?? catalog?.name ?? `GLM ${params.id}`,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。