






















@@ -1,5 +1,6 @@
11import path from "node:path";
22import Ajv from "ajv";
3+import { buildModelAliasIndex, resolveModelRefFromString } from "openclaw/plugin-sdk/agent-runtime";
34import { normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime";
45import { Type } from "typebox";
56import { resolvePreferredOpenClawTmpDir, withTempWorkspace } from "../api.js";
@@ -42,6 +43,44 @@ function stripDuplicateProviderPrefix(provider: string | undefined, model: strin
4243return m.startsWith(prefix) ? m.slice(prefix.length) : m;
4344}
444546+function resolveLlmTaskModelRef(params: {
47+api: OpenClawPluginApi;
48+provider?: string;
49+rawModel?: string;
50+}): { provider?: string; model?: string } {
51+const defaultProvider =
52+normalizeOptionalString(params.provider) ??
53+normalizeOptionalString(params.api.runtime.agent.defaults.provider);
54+const rawModel = normalizeOptionalString(params.rawModel);
55+if (!rawModel || !defaultProvider) {
56+return {
57+provider: params.provider,
58+model: stripDuplicateProviderPrefix(params.provider, rawModel),
59+};
60+}
61+62+const cfg = params.api.config;
63+const aliasIndex = cfg
64+ ? buildModelAliasIndex({
65+ cfg,
66+ defaultProvider,
67+})
68+ : undefined;
69+const resolved = resolveModelRefFromString({
70+ cfg,
71+raw: rawModel,
72+ defaultProvider,
73+ aliasIndex,
74+});
75+if (!resolved) {
76+return {
77+provider: params.provider,
78+model: stripDuplicateProviderPrefix(params.provider, rawModel),
79+};
80+}
81+return resolved.ref;
82+}
83+4584type PluginCfg = {
4685defaultProvider?: string;
4786defaultModel?: string;
@@ -117,7 +156,7 @@ export function createLlmTaskTool(api: OpenClawPluginApi) {
117156const primaryModel =
118157typeof primary === "string" ? primary.split("/").slice(1).join("/") : undefined;
119158120-const provider =
159+const requestedProvider =
121160(typeof params.provider === "string" && params.provider.trim()) ||
122161(typeof pluginCfg.defaultProvider === "string" && pluginCfg.defaultProvider.trim()) ||
123162primaryProvider ||
@@ -128,7 +167,12 @@ export function createLlmTaskTool(api: OpenClawPluginApi) {
128167(typeof pluginCfg.defaultModel === "string" && pluginCfg.defaultModel.trim()) ||
129168primaryModel ||
130169undefined;
131-const model = stripDuplicateProviderPrefix(provider, rawModel);
170+const { provider: resolvedProvider, model } = resolveLlmTaskModelRef({
171+ api,
172+provider: requestedProvider,
173+ rawModel,
174+});
175+const provider = resolvedProvider;
132176133177const authProfileId =
134178(typeof params.authProfileId === "string" && params.authProfileId.trim()) ||
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。