@@ -6,6 +6,7 @@ import { resolveRuntimeConfigCacheKey } from "../config/runtime-snapshot.js";
66import type { OpenClawConfig } from "../config/types.js" ;
77import { configuredModelInputSupportsImage } from "./known-model-capabilities.js" ;
88import { buildMediaUnderstandingManifestMetadataRegistry } from "./manifest-metadata.js" ;
9+ import { knownProviderModelCapabilities } from "./model-capability-overrides.js" ;
910import {
1011 normalizeMediaExecutionProviderId ,
1112 normalizeMediaProviderId ,
@@ -24,14 +25,14 @@ export {
2425 MIN_AUDIO_FILE_BYTES ,
2526} from "./defaults.constants.js" ;
2627
27- let defaultRegistryCache : Map < string , MediaUnderstandingProvider > | null = null ;
28- const configRegistryCache = new Map < string , Map < string , MediaUnderstandingProvider > > ( ) ;
28+ let defaultRegistryCache : ReadonlyMap < string , MediaUnderstandingProvider > | null = null ;
29+ const configRegistryCache = new Map < string , ReadonlyMap < string , MediaUnderstandingProvider > > ( ) ;
2930const MAX_CONFIG_REGISTRY_CACHE_ENTRIES = 32 ;
3031
3132function cacheConfigRegistry (
3233 key : string ,
33- registry : Map < string , MediaUnderstandingProvider > ,
34- ) : Map < string , MediaUnderstandingProvider > {
34+ registry : ReadonlyMap < string , MediaUnderstandingProvider > ,
35+ ) : ReadonlyMap < string , MediaUnderstandingProvider > {
3536 // Config snapshots are process-stable enough for bounded reuse; cap entries so
3637 // tests and multi-workspace runs cannot grow this cache without limit.
3738 if (
@@ -73,7 +74,7 @@ function providerHasDeclaredCapability(
7374function resolveConfiguredImageProviderModel ( params : {
7475 cfg ?: OpenClawConfig ;
7576 providerId : string ;
76- registry : Map < string , MediaUnderstandingProvider > ;
77+ registry : ReadonlyMap < string , MediaUnderstandingProvider > ;
7778} ) : string | undefined {
7879 const normalizedProviderId = normalizeMediaProviderId ( params . providerId ) ;
7980 const providers = params . cfg ?. models ?. providers ;
@@ -92,7 +93,9 @@ function resolveConfiguredImageProviderModel(params: {
9293 configuredModelInputSupportsImage ( {
9394 modelId : id ,
9495 input : model ?. input ,
95- provider : params . registry . get ( normalizeMediaProviderId ( providerKey ) ) ,
96+ provider :
97+ params . registry . get ( normalizeMediaProviderId ( providerKey ) ) ??
98+ knownProviderModelCapabilities ( providerKey ) ,
9699 } ) ,
97100 ) ;
98101 } ) ;
@@ -103,7 +106,7 @@ function resolveConfiguredImageProviderModel(params: {
103106
104107function resolveConfiguredImageProviderIds ( params : {
105108 cfg ?: OpenClawConfig ;
106- registry : Map < string , MediaUnderstandingProvider > ;
109+ registry : ReadonlyMap < string , MediaUnderstandingProvider > ;
107110} ) : string [ ] {
108111 const providers = params . cfg ?. models ?. providers ;
109112 if ( ! providers || typeof providers !== "object" ) {
@@ -123,7 +126,9 @@ function resolveConfiguredImageProviderIds(params: {
123126 configuredModelInputSupportsImage ( {
124127 modelId : id ,
125128 input : model ?. input ,
126- provider : params . registry . get ( normalizeMediaProviderId ( providerKey ) ) ,
129+ provider :
130+ params . registry . get ( normalizeMediaProviderId ( providerKey ) ) ??
131+ knownProviderModelCapabilities ( providerKey ) ,
127132 } ) ,
128133 ) ;
129134 } ) ;
@@ -164,12 +169,12 @@ export function resolveDefaultMediaModel(params: {
164169 capability : MediaUnderstandingCapability ;
165170 cfg ?: OpenClawConfig ;
166171 workspaceDir ?: string ;
167- providerRegistry ?: Map < string , MediaUnderstandingProvider > ;
172+ providerRegistry ?: ReadonlyMap < string , MediaUnderstandingProvider > ;
168173 includeConfiguredImageModels ?: boolean ;
169174} ) : string | undefined {
170175 const registry =
171176 params . providerRegistry ?? resolveDefaultRegistry ( params . cfg , params . workspaceDir ) ;
172- if ( ! params . providerRegistry && params . includeConfiguredImageModels !== false ) {
177+ if ( params . includeConfiguredImageModels !== false ) {
173178 const configuredImageModel =
174179 params . capability === "image"
175180 ? resolveConfiguredImageProviderModel ( {
@@ -197,7 +202,7 @@ export function resolveAutoMediaKeyProviders(params: {
197202 capability : MediaUnderstandingCapability ;
198203 cfg ?: OpenClawConfig ;
199204 workspaceDir ?: string ;
200- providerRegistry ?: Map < string , MediaUnderstandingProvider > ;
205+ providerRegistry ?: ReadonlyMap < string , MediaUnderstandingProvider > ;
201206} ) : string [ ] {
202207 const registry =
203208 params . providerRegistry ?? resolveDefaultRegistry ( params . cfg , params . workspaceDir ) ;
@@ -236,7 +241,7 @@ export function providerSupportsNativePdfDocument(params: {
236241 providerId : string ;
237242 cfg ?: OpenClawConfig ;
238243 workspaceDir ?: string ;
239- providerRegistry ?: Map < string , MediaUnderstandingProvider > ;
244+ providerRegistry ?: ReadonlyMap < string , MediaUnderstandingProvider > ;
240245} ) : boolean {
241246 const registry =
242247 params . providerRegistry ?? resolveDefaultRegistry ( params . cfg , params . workspaceDir ) ;
@@ -251,7 +256,7 @@ export function resolveDocumentMediaModel(params: {
251256 mode : "textExtraction" | "image" ;
252257 cfg ?: OpenClawConfig ;
253258 workspaceDir ?: string ;
254- providerRegistry ?: Map < string , MediaUnderstandingProvider > ;
259+ providerRegistry ?: ReadonlyMap < string , MediaUnderstandingProvider > ;
255260} ) : string | false | undefined {
256261 const registry =
257262 params . providerRegistry ?? resolveDefaultRegistry ( params . cfg , params . workspaceDir ) ;
0 commit comments