+
    œ°³j"R  ã                   ó  € R t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H
t
 ^ RIHt ^ RIHt ^ RIt^ RIHtHt ^RIHt ^R	IHtHtHtHt ]
'       d   ^ R
IHtHtHt ]P4                  ! ]4      tRt ! R R4      t ! R R4      tR# )z3
Model loading, caching, and lifecycle management.
N)ÚCallable)Ú	lru_cache)ÚTYPE_CHECKING)Úscan_cache_dir)Útqdm)ÚBitsAndBytesConfigÚPreTrainedTokenizerBase)Úlogging)ÚModalityÚmake_progress_tqdm_classÚreset_torch_cacheÚsplit_model_id)ÚPreTrainedModelÚPreTrainedTokenizerFastÚProcessorMixinz transformers-community/ggml-attnc                   óp   a € ] tR t^.t o RtRV 3R lR lltV 3R lR ltV 3R lR ltV 3R	 lR
 ltRt	V t
R# )Ú
TimedModelaL  Wraps a model + processor and auto-unloads them after a period of inactivity.

Args:
    model: The loaded model.
    timeout_seconds: Seconds of inactivity before auto-unload. Use -1 to disable.
    processor: The associated processor or tokenizer.
    on_unload: Optional callback invoked after the model is unloaded from memory.
Nc                ó,   <€ V ^8„  d   QhRRRS[ RRRR/# )é   Úmodelr   Útimeout_secondsÚ	processorú/ProcessorMixin | PreTrainedTokenizerFast | NoneÚ	on_unloadzCallable | None)Úint)ÚformatÚ__classdict__s   "€Úg/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/cli/serving/model_manager.pyÚ__annotate__ÚTimedModel.__annotate__8   s4   ø€ ÷ ñ à ðñ ðð Eð	ð
 %ñó    c                óþ   € Wn         \        VP                  4      V n        W0n        W n        W@n        \        P                  ! V P
                  V P                  4      V n
        V P                  P                  4        R # ©N)r   ÚstrÚname_or_pathÚ_name_or_pathr   r   Ú
_on_unloadÚ	threadingÚTimerÚ_timeout_reachedÚ_timerÚstart)Úselfr   r   r   r   s   &&&&&r   Ú__init__ÚTimedModel.__init__8   sZ   € ð Œ
Ü  ×!3Ñ!3Ó4ˆÔØ"ŒØ.ÔØ#ŒÜ—o’o d×&:Ñ&:¸D×<QÑ<QÓRˆŒØ�‰×ÑÖr    c                ó   <€ V ^8„  d   QhRR/# ©r   ÚreturnN© )r   r   s   "€r   r   r   G   s   ø€ ÷ ñ ˜Tñ r    c                óÎ   € V P                   P                  4        \        P                  ! V P                  V P
                  4      V n         V P                   P                  4        R# )z4Reset the inactivity timer (called on each request).N)r*   Úcancelr'   r(   r   r)   r+   ©r,   s   &r   Úreset_timerÚTimedModel.reset_timerG   s@   € à�‰×ÑÔÜ—o’o d×&:Ñ&:¸D×<QÑ<QÓRˆŒØ�‰×ÑÖr    c                ó   <€ V ^8„  d   QhRR/# r0   r2   )r   r   s   "€r   r   r   M   s   ø€ ÷ "ñ "˜dñ "r    c                ó$  € \        V R4      '       d~   V P                  en   V =V =RV n        RV n        \        P                  ! 4        \        4        V P                  P                  4        V P                  e   V P                  4        R# R# R# R# )z0Delete the model and processor, free GPU memory.r   N)	Úhasattrr   r   ÚgcÚcollectr   r*   r4   r&   r5   s   &r   Údelete_modelÚTimedModel.delete_modelM   sp   € ä�4˜×!Ò! d§j¡jÒ&<Ø�
Ø�ØˆDŒJØ!ˆDŒNÜ�JŠJŒLÜÔØ�K‰K×ÑÔ Ø�‰Ò*Ø—‘Ö!ñ +ñ '=Ñ!r    c                ó   <€ V ^8„  d   QhRR/# r0   r2   )r   r   s   "€r   r   r   Z   s   ø€ ÷ uñ u $ñ ur    c                óª   € V P                   ^ 8”  dB   V P                  4        \        P                  V P                   RV P                    R24       R# R# )é    z was removed from memory after zs of inactivityN)r   r=   ÚloggerÚinfor%   r5   s   &r   r)   ÚTimedModel._timeout_reachedZ   sJ   € Ø×Ñ !Ô#Ø×ÑÔÜ�K‰K˜4×-Ñ-Ð.Ð.MÈd×NbÑNbÐMcÐcrÐsÖtñ $r    )r%   r&   r*   r   r   r   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r-   r6   r=   r)   Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r   .   s4   ø‡ € ñ÷ò ÷ð ÷"ð "÷uö ur    r   c                   óV  a € ] tR t^`t o RtRV 3R lR llt]V 3R lR l4       t]V 3R lR l4       t	R	 t
]V 3R
 lR l4       tV 3R lR ltRV 3R lR lltRV 3R lR lltRV 3R lR lltV 3R lR ltV 3R lR lt]RV 3R lR ll4       t]]RV 3R lR ll4       4       tRtV tR# ) ÚModelManagera™  Loads, caches, and manages the lifecycle of models.

Handlers receive a reference to this and call `load_model_and_processor()`
to get a model ready for inference.

Args:
    device: Device to place models on (e.g. "auto", "cuda", "cpu").
    dtype: Torch dtype override. "auto" derives from model weights.
    trust_remote_code: Whether to trust remote code when loading models.
    attn_implementation: Attention implementation override (e.g. "flash_attention_2").
    quantization: Quantization method ("bnb-4bit" or "bnb-8bit").
    model_timeout: Seconds before an idle model is unloaded. -1 disables.
    force_model: If set, preload this model at init time.
Nc                ó|   <€ V ^8„  d   QhRS[ RS[ R,          RS[RS[ R,          RS[ R,          RS[RS[ R,          /# )	r   ÚdeviceÚdtypeNÚtrust_remote_codeÚattn_implementationÚquantizationÚmodel_timeoutÚforce_model)r#   Úboolr   )r   r   s   "€r   r   ÚModelManager.__annotate__p   sj   ø€ ÷ &^ñ &^áð&^ñ �T�zð&^ñ  ð	&^ñ
 ! 4�Zð&^ñ ˜D•jð&^ñ ð&^ñ ˜4•Zñ&^r    c                óþ  € / V n         / V n        \        P                  ! 4       V n        / V n        / V n        VP                  4       '       d   \        V4      MTV n	        V P                  V4      V n        W0n        V P                  W@P                  4      V n        WPn        W`n        Wpn        V P%                  4        Ve   RV n        Ve2   \'        V4      w  r‰V P)                  V P+                  V4      V	R7       R # R # )N©Ú	gguf_fileéÿÿÿÿ)Úloaded_modelsÚ_model_locksr'   ÚLockÚ_model_locks_guardÚ_loading_subscribersÚ_loading_tasksÚisdigitr   rP   Ú_resolve_dtyperQ   rR   Ú_resolve_attn_implementationrS   rT   rU   rV   Ú_validate_argsr   Úload_model_and_processorÚprocess_model_name)
r,   rP   rQ   rR   rS   rT   rU   rV   Úrepor[   s
   &&&&&&&&  r   r-   ÚModelManager.__init__p   sì   € ð 57ˆÔð 8:ˆÔÜ"+§.¢.Ó"2ˆÔð QSˆÔ!Ø79ˆÔð &,§^¡^×%5Ò%5”c˜&”k¸6ˆŒØ×(Ñ(¨Ó/ˆŒ
Ø!2ÔØ#'×#DÑ#DÐEX×ZeÑZeÓ#fˆÔ Ø(ÔØ*ÔØ&Ôà×ÑÔð Ò"Ø!#ˆDÔð Ò"Ü,¨[Ó9‰OˆDØ×)Ñ)¨$×*AÑ*AÀ$Ó*GÐS\Ð)Ö]ñ #r    c                ó.   <€ V ^8„  d   QhRS[ R,          /# )r   rQ   N©r#   )r   r   s   "€r   r   rX   ™   s   ø€ ÷ 
ñ 
™c D�jñ 
r    c                óŒ   € ^ RI pV R9   d   V # \        WR4      p\        W!P                  4      '       g   \	        RV  R24      hV# )rA   NzUnsupported dtype: 'zF'. Must be 'auto' or a valid torch dtype (e.g. 'float16', 'bfloat16').)ÚautoN)ÚtorchÚgetattrÚ
isinstancerQ   Ú
ValueError)rQ   ro   Úresolveds   &  r   rd   ÚModelManager._resolve_dtype˜   sN   € ãà�NÔ"ØˆLÜ˜5¨Ó.ˆÜ˜(§K¡K×0Ò0ÜØ& u gÐ-sÐtóð ð ˆr    c                óX   <€ V ^8„  d   QhRS[ R,          RS[ S[,          RS[ R,          /# )r   rS   NrP   r1   )r#   r   )r   r   s   "€r   r   rX   ¦   s4   ø€ ÷ #ñ #¹sÀT½zð #ÑSVÑY\ÕS\ð #ÑadÐgkÕakñ #r    c                ó¨  € Ve   V# ^ RI p^RIHp \        V\        4      ;'       d    VP                  R4      ;'       gY    VR8H  ;'       dL    VP                  P                  P                  4       ;'       d     VP                  P                  4       '       * pV'       d1   V! 4       '       d$   \        P                  R\         R24       \        # V# )z4
Default to a fast kernel for `mps` when available.
N)Úis_kernels_availableÚmpsrn   zBMPS detected and `kernels` is installed: defaulting attention to `z0`. Pass `--attn-implementation sdpa` to opt out.)ro   Úutils.import_utilsrw   rq   r#   Ú
startswithÚbackendsrx   Úis_availableÚcudarB   Úwarning_onceÚ	GGML_ATTN)ÚclsrS   rP   ro   rw   Úis_mps_devices   &&&   r   re   Ú)ModelManager._resolve_attn_implementation¥   sÆ   € ð
 Ò*Ø&Ð&ãå>ô �vœsÓ#÷ )ð )Ø×!Ñ! %Ó(÷jð jà˜&Ñ ×hÐh U§^¡^×%7Ñ%7×%DÑ%DÓ%F×hÐhÈuÏzÉz×OfÑOfÓOhÔKhð 	÷
 Ñ1×3Ò3Ü×ÑØTÔU^ÐT_ð `@ð @ôô ÐØ"Ð"r    c                ó8  € V P                   e+   V P                   R9  d   \        RV P                    R24      h^RIHp 0 RmpV P                  eJ   V! V P                  4      '       g0   V P                  V9  d   \        RV P                   RV R24      hR # R # R # )	Nz"Unsupported quantization method: 'z$'. Must be 'bnb-4bit' or 'bnb-8bit'.)Ú	is_kernelz'Unsupported attention implementation: 'z'. Must be one of z8 or a hub kernel (e.g. 'kernels-community/flash-attn2').)úbnb-4bitúbnb-8bit>   ÚsdpaÚeagerÚflex_attentionÚflash_attention_2Úflash_attention_3)rT   rr   Úintegrations.hub_kernelsr„   rS   )r,   r„   ÚVALID_ATTN_IMPLEMENTATIONSs   &  r   rf   ÚModelManager._validate_args¾   s´   € Ø×ÑÒ(¨T×->Ñ->ÐF^Ô-^ÜØ4°T×5FÑ5FÐ4GÐGkÐlóð õ 	:â%rÐ"à×$Ñ$Ò0Ù˜d×6Ñ6×7Ò7Ø×(Ñ(Ð0JÔJäØ9¸$×:RÑ:RÐ9Sð T"Ø"<Ð!=Ð=uðwóð ñ Kñ 8ñ 1r    c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )r   Úmodel_idr1   rl   )r   r   s   "€r   r   rX   Ñ   s   ø€ ÷ "ñ "¡Sð "©Sñ "r    c                ó   € RV 9   d   V # V  R2# )zBCanonicalize to `'model_id@revision'` format. Defaults to `@main`.Ú@z@mainr2   )r�   s   &r   rh   ÚModelManager.process_model_nameÐ   s   € ð �(Œ?ØˆOØ�˜5Ð!Ð!r    c                ó.   <€ V ^8„  d   QhRS[ R,          /# r0   )r   )r   r   s   "€r   r   rX   ×   s   ø€ ÷ 
ñ 
Ñ);¸dÕ)Bñ 
r    c                ó~   € V P                   R8X  d   \        RRRR7      # V P                   R8X  d   \        RR7      # R# )zIReturn a BitsAndBytesConfig based on the `quantization` setting, or None.r…   TÚnf4)Úload_in_4bitÚbnb_4bit_quant_typeÚbnb_4bit_use_double_quantr†   )Úload_in_8bitN)rT   r   r5   s   &r   Úget_quantization_configÚ$ModelManager.get_quantization_config×   sD   € à×Ñ 
Ô*Ü%Ø!Ø$)Ø*.ôð ð
 ×Ñ *Ô,Ü%°4Ô8Ð8Ùr    c                ó8   <€ V ^8„  d   QhRS[ RS[ R,          RR/# )r   Úmodel_id_and_revisionr[   Nr1   z(ProcessorMixin | PreTrainedTokenizerFastrl   )r   r   s   "€r   r   rX   ã   s.   ø€ ÷ tñ tÙ%(ðtÙ58¸4µZðtà	3ñtr    c                ó¶   € ^ RI HpHp VP                  R^4      w  rVVe   VP	                  WRW`P
                  R7      # VP	                  WVV P
                  R7      # )ztLoad a processor for the given model.

Args:
    model_id_and_revision: Model ID in ``'model_id@revision'`` format.
)ÚAutoProcessorÚAutoTokenizerr’   )r[   ÚrevisionrR   )r¢   rR   )Útransformersr    r¡   ÚsplitÚfrom_pretrainedrR   )r,   rž   r[   r    r¡   r�   r¢   s   &&&    r   Ú_load_processorÚModelManager._load_processorã   sd   € ÷ 	>à2×8Ñ8¸¸aÓ@ÑˆØÒ à ×0Ñ0Ø¸×TjÑTjð 1ó ð ð ×,Ñ,¨XÐ\`×\rÑ\rÐ,ÓsÐsr    c          
      ó`   <€ V ^8„  d   QhRS[ RS[R,          RS[R,          RS[ R,          RR/# )r   rž   Ú
tqdm_classNÚprogress_callbackr[   r1   r   )r#   Útyper   )r   r   s   "€r   r   rX   õ   sP   ø€ ÷ 0Fñ 0Fá"ð0Fñ ˜4•Kð0Fñ $ d�?ð	0Fñ
 ˜•:ð0Fð 
ñ0Fr    c                óô  € ^ RI Hp VP                  R^4      w  rgRVRV P                  RV P                  RV P
                  RV P                  RV/pV P                  4       p	V	e   W˜R	&   Ve   WHR
&   Ve   V! RRRVRR/4       TP                  ! V3/ VB p
^ RI	H
p V
P                  V9   d   ^ RI Hp VP                  ! V3/ VB # \        \         V
P                  ^ ,          4      pVP                  ! V3/ VB # )aK  Load a model.

Args:
    model_id_and_revision (`str`): Model ID in ``'model_id@revision'`` format.
    tqdm_class (*optional*): tqdm subclass for progress bars during ``from_pretrained``.
    progress_callback (`Callable`, *optional*): Called with progress dicts during loading.

Returns:
    `PreTrainedModel`: The loaded model.
)Ú
AutoConfigr’   r¢   rS   rQ   Ú
device_maprR   r©   Úquantization_configr[   ÚstatusÚloadingr   ÚstageÚconfig)Ú%MODEL_FOR_MULTIMODAL_LM_MAPPING_NAMES)ÚAutoModelForMultimodalLM)r£   r­   r¤   rS   rQ   rP   rR   r›   r¥   Ú&transformers.models.auto.modeling_autor´   Ú
model_typerµ   rp   Úarchitectures)r,   rž   r©   rª   r[   r­   r�   r¢   Úmodel_kwargsr¯   r³   r´   rµ   Úarchitectures   &&&&&         r   Ú_load_modelÚModelManager._load_modelõ   s  € õ" 	,à2×8Ñ8¸¸aÓ@Ñˆð ˜Ø! 4×#;Ñ#;Ø�T—Z‘ZØ˜$Ÿ+™+Ø ×!7Ñ!7Ø˜*ð
ˆð #×:Ñ:Ó<ÐØÒ*Ø2EÐ.Ñ/àÒ Ø(1˜Ñ%àÒ(Ù˜x¨°GÐ=RÐT[Ð]eÐfÔgØ×+Ò+¨HÑE¸ÑEˆå`à×ÑÐ EÔEÝ=à+×;Ò;¸HÑUÈÑUÐUäœ|¨V×-AÑ-AÀ!Õ-DÓEˆØ×+Ò+¨HÑE¸ÑEÐEr    c          
      ó`   <€ V ^8„  d   QhRS[ RS[R,          RS[R,          RS[ R,          RR/# )r   rž   rª   Nr©   r[   r1   z@tuple[PreTrainedModel, ProcessorMixin | PreTrainedTokenizerFast])r#   r   r«   )r   r   s   "€r   r   rX   '  sJ   ø€ ÷ 0 ñ 0 á"ð0 ñ $ d�?ð0 ñ ˜4•Kð	0 ñ
 ˜•:ð0 ð 
Lñ0 r    c           
     óT  a € Vf   TMV RV 2pS P                   ;_uu_ 4        S P                  P                  V\        P                  ! 4       4      pRRR4       X;_uu_ 4        VS P
                  9  d’   \        P                  RV 24       Ve   V! RRRVRR/4       S P                  WR	7      pS P                  VVVVR
7      p\        VS P                  VV3V 3R llR7      S P
                  V&   Ve   V! RRRVRR/4       MmS P
                  V,          P                  4        S P
                  V,          P                  pS P
                  V,          P                  pVe   V! RRRVRR/4       RRR4       W‡3#   + '       g   i     EL6; i  + '       g   i     XX3# ; i)at  Load a model (or return it from cache), resetting its inactivity timer.

Args:
    model_id_and_revision: Model ID in ``'model_id@revision'`` format.
    progress_callback: If provided, called with dicts like
        ``{"status": "loading", "model": ..., "stage": ...}`` during loading.
    tqdm_class: Optional tqdm subclass for progress bars during ``from_pretrained``.
NÚ:zLoading r°   r±   r   r²   r   rZ   )r©   rª   r[   c                 ó<   <€ SP                   P                  V R 4      # r"   )r]   Úpop)Úcachedr,   s   &€r   Ú<lambda>Ú7ModelManager.load_model_and_processor.<locals>.<lambda>M  s   ø€ °×1CÑ1C×1GÑ1GÈÐPTÔ1Ur    )r   r   r   ÚreadyrÂ   FT)r`   r^   Ú
setdefaultr'   r_   r]   rB   Úwarningr¦   r»   r   rU   r6   r   r   )	r,   rž   rª   r©   r[   ÚkeyÚlockr   r   s	   f&&&&    r   rg   Ú%ModelManager.load_model_and_processor'  s¨  ø€ ð  (1Ò'8Ñ#ÐAVÐ@WÐWXÐYbÐXcÐ>dˆð ×$×$Ó$Ø×$Ñ$×/Ñ/°´Y·^²^Ó5EÓFˆD÷ %÷ ŠTØ˜$×,Ñ,Ô,Ü—‘ ¨#¨Ð/Ô0Ø$Ò0Ù% x°¸GÀSÈ'ÐS^Ð&_Ô`Ø ×0Ñ0Ð1FÐ0Ó\�	Ø×(Ñ(Ø)Ø)Ø&7Ø'ð	 )ó �ô +5ØØ$(×$6Ñ$6Ø'Ø,/ÖUô	+�×"Ñ" 3Ñ'ð %Ò0Ù% x°¸'À3ÈÐRWÐ&XÔYøà×"Ñ" 3Õ'×3Ñ3Ô5Ø×*Ñ*¨3Õ/×5Ñ5�Ø ×.Ñ.¨sÕ3×=Ñ=�	Ø$Ò0Ù% x°¸'À3ÈÐRVÐ&WÔX÷3 ð4 ÐÐ÷; %×$Ð$ú÷ ŽTð4 �iÐÐús   £0F Á%DFÆ F	ÆF'	c                ó    <€ V ^8„  d   QhRS[ /# )r   rž   rl   )r   r   s   "€r   r   rX   Y  s   ø€ ÷ Tñ TÁñ Tr    c           	    óä  a aaaaa	"  € Vo\         P                  ! 4       pSS P                  9   dG   S P                  S,          P                  4        R\        P
                  ! RRRSRR/4       R25x € R# SS P                  9   dJ   S P                  S,          P                  V4        VP                  4       G Rj  x€L
 pVf    R# V5x € K'  V.S P                  S&   \         P                  ! 4       oR	 VVV 3R
 llo\        SS4      o	V	3R loVVVVV V	3R lp\         P                  ! V! 4       4      S P                  S&    VP                  4       G Rj  x€L
 pVf   R# V5x € K&   L­ L5i)a�  Load a model and stream progress as SSE events.

Handles three cases:
1. Model already cached -> single ``ready`` event
2. Load already in progress -> join existing subscriber stream
3. First request -> start loading, broadcast to all subscribers

Args:
    model_id_and_revision (`str`): Model ID in ``'model_id@revision'`` format.

Yields:
    `str`: SSE ``data: ...`` lines with progress updates.
údata: r°   rÅ   r   rÂ   Tú

Nc                ó$   € V ^8„  d   QhR\         /# )r   Úpayload)Údict)r   s   "r   r   Ú7ModelManager.load_model_streaming.<locals>.__annotate__~  s   € ÷ 	1ñ 	1œTñ 	1r    c                 óp   <a€ R \         P                  ! V 4       R2oVVV3R lpSP                  V4       R# )rÍ   rÎ   c                  óp   <€ SP                   P                  S. 4       F  p V P                  S4       K  	  R # r"   )ra   ÚgetÚ
put_nowait)ÚqÚmidÚmsgr,   s    €€€r   Ú	broadcastÚEModelManager.load_model_streaming.<locals>.enqueue.<locals>.broadcast�  s-   ø€ Ø×2Ñ2×6Ñ6°s¸BÖ?�AØ—L‘L Ö%ó @r    N)ÚjsonÚdumpsÚcall_soon_threadsafe)rÐ   rÚ   rÙ   ÚlooprØ   r,   s   & @€€€r   ÚenqueueÚ2ModelManager.load_model_streaming.<locals>.enqueue~  s0   ù€ Øœ4Ÿ:š: gÓ.Ð/¨tÐ4ˆC÷&ð ×%Ñ% iÖ0r    c                 ó   <€ S! V/ VB # r"   r2   )ÚfactoryÚargsÚkwargsr©   s   &&&€r   Ú
_tqdm_hookÚ5ModelManager.load_model_streaming.<locals>._tqdm_hook‰  s   ø€ Ù˜tÐ. vÑ.Ð.r    c               “   ó   <"  €  \         P                  ! S4      p  \        P                  ! SP                  SSSR 7      G Rj  x€L
  \         P                  ! V 4       TT3R
 lpSP                  T4       R#  L4  \         P                  ! T 4       i ; i  \
         d?   p\        P                  RS RT 2RR7       S! RRRSR	\        T4      /4        Rp?L{Rp?ii ; i  TT3R
 lpSP                  T4       i ; i5i))rª   r©   NzFailed to load z: T)Úexc_infor°   Úerrorr   Úmessagec                  ó¨   <€ SP                   P                  S. 4       F  p V P                  R 4       K  	  SP                  P                  SR 4       R # r"   )ra   rÁ   rÖ   rb   )r×   rØ   r,   s    €€r   Ú_send_sentinelÚKModelManager.load_model_streaming.<locals>.run_load.<locals>._send_sentinel   sC   ø€ Ø!×6Ñ6×:Ñ:¸3ÀÖC˜ØŸ™ TÖ*ñ Dà×'Ñ'×+Ñ+¨C°Ö6r    )
r	   Úset_tqdm_hookÚasyncioÚ	to_threadrg   Ú	ExceptionrB   rê   r#   rÞ   )	Úprevious_hookÚerí   ræ   rà   rß   rØ   r,   r©   s	      €€€€€€r   Úrun_loadÚ3ModelManager.load_model_streaming.<locals>.run_loadŒ  sç   øé € ð:ô !(× 5Ò 5°jÓ A�ð9Ü!×+Ò+Ø×5Ñ5ØØ*1Ø#-ô	÷ ð ô ×)Ò)¨-Ô8ö7ð
 ×)Ñ)¨.Ö9ñ%øô ×)Ò)¨-Õ8ûÜô NÜ—‘˜¨s¨e°2°a°SÐ9ÀD�ÔIÙ˜ 7¨G°S¸)ÄSÈÃVÐL×MÑMûðNûö
7ð
 ×)Ñ)¨.Õ9üsc   ƒC>…B œ'A: ÁA8ÁA: ÁB ÁC>Á8A: Á:BÂB ÂCÂ 4CÃC! ÃCÃC! Ã!C;Ã;C>)rð   ÚQueuer]   r6   rÜ   rÝ   rb   ra   ÚappendrÕ   Úget_running_loopr   Úcreate_task)
r,   rž   ÚqueueÚitemrõ   ræ   rà   rß   rØ   r©   s
   f&   @@@@@r   Úload_model_streamingÚ!ModelManager.load_model_streamingY  sH  ýé € ð $ˆÜ+2¯=ª=«?ˆð �$×$Ñ$Ô$Ø×Ñ˜sÕ#×/Ñ/Ô1Øœ4Ÿ:š: x°¸'À3ÈÐRVÐ&WÓXÐYÐY]Ð^Ó^Ùð �$×%Ñ%Ô%Ø×%Ñ% cÕ*×1Ñ1°%Ô8ØØ"ŸY™Y›[×(�Ø’<Øáð •
ð +0¨ˆ×!Ñ! #Ñ&Ü×'Ò'Ó)ˆ÷	1ò 	1ô .¨g°sÓ;ˆ
õ	/÷	:ò 	:ô6 $+×#6Ò#6±x³zÓ#Bˆ×Ñ˜CÑ àØŸ™›×$ˆDØŠ|ÙØ�Jñs )ñl %ùs%   ˆB6E0Â>E,Â?BE0ÅE.ÅE0Å.E0c                ó   <€ V ^8„  d   QhRR/# r0   r2   )r   r   s   "€r   r   rX   ¯  s   ø€ ÷ !ñ !˜$ñ !r    c                óz   € \        V P                  P                  4       4       F  pVP                  4        K  	  R# )z,Delete all loaded models and free resources.N)Úlistr]   Úvaluesr=   )r,   Útimeds   & r   ÚshutdownÚModelManager.shutdown¯  s,   € ä˜$×,Ñ,×3Ñ3Ó5Ö6ˆEØ×ÑÖ ó 7r    c                ó(   <€ V ^8„  d   QhRRRRRS[ /# )r   r   r   r   r   r1   )r
   )r   r   s   "€r   r   rX   µ  s*   ø€ ÷ Iñ IØ ðIØ-^ðIá	ñIr    c                óŠ  € Ve'   \        V\        4      '       d   \        P                  # ^ RIHpHpHp V P                  P                  pWTP                  4       9   d   \        P                  # WSP                  4       9   d   \        P                  # WRP                  4       9   d   \        P                  # \        RV 24      h)aˆ  Detect whether a model is an LLM or VLM based on its architecture.

Args:
    model (`PreTrainedModel`): The loaded model.
    processor (`ProcessorMixin | PreTrainedTokenizerFast`, *optional*):
        If a plain tokenizer (not a multi-modal processor), short-circuits to LLM.

Returns:
    `Modality`: The detected modality (``Modality.LLM``, ``Modality.VLM``, or ``Modality.MULTIMODAL``).
©Ú!MODEL_FOR_CAUSAL_LM_MAPPING_NAMESÚ*MODEL_FOR_IMAGE_TEXT_TO_TEXT_MAPPING_NAMESr´   zUnknown modality for: )rq   r   r
   ÚLLMr¶   r	  r
  r´   Ú	__class__rE   r  Ú
MULTIMODALÚVLMrr   )r   r   r	  r
  r´   Úmodel_classnames   &&    r   Úget_model_modalityÚModelManager.get_model_modality´  s�   € ð Ò ¤Z°	Ô;R×%SÒ%SÜ—<‘<Ð÷	
ñ 	
ð  Ÿ/™/×2Ñ2ˆØ×JÑJÓLÔLÜ×&Ñ&Ð&Ø× QÑ QÓ SÔSÜ—<‘<ÐØ× HÑ HÓ JÔJÜ—<‘<ÐäÐ5°oÐ5FÐGÓHÐHr    c                óD   <€ V ^8„  d   QhRS[ R,          RS[S[,          /# )r   Ú	cache_dirNr1   )r#   r  rÑ   )r   r   s   "€r   r   rX   ×  s#   ø€ ÷ 1!ñ 1!¡#¨¥*ð 1!¹¹T½
ñ 1!r    c                óè  aaa€ ^ RI HpHpHp . p\        P                  R4       \        \        V 4      P                  4       EFª  pVP                  R8w  d   K  VP                  P                  4        EFt  w  rg\        R VP                   4       R4      pV'       g   K-  \        P                  ! VP!                  4       P#                  4       4      p	\%        V	\&        4      '       d   RV	9   g   K~  V	R,          p
VP)                  4       oVP)                  4       oVP)                  4       o\*        ;QJ d!    VVV3R lV
 4       F  '       g   K   RM	  R	M! VVV3R lV
 4       4      '       g   Ký  R
VP,                  9   d#   VP,                  P/                  R
4      ^ ,          MRpVP,                  VR8w  d   RV 2MR,           pVP1                  RVRVRRRVP2                  /4       EKw  	  EK­  	  V# )a.  List generative models (LLMs and VLMs) available in the HuggingFace cache.

Args:
    cache_dir (`str`, *optional*): Path to the HuggingFace cache directory.
        Defaults to the standard cache location.

Returns:
    `list[dict]`: OpenAI-compatible model list entries with ``id``, ``object``, etc.
r  z/Scanning the cache directory for LLMs and VLMs.r   c              3   ó^   "  € T F#  qP                   R 8X  g   K  VP                  x € K%  	  R# 5i)zconfig.jsonN)Ú	file_nameÚ	file_path)Ú.0Úfs   & r   Ú	<genexpr>Ú.ModelManager.get_gen_models.<locals>.<genexpr>ï  s$   é € Ð#mÑ9L°A×P[ÑP[Ð_lÑPl¤K A§K¦KÓ9Lùs   ‚-™-Nr¸   c              3   óD   <"  € T F  q. SOSOSO9   g   K  Vx € K  	  R # 5ir"   r2   )r  ÚarchÚllmsÚ
multimodalÚvlmss   & €€€r   r  r  ü  s)   øé € Ð]© ÐA\À4ÐA\È$ÐA\ÐQ[ÐA\Ñ9\—t’t«ùs   ƒ –
 TFÚ/Ú Úmainr’   Úowned_byÚidÚobjectÚcreated)r¶   r	  r
  r´   rB   rÇ   r   r   ÚreposÚ	repo_typeÚrefsÚitemsÚnextÚfilesrÜ   ÚloadsÚopenÚreadrq   rÑ   r  ÚanyÚrepo_idr¤   rø   Úlast_modified)r  r	  r
  r´   Úgenerative_modelsri   ÚrefÚrevision_infoÚconfig_pathr³   r¸   ÚauthorÚrepo_handler  r  r   s   &            @@@r   Úget_gen_modelsÚModelManager.get_gen_modelsÕ  s‡  ú€ ÷	
ñ 	
ð ÐÜ�‰ÐHÔIäœ¨	Ó2×8Ñ8×9ˆDØ�~‰~ Ô(Ùà&*§i¡i§o¡o×&7Ñ"�Ü"Ñ#m¸×9LÒ9LÓ#mÐosÓt�ß"ÙäŸš K×$4Ñ$4Ó$6×$;Ñ$;Ó$=Ó>�Ü" 6¬4×0Ò0°_ÈÔ5NÙà & Õ 7�Ø8×?Ñ?ÓA�ØA×HÑHÓJ�ØB×IÑIÓK�
ç“3Ö]©Ó]—3—3’3Ö]©Ó]×]Ô]Ø;>À$Ç,Á,Ô;N˜TŸ\™\×/Ñ/°Ó4°QÖ7ÐTV�FØ"&§,¡,¸sÀf¼}°A°c°U±)ÐRTÕ"U�KØ%×,Ñ,à&¨Ø  +Ø$ gØ% t×'9Ñ'9ð	÷ô# '8ñ	 :ð< !Ð r    )ra   rb   r^   r`   rS   rP   rQ   rV   r]   rU   rT   rR   )rn   rn   FNNi,  Nr"   )NNN)rE   rF   rG   rH   rI   r-   Ústaticmethodrd   Úclassmethodre   rf   rh   r›   r¦   r»   rg   rý   r  r  r   r:  rJ   rK   rL   s   @r   rN   rN   `   sÛ   ø‡ € ñ÷&^ò &^ðP ÷
ó ð
ð ÷#ó ð#ò0ð$ ÷"ó ð"÷
ð 
÷tò t÷$0Fò 0F÷d0 ò 0 ÷dTð T÷l!ð !ð
 ÷Iñ Ió ðIð@ Ø÷1!ñ 1!ó ó ö1!r    rN   ) rI   rð   r;   rÜ   r'   Úcollections.abcr   Ú	functoolsr   Útypingr   Úhuggingface_hubr   r   r£   r   r   Úutilsr	   r
   r   r   r   r   r   r   Ú
get_loggerrE   rB   r   r   rN   r2   r    r   Ú<module>rD     ss   ðñó Û 	Û Û Ý $Ý Ý  å *Ý ã ß Då ß XÓ X÷ ßUÑUð 
×	Ò	˜HÓ	%€ð /€	÷/uñ /u÷dh!ó h!r    