Ë
    þÍ:j: ã            	       óV  — d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZmZmZ d dlmZ d dlZd dlZd dlZd dlmZ d dlmZmZ d d	lmZ d d
lm Z m!Z! d dl"m#Z#m$Z$m%Z%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+ e G d„ d«      «       Z,e G d„ d«      «       Z-e G d„ d«      «       Z.e G d„ d«      «       Z/ G d„ d«      Z0 G d„ d«      Z1dee-   dee2   de3dee-   fd„Z4dejj                  dejl                  fd„Z7d e8de9fd!„Z:d"e!d#ee3   deee3      fd$„Z;d%ee2   d&e8d'e8ddfd(„Z<y))é    N)ÚasdictÚ	dataclass)Ú	signature)Úceil)ÚBinaryIOÚIterableÚListÚOptionalÚTupleÚUnion)Úwarn)Útqdm)Údecode_audioÚpad_or_trim)ÚFeatureExtractor)Ú_LANGUAGE_CODESÚ	Tokenizer)Údownload_modelÚformat_timestampÚget_endÚ
get_logger)ÚSpeechTimestampsMapÚ
VadOptionsÚcollect_chunksÚget_speech_timestampsc                   ó<   — e Zd ZU eed<   eed<   eed<   eed<   d„ Zy)ÚWordÚstartÚendÚwordÚprobabilityc                 ó:   — t        dt        d«       t        | «      S )NzIWord._asdict() method is deprecated, use dataclasses.asdict(Word) insteadé   ©r   ÚDeprecationWarningr   ©Úselfs    ún/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/faster_whisper/transcribe.pyÚ_asdictzWord._asdict&   s   € ÜØWÜØô	
ô
 �d‹|Ðó    N)Ú__name__Ú
__module__Ú__qualname__ÚfloatÚ__annotations__Ústrr)   © r*   r(   r   r      s   … àƒLØ	ƒJØ
ƒIØÓór*   r   c                   óš   — e Zd ZU eed<   eed<   eed<   eed<   eed<   ee   ed<   eed<   eed<   eed	<   eee	      ed
<   ee   ed<   d„ Z
y)ÚSegmentÚidÚseekr   r   ÚtextÚtokensÚavg_logprobÚcompression_ratioÚno_speech_probÚwordsÚtemperaturec                 ó:   — t        dt        d«       t        | «      S )NzOSegment._asdict() method is deprecated, use dataclasses.asdict(Segment) insteadr#   r$   r&   s    r(   r)   zSegment._asdict=   s   € ÜØ]ÜØô	
ô
 �d‹|Ðr*   N)r+   r,   r-   Úintr/   r.   r0   r	   r
   r   r)   r1   r*   r(   r3   r3   /   sU   … àƒGØ
ƒIØƒLØ	ƒJØ
ƒIØ�‰IÓØÓØÓØÓØ�D˜‘JÑÓØ˜%‘Ó ór*   r3   c                   ót  — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   ee   ed<   ee   ed<   ee   ed	<   eed
<   eed<   ee   ed<   ee	e
ee   f      ed<   ee
   ed<   eed<   eee      ed<   eed<   eed<   eed<   e
ed<   e
ed<   eed<   ee   ed<   e	e
ee   f   ed<   ee   ed<   ee
   ed<   y)ÚTranscriptionOptionsÚ	beam_sizeÚbest_ofÚpatienceÚlength_penaltyÚrepetition_penaltyÚno_repeat_ngram_sizeÚlog_prob_thresholdÚno_speech_thresholdÚcompression_ratio_thresholdÚcondition_on_previous_textÚprompt_reset_on_temperatureÚtemperaturesÚinitial_promptÚprefixÚsuppress_blankÚsuppress_tokensÚwithout_timestampsÚmax_initial_timestampÚword_timestampsÚprepend_punctuationsÚappend_punctuationsÚmultilingualÚmax_new_tokensÚclip_timestampsÚhallucination_silence_thresholdÚhotwordsN)r+   r,   r-   r>   r/   r.   r
   Úboolr	   r   r0   r   r1   r*   r(   r@   r@   F   så   … àƒNØƒLØƒOØÓØÓØÓØ  ™Ó'Ø! %™Ó(Ø!)¨%¡Ó0Ø $Ó$Ø!&Ó&Ø�u‘+ÓØ˜U 3¨°©Ð#5Ñ6Ñ7Ó7Ø�S‰MÓØÓØ˜d 3™iÑ(Ó(ØÓØ Ó ØÓØÓØÓØÓØ˜S‘MÓ!Ø˜3  U¡Ð+Ñ,Ó,Ø%-¨e¡_Ó4Ø�s‰mÔr*   r@   c                   ój   — e Zd ZU eed<   eed<   eed<   eed<   eeeeef         ed<   e	ed<   e
ed<   y)	ÚTranscriptionInfoÚlanguageÚlanguage_probabilityÚdurationÚduration_after_vadÚall_language_probsÚtranscription_optionsÚvad_optionsN)r+   r,   r-   r0   r/   r.   r
   r	   r   r@   r   r1   r*   r(   r]   r]   d   s=   … àƒMØÓØƒOØÓØ   e¨C°¨JÑ&7Ñ!8Ñ9Ó9Ø/Ó/ØÔr*   r]   c            M       óö  — e Zd Zd„ Zd„ Zdej                  dedefd„Z	ddd	d
d
ddddg d¢dddddddddgddd	ddd	ddddddddddf#de
eeej                  f   dee   dedededededed ed!ed"e
eee   eed#f   f   d$ee   d%ee   d&ee   d'ed(ed)ee
eee   f      d*ee   d+ed,eee      d-ed.ed/ed0ed1ed2ed3ed4ee
eef      d5ee   d6ee   d7eee      d8ee   d9ed:ee   d;ee   d<ed=eee   ef   fJd>„Zd?„ Zy)@ÚBatchedInferencePipelinec                 ó    — || _         d| _        y )Nç        )ÚmodelÚlast_speech_timestamp)r'   ri   s     r(   Ú__init__z!BatchedInferencePipeline.__init__p   s   € ð $)ˆŒ
Ø%(ˆÕ"r*   c                 ó  — | j                  |||«      \  }}g }g }t        ||«      D �]  \  }	}
|	d   }t        t        |«      | j                  j
                  z  «      }|j                  |«       | j                  j                  ||
d   |	d   ||d¬«      \  }}}|j                  |D �cg c]t  }t        |j                  |d   «      |
d   |
d   |d   |d   |d	   t        |j                  |d   «      «      t        |	d   | j                  j
                  z  «      ¬
«      ‘Œv c}«       �Œ |j                  rD| j                  j                  |||||j                  |j                  | j                  «      | _        |S c c}w )Nr`   r7   Úoffsetr   ©Ú	tokenizerr7   Útime_offsetÚsegment_sizeÚsegment_durationr5   r8   r:   r   r   )r6   r8   r:   r7   r   r   r9   r5   )Úgenerate_segment_batchedÚzipr>   r   ri   Úframes_per_secondÚappendÚ_split_segments_by_timestampsÚdictÚdecodeÚget_compression_ratiorS   Úadd_word_timestampsrT   rU   rj   )r'   Úfeaturesro   Úchunks_metadataÚoptionsÚencoder_outputÚoutputsÚsegmented_outputsÚsegment_sizesÚchunk_metadataÚoutputr`   rq   Úsubsegmentsr5   Úsingle_timestamp_endingÚ
subsegments                    r(   Úforwardz BatchedInferencePipeline.forwardw   s¼  € Ø"&×"?Ñ"?Ø�i ó#
Ñˆ˜ð ÐØˆÜ&)¨/¸7Ó&Có "	Ñ"ˆN˜FØ% jÑ1ˆHÜœt H›~°·
±
×0LÑ0LÑLÓMˆLØ× Ñ  Ô.ð
 —
‘
×8Ñ8Ø#Ø˜hÑ'Ø*¨8Ñ4Ø)Ø!)Øð 9ó ñ	ØØØ'ð ×$Ñ$ð  '2öð #ô Ø&×-Ñ-¨j¸Ñ.BÓCØ$*¨=Ñ$9Ø'-Ð.>Ñ'?Ø)¨(Ñ3Ø(¨Ñ1Ø& uÑ-Ü*?Ø%×,Ñ,¨Z¸Ñ-AÓBó+ô !Ø*¨8Ñ4°t·z±z×7SÑ7SÑSóöòöð!"	ðF ×"Ò"Ø)-¯©×)GÑ)GØ!ØØØØ×,Ñ,Ø×+Ñ+Ø×*Ñ*ó*ˆDÔ&ð !Ð ùò;s   Â)A9E>
r|   ro   r~   c                 óî  — |j                   d   }| j                  j                  ||j                  �|j	                  |j                  «      ng |j
                  |j                  ¬«      }|j                  �t        |«      |j                  z   }n| j                  j                  }|| j                  j                  kD  rXt        dt        |«      › d|t        |«      z
  › d|› d| j                  j                  › d| j                  j                  › d�«      ‚| j                  j	                  |«      }t        |«      D �cg c]  }|j                  «       ‘Œ }	}|j                  r‡| j                  j                  j                  |«      D �
cg c]#  }
|j                  j!                  |
d   d   «      ‘Œ% }}
|j#                  |j$                  «      }t'        |«      D ]  \  }}||	|   |<   Œ | j                  j                  j)                  ||	|j*                  |j,                  |j.                  ||j0                  |j2                  d	d	|j4                  d   |j6                  |j8                  ¬
«      }g }|D ]s  }t        |j:                  d   «      }|j<                  d   ||j.                  z  z  }|j?                  tA        ||dz   z  |jB                  |j:                  d   ¬«      «       Œu ||fS c c}w c c}
w )Nr   )Úprevious_tokensrQ   rZ   úThe length of the prompt is ú, and the `max_new_tokens` úC. Thus, the combined length of the prompt and `max_new_tokens` is: ú6. This exceeds the `max_length` of the Whisper model: úŠ. You should either reduce the length of your prompt, or reduce the value of `max_new_tokens`, so that their combined length is less that ú.T)rA   rC   rD   Ú
max_lengthrO   rP   Úreturn_scoresÚreturn_no_speech_probÚsampling_temperaturerE   rF   é   )r8   r:   r7   )"Úshaperi   Ú
get_promptrM   ÚencoderQ   rZ   rW   Úlenr‘   Ú
ValueErrorÚrangeÚcopyrV   Údetect_languagero   Útoken_to_idÚindexr^   Ú	enumerateÚgeneraterA   rC   rD   rO   rP   rL   rE   rF   Úsequences_idsÚscoresrv   rx   r:   )r'   r|   ro   r~   Ú
batch_sizeÚpromptr‘   r   Ú_ÚpromptsÚsegment_langsÚlanguage_tokensÚlanguage_token_indexÚiÚlanguage_tokenÚresultsr„   ÚresultÚseq_lenÚcum_logprobs                       r(   rs   z1BatchedInferencePipeline.generate_segment_batched®   s÷  € ð —^‘^ AÑ&ˆ
à—‘×&Ñ&Øð ×)Ñ)Ð5ð × Ñ  ×!7Ñ!7Ô8àà&×9Ñ9Ø×%Ñ%ð 'ó 	
ˆð ×!Ñ!Ð-Ü˜V› w×'=Ñ'=Ñ=‰JàŸ™×.Ñ.ˆJà˜Ÿ
™
×-Ñ-Ò-ÜØ.¬s°6«{¨mÐ;VØ¤ F£Ñ+Ð,ð -,Ø,6¨<ð 86Ø6:·j±j×6KÑ6KÐ5Lð M>ð ?C¿j¹j×>SÑ>SÐ=TÐTUðWóð ð Ÿ™×*Ñ*¨8Ó4ˆÜ*/°
Ó*;Ö< Q�6—;‘;•=Ð<ˆÐ<à×Òð &*§Z¡Z×%5Ñ%5×%EÑ%EÀnÓ%Uöà!ð ×#Ñ#×/Ñ/°¸aÑ0@ÀÑ0CÕDðˆOð ð $*§<¡<°	×0BÑ0BÓ#CÐ ä%.¨Ó%?ò BÑ!��>Ø3A�˜‘
Ð/Ò0ðBð —*‘*×"Ñ"×+Ñ+ØØØ×'Ñ'Ø×%Ñ%Ø"×1Ñ1Ø!Ø"×1Ñ1Ø#×3Ñ3ØØ"&Ø!(×!5Ñ!5°aÑ!8Ø&×9Ñ9Ø!(×!=Ñ!=ð ,ó 
ˆð  ˆØò 	ˆFä˜&×.Ñ.¨qÑ1Ó2ˆGØ Ÿ-™-¨Ñ*¨g°w×7MÑ7MÑ.MÑNˆKà�M‰MÜØ +¨w¸©{Ñ ;Ø#)×#8Ñ#8Ø!×/Ñ/°Ñ2ôõð	ð ˜vÐ%Ð%ùòU =ùòs   Ä>K-Æ
(K2NÚ
transcribeFé   r•   r   ©rh   gš™™™™™É?gš™™™™™Ù?ç333333ã?gš™™™™™é?ç      ð?ç333333@ç      ð¿r´   Tç      à?éÿÿÿÿrµ   õ   "'â€œÂ¿([{-õ   "'.ã€‚,ï¼Œ!ï¼�?ï¼Ÿ:ï¼šâ€�)]}ã€�é   Úaudior^   ÚtaskÚlog_progressrA   rB   rC   rD   rE   rF   r<   .rI   rG   rH   rJ   rK   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   Ú
vad_filterÚvad_parametersrW   Úchunk_lengthrX   rY   r¤   rZ   Úlanguage_detection_thresholdÚlanguage_detection_segmentsÚreturnc%                 óX
  — | j                   j                  j                  }%|rG| j                   j                   j                  s'| j                   j                  j                  d«       d}t        |t        j                  «      st        ||%¬«      }|j                  d   |%z  }&| j                   j                  j                  dt        |&«      «       |xs  | j                   j                  j                  }|s™|r_|€t        |d¬«      }nBt        |t        «      r2d	|j!                  «       v r|j#                  d	«       t        d>i |¤d	|i¤Ž}t%        ||«      }n$|&|k  rd|j                  d   d
œg}nt'        d«      ‚d}'t)        |||¬«      \  }(})nÉd}'|D �*�+�,cg c]2  }*|*j+                  «       D �+�,ci c]  \  }+},|+t-        |,|%z  «      “Œ c},}+‘Œ4 }}+}*},g g })}(t/        |«      D ]t  \  }-}.|(j1                  ||.d   |.d    «       |.d   |.d   z
  |%z  }/|/dkD  r&| j                   j                  j                  d|-«       |)j1                  |.d   |%z  |/|.gdœ«       Œv t3        d„ |D «       «      |%z  }0| j                   j                  j                  dt        |&|0z
  «      «       |0r0|(D �1cg c]$  }1| j                   j                  |1«      ddd…f   ‘Œ& c}1ng }2d}3|€¾| j                   j                   j                  sd}d}4nê| j                   j5                  t        j6                  |2t        j8                  | j                   j                   j:                  dfdd¬«      gz   d¬«      |$|#¬«      \  }}4}3| j                   j                  j                  d||4«       nQ| j                   j                   j                  s/|dk7  r*| j                   j                  j                  d|z  «       d}d}4t=        | j                   j>                  | j                   j                   j                  ||¬ «      }5|2r,t        j@                  |2D �6cg c]  }6tC        |6«      ‘Œ c}6«      ng }2tE        d>i d!|“d"|“d#|“d$|“d%|	“d&|
“d'|“d(|“d)|“d*t        |tF        tH        f«      r|dd n|g“d+|“d,|“d-|“d.|rtK        |5|«      n|“d/|“d0|“d1|“d2|"“d3|“d4d“d5d“d6|“d7d8“d9|“d:|“d;d<“Ž}7tM        ||4|&|0|7||3¬=«      }8| jO                  |2|5|)|!|7|«      }9|'stQ        |9||%«      }9|9|8fS c c},}+w c c},}+}*w c c}1w c c}6w )?at  transcribe audio in chunks in batched fashion and return with language info.

        Arguments:
            audio: Path to the input file (or a file-like object), or the audio waveform.
            language: The language spoken in the audio. It should be a language code such
                as "en" or "fr". If not set, the language will be detected in the first 30 seconds
                of audio.
            task: Task to execute (transcribe or translate).
            log_progress: whether to show progress bar or not.
            beam_size: Beam size to use for decoding.
            best_of: Number of candidates when sampling with non-zero temperature.
            patience: Beam search patience factor.
            length_penalty: Exponential length penalty constant.
            repetition_penalty: Penalty applied to the score of previously generated tokens
                (set > 1 to penalize).
            no_repeat_ngram_size: Prevent repetitions of ngrams with this size (set 0 to disable).
            temperature: Temperature for sampling. If a list or tuple is passed,
                only the first value is used.
            initial_prompt: Optional text string or iterable of token ids to provide as a
                prompt for the each window.
            suppress_blank: Suppress blank outputs at the beginning of the sampling.
            suppress_tokens: List of token IDs to suppress. -1 will suppress a default set
                of symbols as defined in `tokenizer.non_speech_tokens()`.
            without_timestamps: Only sample text tokens.
            word_timestamps: Extract word-level timestamps using the cross-attention pattern
                and dynamic time warping, and include the timestamps for each word in each segment.
                Set as False.
            prepend_punctuations: If word_timestamps is True, merge these punctuation symbols
                with the next word
            append_punctuations: If word_timestamps is True, merge these punctuation symbols
                with the previous word
            multilingual: Perform language detection on every segment.
            vad_filter: Enable the voice activity detection (VAD) to filter out parts of the audio
                without speech. This step is using the Silero VAD model
                https://github.com/snakers4/silero-vad.
            vad_parameters: Dictionary of Silero VAD parameters or VadOptions class (see available
                parameters and default values in the class `VadOptions`).
            max_new_tokens: Maximum number of new tokens to generate per-chunk. If not set,
                the maximum will be set by the default max_length.
            chunk_length: The length of audio segments. If it is not None, it will overwrite the
                default chunk_length of the FeatureExtractor.
            clip_timestamps: Optionally provide list of dictionaries each containing "start" and
                "end" keys that specify the start and end of the voiced region within
                `chunk_length` boundary. vad_filter will be ignored if clip_timestamps is used.
            batch_size: the maximum number of parallel requests to model for decoding.
            hotwords:
                Hotwords/hint phrases to the model. Has no effect if prefix is not None.
            language_detection_threshold: If the maximum probability of the language tokens is
                higher than this value, the language is detected.
            language_detection_segments: Number of segments to consider for the language detection.

        Unused Arguments
            compression_ratio_threshold: If the gzip compression ratio is above this value,
                treat as failed.
            log_prob_threshold: If the average log probability over sampled tokens is
                below this value, treat as failed.
            no_speech_threshold: If the no_speech probability is higher than this value AND
                the average log probability over sampled tokens is below `log_prob_threshold`,
                consider the segment as silent.
            condition_on_previous_text: If True, the previous output of the model is provided
                as a prompt for the next window; disabling may make the text inconsistent across
                windows, but the model becomes less prone to getting stuck in a failure loop,
                such as repetition looping or timestamps going out of sync. Set as False
            prompt_reset_on_temperature: Resets prompt if temperature is above this value.
                Arg has effect only if condition_on_previous_text is True. Set at 0.5
            prefix: Optional text to provide as a prefix at the beginning of each window.
            max_initial_timestamp: The initial timestamp cannot be later than this, set at 0.0.
            hallucination_silence_threshold: Optional[float]
                When word_timestamps is True, skip silent periods longer than this threshold
                (in seconds) when a possible hallucination is detected. set as None.
        Returns:
          A tuple with:

            - a generator over transcribed segments
            - an instance of TranscriptionInfo
        úiThe current model is English-only but the multilingual parameter is set toTrue; setting to False instead.F©Úsampling_rater   ú!Processing audio with duration %sNé    )Úmax_speech_duration_sÚmin_silence_duration_msrÌ   )r   r   zPNo clip timestamps found. Set 'vad_filter' to True or provide 'clip_timestamps'.)Úmax_durationTr   r   é   zSSegment %d is longer than 30 seconds, only the first 30 seconds will be transcribed)rm   r`   Úsegmentsc              3   ó2   K  — | ]  }|d    |d   z
  –— Œ y­w)r   r   Nr1   )Ú.0Úsegments     r(   ú	<genexpr>z6BatchedInferencePipeline.transcribe.<locals>.<genexpr>Æ  s   è ø€ ÒS¸�˜‘ '¨'Ñ"2Õ2ÑSùs   ‚úVAD filter removed %s of audio.r¹   Úenr•   g      ø¿Úfloat32)Údtype©Úaxis©r|   rÄ   rÃ   ú,Detected language '%s' with probability %.2fú`The current model is English-only but the language parameter is set to '%s'; using 'en' instead.©r¾   r^   rA   rB   rC   rD   rE   rF   rG   rH   rI   rL   rM   rN   rO   rP   rT   rU   rW   rZ   rS   rY   rJ   rX   rK   r¸   rV   rQ   rR   rh   ©r^   r_   r`   ra   rc   rd   rb   r1   ))ri   Úfeature_extractorrÉ   Úis_multilingualÚloggerÚwarningÚ
isinstanceÚnpÚndarrayr   r–   Úinfor   rÂ   r   rx   ÚkeysÚpopr   ÚRuntimeErrorr   Úitemsr>   r    rv   Úsumr�   ÚconcatenateÚfullÚn_melsr   Úhf_tokenizerÚstackr   r@   ÚlistÚtupleÚget_suppressed_tokensr]   Ú_batched_segments_generatorÚrestore_speech_timestamps):r'   r½   r^   r¾   r¿   rA   rB   rC   rD   rE   rF   r<   rI   rG   rH   rJ   rK   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rÀ   rÁ   rW   rÂ   rX   rY   r¤   rZ   rÃ   rÄ   rÉ   r`   Úclip_timestamps_providedÚaudio_chunksr}   rÓ   ÚkÚvr«   ÚclipÚclip_durationra   Úchunkr|   rb   r_   ro   Úfeaturer~   rç   rÐ   s:                                                             r(   r±   z#BatchedInferencePipeline.transcribeþ   s#  € ðv Ÿ
™
×4Ñ4×BÑBˆá §
¡
× 0Ñ 0× @Ò @Ø�J‰J×Ñ×%Ñ%ð2ôð !ˆLä˜%¤§¡Ô,Ü  °mÔDˆEØ—;‘;˜q‘> MÑ1ˆà�
‰
×Ñ×ÑØ/Ô1AÀ(Ó1Kô	
ð $ÒP t§z¡z×'CÑ'C×'PÑ'PˆáÙØ!Ð)Ü%/Ø.:Ø03ô&‘Nô   ´Ô5Ø.°.×2EÑ2EÓ2GÑGØ&×*Ñ*Ð+BÔCä%/ñ &Ø(ñ&Ø@Lò&�Nô #8¸¸~Ó"N‘à˜LÒ(Ø-.°u·{±{À1±~Ñ#FÐ"G‘ä"ðMóð ð
 (-Ð$Ü,:Ø�°\ô-Ñ)ˆL™/ð
 (,Ð$ð  /÷ð àð 8?·}±}³×G©t¨q°!�”C˜˜MÑ)Ó*Ñ*ÕGðˆOò ð
 -/°˜/ˆLÜ$ _Ó5ò ‘��4Ø×#Ñ# E¨$¨w©-¸$¸u¹+Ð$FÔGà!% e¡¨t°G©}Ñ!<ÀÑ M�Ø  2Ò%Ø—J‘J×%Ñ%×-Ñ-ðHàôð  ×&Ñ&à"& w¡-°-Ñ"?Ø$1Ø%) Fñõðô( ÑSÀ?ÔSÓSØñð 	ð
 	�
‰
×Ñ×ÑØ,Ü˜XÐ(:Ñ:Ó;ô	
ñ "ð IUÖU¸uˆT�Z‰Z×)Ñ)¨%Ó0°°c°r°c°Ó:ÓUàð 	ð "ÐàÐØ—:‘:×#Ñ#×3Ò3Ø�Ø'(Ñ$ð —J‘J×.Ñ.ÜŸ^™^Ø äŸG™G T§Z¡Z×%5Ñ%5×%<Ñ%<¸aÐ$@À$ÈiÔXðñð ôð 1LØ1Mð /ó 
ñ	ØØ(Ø&ð —
‘
×!Ñ!×&Ñ&ØBØØ(õð —:‘:×#Ñ#×3Ò3¸ÀDÒ8HØ—
‘
×!Ñ!×)Ñ)ð*Ø,4ñ5ôð  �à#$Ð äØ�J‰J×#Ñ#Ø�J‰J×Ñ×,Ñ,ØØô	
ˆ	ñ IQŒB�H‰H¸(ÖC¨w”k 'Õ*ÒCÔDÐVXð 	ô 'ò #
Ùð#
áð#
ñ ð#
ñ *ð	#
ñ
  2ð#
ñ "6ð#
ñ  2ð#
ñ !4ð#
ñ )Dð#
ô ˜k¬D´%¨=Ô9ð ˜B˜Q‘à!�]øð#
ñ *ð#
ñ  ð!#
ñ" *ð##
ñ( #ô & i°ÔAà$øð+#
ñ. "6ð/#
ñ0 !4ð1#
ñ2 *ð3#
ñ4 ð5#
ñ6 ,ð7#
ñ8 -1ð9#
ñ: (-ð;#
ñ< ,ð=#
ñ> ),ð?#
ñ@ &ðA#
ñB  2ðC#
ñD #&ðE#
ˆôJ !ØØ!5ØØ1Ø")Ø&Ø1ô
ˆð ×3Ñ3ØØØØØØó
ˆñ (Ü0Ø˜/¨=óˆHð ˜ˆ~Ðùók HùôùòH Vùòf Ds$   ÆTÆ1TÇ
TÊ')T"Ð>T'ÔTc              #   ó(  K  — t        t        |«      | d¬«      }d}t        dt        |«      |«      D ]¿  }	| j                  ||	|	|z    |||	|	|z    |«      }
|
D ]˜  }|D ]€  }|dz  }t	        |d   ||d   t        |d   d«      t        |d   d«      |j                  sd n|d	   D �cg c]  }t        di |¤Ž‘Œ c}|d
   |d   |d   |d   |j                  d   ¬«      –— Œ‚ |j                  d«       Œš ŒÁ |j                  «        d| _        y c c}w ­w)Nr   )ÚtotalÚdisableÚpositionr•   r5   r6   r   é   r   r;   r7   r8   r:   r9   )r5   r4   r6   r   r   r;   r7   r8   r:   r9   r<   rh   r1   )r   r™   r›   rˆ   r3   ÚroundrS   r   rL   ÚupdateÚcloserj   )r'   r|   ro   r}   r¤   r~   r¿   ÚpbarÚseg_idxr«   r­   r®   rÓ   r    s                 r(   rõ   z4BatchedInferencePipeline._batched_segments_generatorD  sQ  è ø€ ô œ#˜h›-°\Ð1AÈAÔNˆØˆÜ�qœ#˜h›-¨Ó4ò 	ˆAØ—l‘lØ˜˜Q ™^Ð,ØØ  A¨
¡NÐ3Øó	ˆGð "ò �Ø%ò �GØ˜q‘L�GÜ!Ø$ V™_Ø"Ø$ V™_Ü# G¨GÑ$4°aÓ8Ü! '¨%¡.°!Ó4ð $+×#:Ò#:ñ !à;BÀ7Ñ;KÖ!L°4¤$¡,¨£,Ò!Là& xÑ0Ø$+¨MÑ$:Ø'.Ð/?Ñ'@Ø*1Ð2EÑ*FØ$+×$8Ñ$8¸Ñ$;ôó ðð( —‘˜A•ñ+ð	ð> 	�
‰
ŒØ%(ˆÕ"ùò "Mùs   ‚B"DÂ$DÂ6AD)r+   r,   r-   rk   rˆ   rå   ræ   r   r@   rs   r   r0   r   r
   r[   r>   r.   r	   r   r   rx   r   r3   r]   r±   rõ   r1   r*   r(   rf   rf   o   sü  „ ò)ò5!ðnN&à—*‘*ðN&ð ðN&ð &ó	N&ðf #'Ø Ø"ØØØØ !Ø$%Ø$%òE
ð 8;Ø.2Ø/2Ø+/Ø-0Ø>BØ $Ø#Ø02¨tØ#'Ø'*Ø %Ø$2Ø#EØ"ØØ<@Ø(,Ø&*Ø04Ø;?ØØ"&Ø8;Ø+,ñYDà�S˜( B§J¡JÐ.Ñ/ðDð ˜3‘-ðDð ð	Dð
 ðDð ðDð ðDð ðDð ðDð "ðDð "ðDð ˜5 $ u¡+¨u°U¸C°ZÑ/@Ð@ÑAðDð( &.¨e¡_ð)Dð* % U™Oð+Dð, & e™_ð-Dð. %)ð/Dð0 &+ð1Dð2 !  s¨H°S©MÐ'9Ñ!:Ñ;ð3Dð4 ˜‘ð5Dð6 ð7Dð8 " $ s¡)Ñ,ð9Dð: !ð;Dð<  %ð=Dð> ð?Dð@ "ðADðB !ðCDðD ðEDðF ðGDðH !  t¨ZÐ'7Ñ!8Ñ9ðIDðJ ! ™ðKDðL ˜s‘mðMDðN " $ t¡*Ñ-ðODðP *2°%©ðQDðR ðSDðT ˜3‘-ðUDðV '/¨u¡oðWDðX &)ðYDðZ 
ˆx˜Ñ Ð"3Ð3Ñ	4ó[DóL
%)r*   rf   c            K       óÚ  — e Zd Z	 	 	 	 	 	 	 	 	 	 d^dededeeee   f   ded	ed
edee   dede	dee   deeeef      fd„Z
edee   fd„«       Zd_de	fd„Zdddddddddg d¢dddddddddgddddddddddd ddddf"d!eeeej                   f   d"ee   d#ed$ed%ed&ed'ed(ed)ed*ed+eeee   eed,f   f   d-ee   d.ee   d/ee   d0ed1ed2eeeee   f      d3ee   d4ed5eee      d6ed7ed8ed9ed:ed;ed<ed=eee	ef      d>ee   d?ee   d@eeee   f   dAee   dBee   dCee   dDedeee   ef   fHdE„ZdFedGee   dHedIedJedKedeee      fdL„Z	 d_dMej                   dFedNedOeej8                     dee   f
dP„ZdMej                   dej8                  fdQ„ZdOej8                  dRee   dFedNedeej>                  j@                  eeef   f
dS„Z!	 	 	 d`dFedTee   d6ed3ee   dBee   dee   fdU„Z"dVee	   dFedOej8                  dWed9ed:edXedefdY„Z#	 dadFedZee   dOej8                  dWed[edee	   fd\„Z$	 	 	 	 	 	 dbd!eej                      dMeej                      d<ed=ee	ef   dDedCedeeeeeeef      f   fd]„Z%y)cÚWhisperModelr   r•   NFÚmodel_size_or_pathÚdeviceÚdevice_indexÚcompute_typeÚcpu_threadsÚnum_workersÚdownload_rootÚlocal_files_onlyÚfilesÚrevisionÚuse_auth_tokenc           
      ó^  — t        «       | _        d\  }}|	r'|}|	j                  dd«      }|	j                  dd«      }n2t        j                  j                  |«      r|}nt        ||||
|¬«      }t        j                  j                  |f||||||	dœ|¤Ž| _
        t        j                  j                  |d«      }|r%t        j                  j                  |«      | _        nƒt        j                  j!                  |«      r%t        j                  j#                  |«      | _        n?t        j                  j%                  d| j                  j&                  rdnd	z   «      | _        | j)                  ||«      | _        t-        di | j*                  ¤Ž| _        d
| _        | j.                  j2                  | j0                  z  | _        | j.                  j6                  | j.                  j2                  z  | _        | j.                  j6                  | j4                  z  | _        d| _        d| _        y)a>	  Initializes the Whisper model.

        Args:
          model_size_or_path: Size of the model to use (tiny, tiny.en, base, base.en,
            small, small.en, distil-small.en, medium, medium.en, distil-medium.en, large-v1,
            large-v2, large-v3, large, distil-large-v2, distil-large-v3, large-v3-turbo, or turbo),
            a path to a converted model directory, or a CTranslate2-converted Whisper model ID from
            the HF Hub. When a size or a model ID is configured, the converted model is downloaded
            from the Hugging Face Hub.
          device: Device to use for computation ("cpu", "cuda", "auto").
          device_index: Device ID to use.
            The model can also be loaded on multiple GPUs by passing a list of IDs
            (e.g. [0, 1, 2, 3]). In that case, multiple transcriptions can run in parallel
            when transcribe() is called from multiple Python threads (see also num_workers).
          compute_type: Type to use for computation.
            See https://opennmt.net/CTranslate2/quantization.html.
          cpu_threads: Number of threads to use when running on CPU (4 by default).
            A non zero value overrides the OMP_NUM_THREADS environment variable.
          num_workers: When transcribe() is called from multiple Python threads,
            having multiple workers enables true parallelism when running the model
            (concurrent calls to self.model.generate() will run in parallel).
            This can improve the global throughput at the cost of increased memory usage.
          download_root: Directory where the models should be saved. If not set, the models
            are saved in the standard Hugging Face cache directory.
          local_files_only:  If True, avoid downloading the file and return the path to the
            local cached file if it exists.
          files: Load model files from the memory. This argument is a dictionary mapping file names
            to file contents as file-like or bytes objects. If this is set, model_path acts as an
            identifier for this model.
          revision:
            An optional Git revision id which can be a branch name, a tag, or a
            commit hash.
          use_auth_token: HuggingFace authentication token or True to use the
            token stored by the HuggingFace config folder.
        )NNztokenizer.jsonNúpreprocessor_config.json)r  Ú	cache_dirr  r  )r  r  r  Úintra_threadsÚinter_threadsr  zopenai/whisper-tinyÚ z.enr#   g{®Gáz”?iÀ  r1   ) r   râ   ré   ÚosÚpathÚisdirr   Úctranslate2ÚmodelsÚWhisperri   ÚjoinÚ
tokenizersr   Úfrom_bufferrð   ÚisfileÚ	from_fileÚfrom_pretrainedrá   Ú_get_feature_kwargsÚfeat_kwargsr   rà   Úinput_strideÚ
hop_lengthÚnum_samples_per_tokenrÉ   ru   Útokens_per_secondÚtime_precisionr‘   )r'   r  r  r  r  r  r  r  r  r  r  r  Úmodel_kwargsÚtokenizer_bytesÚpreprocessor_bytesÚ
model_pathÚtokenizer_files                    r(   rk   zWhisperModel.__init__m  só  € ôd !“lˆŒà.8Ñ+ˆÐ+ÙØ+ˆJØ#Ÿi™iÐ(8¸$Ó?ˆOØ!&§¡Ð+EÀtÓ!LÑÜ�W‰W�]‰]Ð-Ô.Ø+‰Jä'Ø"Ø!1Ø'Ø!Ø-ôˆJô !×'Ñ'×/Ñ/Øð	
àØ%Ø%Ø%Ø%Øñ	
ð ñ	
ˆŒ
ô Ÿ™Ÿ™ jÐ2BÓCˆÙÜ *× 4Ñ 4× @Ñ @ÀÓ QˆDÕÜ�W‰W�^‰^˜NÔ+Ü *× 4Ñ 4× >Ñ >¸~Ó NˆDÕä *× 4Ñ 4× DÑ DØ%¨t¯z©z×/IÒ/I©ÈuÑUó!ˆDÔð  ×3Ñ3°JÐ@RÓSˆÔÜ!1Ñ!E°D×4DÑ4DÑ!EˆÔØˆÔà×"Ñ"×-Ñ-°×0AÑ0AÑAð 	Ô"ð ×"Ñ"×0Ñ0°D×4JÑ4J×4UÑ4UÑUð 	Ôð ×"Ñ"×0Ñ0°D×4NÑ4NÑNð 	Ôð #ˆÔØˆ�r*   rÅ   c                 óR   — | j                   j                  rt        t        «      S dgS )z%The languages supported by the model.rÖ   )ri   rá   rò   r   r&   s    r(   Úsupported_languagesz WhisperModel.supported_languagesÔ  s"   € ð )-¯
©
×(BÒ(BŒt”OÓ$ÐNÈÈÐNr*   c                 óf  — i }	 t         j                  j                  |d«      }|rt        j                  |«      }nNt         j                  j                  |«      r-t        |dd¬«      5 }t        j                  |«      }d d d «       n|S t        t        j                  «      j                  j                  «       }|j                  «       D ��ci c]  \  }}||v sŒ||“Œ c}}S # 1 sw Y   ŒcxY wc c}}w # t        j                  $ r'}	| j                  j!                  d|	«       Y d }	~	|S d }	~	ww xY w)Nr  Úrúutf-8)Úencodingz&Could not load preprocessor config: %s)r  r  r"  ÚjsonÚloadsr%  ÚopenÚloadr   r   rk   Ú
parametersrè   rë   ÚJSONDecodeErrorrâ   rã   )
r'   r2  r1  ÚconfigÚconfig_pathÚfileÚ
valid_keysrù   rú   Úes
             r(   r(  z WhisperModel._get_feature_kwargsÙ  sÿ   € Øˆð	MÜŸ'™'Ÿ,™, zÐ3MÓNˆKÙ!ÜŸ™Ð$6Ó7‘Ü—‘—‘ Ô,Ü˜+ s°WÔ=ð -ÀÜ!ŸY™Y t›_�F÷-ð -ð �Ü"Ô#3×#<Ñ#<Ó=×HÑH×MÑMÓOˆJØ%+§\¡\£^×G™T˜Q °q¸J²�A�q‘DÓGÐG÷-ð -üó
 HøÜ×#Ñ#ò 	MØ�K‰K×ÑÐ HÈ!×LÐLàˆûð	MúsI   „A%C6 Á)C$Á?
C6 Â
AC6 ÃC0ÃC0Ã C6 Ã$C-Ã)C6 Ã6D0Ä	D+Ä+D0r±   r²   r³   r¶   r·   r´   Tr¸   r¹   rµ   rº   r»   Ú0r½   r^   r¾   r¿   rA   rB   rC   rD   rE   rF   r<   .rI   rG   rH   rJ   rK   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rÀ   rÁ   rW   rÂ   rX   rY   rZ   rÃ   rÄ   c$           
      óV  ‡4— | j                   j                  Š4|r3| j                  j                  s| j                  j                  d«       d}t        |t        j                  «      st        |‰4¬«      }|j                  d   ‰4z  }$|$}%| j                  j                  dt        |$«      «       |r÷|dk(  rò|€t        «       }nt        |t        «      rt        d2i |¤Ž}t        ||«      }&t!        ||&«      \  }'}(t        j"                  |'d¬«      }|j                  d   ‰4z  }%| j                  j                  d	t        |$|%z
  «      «       | j                  j%                  t&        j(                  «      r7| j                  j+                  d
dj-                  ˆ4fd„|&D «       «      «       nd}&| j                  ||¬«      })d}*d}+|€È| j                  j                  sd}d},nêt        |t.        «      rt1        |j3                  d«      d   «      n|d   }-|)j                  d   dz
  }.|-| j4                  z  |.k  rt7        |-| j4                  z  «      nd}/| j9                  |)d|/d…f   |#|"¬«      \  }},}+| j                  j                  d||,«       n=| j                  j                  s%|dk7  r | j                  j                  d|z  «       d}d},t;        | j<                  | j                  j                  ||¬«      }0t?        d2i d|“d|“d|“d|“d|	“d|
“d|“d|“d|“d |“d!|“d"t        |t@        tB        f«      r|n|g“d#|“d$|“d%|“d&|rtE        |0|«      n|“d'|“d(|“d)|“d*|“d+|“d,|“d-|“d.|“d/| “d0|!“Ž}1| jG                  |)|0|1||*«      }2|&rtI        |2|&‰4«      }2tK        ||,|$|%|1||+¬1«      }3|2|3fS )3a'  Transcribes an input file.

        Arguments:
          audio: Path to the input file (or a file-like object), or the audio waveform.
          language: The language spoken in the audio. It should be a language code such
            as "en" or "fr". If not set, the language will be detected in the first 30 seconds
            of audio.
          task: Task to execute (transcribe or translate).
          log_progress: whether to show progress bar or not.
          beam_size: Beam size to use for decoding.
          best_of: Number of candidates when sampling with non-zero temperature.
          patience: Beam search patience factor.
          length_penalty: Exponential length penalty constant.
          repetition_penalty: Penalty applied to the score of previously generated tokens
            (set > 1 to penalize).
          no_repeat_ngram_size: Prevent repetitions of ngrams with this size (set 0 to disable).
          temperature: Temperature for sampling. It can be a tuple of temperatures,
            which will be successively used upon failures according to either
            `compression_ratio_threshold` or `log_prob_threshold`.
          compression_ratio_threshold: If the gzip compression ratio is above this value,
            treat as failed.
          log_prob_threshold: If the average log probability over sampled tokens is
            below this value, treat as failed.
          no_speech_threshold: If the no_speech probability is higher than this value AND
            the average log probability over sampled tokens is below `log_prob_threshold`,
            consider the segment as silent.
          condition_on_previous_text: If True, the previous output of the model is provided
            as a prompt for the next window; disabling may make the text inconsistent across
            windows, but the model becomes less prone to getting stuck in a failure loop,
            such as repetition looping or timestamps going out of sync.
          prompt_reset_on_temperature: Resets prompt if temperature is above this value.
            Arg has effect only if condition_on_previous_text is True.
          initial_prompt: Optional text string or iterable of token ids to provide as a
            prompt for the first window.
          prefix: Optional text to provide as a prefix for the first window.
          suppress_blank: Suppress blank outputs at the beginning of the sampling.
          suppress_tokens: List of token IDs to suppress. -1 will suppress a default set
            of symbols as defined in `tokenizer.non_speech_tokens()`.
          without_timestamps: Only sample text tokens.
          max_initial_timestamp: The initial timestamp cannot be later than this.
          word_timestamps: Extract word-level timestamps using the cross-attention pattern
            and dynamic time warping, and include the timestamps for each word in each segment.
          prepend_punctuations: If word_timestamps is True, merge these punctuation symbols
            with the next word
          append_punctuations: If word_timestamps is True, merge these punctuation symbols
            with the previous word
          multilingual: Perform language detection on every segment.
          vad_filter: Enable the voice activity detection (VAD) to filter out parts of the audio
            without speech. This step is using the Silero VAD model
            https://github.com/snakers4/silero-vad.
          vad_parameters: Dictionary of Silero VAD parameters or VadOptions class (see available
            parameters and default values in the class `VadOptions`).
          max_new_tokens: Maximum number of new tokens to generate per-chunk. If not set,
            the maximum will be set by the default max_length.
          chunk_length: The length of audio segments. If it is not None, it will overwrite the
            default chunk_length of the FeatureExtractor.
          clip_timestamps:
            Comma-separated list start,end,start,end,... timestamps (in seconds) of clips to
             process. The last end timestamp defaults to the end of the file.
             vad_filter will be ignored if clip_timestamps is used.
          hallucination_silence_threshold:
            When word_timestamps is True, skip silent periods longer than this threshold
             (in seconds) when a possible hallucination is detected
          hotwords:
            Hotwords/hint phrases to provide the model with. Has no effect if prefix is not None.
          language_detection_threshold: If the maximum probability of the language tokens is higher
           than this value, the language is detected.
          language_detection_segments: Number of segments to consider for the language detection.
        Returns:
          A tuple with:

            - a generator over transcribed segments
            - an instance of TranscriptionInfo
        rÇ   FrÈ   r   rÊ   rE  NrÙ   rÕ   z0VAD filter kept the following audio segments: %sz, c              3   ól   •K  — | ]+  }d t        |d   ‰z  «      ›dt        |d   ‰z  «      ›d�–— Œ- y­w)ú[r   z -> r   ú]N)r   )rÒ   rý   rÉ   s     €r(   rÔ   z*WhisperModel.transcribe.<locals>.<genexpr>‡  s?   øè ø€ ò ñ "ô -¨U°7©^¸mÑ-KÕLÜ,¨U°5©\¸MÑ-IÕJôñùs   ƒ14)rÂ   rÖ   r•   ú,r¹   .rÛ   rÜ   rÝ   rÞ   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   rß   r1   )&rà   rÉ   ri   rá   râ   rã   rä   rå   ræ   r   r–   rç   r   r   rx   r   r   rí   ÚisEnabledForÚloggingÚDEBUGÚdebugr"  r0   r.   Úsplitru   r>   r�   r   rð   r@   rò   ró   rô   Úgenerate_segmentsrö   r]   )5r'   r½   r^   r¾   r¿   rA   rB   rC   rD   rE   rF   r<   rI   rG   rH   rJ   rK   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rÀ   rÁ   rW   rÂ   rX   rY   rZ   rÃ   rÄ   r`   ra   Úspeech_chunksrø   r}   r|   r   rb   r_   Ústart_timestampÚcontent_framesr5   ro   r~   rÐ   rç   rÉ   s5                                                       @r(   r±   zWhisperModel.transcribeë  s{  ø€ ðn ×.Ñ.×<Ñ<ˆá §
¡
× :Ò :Ø�K‰K×Ñð2ôð !ˆLä˜%¤§¡Ô,Ü  °mÔDˆEà—;‘;˜q‘> MÑ1ˆØ%Ðà�‰×ÑØ/Ô1AÀ(Ó1Kô	
ñ ˜/¨SÒ0ØÐ%Ü!+£‘Ü˜N¬DÔ1Ü!+Ñ!=¨nÑ!=�Ü1°%¸ÓHˆMÜ,:¸5À-Ó,PÑ)ˆL˜/Ü—N‘N <°aÔ8ˆEØ!&§¡¨Q¡°-Ñ!?Ðà�K‰K×ÑØ0Ü  Ð,>Ñ!>Ó?ôð
 �{‰{×'Ñ'¬¯©Ô6Ø—‘×!Ñ!ØFØ—I‘Ió ð &3ôó õ
ð !ˆMà×)Ñ)¨%¸lÐ)ÓKˆàˆØ!Ðð ÐØ—:‘:×-Ò-Ø�Ø'(Ñ$ô " /´3Ô7ô ˜/×/Ñ/°Ó4°QÑ7Ô8à(¨Ñ+ð  ð
 "*§¡°Ñ!3°aÑ!7�ð '¨×)?Ñ)?Ñ?À.ÒPô ˜¨$×*@Ñ*@Ñ@ÔAàð ð ×(Ñ(Ø% c¨4©5 jÑ1Ø0KØ1Mð )ó ñ	ØØ(Ø&ð —‘× Ñ ØBØØ(õð —:‘:×-Ò-°(¸dÒ2BØ—‘×#Ñ#ð*Ø,4ñ5ôð  �à#$Ð äØ×ÑØ�J‰J×&Ñ&ØØô	
ˆ	ô 'ò !
Ùð!
áð!
ñ ð!
ñ *ð	!
ñ
  2ð!
ñ "6ð!
ñ  2ð!
ñ !4ð!
ñ )Dð!
ñ (Bð!
ñ )Dð!
ô  *¨+¼¼e°}ÔE‘ÈKÈ=øð!
ñ *ð!
ñ  ð!!
ñ" *ð#!
ñ( #ô & i°ÔAà$øð+!
ñ.  2ð/!
ñ0 #8ð1!
ñ2 ,ð3!
ñ4 "6ð5!
ñ6 !4ð7!
ñ8 &ð9!
ñ: *ð;!
ñ< ,ð=!
ñ> -Lð?!
ñ@ ðA!
ˆðF ×)Ñ)Ø�i ¨,¸ó
ˆñ Ü0°¸=È-ÓXˆHä ØØ!5ØØ1Ø")Ø&Ø1ô
ˆð ˜ˆ~Ðr*   ro   r7   rp   rq   rr   r5   c           	      óä  — g }t        |«      dk\  xr  |d   |j                  cxk  xr |d   k  nc }t        t        |«      «      D �	cg c]0  }	|	dkD  r)||	   |j                  k\  r||	dz
     |j                  k\  r|	‘Œ2 }
}	t        |
«      dkD  rÍt        |
«      }|r|j	                  t        |«      «       d}|D ]o  }||| }|d   |j                  z
  }|d   |j                  z
  }||| j
                  z  z   }||| j
                  z  z   }|j	                  t        ||||¬«      «       |}Œq |r||z  }n°||dz
     |j                  z
  }||| j                  z  z  }nˆ|}|D �cg c]  }||j                  k\  sŒ|‘Œ }}t        |«      dkD  r3|d   |j                  k7  r!|d   |j                  z
  }|| j
                  z  }|j	                  t        ||||z   |¬«      «       ||z  }|||fS c c}	w c c}w )Nr#   éþÿÿÿr¹   r   r•   )r5   r   r   r7   )r™   Útimestamp_beginr›   rò   rv   r.  rx   r*  )r'   ro   r7   rp   rq   rr   r5   Úcurrent_segmentsr†   r«   Úconsecutive_timestampsÚslicesÚ
last_sliceÚcurrent_sliceÚsliced_tokensÚstart_timestamp_positionÚend_timestamp_positionÚ
start_timeÚend_timeÚlast_timestamp_positionr`   ÚtokenÚ
timestampss                          r(   rw   z*WhisperModel._split_segments_by_timestamps   si  € ð Ðä�‹K˜1ÑÒU ¨¡¨i×.GÑ.GÖ!UÈ6ÐRTÉ:Ô!Uð 	 ô œ3˜v›;Ó'ö"
àØ�1ŠuØ�q‘	˜Y×6Ñ6Ò6Ø�q˜1‘u‘ ×!:Ñ!:Ò:ò	 ð"
Ðð "
ô Ð%Ó&¨Ò*ÜÐ0Ó1ˆFÙ&Ø—‘œc &›kÔ*àˆJØ!'ò +�Ø & z°-Ð @�Ø+8¸Ñ+;¸i×>WÑ>WÑ+WÐ(Ø)6°rÑ):¸Y×=VÑ=VÑ)VÐ&àÐ":¸T×=PÑ=PÑ"PÑPð ð 'Ð)?À$×BUÑBUÑ)UÑU�à ×'Ñ'ÜØ!Ø(Ø$Ø,ô	ôð +‘
ð#+ñ& 'à˜Ñ$‘ð ˜:¨™>Ñ*¨Y×-FÑ-FÑFð (ð Ð/°$×2CÑ2CÑCÑC‘ð (ˆHà#)öØ¨U°i×6OÑ6OÓ-O’ðˆJð ô �:‹ Ò" z°"¡~¸×9RÑ9RÒ'RØ*4°R©.¸9×;TÑ;TÑ*TÐ'Ø2°T×5HÑ5HÑH�à×#Ñ#ÜØØ%Ø# hÑ.Ø!ô	ôð �LÑ ˆDà Ð'>Ð>Ð>ùò"
ùòZs   Á	5G(Å!G-Å6G-r|   r~   r   c              #   ó˜  ‡8‡9K  — |j                   d   dz
  }t        || j                  j                  z  «      }t	        |j
                  t        «      rE|j
                  r|j
                  j                  d«      ng D �cg c]  }t        |«      ‘Œ c}|_        |j
                  D �cg c]  }t        || j                  z  «      ‘Œ }	}t        |	«      dk(  r|	j                  d«       t        |	«      dz  dk(  r|	j                  |«       t        t        |	d d d…   |	dd d…   «      «      }
dŠ8d}d}|
|   d   }g }d}|j                  �ut	        |j                  t        «      r@d|j                  j                  «       z   }|j!                  |«      }|j#                  |«       n|j#                  |j                  «       t%        |d| ¬	«      }d
}|t        |
«      k  �rÎ|
|   \  }}||kD  r|}||k  r|}||k\  r|dz  }|t        |
«      k  r|
|   d   }ŒF|| j                  j                  z  }t        || j                  j&                  z   | j                  j                  z  «      }t)        | j                  j&                  ||z
  ||z
  «      }|d d …|||z   …f   }|| j                  j                  z  }t+        |«      }| j,                  j/                  t0        j2                  «      r%| j,                  j5                  dt7        |«      «       ||d  }|dkD  s|€| j!                  |«      }|j8                  rR| j:                  j=                  |«      }|d   d   \  }}|dd }|j>                  jA                  |«      |_!        ||_"        | jG                  |||jH                  |dk(  r|jJ                  nd |jL                  ¬«      } | jO                  || ||«      \  }!}"}#}$|jP                  �p|!jR                  |jP                  kD  }%|jT                  �|"|jT                  kD  rd}%|%r8| j,                  j5                  d|!jR                  |jP                  «       ||z  }�ŒŠ|!jV                  d   }&|}'dtX        dt        fd„Š9dtZ        tX           dt\        fˆ8ˆ9fd„}(dt^        tX           dtZ        tX           fd„})| ja                  ||&||||¬«      \  }*}}+|jb                  �r•| je                  |*g||||jf                  |jh                  |¬«       |+s*tk        |*«      },|,�|,|kD  rt        |,| j                  z  «      }|jl                  �� |jl                  }- |)|*«      }.|.�2 |(|.«      r*|.d   |z
  }/|/|-kD  r|'t        |/| j                  z  «      z   }�Œ¹|}0to        t        |*«      «      D ]¿  }1|*|1   }|d   sŒ |(|«      r¥ |)|*|1dz   d  «      }2|2�|2d   d   d   }3n||z   }3|d   |0z
  |-kD  xs |d   |-k  xs |d   |z
  dk  }4|3|d   z
  |-kD  xs  |(|2«      xs ||d   z
  dk  }5|4r>|5r<t        tq        |dz   |d   «      | j                  z  «      }||d   z
  |-k  r|}g |*|1d   n|d   }0ŒÁ tk        |*«      },|,�|,}|*D ]š  }|d   }&|js                  |&«      }6|d   |d   k(  s|6j                  «       sŒ5|j#                  |&«       |dz  }tu        ||'|d   |d   |6|&|#|"|$|!jR                  |jb                  r|d   D �7cg c]  }7tw        d i |7¤Ž‘Œ c}7nd ¬«      –— Œœ |jx                  r|#|jz                  kD  r>|jx                  r'| j,                  j5                  d|#|jz                  «       t        |«      }|j}                  t)        ||«      |'z
  | j                  j                  z  «       |t        |
«      k  r�ŒÎ|j                  «        y c c}w c c}w c c}7w ­w)!Nr¹   r•   rJ  r   r#   u*   "'â€œÂ¿([{-"'.ã€‚,ï¼Œ!ï¼�?ï¼Ÿ:ï¼šâ€�)]}ã€�ú Úseconds)r   Úunitr  rh   zProcessing segment at %srU  )rQ   rN   rZ   Fz$No speech threshold is met (%f > %f)r    rÅ   c                 ó’   — | j                  dd«      }| d   | d   z
  }d}|dk  r|dz  }|dk  r|d|z
  dz  z  }|d	kD  r||d	z
  z  }|S )
Nr!   rh   r   r   g333333Ã?rµ   g /Ý$Á?é   ç       @)Úget)r    r!   r`   Úscores       r(   Úword_anomaly_scorez:WhisperModel.generate_segments.<locals>.word_anomaly_scoreÚ  sp   € Ø"Ÿh™h }°cÓ:�Ø ™;¨¨g©Ñ6�Ø�Ø Ò%Ø˜S‘L�EØ˜eÒ#Ø˜e hÑ.°"Ñ4Ñ4�EØ˜c’>Ø˜X¨™^Ñ+�EØ�r*   rÓ   c                 ó´   •— | �| d   sy| d   D �cg c]  }|d   ‰vsŒ|‘Œ }}|d d }t        ˆfd„|D «       «      }|dk\  xs |dz   t        |«      k\  S c c}w )Nr;   Fr    r¼   c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­w©Nr1   )rÒ   Úwrm  s     €r(   rÔ   zMWhisperModel.generate_segments.<locals>.is_segment_anomaly.<locals>.<genexpr>ë  s   øè ø€ ÒA°aÑ.¨q×1ÑAùs   ƒr  g{®Gáz„?)rì   r™   )rÓ   rq  r;   rl  Úpunctuationrm  s       €€r(   Úis_segment_anomalyz:WhisperModel.generate_segments.<locals>.is_segment_anomalyæ  sr   ø€ Ø�?¨'°'Ò*:Ø Ø$+¨GÑ$4ÖU˜q¸¸&¹	ÈÒ8TšÐU�ÐUØ˜b˜q˜	�ÜÓA¸5ÔAÓA�Ø ‘zÒ? U¨T¡\´S¸³ZÑ%?Ð?ùò Vs
   ‘AžArÐ   c                 ó(   — t        d„ | D «       d «      S )Nc              3   ó,   K  — | ]  }|d    sŒ	|–— Œ y­w)r;   Nr1   )rÒ   Úss     r(   rÔ   zMWhisperModel.generate_segments.<locals>.next_words_segment.<locals>.<genexpr>ï  s   è ø€ Ò? 1°A°g³JœQÑ?ùs   ‚
�)Únext)rÐ   s    r(   Únext_words_segmentz:WhisperModel.generate_segments.<locals>.next_words_segmentî  s   € ÜÑ?¨Ô?ÀÓFÐFr*   rn   )rj   r   r;   rj  r   r7   )r4   r5   r   r   r6   r7   r<   r8   r9   r:   r;   zBReset prompt. prompt_reset_on_temperature threshold is met %f > %fr1   )@r–   r.   rà   Útime_per_framerä   rX   r0   rO  r  ru   r™   rv   rò   rt   rM   Ústripr˜   Úextendr   Únb_max_framesÚminr   râ   rK  rL  rM  rN  r   rV   ri   r�   ro   rž   r^   Úlanguage_coder—   rQ   rN   rZ   Úgenerate_with_fallbackrH   r:   rG   r¢   rx   r
   r[   r	   rw   rS   r{   rT   rU   r   rY   r›   Úmaxry   r3   r   rJ   rK   r  r  ):r'   r|   ro   r~   r¿   r   rS  Úcontent_durationÚtsÚseek_pointsÚ
seek_clipsÚidxÚclip_idxr5   Ú
all_tokensÚprompt_reset_sincerM   Úinitial_prompt_tokensr  rj   Úseek_clip_startÚseek_clip_endrp   Úwindow_end_timerq   rÓ   rr   rŠ   r­   r¬   r_   r^   r¥   r®   r8   r<   r9   Úshould_skipr7   Úprevious_seekrs  rx  rW  r†   Úlast_word_endÚ	thresholdÚfirst_segmentÚgapÚhal_last_endÚsiÚnext_segmentÚhal_next_startÚsilence_beforeÚsilence_afterr6   r    rr  rm  s:                                                           @@r(   rP  zWhisperModel.generate_segmentsO  sÐ  ùè ø€ ð "Ÿ™¨Ñ+¨aÑ/ˆÜ  °$×2HÑ2H×2WÑ2WÑ!WÓXÐä�g×-Ñ-¬sÔ3ð
 ×.Ò.ð ×+Ñ+×1Ñ1°#Ô6àö'àô �b•	ò'ˆGÔ#ð :A×9PÑ9Pö"
Ø35ŒE�"�t×-Ñ-Ñ-Õ.ð"
ˆð "
ô ˆ{Ó˜qÒ Ø×Ñ˜qÔ!Üˆ{Ó˜aÑ 1Ò$Ø×Ñ˜~Ô.Ü,0Ü�™C˜a˜CÑ  +¨a¨d°¨dÑ"3Ó4ó-
ˆ
ð EˆàˆØˆØ˜(Ñ# AÑ&ˆØˆ
ØÐà×!Ñ!Ð-Ü˜'×0Ñ0´#Ô6Ø!$ w×'=Ñ'=×'CÑ'CÓ'EÑ!E�Ø(1×(8Ñ(8¸Ó(HÐ%Ø×!Ñ!Ð"7Õ8à×!Ñ! '×"8Ñ"8Ô9äÐ*°ÈÐDTÔUˆØ #Ðð
 œ˜Z›Ó(Ø-7¸Ñ-AÑ*ˆO˜]Ø˜~Ò-Ø .�Ø�oÒ%Ø&�Ø�}Ò$Ø˜A‘�Øœc *›oÒ-Ø% hÑ/°Ñ2�DØØ ×!7Ñ!7×!FÑ!FÑFˆKÜ#Ø˜×.Ñ.×<Ñ<Ñ<Ø×(Ñ(×7Ñ7ñ8óˆOô Ø×&Ñ&×4Ñ4Ø Ñ%Ø Ñ$óˆLð
 šq $¨°Ñ)<Ð"<Ð<Ñ=ˆGØ+¨d×.DÑ.D×.SÑ.SÑSÐÜ! 'Ó*ˆGà�{‰{×'Ñ'¬¯©Ô6Ø—‘×!Ñ!Ø.Ô0@ÀÓ0Môð )Ð);Ð)<Ð=ˆOà�aŠx˜>Ð1Ø!%§¡¨WÓ!5�à×#Ò#ØŸ*™*×4Ñ4°^ÓD�Ø7>¸q±zÀ!±}Ñ4�Ð 4Ø)¨!¨BÐ/�à%.×%8Ñ%8×%DÑ%DÀ^Ó%T�	Ô"Ø*2�	Ô'à—_‘_ØØØ#*×#=Ñ#=Ø)-°ª�w—~’~¸Ø ×)Ñ)ð %ó ˆFð ×+Ñ+¨N¸FÀIÈwÓWñØØØØ!ð ×*Ñ*Ð6à$×3Ñ3°g×6QÑ6QÑQ�ð ×.Ñ.Ð:Ø# g×&@Ñ&@Ò@ð #(�KáØ—K‘K×%Ñ%Ø>Ø×-Ñ-Ø×3Ñ3ôð ˜LÑ(�DÙà×)Ñ)¨!Ñ,ˆFà ˆMð
¬ð 
´%ó 
ð@¬H´T©Nð @¼tö @ðG¬T´$©Zð G¼HÄT¹Nó Gð ×2Ñ2Ø#ØØ'Ø)Ø!1Øð 3ó ñ	Ø ØØ'ð ×&Ó&Ø×(Ñ(Ø%Ð&ØØ"Ø Ø×0Ñ0Ø×/Ñ/Ø*?ð )ô ñ /Ü$+Ð,<Ó$=�MØ$Ð0°]À[Ò5PÜ$ ]°T×5KÑ5KÑ%KÓL˜ð ×:Ñ:ÑFØ '× GÑ G�Iñ %7Ð7GÓ$H�MØ$Ð0Ñ5GÈÔ5VØ+¨GÑ4°{ÑB˜Ø š?Ø#0´5¸¸t×?UÑ?UÑ9UÓ3VÑ#V˜DÙ$ð $9�LÜ#¤CÐ(8Ó$9Ó:ò 6˜Ø"2°2Ñ"6˜Ø& wÒ/Ø$Ù-¨gÔ6Ù+=Ø 0°°a±°Ð :ó,˜Lð  ,Ð7Ø1=¸gÑ1FÀqÑ1IÈ'Ñ1R¡à1<Ð?OÑ1O à '¨Ñ 0°<Ñ ?À)Ñ Kò !HØ#*¨7Ñ#3°iÑ#?ò!Hà#*¨7Ñ#3°kÑ#AÀCÑ#Gð +ð !/°¸±Ñ ?À)Ñ Kò !JÙ#5°lÓ#Cò!Jà#2°W¸U±^Ñ#CÀcÑ#Ið *ñ
  .±-Ü',Ü$'¨°a©¸ÀÑ9IÓ$JØ&*×&<Ñ&<ñ%=ó(" ð $4°g¸e±nÑ#DÀyÒ#PØ+9 DØ8:Ð 0°°Ð 5Ù %Ø'.¨u¡~™ð?6ôB !(Ð(8Ó 9�Ø Ð,Ø,9Ð)Ø+ò �Ø  Ñ*�Ø ×'Ñ'¨Ó/�à˜7Ñ# w¨u¡~Ò5¸T¿Z¹Z¼\Øà×!Ñ! &Ô)Ø�q‘�äØØ&Ø! 'Ñ*Ø ™ØØ!Ø +Ø +Ø&7Ø#)×#8Ñ#8ð #×2Ò2ð 3:¸'Ñ2BÖC¨$œ™ ›ÓCà!ôó ðð: ×6Ò6Ø ×!DÑ!DÒDà×5Ò5Ø—K‘K×%Ñ%Ø\Ø#Ø×;Ñ;ôô &)¨£_Ð"à�K‰KÜ�^ TÓ*¨]Ñ:Ø×(Ñ(×7Ñ7ñ8ôðI œ˜Z›Ô(ðP 	�
‰
�ùòe'ùò"
ùòd Dùs2   „A:_
Á>^;Â_
Â&_ ÃX'_
Û,_Û>B*_
Þ* _
c                 ó  — | j                   j                  dk(  xr" t        | j                   j                  «      dkD  }|j                  dk(  rt        j                  |d«      }t        |«      }| j                   j                  ||¬«      S )NÚcudar•   r#   r   )Úto_cpu)	ri   r  r™   r  Úndimrå   Úexpand_dimsÚget_ctranslate2_storager˜   )r'   r|   r›  s      r(   r˜   zWhisperModel.encodeo  sr   € ð —‘×"Ñ" fÑ,ÒQ´°T·Z±Z×5LÑ5LÓ1MÐPQÑ1Qˆà�=‰=˜AÒÜ—~‘~ h°Ó2ˆHÜ*¨8Ó4ˆà�z‰z× Ñ  °&Ð Ó9Ð9r*   r¥   c                 óÂ  — d }g }g }t        t        |j                  | j                  z  «      «      }|j                  �t        |«      |j                  z   }	n| j                  }	|	| j                  kD  rDt        dt        |«      › d|	t        |«      z
  › d|	› d| j                  › d| j                  › d�«      ‚|j                  D �]ø  }
|
dkD  rd|j                  d|
d	œ}n|j                  |j                  d
œ} | j                  j                  ||gf|j                  |j                  |j                   |	dd|j"                  |j$                  |dœ	|¤Žd   }|j&                  d   }t        |«      }|j(                  d   ||j                  z  z  }||dz   z  }|j+                  |«      j-                  «       }t/        |«      }|||
|f}|j1                  |«       d}|j2                  �K||j2                  kD  r+d}| j4                  j7                  d|
||j2                  «       n|j1                  |«       |j8                  �9||j8                  k  r*d}| j4                  j7                  d|
||j8                  «       |j:                  �6|j<                  |j:                  kD  r|j8                  �||j8                  k  rd}|r�Œø |S  t?        |xs |d„ ¬«      }|d   |d   
|d   f}|S )Nr‹   rŒ   r�   rŽ   r�   r�   r   r•   )rA   Únum_hypothesesÚsampling_topkr”   )rA   rC   T)	rD   rE   rF   r‘   r’   r“   rO   rP   Úmax_initial_timestamp_indexFzFCompression ratio threshold is not met with temperature %.1f (%f > %f)zDLog probability threshold is not met with temperature %.1f (%f < %f)c                 ó   — | d   S )Nr•   r1   )Úxs    r(   ú<lambda>z5WhisperModel.generate_with_fallback.<locals>.<lambda>ð  s
   € ÈÈ1É€ r*   ©Úkeyr  ) r>   r  rR   r.  rW   r™   r‘   rš   rL   rB   rA   rC   ri   r¡   rD   rE   rF   rO   rP   r¢   r£   ry   rz  rz   rv   rI   râ   rN  rG   rH   r:   r€  )r'   r   r¥   ro   r~   Údecode_resultÚall_resultsÚbelow_cr_threshold_resultsr¢  r‘   r<   Úkwargsr®   r7   r¯   r°   r8   r6   r9   Úneeds_fallbacks                       r(   r  z#WhisperModel.generate_with_fallbackz  sU  € ð ˆØˆØ%'Ð"ä&)Ü�'×/Ñ/°$×2EÑ2EÑEÓFó'
Ð#ð ×!Ñ!Ð-Ü˜V› w×'=Ñ'=Ñ=‰JàŸ™ˆJà˜Ÿ™Ò'ÜØ.¬s°6«{¨mÐ;VØ¤ F£Ñ+Ð,ð -,Ø,6¨<ð 86Ø6:·o±oÐ5Fð G>ð ?C¿o¹oÐ=NÈaðQóð ð #×/Ñ/ó `	ˆKØ˜QŠà!"Ø&-§o¡oØ%&Ø,7ñ	‘ð ")×!2Ñ!2Ø '× 0Ñ 0ñ�ð
 )�T—Z‘Z×(Ñ(ØØ�ðð  '×5Ñ5Ø#*×#=Ñ#=Ø%,×%AÑ%AØ%Ø"Ø&*Ø&×5Ñ5Ø '× 7Ñ 7Ø,Gñð ñð ñˆFð ×)Ñ)¨!Ñ,ˆFô ˜&“kˆGØ Ÿ-™-¨Ñ*¨g°w×7MÑ7MÑ.MÑNˆKØ%¨°1©Ñ5ˆKà×#Ñ# FÓ+×1Ñ1Ó3ˆDÜ 5°dÓ ;Ðð ØØØ!ð	ˆMð ×Ñ˜}Ô-à"ˆNà×2Ñ2Ð>Ø$ w×'JÑ'JÒJØ%)�Nà—K‘K×%Ñ%Ø`Ø#Ø)Ø×;Ñ;õ	ð /×5Ñ5°mÔDð ×*Ñ*Ð6Ø '×"<Ñ"<Ò<à!%�à—‘×!Ñ!ØZØØØ×.Ñ.ô	ð ×+Ñ+Ð7Ø×)Ñ)¨G×,GÑ,GÒGØ×.Ñ.Ð:Ø '×"<Ñ"<Ò<à!&�ã!Øð ÐðE`	ôn  Ø*Ò9¨k¹~ôˆMð
 ˜aÑ Ø˜aÑ ØØ˜aÑ ð	ˆMð Ðr*   rŠ   c                 óÜ  — g }|s|r«|s©|j                  |j                  «       |re|sc|j                  d|j                  «       z   «      }t	        |«      | j
                  dz  k\  r|d | j
                  dz  dz
   }|j                  |«       |r%|j                  || j
                  dz  dz
   d  «       |j                  |j                  «       |r|j                  |j                  «       |r€|j                  d|j                  «       z   «      }t	        |«      | j
                  dz  k\  r|d | j
                  dz  dz
   }|s|j                  |j                  «       |j                  |«       |S )Nre  r#   r•   )
rv   Úsot_prevr˜   rz  r™   r‘   r{  Úsot_sequenceÚno_timestampsrV  )	r'   ro   rŠ   rQ   rN   rZ   r¥   Úhotwords_tokensÚprefix_tokenss	            r(   r—   zWhisperModel.get_promptü  sD  € ð ˆá™x±Ø�M‰M˜)×,Ñ,Ô-Ù¡Ø"+×"2Ñ"2°3¸¿¹Ó9IÑ3IÓ"J�Ü�Ó'¨4¯?©?¸aÑ+?Ò?Ø&5Ð6P¸¿¹È1Ñ8LÈqÑ8PÐ&Q�OØ—‘˜oÔ.ÙØ—‘˜o°·±À1Ñ0DÀqÑ0HÐ.IÐ.KÐLÔMà�‰�i×,Ñ,Ô-áØ�M‰M˜)×1Ñ1Ô2áØ%×,Ñ,¨S°6·<±<³>Ñ-AÓBˆMÜ�=Ó! T§_¡_¸Ñ%9Ò9Ø -Ð.H°·±À1Ñ0DÀqÑ0HÐ I�Ù%Ø—‘˜i×7Ñ7Ô8Ø�M‰M˜-Ô(àˆr*   rÐ   Ú
num_framesrj   c                 óš  — t        |«      dk(  ry g }g }	|D ]|  }
|
D ��cg c]%  }|d   D �cg c]  }||j                  k  sŒ|‘Œ c}‘Œ' }}}|j                  t        t        j
                  j                  |«      «      «       |	j                  |«       Œ~ | j                  ||||«      }g }|D �]  }t        j                  |D �cg c]  }|d   |d   z
  ‘Œ c}«      }||j                  «          }t        |«      dkD  rt        j                  |«      nd}t        dt        |«      «      }|dz  }t        |«      dkD  rld}t        d	t        |«      «      D ]R  }||   d   ||   d   z
  |kD  sŒ||   d
   |v r||   d   |z   ||   d<   Œ4||d	z
     d
   |v sŒB||   d   |z
  ||   d<   ŒT t        |||«       |j                  ||f«       �Œ t!        |«      D �]`  \  }}
d}|
d   d   | j"                  z  }||   \  }}t!        |
«      D �],  \  }}d}g }|t        ||   «      k  r¡|t        |	|   |   «      k  r�||   |   }|d
   rD|j                  t%        |d
   t'        ||d   z   d«      t'        ||d   z   d«      |d   ¬«      «       |t        |d   «      z  }|d	z  }|t        ||   «      k  r|t        |	|   |   «      k  rŒ�t        |«      dkD  �rV|d   d   |z
  |dz  kD  r¤|d   d   |d   d   z
  |kD  s%t        |«      d	kD  r‚|d	   d   |d   d   z
  |dz  kD  rkt        |«      d	kD  rB|d	   d   |d	   d   z
  |kD  r.t)        |d	   d   dz  |d	   d   |z
  «      }|x|d   d<   |d	   d<   t)        d|d   d   |z
  «      |d   d<   |d   |d   d   k  r:|d   dz
  |d   d   kD  r)t)        dt        |d   d   |z
  |d   «      «      |d   d<   n|d   d   |d<   |d   |d   d   kD  r0|d   dz   |d   d   k  rt)        |d   d   |z   |d   «      |d   d<   n|d   d   |d<   |d   }|||   |   d<   �Œ/ �Œc |S c c}w c c}}w c c}w )Nr   r7   r   r   rh   gffffffæ?r#   u   .ã€‚!ï¼�?ï¼Ÿr•   r    r5   r!   )r    r   r   r!   é   r¸   r¹   r;   )r™   Úeotrv   rò   Ú	itertoolsÚchainÚfrom_iterableÚfind_alignmentrå   ÚarrayÚnonzeroÚmedianr}  r.   r›   Úmerge_punctuationsr    ru   rx   r  r€  )r'   rÐ   ro   r   r³  rT   rU   rj   Útext_tokensÚtext_tokens_per_segmentrÓ   r‡   rb  Úsegment_tokensÚ
alignmentsÚmedian_max_durationsÚ	alignmentr    Úword_durationsÚmedian_durationrÎ   Úsentence_end_marksr«   Úsegment_idxÚ
word_indexrp   Úsubsegment_idxÚsaved_tokensr;   ÚtimingÚboundarys                                  r(   r{   z WhisperModel.add_word_timestamps  s±  € ô ˆx‹=˜AÒØàˆØ"$ÐØò 	;ˆGð #*÷àð %/¨xÑ$8ÖR˜5¸EÀIÇMÁMÓ<Q’ÔRðˆNñ ð ×Ñœt¤I§O¡O×$AÑ$AÀ.Ó$QÓRÔSØ#×*Ñ*¨>Õ:ð	;ð ×(Ñ(Ø�{ N°Jó
ˆ
ð  "ÐØ#ó 	IˆIÜŸX™XØ9BÖC°��e‘˜t G™}Ó,ÒCóˆNð ,¨N×,BÑ,BÓ,DÑEˆNä-0°Ó-@À1Ò-D”—	‘	˜.Ô)È#ð ô " #¤u¨_Ó'=Ó>ˆOØ*¨QÑ.ˆLô �>Ó" QÒ&Ø%3Ð"ô ˜q¤# i£.Ó1ò W�AØ  ‘| EÑ*¨Y°q©\¸'Ñ-BÑBÀ\ÓQØ$ Q™<¨Ñ/Ð3EÑEØ2;¸A±,¸wÑ2GÈ,Ñ2V˜I a™L¨Ò/Ø& q¨1¡uÑ-¨fÑ5Ð9KÒKØ4=¸a±LÀÑ4GÈ,Ñ4V˜I a™L¨Ò1ðWô ˜yÐ*>Ð@SÔTØ ×'Ñ'¨¸,Ð(GÖHð3	Iô6 %.¨hÓ$7ó J	GÑ ˆK˜ØˆJØ! !™* VÑ,¨t×/EÑ/EÑEˆKØ,@ÀÑ,MÑ)ˆO˜\Ü.7¸Ó.@ó FGÑ*� 
Ø �Ø�à ¤3 z°+Ñ'>Ó#?Ò?ÀLÔSVØ+¨KÑ8¸ÑHóTò Eð (¨Ñ4°ZÑ@�Fà˜f’~ØŸ™Ü Ø%+¨F¡^Ü&+¨K¸&À¹/Ñ,IÈ1Ó&MÜ$)¨+¸¸u¹Ñ*EÀqÓ$IØ,2°=Ñ,Aô	ôð !¤C¨¨xÑ(8Ó$9Ñ9�LØ !‘O�Jð! !¤3 z°+Ñ'>Ó#?Ò?ÀLÔSVØ+¨KÑ8¸ÑHóTó Eô( �u“: “>ð ˜Q‘xØñà-ñ.à0?À!Ñ0CòDð ˜a™ ™¨%°©(°7Ñ*;Ñ;¸lÒJä ›J¨šNØ % a¡¨¡°%¸±(¸7Ñ2CÑ CÀlÐUVÑFVÒ Vô   ›J¨šNØ % a¡¨¡°%¸±(¸7Ñ2CÑ CÀlÒ Rä'*Ø % a¡¨¡°!Ñ 3°U¸1±X¸e±_À|Ñ5Só(˜Hð CKÐJ˜E !™H U™O¨e°A©h°wÑ.?Ü,/°°5¸±8¸E±?À\Ñ3QÓ,R˜˜a™ Ñ)ð # 7Ñ+¨e°A©h°u©oÒ=Ø& wÑ/°#Ñ5¸¸a¹ÀÑ8IÒIä,/ØÜ  a¡¨¡°/Ñ AÀ:ÈgÑCVÓWó-˜˜a™ Ò)ð
 /4°A©h°wÑ.?˜
 7Ñ+ð # 5Ñ)¨E°"©I°gÑ,>Ò>Ø& uÑ-°Ñ3°e¸B±iÀÑ6FÒFä+.Ø! "™I gÑ.°Ñ@À*ÈUÑBSó,˜˜b™	 %Ò(ð -2°"©I°eÑ,<˜
 5Ñ)à,6°uÑ,=Ð)ØAF�˜Ñ% nÑ5°gÓ>òMFGð	J	GðV %Ð$ùòa Sùóùò Ds!   žQªP=¿P=ÁQÃQ
Ð=Qr¿  Úmedian_filter_widthc                 ó¾  — t        |«      dk(  rg S | j                  j                  ||j                  |||¬«      }g }t	        ||«      D �]ò  \  }}	|j
                  }
|j                  }t        j                  |D �cg c]  }|d   ‘Œ	 c}«      }t        j                  |D �cg c]  }|d   ‘Œ	 c}«      }|j                  |	|j                  gz   «      \  }}t        |«      dk  r|j                  g «       Œ­t        j                  t        j                  |d d D �cg c]  }t        |«      ‘Œ c}«      d«      }t        |«      dk  r|j                  g «       �Œt        j                  t        j                  |«      dd¬«      j                  t         «      }||   | j"                  z  }||d d    }||dd     }t	        |d d |dd  «      D ��cg c]  \  }}t        j$                  |
|| «      ‘Œ }}}|j                  t	        |||||«      D �����cg c]  \  }}}}}t'        |||||¬«      ‘Œ c}}}}}«       �Œõ |S c c}w c c}w c c}w c c}}w c c}}}}}w )Nr   )rÎ  r•   r¹   )r•   r   )Úconstant_values)r    r7   r   r   r!   )r™   ri   Úalignr¯  rt   Útext_token_probsrÂ  rå   r»  Úsplit_to_word_tokensr¶  rv   ÚpadÚcumsumÚdiffÚastyper[   r-  Úmeanrx   )r'   ro   r¿  r   r³  rÎ  r­   Úreturn_listr®   Ú
text_tokenrÒ  rÂ  ÚpairÚtext_indicesÚtime_indicesr;   Úword_tokensÚtÚword_boundariesÚjumpsÚ
jump_timesÚstart_timesÚ	end_timesr«   ÚjÚword_probabilitiesr    r7   r   r   r!   s                                  r(   rº  zWhisperModel.find_alignment¢  s~  € ô ˆ{Ó˜qÒ ØˆIà—*‘*×"Ñ"ØØ×"Ñ"ØØØ 3ð #ó 
ˆð ˆÜ"% g¨{Ó";ó 0	ÑˆF�JØ%×6Ñ6ÐØ×*Ñ*ˆJÜŸ8™8¸Ö$D° T¨!£WÒ$DÓEˆLÜŸ8™8¸Ö$D° T¨!£WÒ$DÓEˆLà!*×!?Ñ!?Ø˜iŸm™m˜_Ñ,ó"ÑˆE�;ô �;Ó 1Ò$ð ×"Ñ" 2Ô&ØÜ Ÿf™fÜ—	‘	¨;°s¸Ð+;Ö< aœ3˜q�6Ò<Ó=¸vóˆOô �?Ó# qÒ(Ø×"Ñ" 2Ô&Ùä—F‘Fœ2Ÿ7™7 <Ó0°&È!ÔL×SÑSÜóˆEð & eÑ,¨t×/EÑ/EÑEˆJØ$ _°S°bÐ%9Ñ:ˆKØ" ?°1°2Ð#6Ñ7ˆIô   °°Ð 4°oÀaÀbÐ6IÓJ÷"á�A�qô —‘Ð(¨¨1Ð-Õ.ð"Ðñ "ð
 ×Ñô BEØ˜{¨K¸ÐDVóB÷ò ñ >˜˜f e¨S°+ô Ø!Ø%Ø#ØØ$/öööðG0	ðb Ðùò] %EùÚ$Dùò =ùó"ùös   Á;I
Â!I
ÄIÇ"IÈIc           
      ó  ‡— |€	|€J d«       ‚|�a|r2t        ||«      }t        ||«      \  }}	t        j                  |d¬«      }|d|| j                  j
                  z   }| j	                  |«      }|dd|| j                  j                  z  …f   }i Št        d|j                  d   | j                  j                  «      D ]¡  }
| j                  t        |d|
|
| j                  j                  z   …f   «      «      }| j                  j                  |«      d   }|D ��cg c]  \  }}|dd |f‘Œ }}}|d   \  }}||kD  r nA‰j                  |g «      j                  |«       Œ£ t        ‰ˆfd	„¬
«      }t        ‰|   «      }||fS c c}}w )aå  
        Use Whisper to detect the language of the input audio or features.

        Arguments:
            audio: Input audio signal, must be a 1D float array sampled at 16khz.
            features: Input Mel spectrogram features, must be a float array with
                shape (n_mels, n_frames), if `audio` is provided, the features will be ignored.
                Either `audio` or `features` must be provided.
            vad_filter: Enable the voice activity detection (VAD) to filter out parts of the audio
                without speech. This step is using the Silero VAD model.
            vad_parameters: Dictionary of Silero VAD parameters or VadOptions class (see available
                parameters and default values in the class `VadOptions`).
            language_detection_threshold: If the maximum probability of the language tokens is
                higher than this value, the language is detected.
            language_detection_segments: Number of segments to consider for the language detection.

        Returns:
            language: Detected language.
            language_probability: Probability of the detected language.
            all_language_probs: List of tuples with all language names and probabilities.
        Nz.Either `audio` or `features` must be provided.r   rÙ   .r¹   r#   rU  c                 ó    •— t        ‰|    «      S rp  )r™   )ÚlangÚdetected_language_infos    €r(   r¥  z.WhisperModel.detect_language.<locals>.<lambda>-  s   ø€ ¤Ð%;¸DÑ%AÓ!B€ r*   r¦  )r   r   rå   rí   rà   Ú	n_samplesr|  r›   r–   r˜   r   ri   r�   Ú
setdefaultrv   r€  )r'   r½   r|   rÀ   rÁ   rÄ   rÃ   rQ  rø   r}   r«   r   r­   rb  Úprobrb   r^   r_   rê  s                     @r(   r�   zWhisperModel.detect_languageè  sÖ  ø€ ð> Ð Ð!5ð	<à;ó	<Ø5ð ÐÙÜ 5°e¸^Ó L�Ü0>¸uÀmÓ0TÑ-�˜oÜŸ™ |¸!Ô<�àØPÐ-°×0FÑ0F×0PÑ0PÑPðˆEð ×-Ñ-¨eÓ4ˆHàØÐUÐ.°×1GÑ1G×1UÑ1UÑUÐUÐUñ
ˆð "$ÐÜ�q˜(Ÿ.™.¨Ñ,¨d×.DÑ.D×.RÑ.RÓSò 	IˆAØ!Ÿ[™[Ü˜H S¨!¨a°$×2HÑ2H×2VÑ2VÑ.VÐ*VÐ%VÑWÓXóˆNð —j‘j×0Ñ0°Ó@ÀÑCˆGð LS×!S¹-¸5À$ 5¨¨2 ;°Ò"5Ð!SÐÑ!Sà-?ÀÑ-BÑ*ˆHÐ*Ø#Ð&BÒBÙØ"×-Ñ-¨h¸Ó;×BÑBÐCWÕXð	Iô" Ø&ÛBôˆHô $'Ð'=¸hÑ'GÓ#HÐ àÐ-Ð/AÐAÐAùó "Ts   ÄF)
Úautor   Údefaultr   r•   NFNNNrp  )FNN)é   )NNFNr•   r¸   )&r+   r,   r-   r0   r   r>   r	   r
   r[   rx   rk   Úpropertyr5  r(  r   rå   ræ   r.   r   r   r   r3   r]   r±   r   rw   r@   r  ÚStorageViewrP  r˜   r   ÚWhisperGenerationResultr  r—   r{   rº  r�   r1   r*   r(   r
  r
  l  s–  „ ð Ø./Ø%ØØØ'+Ø!&ØØ"&Ø59ñeàðeð ðeð ˜C  c¡˜NÑ+ð	eð
 ðeð ðeð ðeð   ‘}ðeð ðeð ðeð ˜3‘-ðeð !  s¨D yÑ!1Ñ2óeðN ðO T¨#¡Yò Oó ðOñÈ$ó ð* #'Ø Ø"ØØØØ !Ø$%Ø$%òE
ð 8;Ø.2Ø/2Ø+/Ø-0Ø>BØ $Ø#Ø02¨tØ#(Ø'*Ø %Ø$2Ø#EØ"Ø Ø<@Ø(,Ø&*Ø36Ø;?Ø"&Ø8;Ø+,ñWSà�S˜( B§J¡JÐ.Ñ/ðSð ˜3‘-ðSð ð	Sð
 ðSð ðSð ðSð ðSð ðSð "ðSð "ðSð ˜5 $ u¡+¨u°U¸C°ZÑ/@Ð@ÑAðSð( &.¨e¡_ð)Sð* % U™Oð+Sð, & e™_ð-Sð. %)ð/Sð0 &+ð1Sð2 !  s¨H°S©MÐ'9Ñ!:Ñ;ð3Sð4 ˜‘ð5Sð6 ð7Sð8 " $ s¡)Ñ,ð9Sð: !ð;Sð<  %ð=Sð> ð?Sð@ "ðASðB !ðCSðD ðESðF ðGSðH !  t¨ZÐ'7Ñ!8Ñ9ðISðJ ! ™ðKSðL ˜s‘mðMSðN ˜s D¨¡KÐ/Ñ0ðOSðP *2°%©ðQSðR ˜3‘-ðSSðT '/¨u¡oðUSðV &)ðWSðX 
ˆx˜Ñ Ð"3Ð3Ñ	4óYSðjM?àðM?ð �S‘	ðM?ð ð	M?ð
 ðM?ð  ðM?ð ðM?ð 
ˆd�3‰i‰óM?ðj =Añ^à—*‘*ð^ð ð^ð &ð	^ð ! ×!8Ñ!8Ñ9ð^ð 
�'Ñ	ó^ð@		:˜rŸz™zð 	:¨k×.EÑ.Eó 	:ð@à#×/Ñ/ð@ð �S‘	ð@ð ð	@ð
 &ð@ð 
ˆ{×!Ñ!×9Ñ9¸5À%ÈÐNÑ	Oó@ðL $)Ø $Ø"&ñ!àð!ð ˜c™ð!ð !ð	!ð
 ˜‘ð!ð ˜3‘-ð!ð 
ˆc‰ó!ðFA%à�t‘*ðA%ð ðA%ð $×/Ñ/ð	A%ð
 ðA%ð "ðA%ð !ðA%ð  %ðA%ð 
óA%ðR $%ñDàðDð ˜#‘YðDð $×/Ñ/ð	Dð
 ðDð !ðDð 
ˆd‰óDðP '+Ø)-Ø Ø26Ø+,Ø.1ñIBà˜Ÿ
™
Ñ#ðIBð ˜2Ÿ:™:Ñ&ðIBð ð	IBð
 ˜d JÐ.Ñ/ðIBð &)ðIBð ',ðIBð 
ˆs�E˜4  c¨5 jÑ 1Ñ2Ð2Ñ	3ôIBr*   r
  rÐ   rQ  rÉ   rÅ   c              #   ó`  K  — t        ||«      }| D �]  }|j                  rÃg }|j                  D ]‚  }|j                  |j                  z   dz  }|j	                  |«      }|j                  |j                  |«      |_        |j                  |j                  |«      |_        |j                  |«       Œ„ |d   j                  |_        |d   j                  |_        ||_        nB|j                  |j                  «      |_        |j                  |j                  d¬«      |_        |–— �Œ y ­w)Nr#   r   r¹   T)Úis_end)r   r;   r   r   Úget_chunk_indexÚget_original_timerv   )	rÐ   rQ  rÉ   Úts_maprÓ   r;   r    ÚmiddleÚchunk_indexs	            r(   rö   rö   4  s  è ø€ ô
 ! °Ó>€Fàó ˆØ�=Š=ØˆEØŸ™ò #�àŸ*™* t§x¡xÑ/°1Ñ4�Ø$×4Ñ4°VÓ<�Ø#×5Ñ5°d·j±jÀ+ÓN�”
Ø!×3Ñ3°D·H±H¸kÓJ�”Ø—‘˜TÕ"ð#ð " !™HŸN™NˆGŒMØ ™)Ÿ-™-ˆGŒKØ!ˆG�Mð #×4Ñ4°W·]±]ÓCˆGŒMØ ×2Ñ2°7·;±;ÀtÐ2ÓLˆGŒKàŒñ'ùs   ‚D,D.rÓ   c                 ón   — t        j                  | «      } t        j                  j	                  | «      } | S rp  )rå   Úascontiguousarrayr  rò  Ú
from_array)rÓ   s    r(   rž  rž  Q  s-   € Ü×"Ñ" 7Ó+€GÜ×%Ñ%×0Ñ0°Ó9€GØ€Nr*   r6   c                 óx   — | j                  d«      }t        |«      t        t        j                  |«      «      z  S )Nr8  )r˜   r™   ÚzlibÚcompress)r6   Ú
text_bytess     r(   rz   rz   W  s-   € Ø—‘˜WÓ%€JÜˆz‹?œS¤§¡¨zÓ!:Ó;Ñ;Ð;r*   ro   rP   c                 óª  — d|v r1|D �cg c]
  }|dk\  sŒ	|‘Œ }}|j                  | j                  «       n*|�t        |«      dk(  rg }nt        |t        «      sJ d«       ‚|j                  | j
                  | j                  | j                  | j                  | j                  | j                  g«       t        t        t        |«      «      «      S c c}w )Nr¹   r   zsuppress_tokens must be a list)r{  Únon_speech_tokensr™   rä   rò   r±   Ú	translateÚsotr®  Úsot_lmÚ	no_speechró   ÚsortedÚset)ro   rP   rß  s      r(   rô   rô   \  sÊ   € ð 
ˆ_ÑØ&5Ö@ ¸¸a»š1Ð@ˆÐ@Ø×Ñ˜y×:Ñ:Õ;Ø	Ð	 ¤C¨Ó$8¸AÒ$=Ø‰ä˜/¬4Ô0ÐRÐ2RÓRÐ0à×Ñà× Ñ Ø×ÑØ�M‰MØ×ÑØ×ÑØ×Ñð	
ô	ô ”œ˜OÓ,Ó-Ó.Ð.ùò% As
   ‰
C”CrÄ  Ú	prependedÚappendedc                 óþ  — t        | «      dz
  }t        | «      dz
  }|dk\  rg| |   }| |   }|d   j                  d«      r<|d   j                  «       |v r'|d   |d   z   |d<   |d   |d   z   |d<   d|d<   g |d<   n|}|dz  }|dk\  rŒgd}d}|t        | «      k  rc| |   }| |   }|d   j                  d«      s.|d   |v r'|d   |d   z   |d<   |d   |d   z   |d<   d|d<   g |d<   n|}|dz  }|t        | «      k  rŒby y )Nr#   r•   r   r    re  r7   r  )r™   Ú
startswithrz  Úendswith)rÄ  r
  r  r«   rå  ÚpreviousÚ	followings          r(   r¾  r¾  v  sg  € äˆI‹˜Ñ€AÜˆI‹˜Ñ€AØ
ˆqŠ&Ø˜Q‘<ˆØ˜a‘Lˆ	Ø�FÑ×&Ñ& sÔ+°¸Ñ0@×0FÑ0FÓ0HÈIÑ0Uà (¨Ñ 0°9¸VÑ3DÑ DˆI�fÑØ"*¨8Ñ"4°yÀÑ7JÑ"JˆI�hÑØ!ˆH�VÑØ!#ˆH�XÒàˆAØ	ˆQ‰ˆð ˆq‹&ð 	
€AØ	€AØ
Œc�)‹nÒ
Ø˜Q‘<ˆØ˜a‘Lˆ	Ø˜Ñ×(Ñ(¨Ô-°)¸FÑ2CÀxÑ2Oà'¨Ñ/°)¸FÑ2CÑCˆH�VÑØ!)¨(Ñ!3°iÀÑ6IÑ!IˆH�XÑØ "ˆI�fÑØ"$ˆI�hÒàˆAØ	ˆQ‰ˆð Œc�)‹nÕ
r*   )=r·  r:  rL  r  rÿ  Údataclassesr   r   Úinspectr   Úmathr   Útypingr   r   r	   r
   r   r   Úwarningsr   r  Únumpyrå   r#  r   Úfaster_whisper.audior   r   Ú faster_whisper.feature_extractorr   Úfaster_whisper.tokenizerr   r   Úfaster_whisper.utilsr   r   r   r   Úfaster_whisper.vadr   r   r   r   r   r3   r@   r]   rf   r
  rx   r>   rö   ræ   rò  rž  r0   r.   rz   rô   r¾  r1   r*   r(   ú<module>r     s„  ðÛ Û Û Û 	Û ç )Ý Ý ß C× CÝ ã Û Û å ç :Ý =ß ?ß VÓ V÷ó ð ÷ð ó ðð ÷ð ó ðð, ÷ð ó ðð: ÷ð ó ð÷z)ñ z)÷zEBñ EBðP&Ø�wÑðà˜‘:ðð ðð ˆgÑó	ð: R§Z¡Zð °K×4KÑ4Kó ð< ð <¨ó <ð
/Øð/à˜3‘Zð/ð ˆd�3‰iÑó/ð4 $ t¡*ð ¸ð Èð ÐPTô r*   