UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

258 lines (257 loc) 12.3 kB
import { l as normalizeOptionalString, o as normalizeLowercaseStringOrEmpty } from "./string-coerce-CIXf7egm.js"; import { n as findNormalizedProviderValue } from "./provider-id-DMd-TDFp.js"; import { i as resolveConfigScopedRuntimeCacheValue, t as PluginLruCache } from "./plugin-cache-primitives-8mVpZ8Xc.js"; import { m as resolvePluginControlPlaneFingerprint } from "./current-plugin-metadata-snapshot-CmSX4G3W.js"; import { n as getActivePluginRegistryWorkspaceDirFromState, r as getPluginRegistryState } from "./runtime-state-Ccxn1fO9.js"; import { a as getPluginRuntimeGatewayRequestScope } from "./gateway-request-scope-BCMYlsDI.js"; import { a as registryContainsRuntimePluginIds, n as getLoadedRuntimePluginRegistry } from "./active-runtime-registry-C5SJbS7x.js"; import { B as resolveProviderConfigApiOwnerHint, z as resolveModelCatalogScope } from "./gateway-startup-plugin-config-Bq9ZdScF.js"; import { n as matchesProviderPluginRef } from "./provider-registry-shared-DVSyKRD5.js"; import { t as getPluginRuntimeGenerationRegistry } from "./generation-scope-Cf83d_iq.js"; import { n as resolvePluginProvidersCore, t as isPluginProvidersLoadInFlight } from "./providers.runtime-DCovueHC.js"; //#region src/plugins/provider-hook-runtime.ts const providerRuntimePluginCache = /* @__PURE__ */ new WeakMap(); const defaultProviderRuntimePluginCache = new PluginLruCache(128); const MODEL_PROVIDER_RUNTIME_PLUGIN_HANDLE_SYMBOL = Symbol.for("openclaw.modelProviderRuntimePluginHandle"); /** Carries one attempt's prepared provider plugin through the model transport boundary. */ function attachModelProviderRuntimePluginHandle(model, runtimeHandle) { const next = { ...model }; next[MODEL_PROVIDER_RUNTIME_PLUGIN_HANDLE_SYMBOL] = runtimeHandle; return next; } /** Reads the provider plugin handle attached to a prepared attempt model. */ function getModelProviderRuntimePluginHandle(model) { return model ? model[MODEL_PROVIDER_RUNTIME_PLUGIN_HANDLE_SYMBOL] : void 0; } function resolveProviderRuntimePluginCacheKey(params, registryState = getPluginRegistryState()) { return JSON.stringify({ providerScope: [params.provider, params.providerOwner].map(normalizeLowercaseStringOrEmpty), modelId: resolveProviderRuntimeLookupModelId(params) ?? null, pluginControlPlane: resolvePluginControlPlaneFingerprint({ config: params.config, env: params.env, workspaceDir: params.workspaceDir }), plugins: params.config?.plugins, models: params.config?.models?.providers, workspaceDir: params.workspaceDir ?? "", applyAutoEnable: params.applyAutoEnable ?? null, pluginMetadata: params.pluginMetadataSnapshot?.manifestRegistry.plugins.map((plugin) => plugin.id).join(",") ?? null, pluginRegistryKey: registryState?.key ?? null, pluginRegistryVersion: registryState?.activeVersion ?? null }); } function matchesProviderLiteralId(provider, providerId) { const normalized = normalizeLowercaseStringOrEmpty(providerId); return Boolean(normalized) && normalizeLowercaseStringOrEmpty(provider.id) === normalized; } function resolveProviderRuntimeLookupModelId(params) { return normalizeOptionalString(params.modelId ?? (typeof params.context?.modelId === "string" ? params.context.modelId : void 0)); } function resolveProviderRuntimeLookupScope(params, ownerRefs) { const providerRefs = [params.provider, ...ownerRefs]; const modelId = resolveProviderRuntimeLookupModelId(params); if (!modelId) return { providerRefs }; return { providerRefs, modelRefs: resolveModelCatalogScope({ cfg: params.config, provider: params.provider, model: modelId }).modelRefs }; } function findProviderRuntimePluginInLoadedRegistries(params) { const generationRegistry = getPluginRuntimeGenerationRegistry(); if (generationRegistry) return findProviderRuntimePluginInRegistry({ registry: generationRegistry, provider: params.lookup.provider, ownerRefs: params.ownerRefs }); const scopedRegistry = getPluginRuntimeGatewayRequestScope()?.pluginRegistry; const scopedPlugin = scopedRegistry ? findProviderRuntimePluginInRegistry({ registry: scopedRegistry, provider: params.lookup.provider, ownerRefs: params.ownerRefs }) : void 0; if (scopedPlugin) return scopedPlugin; const activeRegistry = getLoadedRuntimePluginRegistry({ env: params.lookup.env, workspaceDir: params.lookup.workspaceDir }); const activePlugin = activeRegistry ? findProviderRuntimePluginInRegistry({ registry: activeRegistry, provider: params.lookup.provider, ownerRefs: params.ownerRefs }) : void 0; if (activePlugin) return activePlugin; } function findProviderRuntimePluginInRegistry(params) { const entry = params.registry.providers.find(({ provider: plugin }) => { if (params.ownerRefs.length > 0) return matchesProviderLiteralId(plugin, params.provider) || params.ownerRefs.some((ownerRef) => matchesProviderPluginRef(plugin, ownerRef)); return matchesProviderPluginRef(plugin, params.provider); }); return entry ? Object.assign({}, entry.provider, { pluginId: entry.pluginId }) : void 0; } function hasConfiguredModelProvider(params) { return findNormalizedProviderValue(params.config?.models?.providers, params.provider) !== void 0; } function resolveLoadedProviderPluginsForHooks(params) { const filterRegistryPlugins = (registry) => { const onlyPluginIds = params.onlyPluginIds ? new Set(params.onlyPluginIds) : void 0; return registry.providers.filter(({ pluginId, provider }) => (!onlyPluginIds || onlyPluginIds.has(pluginId)) && (!params.providerRefs?.length || params.providerRefs.some((providerRef) => matchesProviderPluginRef(provider, providerRef)))).map(({ pluginId, provider }) => Object.assign({}, provider, { pluginId })); }; const generationRegistry = getPluginRuntimeGenerationRegistry(); if (generationRegistry) return filterRegistryPlugins(generationRegistry); const env = params.env ?? process.env; const workspaceDir = params.workspaceDir ?? getActivePluginRegistryWorkspaceDirFromState(); const scopedRegistry = getPluginRuntimeGatewayRequestScope()?.pluginRegistry; for (const registry of [scopedRegistry, getLoadedRuntimePluginRegistry({ env, workspaceDir, requiredPluginIds: params.onlyPluginIds })]) if (registry && registryContainsRuntimePluginIds(registry, params.onlyPluginIds)) { const plugins = filterRegistryPlugins(registry); if (plugins.length > 0) return plugins; } } function resolveProviderPluginsForHooks(params) { const loaded = resolveLoadedProviderPluginsForHooks(params); if (loaded) return loaded; return resolvePluginProvidersCore({ ...params, workspaceDir: params.workspaceDir ?? getActivePluginRegistryWorkspaceDirFromState(), env: params.env ?? process.env, activate: false, applyAutoEnable: params.applyAutoEnable, skipIfLoadInFlight: true }); } function resolveProviderRuntimePlugin(params) { const workspaceDir = params.workspaceDir ?? getActivePluginRegistryWorkspaceDirFromState(); const env = params.env ?? process.env; const lookup = { ...params, workspaceDir, env }; const apiOwnerHint = resolveProviderConfigApiOwnerHint({ provider: params.provider, config: params.config }); const ownerRefs = [...new Set([params.providerOwner, apiOwnerHint].filter(Boolean))]; const providerRefs = [params.provider, ...ownerRefs]; const loadedPlugin = findProviderRuntimePluginInLoadedRegistries({ lookup, ownerRefs }); if (loadedPlugin) return loadedPlugin; if (getPluginRuntimeGenerationRegistry()) return; if (isPluginProvidersLoadInFlight({ ...params, workspaceDir, env, providerRefs, activate: false, applyAutoEnable: params.applyAutoEnable })) return; const cacheConfig = params.env && params.env !== process.env ? void 0 : params.config; const registryState = getPluginRegistryState(); const cacheKey = resolveProviderRuntimePluginCacheKey(lookup, registryState); const load = () => { const lookupScope = resolveProviderRuntimeLookupScope(params, ownerRefs); return resolveProviderPluginsForHooks({ config: params.config, workspaceDir, env, providerRefs: lookupScope.providerRefs, modelRefs: lookupScope.modelRefs, applyAutoEnable: params.applyAutoEnable, pluginMetadataSnapshot: params.pluginMetadataSnapshot }).find((plugin) => { if (ownerRefs.length > 0) return matchesProviderLiteralId(plugin, params.provider) || ownerRefs.some((ownerRef) => matchesProviderPluginRef(plugin, ownerRef)); return matchesProviderPluginRef(plugin, params.provider); }) ?? null; }; return (cacheConfig ? resolveConfigScopedRuntimeCacheValue({ cache: providerRuntimePluginCache, config: cacheConfig, key: cacheKey, load }) : !registryState?.key ? load() : (() => { const cached = defaultProviderRuntimePluginCache.get(cacheKey); if (cached !== void 0) return cached; const loaded = load(); defaultProviderRuntimePluginCache.set(cacheKey, loaded); return loaded; })()) ?? void 0; } function resolveLoadedProviderRuntimePlugin(params) { const apiOwnerHint = resolveProviderConfigApiOwnerHint({ provider: params.provider, config: params.config }); return findProviderRuntimePluginInLoadedRegistries({ lookup: params, ownerRefs: [...new Set([params.providerOwner, apiOwnerHint].filter(Boolean))] }); } function resolveProviderHookPlugin(params) { const runtimePlugin = resolveProviderRuntimePlugin(params); if (runtimePlugin) return runtimePlugin; if (hasConfiguredModelProvider(params)) return; return resolveProviderPluginsForHooks({ config: params.config, workspaceDir: params.workspaceDir, env: params.env }).find((candidate) => matchesProviderPluginRef(candidate, params.provider)); } function resolveProviderRuntimePluginHandle(params) { const workspaceDir = params.workspaceDir ?? getActivePluginRegistryWorkspaceDirFromState(); const env = params.env; const runtimePlugin = resolveProviderRuntimePlugin({ ...params, workspaceDir, env }); return { ...params, workspaceDir, env, plugin: runtimePlugin }; } function ensureProviderRuntimePluginHandle(params) { const modelId = resolveProviderRuntimeLookupModelId(params); if (!params.runtimeHandle || modelId && !params.runtimeHandle.plugin && params.runtimeHandle.modelId !== modelId) return resolveProviderRuntimePluginHandle({ provider: params.provider, modelId, config: params.config ?? params.runtimeHandle?.config, workspaceDir: params.workspaceDir ?? params.runtimeHandle?.workspaceDir, env: params.env ?? params.runtimeHandle?.env, applyAutoEnable: params.runtimeHandle?.applyAutoEnable, pluginMetadataSnapshot: params.pluginMetadataSnapshot ?? params.runtimeHandle?.pluginMetadataSnapshot }); return params.runtimeHandle; } function prepareProviderExtraParams(params) { return ensureProviderRuntimePluginHandle(params).plugin?.prepareExtraParams?.(params.context) ?? void 0; } function resolveProviderExtraParamsForTransport(params) { return ensureProviderRuntimePluginHandle(params).plugin?.extraParamsForTransport?.(params.context) ?? void 0; } function resolveProviderAuthProfileId(params) { const resolved = ensureProviderRuntimePluginHandle(params).plugin?.resolveAuthProfileId?.(params.context); return typeof resolved === "string" && resolved.trim() ? resolved.trim() : void 0; } function resolveProviderFollowupFallbackRoute(params) { return ensureProviderRuntimePluginHandle(params).plugin?.followupFallbackRoute?.(params.context) ?? void 0; } function wrapProviderStreamFn(params) { return ensureProviderRuntimePluginHandle(params).plugin?.wrapStreamFn?.(params.context) ?? void 0; } function wrapProviderSimpleCompletionStreamFn(params) { return ensureProviderRuntimePluginHandle(params).plugin?.wrapSimpleCompletionStreamFn?.(params.context) ?? void 0; } //#endregion export { resolveLoadedProviderPluginsForHooks as a, resolveProviderExtraParamsForTransport as c, resolveProviderPluginsForHooks as d, resolveProviderRuntimePlugin as f, wrapProviderStreamFn as h, prepareProviderExtraParams as i, resolveProviderFollowupFallbackRoute as l, wrapProviderSimpleCompletionStreamFn as m, ensureProviderRuntimePluginHandle as n, resolveLoadedProviderRuntimePlugin as o, resolveProviderRuntimePluginHandle as p, getModelProviderRuntimePluginHandle as r, resolveProviderAuthProfileId as s, attachModelProviderRuntimePluginHandle as t, resolveProviderHookPlugin as u };