UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

131 lines (130 loc) 6.86 kB
import { l as normalizeOptionalString } from "./string-coerce-CIXf7egm.js"; import { y as uniqueStrings } from "./string-normalization-DsCfAx8q.js"; import { t as pruneMapToMaxSize } from "./map-size-CNcWiFKu.js"; import { S as resolveRuntimeConfigCacheKey } from "./runtime-snapshot-BaQikjTR.js"; import { c as loadManifestMetadataSnapshot } from "./manifest-contract-eligibility-BbV7X6pV.js"; import { n as normalizeMediaProviderId, t as normalizeMediaExecutionProviderId } from "./provider-id-DSbuCFIb.js"; import { n as resolveDefaultMediaModelFromRegistry, t as resolveAutoMediaKeyProvidersFromRegistry } from "./provider-registry-metadata-BSy540fQ.js"; import "./defaults.constants-Cof2g8lZ.js"; //#region src/media-understanding/manifest-metadata.ts /** Builds a media provider registry from trusted manifest metadata without loading plugin code. */ function buildMediaUnderstandingManifestMetadataRegistry(cfg, workspaceDir) { const registry = /* @__PURE__ */ new Map(); const snapshot = loadManifestMetadataSnapshot({ config: cfg, env: process.env, ...workspaceDir ? { workspaceDir } : {} }); for (const plugin of snapshot.plugins) { const declaredProviders = new Set((plugin.contracts?.mediaUnderstandingProviders ?? []).map((providerId) => normalizeMediaProviderId(providerId))); for (const [providerId, metadata] of Object.entries(plugin.mediaUnderstandingProviderMetadata ?? {})) { const normalizedProviderId = normalizeMediaProviderId(providerId); if (!normalizedProviderId || !declaredProviders.has(normalizedProviderId)) continue; registry.set(normalizedProviderId, { id: normalizedProviderId, capabilities: metadata.capabilities, defaultModels: metadata.defaultModels, autoPriority: metadata.autoPriority, nativeDocumentInputs: metadata.nativeDocumentInputs, documentModels: metadata.documentModels }); } } return registry; } //#endregion //#region src/media-understanding/defaults.ts let defaultRegistryCache = null; const configRegistryCache = /* @__PURE__ */ new Map(); const MAX_CONFIG_REGISTRY_CACHE_ENTRIES = 32; function cacheConfigRegistry(key, registry) { if (!configRegistryCache.has(key) && configRegistryCache.size >= MAX_CONFIG_REGISTRY_CACHE_ENTRIES) pruneMapToMaxSize(configRegistryCache, 31); configRegistryCache.set(key, registry); return registry; } function resolveDefaultRegistry(cfg, workspaceDir) { if (!cfg) { defaultRegistryCache ??= buildMediaUnderstandingManifestMetadataRegistry(); return defaultRegistryCache; } const cacheKey = `${resolveRuntimeConfigCacheKey(cfg)}:${workspaceDir ?? ""}`; const cached = configRegistryCache.get(cacheKey); if (cached) return cached; return cacheConfigRegistry(cacheKey, buildMediaUnderstandingManifestMetadataRegistry(cfg, workspaceDir)); } function resolveConfiguredImageProviderModel(params) { const normalizedProviderId = normalizeMediaProviderId(params.providerId); const providers = params.cfg?.models?.providers; if (!providers || typeof providers !== "object") return; for (const [providerKey, providerCfg] of Object.entries(providers)) { if (normalizeMediaProviderId(providerKey) !== normalizedProviderId) continue; const match = (providerCfg?.models ?? []).find((model) => Boolean(normalizeOptionalString(model?.id)) && Array.isArray(model?.input) && model.input.includes("image")); return normalizeOptionalString(match?.id); } } function resolveConfiguredImageProviderIds(cfg) { const providers = cfg?.models?.providers; if (!providers || typeof providers !== "object") return []; const configured = []; for (const [providerKey, providerCfg] of Object.entries(providers)) { const normalizedProviderId = normalizeMediaExecutionProviderId(providerKey); if (!normalizedProviderId || configured.includes(normalizedProviderId)) continue; if ((providerCfg?.models ?? []).some((model) => Array.isArray(model?.input) && model.input.includes("image"))) configured.push(normalizedProviderId); } return configured; } function isExecutionAliasProvider(providerId) { return normalizeMediaProviderId(providerId) !== providerId; } function insertConfiguredImageProviders(params) { const merged = [...params.prioritized]; for (const providerId of params.configured.filter(isExecutionAliasProvider)) { const canonicalProviderId = normalizeMediaProviderId(providerId); const canonicalIndex = merged.indexOf(canonicalProviderId); if (canonicalIndex >= 0) merged.splice(canonicalIndex, 0, providerId); else merged.unshift(providerId); } for (const providerId of params.configured.filter((id) => !isExecutionAliasProvider(id))) merged.push(providerId); return uniqueStrings(merged); } /** Resolves the default provider model for a media capability from config or manifest metadata. */ function resolveDefaultMediaModel(params) { if (!params.providerRegistry && params.includeConfiguredImageModels !== false) { const configuredImageModel = params.capability === "image" ? resolveConfiguredImageProviderModel({ cfg: params.cfg, providerId: params.providerId }) : void 0; if (configuredImageModel) return configuredImageModel; } const registry = params.providerRegistry ?? resolveDefaultRegistry(params.cfg, params.workspaceDir); return resolveDefaultMediaModelFromRegistry({ providerId: params.providerId, capability: params.capability, providerRegistry: registry }); } /** Resolves auto-discovery provider order for a media capability using manifest priorities. */ function resolveAutoMediaKeyProviders(params) { const registry = params.providerRegistry ?? resolveDefaultRegistry(params.cfg, params.workspaceDir); const prioritized = resolveAutoMediaKeyProvidersFromRegistry({ capability: params.capability, providerRegistry: registry }); if (params.providerRegistry || params.capability !== "image") return prioritized; return insertConfiguredImageProviders({ prioritized, configured: resolveConfiguredImageProviderIds(params.cfg) }); } /** Returns whether provider metadata declares native PDF document input support. */ function providerSupportsNativePdfDocument(params) { return (params.providerRegistry ?? resolveDefaultRegistry(params.cfg, params.workspaceDir)).get(normalizeMediaProviderId(params.providerId))?.nativeDocumentInputs?.includes("pdf") ?? false; } /** Resolves provider-specific document model hints, preserving explicit unsupported markers. */ function resolveDocumentMediaModel(params) { const value = (params.providerRegistry ?? resolveDefaultRegistry(params.cfg, params.workspaceDir)).get(normalizeMediaProviderId(params.providerId))?.documentModels?.[params.document]?.[params.mode]; if (value === false) return false; return normalizeOptionalString(value); } //#endregion export { resolveDocumentMediaModel as i, resolveAutoMediaKeyProviders as n, resolveDefaultMediaModel as r, providerSupportsNativePdfDocument as t };