UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

103 lines (102 loc) 5.34 kB
import { r as normalizeProviderId } from "./provider-id-DMd-TDFp.js"; import { a as resolveMergedModelProviderModels, r as resolveMergedModelProviderConfig } from "./model-provider-config-DX4Bzd5F.js"; import { t as splitTrailingAuthProfile } from "./model-ref-profile-BIKs-96s.js"; import { t as PREPARED_THINKING_POLICY } from "./provider-thinking-catalog-Bv_TFmaq.js"; //#region src/agents/model-catalog-route.ts /** Projects physical catalog rows for browse/presentation; never runtime execution. */ function normalizeExactModelId(value) { return splitTrailingAuthProfile(value).model.trim().toLowerCase(); } /** Reads explicit logical capability overrides without re-resolving auth. */ function resolveConfiguredModelCatalogOverrides(params) { const provider = normalizeProviderId(params.entry.provider); const providerConfig = resolveMergedModelProviderConfig(params.cfg, provider); if (!providerConfig) return; const configuredIdentity = params.policy?.resolveIdentity(params.entry); const normalizeConfiguredModelId = (modelId) => params.policy?.resolveIdentity({ provider: params.entry.provider, id: modelId })?.key ?? normalizeExactModelId(modelId); const model = resolveMergedModelProviderModels({ models: providerConfig.models, normalizeModelId: normalizeConfiguredModelId }).get(configuredIdentity?.key ?? normalizeExactModelId(params.entry.id)); const overrides = { ...model?.name ? { name: model.name } : {}, ...model?.contextWindow !== void 0 ? { contextWindow: model.contextWindow } : {}, ...model?.contextTokens !== void 0 ? { contextTokens: model.contextTokens } : {}, ...model?.reasoning !== void 0 ? { reasoning: model.reasoning } : {}, ...model?.reasoning !== void 0 ? { configuredReasoning: model.reasoning } : {}, ...model?.thinkingLevelMap ? { thinkingLevelMap: model.thinkingLevelMap } : {}, ...model?.input !== void 0 ? { input: model.input } : {} }; return Object.keys(overrides).length > 0 ? overrides : void 0; } function sameLogicalModel(a, identity, policy) { return policy.resolveIdentity(a)?.key === identity.key; } function logicalIdentity(entry, id, name, lifecycleEntry = entry) { return { id, name: name ?? id, provider: entry.provider, ...entry.alias ? { alias: entry.alias } : {}, ...lifecycleEntry.providerOrder !== void 0 ? { providerOrder: lifecycleEntry.providerOrder } : {}, ...lifecycleEntry.status ? { status: lifecycleEntry.status } : {}, ...lifecycleEntry.statusReason ? { statusReason: lifecycleEntry.statusReason } : {}, ...lifecycleEntry.replaces ? { replaces: lifecycleEntry.replaces } : {}, ...lifecycleEntry.replacedBy ? { replacedBy: lifecycleEntry.replacedBy } : {} }; } function applyLogicalOverrides(entry, overrides) { return overrides ? { ...entry, ...overrides } : entry; } /** Finds the exact physical row that supplied a selected provider route. */ function findModelCatalogRouteDonor(params) { const identity = params.policy.resolveIdentity(params.entry); const physicalDonor = identity ? params.catalog?.find((candidate) => sameLogicalModel(candidate, identity, params.policy) && params.policy.matchesRoute(candidate, params.route)) : void 0; if (physicalDonor) return physicalDonor; return params.policy.matchesRoute(params.entry, params.route) ? params.entry : void 0; } /** * Builds one allowlisted logical catalog row. * * Selected-route capabilities come only from a physical row accepted by the * provider-owned matcher. Unresolved managed routes expose identity only. * Auth, runtime, request overrides, and other private transport facts never * enter the returned catalog shape. */ function projectModelCatalogEntryForRoute(params) { if (params.projection.kind === "unmanaged") return applyLogicalOverrides(params.entry, params.overrides); const identity = params.projection.policy.resolveIdentity(params.entry) ?? { id: splitTrailingAuthProfile(params.entry.id).model, key: `${normalizeProviderId(params.entry.provider)}/${normalizeExactModelId(params.entry.id)}` }; if (params.projection.kind === "unresolved") return applyLogicalOverrides(logicalIdentity(params.entry, identity.id, params.entry.name), params.overrides); const { policy, route } = params.projection; const donor = findModelCatalogRouteDonor({ entry: params.entry, route, policy, catalog: params.catalog }); const projected = logicalIdentity(params.entry, identity.id, donor?.name ?? params.entry.name, donor ?? params.entry); const thinkingPolicy = donor?.[PREPARED_THINKING_POLICY]; return applyLogicalOverrides({ ...projected, api: route.api, baseUrl: route.baseUrl, ...donor?.contextWindow !== void 0 ? { contextWindow: donor.contextWindow } : {}, ...donor?.contextTokens !== void 0 ? { contextTokens: donor.contextTokens } : {}, ...donor?.reasoning !== void 0 ? { reasoning: donor.reasoning } : {}, ...donor?.thinkingLevelMap ? { thinkingLevelMap: donor.thinkingLevelMap } : {}, ...donor?.thinkingPolicyProvider ? { thinkingPolicyProvider: donor.thinkingPolicyProvider } : {}, ...thinkingPolicy !== void 0 ? { [PREPARED_THINKING_POLICY]: thinkingPolicy } : {}, ...donor?.input !== void 0 ? { input: donor.input } : {} }, params.overrides); } //#endregion export { projectModelCatalogEntryForRoute as n, resolveConfiguredModelCatalogOverrides as r, findModelCatalogRouteDonor as t };