@@ -78,6 +78,23 @@ function normalizeCommitStrategy(value: unknown): "manual" | "vad" | undefined {
7878 throw new Error ( `Invalid ElevenLabs realtime transcription commit strategy: ${ normalized } ` ) ;
7979}
8080
81+ function normalizePositiveSafeInteger ( value : unknown ) : number | undefined {
82+ const parsed = readFiniteNumber ( value ) ;
83+ return parsed !== undefined && Number . isSafeInteger ( parsed ) && parsed > 0 ? parsed : undefined ;
84+ }
85+
86+ function normalizeFiniteRange ( value : unknown , min : number , max : number ) : number | undefined {
87+ const parsed = readFiniteNumber ( value ) ;
88+ return parsed !== undefined && parsed >= min && parsed <= max ? parsed : undefined ;
89+ }
90+
91+ function normalizeIntegerRange ( value : unknown , min : number , max : number ) : number | undefined {
92+ const parsed = readFiniteNumber ( value ) ;
93+ return parsed !== undefined && Number . isSafeInteger ( parsed ) && parsed >= min && parsed <= max
94+ ? parsed
95+ : undefined ;
96+ }
97+
8198function normalizeProviderConfig (
8299 config : RealtimeTranscriptionProviderConfig ,
83100) : ElevenLabsRealtimeTranscriptionProviderConfig {
@@ -90,15 +107,25 @@ function normalizeProviderConfig(
90107 baseUrl : normalizeOptionalString ( raw . baseUrl ) ,
91108 modelId : normalizeOptionalString ( raw . modelId ?? raw . model ?? raw . sttModel ) ,
92109 audioFormat : normalizeOptionalString ( raw . audioFormat ?? raw . audio_format ?? raw . encoding ) ,
93- sampleRate : readFiniteNumber ( raw . sampleRate ?? raw . sample_rate ) ,
110+ sampleRate : normalizePositiveSafeInteger ( raw . sampleRate ?? raw . sample_rate ) ,
94111 languageCode : normalizeOptionalString ( raw . languageCode ?? raw . language ) ,
95112 commitStrategy : normalizeCommitStrategy ( raw . commitStrategy ?? raw . commit_strategy ) ,
96- vadSilenceThresholdSecs : readFiniteNumber (
113+ vadSilenceThresholdSecs : normalizeFiniteRange (
97114 raw . vadSilenceThresholdSecs ?? raw . vad_silence_threshold_secs ,
115+ 0.3 ,
116+ 3 ,
117+ ) ,
118+ vadThreshold : normalizeFiniteRange ( raw . vadThreshold ?? raw . vad_threshold , 0.1 , 0.9 ) ,
119+ minSpeechDurationMs : normalizeIntegerRange (
120+ raw . minSpeechDurationMs ?? raw . min_speech_duration_ms ,
121+ 50 ,
122+ 2_000 ,
123+ ) ,
124+ minSilenceDurationMs : normalizeIntegerRange (
125+ raw . minSilenceDurationMs ?? raw . min_silence_duration_ms ,
126+ 50 ,
127+ 2_000 ,
98128 ) ,
99- vadThreshold : readFiniteNumber ( raw . vadThreshold ?? raw . vad_threshold ) ,
100- minSpeechDurationMs : readFiniteNumber ( raw . minSpeechDurationMs ?? raw . min_speech_duration_ms ) ,
101- minSilenceDurationMs : readFiniteNumber ( raw . minSilenceDurationMs ?? raw . min_silence_duration_ms ) ,
102129 } ;
103130}
104131
0 commit comments