ó
    �®žjV  ã                   ó  • S SK r S SKJr  S SKJr  S SKJr  S SKJrJ	r	J
r
JrJr  \ R                  " \5      rS rS r\" 5       rS r\" 5       rS	 r\" 5       rS
 r\" 5       rS r\" 5       rS r\" 5       r\	" S\R:                  SSSSSS9r\	" S\R:                  SSSSSS9r\	" S\R:                  SSSSSS9r \	" S\R:                  SSSSSS9r!\	" S\R:                  SSSSSS9r"\	" S\R:                  SSSSSS9r#\
" S\RH                  SSSSSSS9r%\
" S\RH                  SSSSSSS9r&\
" S\RH                  SSSSSSS9r'\
" S \RH                  SSSSSSS9r(\
" S!\RH                  SSSSSSS9r)\
" S"\RH                  SSSSSSS9r*\
" S#\RH                  SSSSSSS9r+\
" S$\RH                  SSSSSSS9r,\
" S%\RH                  SSSSSSS9r-\
" S&\RH                  SSSSSSS9r.\
" S'\RH                  S(SSSSSSS)9	r/\
" S*\RH                  S(SSSSSSS)9	r0\
" S+\RH                  S(SSSSSSS)9	r1\
" S,\RH                  S(SSSSSSS)9	r2\" S\Rf                  S(SS-S.S/S09r4\" S#\Rf                  S(SS-S.S/S09r5\" S \Rf                  S(SS-S1S/S09r6\" S$\Rf                  S(SS-S1S/S09r7\" S\Rf                  S(SS-S2S/S09r8\" S%\Rf                  S(SS-S2S/S09r9\" S'\Rf                  S(SS-S3S/S09r:\" S\Rf                  S(SS-S4S/S09r;\" S&\Rf                  S(SS-S4S/S09r<\" S*\Rf                  S(SS-S2S/S09r=\" S5\Rf                  S(SS-S6S/S09r>\" S+\Rf                  S(SS-S4S/S09r?\" S,\Rf                  S(SS-S4S/S09r@\" S7\Rf                  S(SS-S4S/S09rA " S8 S9\B\5      rCg):é    N)ÚEnum)ÚAnyUrl)ÚAcceleratorDevice)ÚInferenceAsrFrameworkÚInlineAsrMlxWhisperOptionsÚInlineAsrNativeWhisperOptionsÚInlineAsrWhisperS2TOptionsÚTransformersModelTypec                  ó
  •  SSK n U R                  R                  R                  5       =(       a$    U R                  R                  R	                  5       n SSKnSnX4$ ! [
         a    Sn Nf = f! [
         a    Sn X4$ f = f)zû
Detect Apple Silicon MPS availability and whether mlx-whisper is installed.

Returns:
    tuple: (has_mps, has_mlx_whisper)
        - has_mps: True if Apple Silicon MPS is available
        - has_mlx_whisper: True if mlx-whisper package is installed
r   NFT)ÚtorchÚbackendsÚmpsÚis_builtÚis_availableÚImportErrorÚmlx_whisper)r   Úhas_mpsr   Úhas_mlx_whispers       Ú^/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docling/datamodel/asr_model_specs.pyÚ_detect_hardware_and_librariesr      s†   € ðÛà—.‘.×$Ñ$×-Ñ-Ó/×U°E·N±N×4FÑ4F×4SÑ4SÓ4Uˆð
 Ûàˆð Ð#Ð#øô ó ØŠðûô ó  Ø‰àÐ#Ð#ð ús$   ‚AA ÁA1 ÁA.Á-A.Á1BÂBc                  ó¬   • [        5       u  pU (       a$  U(       a  [        S[        R                  SSSSSS9$ [	        S[        R
                  SSSS	S
SS9$ )a+  
Get the best Whisper Tiny model for the current hardware.

Auto-selection:
- MLX Whisper on Apple Silicon (if MPS available + mlx-whisper installed)
- Native Whisper otherwise

WhisperS2T is never auto-selected; use the explicit *_S2T model options to
opt into the experimental WhisperS2T backend.
úmlx-community/whisper-tiny-mlxÚ
transcribeTç333333ã?ç      ð¿ç333333@©Úrepo_idÚinference_frameworkÚtaskÚword_timestampsÚno_speech_thresholdÚlogprob_thresholdÚcompression_ratio_thresholdÚtinyç        é   ç      >@©r   r   ÚverboseÚ
timestampsr!   ÚtemperatureÚmax_new_tokensÚmax_time_chunk©r   r   r   ÚMLXr   ÚWHISPER©r   r   s     r   Ú_get_whisper_tiny_modelr3   5   ók   € ô  >Ó?Ñ€Gö –?Ü)Ø4Ü 5× 9Ñ 9ØØ Ø #Ø"Ø(+ñ
ð 	
ô )ØÜ1×9Ñ9ØØØØØØñ	ð 	ó    c                  ó¬   • [        5       u  pU (       a$  U(       a  [        S[        R                  SSSSSS9$ [	        S[        R
                  SSSS	S
SS9$ )a,  
Get the best Whisper Small model for the current hardware.

Auto-selection:
- MLX Whisper on Apple Silicon (if MPS available + mlx-whisper installed)
- Native Whisper otherwise

WhisperS2T is never auto-selected; use the explicit *_S2T model options to
opt into the experimental WhisperS2T backend.
úmlx-community/whisper-small-mlxr   Tr   r   r   r   Úsmallr&   r'   r(   r)   r/   r2   s     r   Ú_get_whisper_small_modelr9   _   sk   € ô  >Ó?Ñ€Gö –?Ü)Ø5Ü 5× 9Ñ 9ØØ Ø #Ø"Ø(+ñ
ð 	
ô )ØÜ1×9Ñ9ØØØØØØñ	ð 	r5   c                  ó¬   • [        5       u  pU (       a$  U(       a  [        S[        R                  SSSSSS9$ [	        S[        R
                  SSSS	S
SS9$ )a-  
Get the best Whisper Medium model for the current hardware.

Auto-selection:
- MLX Whisper on Apple Silicon (if MPS available + mlx-whisper installed)
- Native Whisper otherwise

WhisperS2T is never auto-selected; use the explicit *_S2T model options to
opt into the experimental WhisperS2T backend.
ú%mlx-community/whisper-medium-mlx-8bitr   Tr   r   r   r   Úmediumr&   r'   r(   r)   r/   r2   s     r   Ú_get_whisper_medium_modelr=   ‰   sk   € ô  >Ó?Ñ€Gö –?Ü)Ø;Ü 5× 9Ñ 9ØØ Ø #Ø"Ø(+ñ
ð 	
ô )ØÜ1×9Ñ9ØØØØØØñ	ð 	r5   c                  ó¬   • [        5       u  pU (       a$  U(       a  [        S[        R                  SSSSSS9$ [	        S[        R
                  SSSS	S
SS9$ )a+  
Get the best Whisper Base model for the current hardware.

Auto-selection:
- MLX Whisper on Apple Silicon (if MPS available + mlx-whisper installed)
- Native Whisper otherwise

WhisperS2T is never auto-selected; use the explicit *_S2T model options to
opt into the experimental WhisperS2T backend.
úmlx-community/whisper-base-mlxr   Tr   r   r   r   Úbaser&   r'   r(   r)   r/   r2   s     r   Ú_get_whisper_base_modelrA   ³   r4   r5   c                  ó¬   • [        5       u  pU (       a$  U(       a  [        S[        R                  SSSSSS9$ [	        S[        R
                  SSSS	S
SS9$ )a,  
Get the best Whisper Large model for the current hardware.

Auto-selection:
- MLX Whisper on Apple Silicon (if MPS available + mlx-whisper installed)
- Native Whisper otherwise

WhisperS2T is never auto-selected; use the explicit *_S2T model options to
opt into the experimental WhisperS2T backend.
ú$mlx-community/whisper-large-mlx-8bitr   Tr   r   r   r   Úlarger&   r'   r(   r)   r/   r2   s     r   Ú_get_whisper_large_modelrE   Ý   sk   € ô  >Ó?Ñ€Gö –?Ü)Ø:Ü 5× 9Ñ 9ØØ Ø #Ø"Ø(+ñ
ð 	
ô )ØÜ1×9Ñ9ØØØØØØñ	ð 	r5   c                  ó¬   • [        5       u  pU (       a$  U(       a  [        S[        R                  SSSSSS9$ [	        S[        R
                  SSSS	S
SS9$ )a,  
Get the best Whisper Turbo model for the current hardware.

Auto-selection:
- MLX Whisper on Apple Silicon (if MPS available + mlx-whisper installed)
- Native Whisper otherwise

WhisperS2T is never auto-selected; use the explicit *_S2T model options to
opt into the experimental WhisperS2T backend.
úmlx-community/whisper-turbor   Tr   r   r   r   Úturbor&   r'   r(   r)   r/   r2   s     r   Ú_get_whisper_turbo_modelrI     sk   € ô  >Ó?Ñ€Gö –?Ü)Ø1Ü 5× 9Ñ 9ØØ Ø #Ø"Ø(+ñ
ð 	
ô )ØÜ1×9Ñ9ØØØØØØñ	ð 	r5   r   r   Tr   r   r   r   r7   r;   r?   rC   rG   r%   r&   r'   r(   r)   r8   r<   r@   rD   rH   ztiny.enzbase.enzsmall.enz	medium.enzdistil-small.enÚen)	r   r   Úlanguager*   r+   r!   r,   r-   r.   zdistil-medium.enzdistil-large-v3zdistil-large-v3.5Úfloat16é   é   )r   r   rK   r    Útorch_dtypeÚ
batch_sizeÚ	beam_sizeé   é   é
   é   zlarge-v3é   zlarge-v3-turboc                   ó´   • \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr Sr!S r"S!r#S"r$S#r%S$r&S%r'S&r(S'r)S(r*S)r+S*r,g+),ÚAsrModelTypei½  Úwhisper_tinyÚwhisper_smallÚwhisper_mediumÚwhisper_baseÚwhisper_largeÚwhisper_turboÚwhisper_tiny_mlxÚwhisper_small_mlxÚwhisper_medium_mlxÚwhisper_base_mlxÚwhisper_large_mlxÚwhisper_turbo_mlxÚwhisper_tiny_nativeÚwhisper_small_nativeÚwhisper_medium_nativeÚwhisper_base_nativeÚwhisper_large_nativeÚwhisper_turbo_nativeÚwhisper_tiny_en_nativeÚwhisper_base_en_nativeÚwhisper_small_en_nativeÚwhisper_medium_en_nativeÚwhisper_distil_small_en_nativeÚwhisper_distil_medium_en_nativeÚwhisper_distil_large_v3_nativeÚ whisper_distil_large_v3_5_nativeÚwhisper_tiny_s2tÚwhisper_tiny_en_s2tÚwhisper_base_s2tÚwhisper_base_en_s2tÚwhisper_small_s2tÚwhisper_small_en_s2tÚwhisper_distil_small_en_s2tÚwhisper_medium_s2tÚwhisper_medium_en_s2tÚwhisper_distil_medium_en_s2tÚwhisper_large_v3_s2tÚwhisper_distil_large_v3_s2tÚwhisper_distil_large_v3_5_s2tÚwhisper_large_v3_turbo_s2t© N)-Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚWHISPER_TINYÚWHISPER_SMALLÚWHISPER_MEDIUMÚWHISPER_BASEÚWHISPER_LARGEÚWHISPER_TURBOÚWHISPER_TINY_MLXÚWHISPER_SMALL_MLXÚWHISPER_MEDIUM_MLXÚWHISPER_BASE_MLXÚWHISPER_LARGE_MLXÚWHISPER_TURBO_MLXÚWHISPER_TINY_NATIVEÚWHISPER_SMALL_NATIVEÚWHISPER_MEDIUM_NATIVEÚWHISPER_BASE_NATIVEÚWHISPER_LARGE_NATIVEÚWHISPER_TURBO_NATIVEÚWHISPER_TINY_EN_NATIVEÚWHISPER_BASE_EN_NATIVEÚWHISPER_SMALL_EN_NATIVEÚWHISPER_MEDIUM_EN_NATIVEÚWHISPER_DISTIL_SMALL_EN_NATIVEÚWHISPER_DISTIL_MEDIUM_EN_NATIVEÚWHISPER_DISTIL_LARGE_V3_NATIVEÚ WHISPER_DISTIL_LARGE_V3_5_NATIVEÚWHISPER_TINY_S2TÚWHISPER_TINY_EN_S2TÚWHISPER_BASE_S2TÚWHISPER_BASE_EN_S2TÚWHISPER_SMALL_S2TÚWHISPER_SMALL_EN_S2TÚWHISPER_DISTIL_SMALL_EN_S2TÚWHISPER_MEDIUM_S2TÚWHISPER_MEDIUM_EN_S2TÚWHISPER_DISTIL_MEDIUM_EN_S2TÚWHISPER_LARGE_V3_S2TÚWHISPER_DISTIL_LARGE_V3_S2TÚWHISPER_DISTIL_LARGE_V3_5_S2TÚWHISPER_LARGE_V3_TURBO_S2TÚ__static_attributes__r�   r5   r   rX   rX   ½  sò   † à!€LØ#€MØ%€NØ!€LØ#€MØ#€Mð *ÐØ+ÐØ-ÐØ)ÐØ+ÐØ+Ðð 0ÐØ1ÐØ3ÐØ/ÐØ1ÐØ1ÐØ5ÐØ5ÐØ7ÐØ9ÐØ%EÐ"Ø&GÐ#Ø%EÐ"Ø'IÐ$ð *ÐØ/ÐØ)ÐØ/ÐØ+ÐØ1ÐØ"?ÐØ-ÐØ3ÐØ#AÐ Ø1ÐØ"?ÐØ$CÐ!Ø!=Ór5   rX   )DÚloggingÚenumr   Úpydanticr   Ú%docling.datamodel.accelerator_optionsr   Ú,docling.datamodel.pipeline_options_asr_modelr   r   r   r	   r
   Ú	getLoggerr‚   Ú_logr   r3   r†   r9   r‡   r=   rˆ   rA   r‰   rE   rŠ   rI   r‹   r0   rŒ   r�   rŽ   r�   r�   r‘   r1   r’   r“   r”   r•   r–   r—   r˜   r™   rš   r›   rœ   r�   rž   rŸ   ÚWHISPER_S2Tr    r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   r©   rª   r«   r¬   r­   ÚstrrX   r�   r5   r   Ú<module>r¸      s/  ðó Ý õõ D÷õ ð ×Ò˜Ó"€ò$ò8#ñN 'Ó(€ò#ñN )Ó*€ò#ñN +Ó,€ò#ñN 'Ó(€ò#ñN )Ó*€ò#ñN )Ó*€ñ .Ø,Ø-×1Ñ1Ø	ØØØØ #ñÐ ñ /Ø-Ø-×1Ñ1Ø	ØØØØ #ñÐ ñ 0Ø3Ø-×1Ñ1Ø	ØØØØ #ñÐ ñ .Ø,Ø-×1Ñ1Ø	ØØØØ #ñÐ ñ /Ø2Ø-×1Ñ1Ø	ØØØØ #ñÐ ñ /Ø)Ø-×1Ñ1Ø	ØØØØ #ñÐ ñ 4ØØ-×5Ñ5ØØØØØØñ	Ð ñ 5ØØ-×5Ñ5ØØØØØØñ	Ð ñ 6ØØ-×5Ñ5ØØØØØØñ	Ð ñ 4ØØ-×5Ñ5ØØØØØØñ	Ð ñ 5ØØ-×5Ñ5ØØØØØØñ	Ð ñ 5ØØ-×5Ñ5ØØØØØØñ	Ð ñ 7ØØ-×5Ñ5ØØØØØØñ	Ð ñ 7ØØ-×5Ñ5ØØØØØØñ	Ð ñ 8ØØ-×5Ñ5ØØØØØØñ	Ð ñ 9ØØ-×5Ñ5ØØØØØØñ	Ð ñ "?ØØ-×5Ñ5ØØØØØØØñ
"Ð ñ #@ØØ-×5Ñ5ØØØØØØØñ
#Ð ñ "?ØØ-×5Ñ5ØØØØØØØñ
"Ð ñ $AØØ-×5Ñ5ØØØØØØØñ
$Ð  ñ" .ØØ-×9Ñ9ØØ	ØØØñÐ ñ 1ØØ-×9Ñ9ØØ	ØØØñÐ ñ .ØØ-×9Ñ9ØØ	ØØØñÐ ñ 1ØØ-×9Ñ9ØØ	ØØØñÐ ñ /ØØ-×9Ñ9ØØ	ØØØñÐ ñ 2ØØ-×9Ñ9ØØ	ØØØñÐ ñ 9ØØ-×9Ñ9ØØ	ØØØñÐ ñ 0ØØ-×9Ñ9ØØ	ØØØñÐ ñ 3ØØ-×9Ñ9ØØ	ØØØñÐ ñ  :ØØ-×9Ñ9ØØ	ØØØñ Ð ñ 2ØØ-×9Ñ9ØØ	ØØØñÐ ñ 9ØØ-×9Ñ9ØØ	ØØØñÐ ñ !;ØØ-×9Ñ9ØØ	ØØØñ!Ð ñ 8ØØ-×9Ñ9ØØ	ØØØñÐ ô4/>�3˜õ />r5   