mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-04 06:00:23 +00:00
77 lines
2.3 KiB
TypeScript
77 lines
2.3 KiB
TypeScript
import type { OpenClawConfig } from "../config/config.js";
|
|
import { resolvePluginCapabilityProviders } from "../plugins/capability-provider-runtime.js";
|
|
import type { SpeechProviderPlugin } from "../plugins/types.js";
|
|
import type { SpeechProviderId } from "./provider-types.js";
|
|
|
|
function trimToUndefined(value: string | undefined): string | undefined {
|
|
const trimmed = value?.trim().toLowerCase();
|
|
return trimmed ? trimmed : undefined;
|
|
}
|
|
|
|
export function normalizeSpeechProviderId(
|
|
providerId: string | undefined,
|
|
): SpeechProviderId | undefined {
|
|
return trimToUndefined(providerId);
|
|
}
|
|
|
|
function resolveSpeechProviderPluginEntries(cfg?: OpenClawConfig): SpeechProviderPlugin[] {
|
|
return resolvePluginCapabilityProviders({
|
|
key: "speechProviders",
|
|
cfg,
|
|
});
|
|
}
|
|
|
|
function buildProviderMaps(cfg?: OpenClawConfig): {
|
|
canonical: Map<string, SpeechProviderPlugin>;
|
|
aliases: Map<string, SpeechProviderPlugin>;
|
|
} {
|
|
const canonical = new Map<string, SpeechProviderPlugin>();
|
|
const aliases = new Map<string, SpeechProviderPlugin>();
|
|
const register = (provider: SpeechProviderPlugin) => {
|
|
const id = normalizeSpeechProviderId(provider.id);
|
|
if (!id) {
|
|
return;
|
|
}
|
|
canonical.set(id, provider);
|
|
aliases.set(id, provider);
|
|
for (const alias of provider.aliases ?? []) {
|
|
const normalizedAlias = normalizeSpeechProviderId(alias);
|
|
if (normalizedAlias) {
|
|
aliases.set(normalizedAlias, provider);
|
|
}
|
|
}
|
|
};
|
|
|
|
for (const provider of resolveSpeechProviderPluginEntries(cfg)) {
|
|
register(provider);
|
|
}
|
|
|
|
return { canonical, aliases };
|
|
}
|
|
|
|
export function listSpeechProviders(cfg?: OpenClawConfig): SpeechProviderPlugin[] {
|
|
return [...buildProviderMaps(cfg).canonical.values()];
|
|
}
|
|
|
|
export function getSpeechProvider(
|
|
providerId: string | undefined,
|
|
cfg?: OpenClawConfig,
|
|
): SpeechProviderPlugin | undefined {
|
|
const normalized = normalizeSpeechProviderId(providerId);
|
|
if (!normalized) {
|
|
return undefined;
|
|
}
|
|
return buildProviderMaps(cfg).aliases.get(normalized);
|
|
}
|
|
|
|
export function canonicalizeSpeechProviderId(
|
|
providerId: string | undefined,
|
|
cfg?: OpenClawConfig,
|
|
): SpeechProviderId | undefined {
|
|
const normalized = normalizeSpeechProviderId(providerId);
|
|
if (!normalized) {
|
|
return undefined;
|
|
}
|
|
return getSpeechProvider(normalized, cfg)?.id ?? normalized;
|
|
}
|