From 22687906560932e1b9a5b43c439a29d51fc55708 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Wed, 11 Mar 2026 21:17:36 +0700 Subject: [PATCH] refactor: consolidate speech provider config resolution logic --- .../server/speech/speech-config-resolver.ts | 71 ++++++++++++------- 1 file changed, 45 insertions(+), 26 deletions(-) diff --git a/packages/server/src/server/speech/speech-config-resolver.ts b/packages/server/src/server/speech/speech-config-resolver.ts index cda874760..089c37524 100644 --- a/packages/server/src/server/speech/speech-config-resolver.ts +++ b/packages/server/src/server/speech/speech-config-resolver.ts @@ -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 ), }; }