oclaw/openclaw/extensions/voice-call/src/provider-selection.ts
oliver dbbe3add6a 重构主控编排与运行时预热链路,统一工作区提示词/专家调度协议并补齐 wiki 记忆注入与写回闭环。
同时收敛启动与运维脚本默认行为(含 wiki worker)、更新 Admin 可观测性与相关测试,降低首轮时延并提高运行稳定性。

Made-with: Cursor
2026-04-26 08:34:33 +08:00

61 lines
2 KiB
TypeScript

import { normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime";
type AutoSelectableProvider = {
autoSelectOrder?: number;
};
export function selectConfiguredOrAutoProvider<TProvider extends AutoSelectableProvider>(params: {
configuredProviderId?: string;
getConfiguredProvider: (providerId: string | undefined) => TProvider | undefined;
listProviders: () => Iterable<TProvider>;
}): {
configuredProviderId?: string;
missingConfiguredProvider: boolean;
provider: TProvider | undefined;
} {
const configuredProviderId = normalizeOptionalString(params.configuredProviderId);
const configuredProvider = params.getConfiguredProvider(configuredProviderId);
if (configuredProviderId && !configuredProvider) {
return {
configuredProviderId,
missingConfiguredProvider: true,
provider: undefined,
};
}
return {
configuredProviderId,
missingConfiguredProvider: false,
provider:
configuredProvider ??
[...params.listProviders()].toSorted(
(left, right) =>
(left.autoSelectOrder ?? Number.MAX_SAFE_INTEGER) -
(right.autoSelectOrder ?? Number.MAX_SAFE_INTEGER),
)[0],
};
}
export function resolveProviderRawConfig(params: {
providerId: string;
configuredProviderId?: string;
providerConfigs?: Record<string, Record<string, unknown> | undefined>;
}): Record<string, unknown> {
const canonicalProviderConfig =
params.providerConfigs?.[params.providerId] &&
typeof params.providerConfigs[params.providerId] === "object"
? (params.providerConfigs[params.providerId] as Record<string, unknown>)
: undefined;
const selectedProviderConfig =
params.configuredProviderId &&
params.providerConfigs?.[params.configuredProviderId] &&
typeof params.providerConfigs[params.configuredProviderId] === "object"
? (params.providerConfigs[params.configuredProviderId] as Record<string, unknown>)
: undefined;
return {
...canonicalProviderConfig,
...selectedProviderConfig,
};
}