UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

136 lines (135 loc) 7.43 kB
import { c as normalizeOptionalString } from "./string-coerce-mnp54Vah.js"; import { _ as uniqueStrings } from "./string-normalization-WNUDCpXX.js"; import { g as resolveRuntimeConfigCacheKey } from "./runtime-snapshot-D93_HOsR.js"; import { s as loadManifestMetadataSnapshot } from "./manifest-contract-eligibility-DEeoLRlM.js"; import { n as normalizeMediaProviderId, t as normalizeMediaExecutionProviderId } from "./provider-id-DSbuCFIb.js"; import "./defaults.constants-A49pIMjc.js"; import { t as providerSupportsCapability } from "./provider-supports-msSTK_XS.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) { const oldestKey = configRegistryCache.keys().next().value; if (oldestKey) configRegistryCache.delete(oldestKey); } 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 providerHasDeclaredCapability(provider, capability) { return provider?.capabilities?.includes(capability) ?? providerSupportsCapability(provider, capability); } 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; return normalizeOptionalString((providerCfg?.models ?? []).find((model) => Boolean(normalizeOptionalString(model?.id)) && Array.isArray(model?.input) && model.input.includes("image"))?.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 manifestDefaultModel = normalizeOptionalString((params.providerRegistry ?? resolveDefaultRegistry(params.cfg, params.workspaceDir)).get(normalizeMediaProviderId(params.providerId))?.defaultModels?.[params.capability]); if (manifestDefaultModel) return manifestDefaultModel; } /** Resolves auto-discovery provider order for a media capability using manifest priorities. */ function resolveAutoMediaKeyProviders(params) { const prioritized = [...(params.providerRegistry ?? resolveDefaultRegistry(params.cfg, params.workspaceDir)).values()].filter((provider) => providerHasDeclaredCapability(provider, params.capability)).map((provider) => { const priority = provider.autoPriority?.[params.capability]; return typeof priority === "number" && Number.isFinite(priority) ? { provider, priority } : null; }).filter((entry) => entry !== null).toSorted((left, right) => { if (left.priority !== right.priority) return left.priority - right.priority; return left.provider.id.localeCompare(right.provider.id); }).map((entry) => normalizeMediaProviderId(entry.provider.id)).filter(Boolean); 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 };