1010from http import HTTPStatus
1111from queue import Queue
1212from threading import Timer
13- from typing import Any , Dict , List , Union
13+ from typing import Any , Dict , List , Optional , Union
1414
1515from dashscope .api_entities .dashscope_response import RecognitionResponse
1616from dashscope .client .base_api import BaseApi
2727from dashscope .protocol .websocket import WebsocketStreamingMode
2828
2929
30+ def _merge_recognition_params (
31+ kwargs : Dict [str , Any ],
32+ disfluency_removal_enabled : Optional [bool ],
33+ diarization_enabled : Optional [bool ],
34+ speaker_count : Optional [int ],
35+ timestamp_alignment_enabled : Optional [bool ],
36+ special_word_filter : Optional [str ],
37+ audio_event_detection_enabled : Optional [bool ],
38+ ) -> Dict [str , Any ]:
39+ """Merge explicit recognition parameters into ``kwargs`` in place.
40+
41+ Only parameters that are not None are written, so callers can pass
42+ through values that the user did not set.
43+
44+ Returns:
45+ The merged ``kwargs`` dict (the same object).
46+ """
47+ for key , value in (
48+ ("disfluency_removal_enabled" , disfluency_removal_enabled ),
49+ ("diarization_enabled" , diarization_enabled ),
50+ ("speaker_count" , speaker_count ),
51+ ("timestamp_alignment_enabled" , timestamp_alignment_enabled ),
52+ ("special_word_filter" , special_word_filter ),
53+ ("audio_event_detection_enabled" , audio_event_detection_enabled ),
54+ ):
55+ if value is not None :
56+ kwargs [key ] = value
57+ return kwargs
58+
59+
3060class RecognitionResult (RecognitionResponse ):
3161 """The result set of speech recognition, including the single-sentence
3262 recognition result returned by the callback mode, and all recognition
@@ -166,12 +196,12 @@ def __init__(
166196 sample_rate : int ,
167197 workspace : str = None ,
168198 # Recognition parameters
169- disfluency_removal_enabled : bool = None ,
170- diarization_enabled : bool = None ,
171- speaker_count : int = None ,
172- timestamp_alignment_enabled : bool = None ,
173- special_word_filter : str = None ,
174- audio_event_detection_enabled : bool = None ,
199+ disfluency_removal_enabled : Optional [ bool ] = None ,
200+ diarization_enabled : Optional [ bool ] = None ,
201+ speaker_count : Optional [ int ] = None ,
202+ timestamp_alignment_enabled : Optional [ bool ] = None ,
203+ special_word_filter : Optional [ str ] = None ,
204+ audio_event_detection_enabled : Optional [ bool ] = None ,
175205 ** kwargs ,
176206 ):
177207 if model is None :
@@ -193,24 +223,15 @@ def __init__(
193223 self ._silence_timer = None
194224 self ._kwargs = kwargs
195225 # Store recognition parameters
196- if disfluency_removal_enabled is not None :
197- self ._kwargs [
198- "disfluency_removal_enabled"
199- ] = disfluency_removal_enabled
200- if diarization_enabled is not None :
201- self ._kwargs ["diarization_enabled" ] = diarization_enabled
202- if speaker_count is not None :
203- self ._kwargs ["speaker_count" ] = speaker_count
204- if timestamp_alignment_enabled is not None :
205- self ._kwargs [
206- "timestamp_alignment_enabled"
207- ] = timestamp_alignment_enabled
208- if special_word_filter is not None :
209- self ._kwargs ["special_word_filter" ] = special_word_filter
210- if audio_event_detection_enabled is not None :
211- self ._kwargs [
212- "audio_event_detection_enabled"
213- ] = audio_event_detection_enabled
226+ _merge_recognition_params (
227+ self ._kwargs ,
228+ disfluency_removal_enabled ,
229+ diarization_enabled ,
230+ speaker_count ,
231+ timestamp_alignment_enabled ,
232+ special_word_filter ,
233+ audio_event_detection_enabled ,
234+ )
214235 self ._workspace = workspace
215236 self ._start_stream_timestamp = - 1
216237 self ._first_package_timestamp = - 1
@@ -348,12 +369,12 @@ def start(
348369 self ,
349370 phrase_id : str = None ,
350371 # Recognition parameters
351- disfluency_removal_enabled : bool = None ,
352- diarization_enabled : bool = None ,
353- speaker_count : int = None ,
354- timestamp_alignment_enabled : bool = None ,
355- special_word_filter : str = None ,
356- audio_event_detection_enabled : bool = None ,
372+ disfluency_removal_enabled : Optional [ bool ] = None ,
373+ diarization_enabled : Optional [ bool ] = None ,
374+ speaker_count : Optional [ int ] = None ,
375+ timestamp_alignment_enabled : Optional [ bool ] = None ,
376+ special_word_filter : Optional [ str ] = None ,
377+ audio_event_detection_enabled : Optional [ bool ] = None ,
357378 ** kwargs ,
358379 ):
359380 """Real-time speech recognition in asynchronous mode.
@@ -392,24 +413,15 @@ def start(
392413 self ._on_complete_timestamp = - 1
393414 self ._phrase = phrase_id
394415 # Update recognition parameters
395- if disfluency_removal_enabled is not None :
396- self ._kwargs [
397- "disfluency_removal_enabled"
398- ] = disfluency_removal_enabled
399- if diarization_enabled is not None :
400- self ._kwargs ["diarization_enabled" ] = diarization_enabled
401- if speaker_count is not None :
402- self ._kwargs ["speaker_count" ] = speaker_count
403- if timestamp_alignment_enabled is not None :
404- self ._kwargs [
405- "timestamp_alignment_enabled"
406- ] = timestamp_alignment_enabled
407- if special_word_filter is not None :
408- self ._kwargs ["special_word_filter" ] = special_word_filter
409- if audio_event_detection_enabled is not None :
410- self ._kwargs [
411- "audio_event_detection_enabled"
412- ] = audio_event_detection_enabled
416+ _merge_recognition_params (
417+ self ._kwargs ,
418+ disfluency_removal_enabled ,
419+ diarization_enabled ,
420+ speaker_count ,
421+ timestamp_alignment_enabled ,
422+ special_word_filter ,
423+ audio_event_detection_enabled ,
424+ )
413425 self ._kwargs .update (** kwargs )
414426 self ._recognition_once = False
415427 self ._worker = threading .Thread (target = self .__receive_worker )
@@ -434,12 +446,12 @@ def call( # type: ignore[override] # noqa: E501
434446 file : str ,
435447 phrase_id : str = None ,
436448 # Recognition parameters
437- disfluency_removal_enabled : bool = None ,
438- diarization_enabled : bool = None ,
439- speaker_count : int = None ,
440- timestamp_alignment_enabled : bool = None ,
441- special_word_filter : str = None ,
442- audio_event_detection_enabled : bool = None ,
449+ disfluency_removal_enabled : Optional [ bool ] = None ,
450+ diarization_enabled : Optional [ bool ] = None ,
451+ speaker_count : Optional [ int ] = None ,
452+ timestamp_alignment_enabled : Optional [ bool ] = None ,
453+ special_word_filter : Optional [ str ] = None ,
454+ audio_event_detection_enabled : Optional [ bool ] = None ,
443455 ** kwargs ,
444456 ) -> RecognitionResult :
445457 """Real-time speech recognition in synchronous mode.
@@ -482,24 +494,15 @@ def call( # type: ignore[override] # noqa: E501
482494 self ._stream_data = Queue ()
483495 self ._phrase = phrase_id
484496 # Update recognition parameters
485- if disfluency_removal_enabled is not None :
486- self ._kwargs [
487- "disfluency_removal_enabled"
488- ] = disfluency_removal_enabled
489- if diarization_enabled is not None :
490- self ._kwargs ["diarization_enabled" ] = diarization_enabled
491- if speaker_count is not None :
492- self ._kwargs ["speaker_count" ] = speaker_count
493- if timestamp_alignment_enabled is not None :
494- self ._kwargs [
495- "timestamp_alignment_enabled"
496- ] = timestamp_alignment_enabled
497- if special_word_filter is not None :
498- self ._kwargs ["special_word_filter" ] = special_word_filter
499- if audio_event_detection_enabled is not None :
500- self ._kwargs [
501- "audio_event_detection_enabled"
502- ] = audio_event_detection_enabled
497+ _merge_recognition_params (
498+ self ._kwargs ,
499+ disfluency_removal_enabled ,
500+ diarization_enabled ,
501+ speaker_count ,
502+ timestamp_alignment_enabled ,
503+ special_word_filter ,
504+ audio_event_detection_enabled ,
505+ )
503506 self ._kwargs .update (** kwargs )
504507 error_flag : bool = False
505508 sentences : List [Any ] = []
0 commit comments