openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
106 lines (105 loc) • 3.69 kB
JavaScript
import { c as normalizeOptionalString } from "./string-coerce-mnp54Vah.js";
//#region src/plugin-sdk/provider-selection-runtime.ts
/** Select an explicit provider when configured, otherwise the lowest-order auto provider. */
function selectConfiguredOrAutoProvider(params) {
const configuredProviderId = normalizeOptionalString(params.configuredProviderId);
const configuredProvider = configuredProviderId ? params.getConfiguredProvider(configuredProviderId) : void 0;
if (configuredProviderId && !configuredProvider) return {
configuredProviderId,
missingConfiguredProvider: true,
provider: void 0
};
return {
configuredProviderId,
missingConfiguredProvider: false,
provider: configuredProvider ?? selectFirstAutoProvider(params.listProviders())
};
}
/** Merge canonical provider config with selected-provider override config. */
function resolveProviderRawConfig(params) {
const canonicalProviderConfig = readProviderConfig(params.providerConfigs, params.providerId);
const selectedProviderConfig = readProviderConfig(params.providerConfigs, params.configuredProviderId);
return {
...canonicalProviderConfig,
...selectedProviderConfig
};
}
/** Resolve a configured or auto-selected provider that passes capability config checks. */
function resolveConfiguredCapabilityProvider(params) {
const configuredProviderId = normalizeOptionalString(params.configuredProviderId);
if (configuredProviderId) {
const provider = params.getConfiguredProvider(configuredProviderId);
if (!provider) return {
ok: false,
code: "missing-configured-provider",
configuredProviderId
};
return resolveProviderCandidate({
...params,
configuredProviderId,
provider
});
}
const providers = [...params.listProviders()].toSorted(compareProviderAutoSelectOrder);
if (providers.length === 0) return {
ok: false,
code: "no-registered-provider"
};
let firstUnconfigured;
for (const provider of providers) {
const resolution = resolveProviderCandidate({
...params,
provider
});
if (resolution.ok) return resolution;
firstUnconfigured ??= provider;
}
return {
ok: false,
code: "provider-not-configured",
provider: firstUnconfigured
};
}
function compareProviderAutoSelectOrder(left, right) {
return (left.autoSelectOrder ?? Number.MAX_SAFE_INTEGER) - (right.autoSelectOrder ?? Number.MAX_SAFE_INTEGER);
}
function selectFirstAutoProvider(providers) {
let selected;
for (const provider of providers) if (!selected || compareProviderAutoSelectOrder(provider, selected) < 0) selected = provider;
return selected;
}
function readProviderConfig(providerConfigs, providerId) {
if (!providerId) return;
const providerConfig = providerConfigs?.[providerId];
return providerConfig && typeof providerConfig === "object" ? providerConfig : void 0;
}
function resolveProviderCandidate(params) {
const rawProviderConfig = resolveProviderRawConfig({
providerId: params.provider.id,
configuredProviderId: params.configuredProviderId,
providerConfigs: params.providerConfigs
});
const providerConfig = params.resolveProviderConfig({
provider: params.provider,
cfg: params.cfgForResolve,
rawConfig: rawProviderConfig
});
if (!params.isProviderConfigured({
provider: params.provider,
cfg: params.cfg,
providerConfig
})) return {
ok: false,
code: "provider-not-configured",
configuredProviderId: params.configuredProviderId,
provider: params.provider
};
return {
ok: true,
configuredProviderId: params.configuredProviderId,
provider: params.provider,
providerConfig
};
}
//#endregion
export { resolveProviderRawConfig as n, selectConfiguredOrAutoProvider as r, resolveConfiguredCapabilityProvider as t };