refactor: consolidate speech provider config resolution logic

This commit is contained in:
Mohamed Boudra
2026-03-13 13:44:25 +07:00
parent 3a02d1cdd6
commit 2268790656
@@ -42,6 +42,10 @@ const RequestedSpeechProvidersSchema = z.object({
voiceTts: OptionalSpeechProviderSchema.default("local"),
});
function resolveOptionalBooleanFlag(value: unknown): boolean {
return OptionalBooleanFlagSchema.parse(value) ?? true;
}
function resolveRequestedSpeechProviders(params: {
env: NodeJS.ProcessEnv;
persisted: PersistedConfig;
@@ -56,45 +60,60 @@ function resolveRequestedSpeechProviders(params: {
enabled,
});
const dictationSttProviderFromConfig =
params.env.PASEO_DICTATION_STT_PROVIDER ??
params.persisted.features?.dictation?.stt?.provider;
const voiceSttProviderFromConfig =
params.env.PASEO_VOICE_STT_PROVIDER ??
params.persisted.features?.voiceMode?.stt?.provider;
const voiceTtsProviderFromConfig =
params.env.PASEO_VOICE_TTS_PROVIDER ??
params.persisted.features?.voiceMode?.tts?.provider;
const dictationEnabled =
OptionalBooleanFlagSchema.parse(
params.env.PASEO_DICTATION_ENABLED ?? params.persisted.features?.dictation?.enabled
) ?? true;
const voiceModeEnabled =
OptionalBooleanFlagSchema.parse(
params.env.PASEO_VOICE_MODE_ENABLED ?? params.persisted.features?.voiceMode?.enabled
) ?? true;
const featureProviders = {
dictationStt: {
configuredValue:
params.env.PASEO_DICTATION_STT_PROVIDER ??
params.persisted.features?.dictation?.stt?.provider,
enabled: resolveOptionalBooleanFlag(
params.env.PASEO_DICTATION_ENABLED ?? params.persisted.features?.dictation?.enabled
),
},
voiceStt: {
configuredValue:
params.env.PASEO_VOICE_STT_PROVIDER ??
params.persisted.features?.voiceMode?.stt?.provider,
enabled: resolveOptionalBooleanFlag(
params.env.PASEO_VOICE_MODE_ENABLED ?? params.persisted.features?.voiceMode?.enabled
),
},
voiceTts: {
configuredValue:
params.env.PASEO_VOICE_TTS_PROVIDER ??
params.persisted.features?.voiceMode?.tts?.provider,
enabled: resolveOptionalBooleanFlag(
params.env.PASEO_VOICE_MODE_ENABLED ?? params.persisted.features?.voiceMode?.enabled
),
},
} satisfies Record<
keyof RequestedSpeechProviders,
{
configuredValue: string | undefined;
enabled: boolean;
}
>;
const parsed = RequestedSpeechProvidersSchema.parse({
dictationStt: dictationSttProviderFromConfig ?? "local",
voiceStt: voiceSttProviderFromConfig ?? "local",
voiceTts: voiceTtsProviderFromConfig ?? "local",
dictationStt: featureProviders.dictationStt.configuredValue ?? "local",
voiceStt: featureProviders.voiceStt.configuredValue ?? "local",
voiceTts: featureProviders.voiceTts.configuredValue ?? "local",
});
return {
dictationStt: resolveFeatureProvider(
dictationSttProviderFromConfig,
featureProviders.dictationStt.configuredValue,
parsed.dictationStt,
dictationEnabled
featureProviders.dictationStt.enabled
),
voiceStt: resolveFeatureProvider(
voiceSttProviderFromConfig,
featureProviders.voiceStt.configuredValue,
parsed.voiceStt,
voiceModeEnabled
featureProviders.voiceStt.enabled
),
voiceTts: resolveFeatureProvider(
voiceTtsProviderFromConfig,
featureProviders.voiceTts.configuredValue,
parsed.voiceTts,
voiceModeEnabled
featureProviders.voiceTts.enabled
),
};
}