




















@@ -10,6 +10,8 @@ import type { ModelDefinitionConfig, ModelProviderConfig } from "../../config/ty
1010import type { OpenClawConfig } from "../../config/types.openclaw.js";
1111import type { NormalizedModelCatalogRow } from "../../model-catalog/index.js";
1212import type { PluginMetadataSnapshot } from "../../plugins/plugin-metadata-snapshot.types.js";
13+import type { ProviderRuntimeModel } from "../../plugins/provider-runtime-model.types.js";
14+import { normalizeProviderResolvedModelWithPlugin } from "../../plugins/provider-runtime.js";
1315import { createLazyImportLoader } from "../../shared/lazy-promise.js";
1416import type { ModelListAuthIndex } from "./list.auth-index.js";
1517import type { ListRowModel } from "./list.model-row.js";
@@ -37,6 +39,7 @@ export type RowBuilderContext = {
3739filter: RowFilter;
3840skipRuntimeModelSuppression?: boolean;
3941metadataSnapshot?: PluginMetadataSnapshot;
42+workspaceDir?: string;
4043};
41444245const modelCatalogModuleLoader = createLazyImportLoader<ModelCatalogModule>(
@@ -116,6 +119,38 @@ function shouldSuppressListModel(params: {
116119});
117120}
118121122+function normalizeListRowWithProviderPlugin(params: {
123+model: ListRowModel;
124+context: RowBuilderContext;
125+}): ListRowModel {
126+const normalized = normalizeProviderResolvedModelWithPlugin({
127+provider: params.model.provider,
128+config: params.context.cfg,
129+workspaceDir: params.context.workspaceDir,
130+context: {
131+config: params.context.cfg,
132+agentDir: params.context.agentDir,
133+workspaceDir: params.context.workspaceDir,
134+provider: params.model.provider,
135+modelId: params.model.id,
136+model: params.model as ProviderRuntimeModel,
137+},
138+});
139+if (!normalized) {
140+return params.model;
141+}
142+return {
143+ ...params.model,
144+id: normalized.id,
145+name: normalized.name,
146+provider: normalized.provider,
147+baseUrl: normalized.baseUrl,
148+input: toListRowInput(normalized.input),
149+contextWindow: normalized.contextWindow,
150+contextTokens: normalized.contextTokens,
151+};
152+}
153+119154async function appendVisibleRow(params: {
120155rows: ModelRow[];
121156model: ListRowModel;
@@ -131,15 +166,19 @@ async function appendVisibleRow(params: {
131166if (!matchesRowFilter(params.context.filter, params.model)) {
132167return false;
133168}
169+const normalizedModel = normalizeListRowWithProviderPlugin({
170+model: params.model,
171+context: params.context,
172+});
134173if (
135174!params.skipSuppression &&
136-shouldSuppressListModel({ model: params.model, context: params.context })
175+shouldSuppressListModel({ model: normalizedModel, context: params.context })
137176) {
138177return false;
139178}
140179params.rows.push(
141180await buildRow({
142-model: params.model,
181+model: normalizedModel,
143182key: params.key,
144183context: params.context,
145184allowProviderAvailabilityFallback: params.allowProviderAvailabilityFallback,
@@ -444,16 +483,21 @@ export async function appendProviderCatalogRows(params: {
444483context: RowBuilderContext;
445484seenKeys: Set<string>;
446485staticOnly?: boolean;
486+catalogModels?: readonly Model<Api>[];
447487}): Promise<number> {
448488let appended = 0;
449-const { loadProviderCatalogModelsForList } = await loadProviderCatalogModule();
450-for (const model of await loadProviderCatalogModelsForList({
451-cfg: params.context.cfg,
452-agentDir: params.context.agentDir,
453-providerFilter: params.context.filter.provider,
454-staticOnly: params.staticOnly,
455-metadataSnapshot: params.context.metadataSnapshot,
456-})) {
489+let catalogModels = params.catalogModels;
490+if (catalogModels == null) {
491+const { loadProviderCatalogModelsForList } = await loadProviderCatalogModule();
492+catalogModels = await loadProviderCatalogModelsForList({
493+cfg: params.context.cfg,
494+agentDir: params.context.agentDir,
495+providerFilter: params.context.filter.provider,
496+staticOnly: params.staticOnly,
497+metadataSnapshot: params.context.metadataSnapshot,
498+});
499+}
500+for (const model of catalogModels) {
457501const key = modelKey(model.provider, model.id);
458502if (
459503await appendVisibleRow({
@@ -487,7 +531,7 @@ export async function appendConfiguredRows(params: {
487531) {
488532continue;
489533}
490-const model =
534+const resolvedModel =
491535params.modelRegistry && resolveModelWithRegistry
492536 ? resolveModelWithRegistry({
493537provider: entry.ref.provider,
@@ -496,6 +540,9 @@ export async function appendConfiguredRows(params: {
496540cfg: params.context.cfg,
497541})
498542 : toFallbackConfiguredListModel(entry, params.context.cfg);
543+const model = resolvedModel
544+ ? normalizeListRowWithProviderPlugin({ model: resolvedModel, context: params.context })
545+ : resolvedModel;
499546if (params.context.filter.local && model && !isLocalBaseUrl(model.baseUrl ?? "")) {
500547continue;
501548}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。