UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

171 lines (170 loc) 6.96 kB
import { d as resolveAgentEntry } from "./agent-scope-config-DcbEhP0R.js"; import { r as normalizeProviderId } from "./provider-id-DMd-TDFp.js"; import { i as parseModelCatalogRef, t as buildModelCatalogMergeKey } from "./model-catalog-refs-BdjEHOKQ.js"; import { t as MODEL_APIS } from "./types.models-Z6EPRVI_.js"; import { r as collectConfiguredModelRefs } from "./configured-model-refs-DEXTV_K3.js"; import { n as resolveConfiguredModelHarnessRuntime } from "./harness-runtimes-BrMGAsrQ.js"; import { n as normalizePluginDiscoveryResult } from "./provider-discovery-BPqo7Vo1.js"; import { t as buildInlineProviderModels } from "./model.inline-provider-DfSbZZJQ.js"; import { o as resolveEffectiveAgentRuntime } from "./thinking-runtime-BiFbTVdI.js"; //#region src/agents/prepared-model-runtime.configured.ts /** Collects defaults, global refs, and only the selected agent's overrides. */ function collectPreparedModelRuntimeConfiguredRefs(config, agentId) { if (!agentId) return collectConfiguredModelRefs(config); const entry = resolveAgentEntry(config, agentId); return collectConfiguredModelRefs({ ...config, agents: { ...config.agents?.defaults ? { defaults: config.agents.defaults } : {}, list: entry ? [entry] : [] } }); } function isCatalogModelApi(value) { return value !== void 0 && MODEL_APIS.includes(value); } function toStaticCatalogEntry(model) { return { id: model.id, name: model.name ?? model.id, provider: model.provider, ...isCatalogModelApi(model.api) ? { api: model.api } : {}, ...model.baseUrl ? { baseUrl: model.baseUrl } : {}, ...model.contextWindow ? { contextWindow: model.contextWindow } : {}, ...model.contextWindows ? { contextWindows: model.contextWindows.map((option) => ({ ...option })) } : {}, ...model.contextWindowDefault ? { contextWindowDefault: model.contextWindowDefault } : {}, ...model.contextTokens ? { contextTokens: model.contextTokens } : {}, ...model.reasoning !== void 0 ? { reasoning: model.reasoning } : {}, ...model.thinkingLevelMap ? { thinkingLevelMap: model.thinkingLevelMap } : {}, ...model.input ? { input: model.input } : {}, ...model.params ? { params: model.params } : {}, ...model.compat ? { compat: model.compat } : {}, ...model.mediaInput ? { mediaInput: model.mediaInput } : {} }; } function collectPreparedModelRuntimeProviderIds(config, credentials, includeCredentialProviders, configuredModelRefs = collectConfiguredModelRefs(config), agentId) { const providerIds = /* @__PURE__ */ new Set(); const addProviderId = (value) => { const providerId = normalizeProviderId(value); if (providerId) providerIds.add(providerId); }; if (includeCredentialProviders) for (const providerId of Object.keys(credentials)) addProviderId(providerId); for (const ref of configuredModelRefs) { const separator = ref.value.indexOf("/"); if (separator > 0) addProviderId(ref.value.slice(0, separator)); addProviderId(resolveConfiguredModelHarnessRuntime({ config, modelRef: ref.value, agentId, includeImplicitRuntimePreferences: false }) ?? ""); } return [...providerIds].toSorted((left, right) => left.localeCompare(right)); } function hasConfiguredInlineProviderModel(config, provider, modelId, matchesStaticModelId) { return Object.entries(config.models?.providers ?? {}).some(([providerId, providerConfig]) => normalizeProviderId(providerId) === provider && (providerConfig.models ?? []).some((model) => matchesStaticModelId({ candidateId: model.id, rowProvider: providerId, provider, modelId }))); } function collectConfiguredProviderIdsNeedingStaticCatalog(params) { const providerIds = /* @__PURE__ */ new Set(); for (const { value } of params.configuredModelRefs ?? collectConfiguredModelRefs(params.config)) { const parsed = parseModelCatalogRef(value); if (!parsed) continue; const { provider, modelId } = parsed; if (hasConfiguredInlineProviderModel(params.config, provider, modelId, params.matchesStaticModelId) || params.resolveStaticCatalogModel({ provider, modelId })) continue; providerIds.add(provider); } return [...providerIds].toSorted((left, right) => left.localeCompare(right)); } function prepareConfiguredRuntimeModels(params) { const prepared = []; const seen = /* @__PURE__ */ new Set(); for (const { modelId, provider } of params.configuredModelRefs) { const key = buildModelCatalogMergeKey(provider, modelId); if (seen.has(key)) continue; seen.add(key); const model = params.resolveStaticCatalogModel({ provider, modelId }) ?? findPreparedProviderStaticCatalogModel({ prepared: params.preparedStaticProviderCatalog, metadataSnapshot: params.metadataSnapshot, provider, modelId, matchesStaticModelId: params.matchesStaticModelId }) ?? params.providerStaticModels.find((candidate) => params.matchesStaticModelId({ candidateId: candidate.id, rowProvider: candidate.provider, provider, modelId })); if (model) prepared.push({ provider, modelId, model }); } return prepared; } /** Resolve concrete runtime capabilities once while materializing agent facts. */ function prepareRuntimeCapabilityModels(params) { const prepared = []; const seen = /* @__PURE__ */ new Set(); for (const candidate of params.candidates) { const provider = normalizeProviderId(candidate.provider); const modelId = candidate.id.trim(); if (!provider || !modelId) continue; const runtime = resolveEffectiveAgentRuntime({ cfg: params.config, provider, modelId, modelApi: candidate.api, modelBaseUrl: candidate.baseUrl, agentId: params.agentId }); if (runtime === provider || runtime === "openclaw") continue; const key = buildModelCatalogMergeKey(provider, modelId); if (seen.has(key)) continue; const model = params.resolveRuntimeModel({ provider: runtime, modelId }); if (!model) continue; seen.add(key); prepared.push({ provider, modelId, model }); } return prepared; } function findPreparedProviderStaticCatalogModel(params) { if (!params.prepared) return; for (const { provider, result } of params.prepared.entries) for (const [providerId, providerConfig] of Object.entries(normalizePluginDiscoveryResult({ provider, result }))) { const model = (providerConfig.models ?? []).find((candidate) => params.matchesStaticModelId({ candidateId: candidate.id, rowProvider: providerId, provider: params.provider, modelId: params.modelId })); if (!model) continue; const [resolved] = buildInlineProviderModels({ [providerId]: { ...providerConfig, models: [model] } }, { providerMetadataOwners: params.metadataSnapshot.owners }); if (resolved) return resolved; } } //#endregion export { prepareRuntimeCapabilityModels as a, prepareConfiguredRuntimeModels as i, collectPreparedModelRuntimeConfiguredRefs as n, toStaticCatalogEntry as o, collectPreparedModelRuntimeProviderIds as r, collectConfiguredProviderIdsNeedingStaticCatalog as t };