refactor: genericize speech provider config surface

This commit is contained in:
Peter Steinberger
2026-03-26 22:46:26 +00:00
parent 83ca6fbfc6
commit d72115c9df
26 changed files with 611 additions and 669 deletions

View File

@@ -2,7 +2,7 @@ import { readConfigFileSnapshot } from "../../config/config.js";
import { redactConfigObject } from "../../config/redact-snapshot.js";
import { buildTalkConfigResponse, resolveActiveTalkProviderConfig } from "../../config/talk.js";
import type { TalkProviderConfig } from "../../config/types.gateway.js";
import type { OpenClawConfig, TtsConfig } from "../../config/types.js";
import type { OpenClawConfig, TtsConfig, TtsProviderConfigMap } from "../../config/types.js";
import { canonicalizeSpeechProviderId, getSpeechProvider } from "../../tts/provider-registry.js";
import { synthesizeSpeech, type TtsDirectiveOverrides } from "../../tts/tts.js";
import {
@@ -32,6 +32,12 @@ function trimString(value: unknown): string | undefined {
return trimmed.length > 0 ? trimmed : undefined;
}
function asRecord(value: unknown): Record<string, unknown> | undefined {
return typeof value === "object" && value !== null && !Array.isArray(value)
? (value as Record<string, unknown>)
: undefined;
}
function normalizeAliasKey(value: string): string {
return value.trim().toLowerCase();
}
@@ -87,7 +93,10 @@ function buildTalkTtsConfig(
...baseTts,
auto: "always",
provider,
[provider]: resolvedProviderConfig,
providers: {
...((asRecord(baseTts.providers) ?? {}) as TtsProviderConfigMap),
[provider]: resolvedProviderConfig,
},
};
return {