




















@@ -22,6 +22,7 @@ import {
2222buildSuppressedBuiltInModelError,
2323shouldSuppressBuiltInModel,
2424} from "../model-suppression.js";
25+import { isLegacyModelsAddCodexMetadataModel } from "../openai-codex-models-add-legacy.js";
2526import { discoverAuthStorage, discoverModels } from "../pi-model-discovery.js";
2627import {
2728attachModelProviderRequestTransport,
@@ -275,13 +276,24 @@ function resolveConfiguredProviderConfig(
275276return findNormalizedProviderValue(configuredProviders, provider);
276277}
277278279+function isModelsAddMetadataModel(params: {
280+provider: string;
281+model: NonNullable<InlineProviderConfig["models"]>[number] | undefined;
282+}) {
283+return (
284+(params.model as { metadataSource?: unknown } | undefined)?.metadataSource === "models-add" ||
285+isLegacyModelsAddCodexMetadataModel(params)
286+);
287+}
288+278289function applyConfiguredProviderOverrides(params: {
279290provider: string;
280291discoveredModel: ProviderRuntimeModel;
281292providerConfig?: InlineProviderConfig;
282293modelId: string;
283294cfg?: OpenClawConfig;
284295runtimeHooks?: ProviderRuntimeHooks;
296+preferDiscoveredModelMetadata?: boolean;
285297}): ProviderRuntimeModel {
286298const { discoveredModel, providerConfig, modelId } = params;
287299if (!providerConfig) {
@@ -296,6 +308,11 @@ function applyConfiguredProviderOverrides(params: {
296308(discoveredModel.id !== modelId
297309 ? providerConfig.models?.find((candidate) => candidate.id === discoveredModel.id)
298310 : undefined);
311+const metadataOverrideModel =
312+params.preferDiscoveredModelMetadata &&
313+isModelsAddMetadataModel({ provider: params.provider, model: configuredModel })
314+ ? undefined
315+ : configuredModel;
299316const discoveredHeaders = sanitizeModelHeaders(discoveredModel.headers, {
300317stripSecretRefMarkers: true,
301318});
@@ -321,14 +338,14 @@ function applyConfiguredProviderOverrides(params: {
321338const normalizedInput = resolveProviderModelInput({
322339provider: params.provider,
323340 modelId,
324-modelName: configuredModel?.name ?? discoveredModel.name,
325-input: configuredModel?.input,
341+modelName: metadataOverrideModel?.name ?? discoveredModel.name,
342+input: metadataOverrideModel?.input,
326343fallbackInput: discoveredModel.input,
327344});
328345329346const resolvedTransport = resolveProviderTransport({
330347provider: params.provider,
331-api: configuredModel?.api ?? providerConfig.api ?? discoveredModel.api,
348+api: metadataOverrideModel?.api ?? providerConfig.api ?? discoveredModel.api,
332349baseUrl: providerConfig.baseUrl ?? discoveredModel.baseUrl,
333350cfg: params.cfg,
334351runtimeHooks: params.runtimeHooks,
@@ -353,14 +370,14 @@ function applyConfiguredProviderOverrides(params: {
353370 ...discoveredModel,
354371api: requestConfig.api ?? "openai-responses",
355372baseUrl: requestConfig.baseUrl ?? discoveredModel.baseUrl,
356-reasoning: configuredModel?.reasoning ?? discoveredModel.reasoning,
373+reasoning: metadataOverrideModel?.reasoning ?? discoveredModel.reasoning,
357374input: normalizedInput,
358-cost: configuredModel?.cost ?? discoveredModel.cost,
359-contextWindow: configuredModel?.contextWindow ?? discoveredModel.contextWindow,
360-contextTokens: configuredModel?.contextTokens ?? discoveredModel.contextTokens,
361-maxTokens: configuredModel?.maxTokens ?? discoveredModel.maxTokens,
375+cost: metadataOverrideModel?.cost ?? discoveredModel.cost,
376+contextWindow: metadataOverrideModel?.contextWindow ?? discoveredModel.contextWindow,
377+contextTokens: metadataOverrideModel?.contextTokens ?? discoveredModel.contextTokens,
378+maxTokens: metadataOverrideModel?.maxTokens ?? discoveredModel.maxTokens,
362379headers: requestConfig.headers,
363-compat: configuredModel?.compat ?? discoveredModel.compat,
380+compat: metadataOverrideModel?.compat ?? discoveredModel.compat,
364381},
365382providerRequest,
366383);
@@ -458,6 +475,14 @@ function resolvePluginDynamicModelWithRegistry(params: {
458475const { provider, modelId, modelRegistry, cfg, agentDir, workspaceDir } = params;
459476const runtimeHooks = params.runtimeHooks ?? DEFAULT_PROVIDER_RUNTIME_HOOKS;
460477const providerConfig = resolveConfiguredProviderConfig(cfg, provider);
478+const preferDiscoveredModelMetadata = shouldCompareProviderRuntimeResolvedModel({
479+ provider,
480+ modelId,
481+ cfg,
482+ agentDir,
483+ workspaceDir,
484+ runtimeHooks,
485+});
461486const pluginDynamicModel = runtimeHooks.runProviderDynamicModel({
462487 provider,
463488config: cfg,
@@ -481,6 +506,7 @@ function resolvePluginDynamicModelWithRegistry(params: {
481506 modelId,
482507 cfg,
483508 runtimeHooks,
509+ preferDiscoveredModelMetadata,
484510});
485511return normalizeResolvedModel({
486512 provider,
@@ -593,10 +619,7 @@ function preferProviderRuntimeResolvedModel(params: {
593619explicitModel: Model<Api>;
594620runtimeResolvedModel?: Model<Api>;
595621}): Model<Api> {
596-if (
597-params.runtimeResolvedModel &&
598-params.runtimeResolvedModel.contextWindow > params.explicitModel.contextWindow
599-) {
622+if (params.runtimeResolvedModel) {
600623return params.runtimeResolvedModel;
601624}
602625return params.explicitModel;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。