openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
109 lines (108 loc) • 6.03 kB
JavaScript
import { l as normalizeOptionalString } from "./string-coerce-1VuiLaaR.mjs";
import { y as uniqueStrings } from "./string-normalization-D6DKCpwE.mjs";
import { c as loadManifestMetadataSnapshot } from "./manifest-contract-eligibility-P_yAPTzd.mjs";
import "./defaults.constants-Cof2g8lZ.mjs";
import { n as normalizeMediaProviderId, t as normalizeMediaExecutionProviderId } from "./provider-id-BZvihdyi.mjs";
import { n as resolveDefaultMediaModelFromRegistry, t as resolveAutoMediaKeyProvidersFromRegistry } from "./provider-registry-metadata-DGhKsOa4.mjs";
//#region src/media-understanding/manifest-metadata.ts
const registriesByManifest = /* @__PURE__ */ new WeakMap();
/** Builds a media provider registry from trusted manifest metadata without loading plugin code. */
function buildMediaUnderstandingManifestMetadataRegistry(cfg, workspaceDir) {
const snapshot = loadManifestMetadataSnapshot({
config: cfg,
env: process.env,
...workspaceDir ? { workspaceDir } : {}
});
const cached = registriesByManifest.get(snapshot.manifestRegistry);
if (cached) return cached;
const registry = /* @__PURE__ */ new Map();
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
});
}
}
registriesByManifest.set(snapshot.manifestRegistry, registry);
return registry;
}
//#endregion
//#region src/media-understanding/defaults.ts
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;
}
/** 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 ?? buildMediaUnderstandingManifestMetadataRegistry(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 ?? buildMediaUnderstandingManifestMetadataRegistry(params.cfg, params.workspaceDir);
const prioritized = resolveAutoMediaKeyProvidersFromRegistry({
capability: params.capability,
providerRegistry: registry
});
if (params.providerRegistry || params.capability !== "image") return prioritized;
const configured = resolveConfiguredImageProviderIds(params.cfg);
const merged = [...prioritized];
for (const providerId of configured.filter(isExecutionAliasProvider)) {
const canonicalIndex = merged.indexOf(normalizeMediaProviderId(providerId));
if (canonicalIndex >= 0) merged.splice(canonicalIndex, 0, providerId);
else merged.unshift(providerId);
}
for (const providerId of configured.filter((id) => !isExecutionAliasProvider(id))) merged.push(providerId);
return uniqueStrings(merged);
}
/** Returns whether provider metadata declares native PDF document input support. */
function providerSupportsNativePdfDocument(params) {
return (params.providerRegistry ?? buildMediaUnderstandingManifestMetadataRegistry(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 ?? buildMediaUnderstandingManifestMetadataRegistry(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 };