+
    UV-jªM  ã                   ó¬   € ^ RI t ^ RIHt ^ RIHt ^ RIHt ^RIH	t	 ^RI
HtHt ^RIHtHt ^RIHt ^RIHt R R	 lt ! R
 R]P*                  4      tR# )é    N)ÚOptional)ÚInputEmbeddingsFeatures)ÚAudioProjectionÚConformerEncoder)ÚAudioConfigÚModelConfig)ÚLanguageModel)ÚVisionTowerc                ó$   € V ^8„  d   QhR\         /# ©é   Úconfig©r   )Úformats   "Úm/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/phi4mm/phi4mm.pyÚ__annotate__r      s   € ÷ ñ œ{ñ ó    c                óº   € V P                   pV P                  p\        P                  ! WRR7      \        P                  ! 4       \        P                  ! W"RR7      .# )zCBuild vision-to-language projector with bias (matching checkpoint).T)Úbias)Úmm_hidden_sizeÚhidden_sizeÚnnÚLinearÚGELU)r   r   r   s   &  r   Úbuild_mm_projectorr      sI   € à×*Ñ*€NØ×$Ñ$€Kô
 	�	Š	�.°DÔ9Ü
�Š‹	Ü
�	Š	�+°Ô6ðð r   c                   ó   a a€ ] tR t^t oV3R lV 3R lltRV3R lR lltRV3R lR llt]R 4       t]R 4       t	]R	 4       t
]R
 4       tR tR tR tR tR tR tR tR tRV3R lR llt]R 4       tRtVtV ;t# )ÚModelc                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   Ú__classdict__s   "€r   r   ÚModel.__annotate__   s   ø€ ÷ 
ñ 
™{ñ 
r   c                ó\  <€ \         SV `  4        VP                  V n        Wn        \	        V4      V n        \        VP                  4      V n        \        V4      V n
        \        VR \        4       4      p\        V4      V n        \        VP                   VP"                  R7      V n        R# )Ú_audio_config)Ú	audio_dimr   N)ÚsuperÚ__init__Ú
model_typer   r	   Úlanguage_modelr
   Úvision_configÚvision_towerr   Úmm_projectorÚgetattrr   r   Úaudio_encoderr   Úattention_dimr   Úaudio_projection)Úselfr   Úaudio_configÚ	__class__s   && €r   r%   ÚModel.__init__   s�   ø€ Ü‰ÑÔØ ×+Ñ+ˆŒØŒô ,¨FÓ3ˆÔô (¨×(<Ñ(<Ó=ˆÔÜ.¨vÓ6ˆÔô ˜v ¼»ÓFˆÜ-¨lÓ;ˆÔÜ /Ø"×0Ñ0Ø×*Ñ*ô!
ˆÖr   c                ó^   <€ V ^8„  d   QhRS[ P                  RS[S[ P                  ,          /# )r   ÚinputsÚinputs_embeds©ÚmxÚarrayr   )r   r   s   "€r   r   r    1   s,   ø€ ÷ 
ñ 
á—‘ð
ñ  ¡§¡Õ)ñ
r   c                ón   € Vf    V P                   ! W3/ VB pVP                  pV P                  WWER7      # )N)r5   ÚmaskÚcache)Úget_input_embeddingsr5   r'   )r/   r4   r5   Úpixel_valuesr:   r;   ÚkwargsÚinput_embeddings_featuress   &&&&&&, r   Ú__call__ÚModel.__call__1   sP   € ð Ò Ø(,×(AÒ(AØñ)Ø(.ñ)Ð%ð 6×CÑCˆMà×"Ñ"Ø°dð #ó 
ð 	
r   c                ó^   <€ V ^8„  d   QhRS[ P                  RS[S[ P                  ,          /# )r   Ú	input_idsr=   r6   )r   r   s   "€r   r   r    D   s4   ø€ ÷ `Dñ `Dá—8‘8ð`Dñ ™rŸx™xÕ(ñ`Dr   c                óT  a)a*€ VP                  R R4      pVP                  RR4      pVP                  RR4      pVRJpVRJ;'       d    VP                  ^ 8„  pV'       g	   V'       d   V P                  WxR7       V'       g8   V'       g0   \        V P                  P
                  P                  V4      R7      # Rp	V'       da   VP                  RR4      p
V
e   T
p	MGVP                  RR4      pVP                  RR4      pV P                  W+V4      p	V P                  V	4      p	RpV'       d'   V P                  WF4      w  rïV P                  VR	R
7      pV P                  P                  o*V P                  P                  o)TpV'       d0   \        P                  ! VS*8H  \        P                   ! ^ 4      V4      pV'       d0   \        P                  ! VS)8H  \        P                   ! ^ 4      V4      pV P                  P
                  P                  V4      pVP"                  ^ ,          p. p^ p^ p\%        V4       EFò  pVV,          P'                  4       pVV,          pRpV'       dC   \(        ;QJ d    V*3R lV 4       F  '       g   K   RM	  RM! V*3R lV 4       4      '       d   RpV'       dC   \(        ;QJ d    V)3R lV 4       F  '       g   K   RM	  RM! V)3R lV 4       4      '       d   RpV'       g   VP+                  V4       KÕ  . p^ p^ pV\-        V4      8  Ed¯   VV,          pVS*8X  d£   V'       d›   VV8”  d   VP+                  VVV 4       \/        V	\0        4      '       d$   V	V,          P3                  VP4                  4      pM"V	V,          P3                  VP4                  4      pVP+                  V4       V^,          pV^,           pMðVS)8X  dê   V'       dâ   VV8”  d   VP+                  VVV 4       TpV\-        V4      8  d   VV,          S)8X  d   V^,          pK)  VV,
          p VeQ   \7        VV,          P9                  4       4      p!VVRV!13,          P3                  VP4                  4      p"V^,          pM&V^ RV 13,          P3                  VP4                  4      p"VP+                  V"4       TpTpEK³  V^,          pEK¿  V\-        V4      8  d   VP+                  VVR 4       V'       d   \        P:                  ! V^ R7      p#MTp#VP+                  V#4       EKõ  	  V^8X  d!   \        P<                  ! V^ ,          ^ R7      p$MÈ\?        R V 4       4      p%. p&V F˜  p'V'P"                  ^ ,          V%8  dm   \        P@                  ! V%V'P"                  ^ ,          ,
          V'P"                  R,          34      p(V&P+                  \        P:                  ! V'V(.^ R7      4       K‡  V&P+                  V'4       Kš  	  \        PB                  ! V&4      p$\        V$R7      # )Úinput_audio_embedsNÚaudio_embed_sizesÚaudio_attention_mask)Ú	has_imageÚ	has_audio)r5   Úcached_image_featuresÚpixel_attention_maskÚspatial_shapesÚspeech)ÚmodeFc              3   ó,   <"  € T F	  qS8H  x € K  	  R # 5i©N© )Ú.0ÚxÚimage_token_indexs   & €r   Ú	<genexpr>Ú-Model.get_input_embeddings.<locals>.<genexpr>Ž   s   øé € Ð!PÁ-¸QÐ'8Ö"8Ã-ùó   ƒTc              3   ó,   <"  € T F	  qS8H  x € K  	  R # 5irP   rQ   )rR   rS   Úaudio_token_indexs   & €r   rU   rV   �   s   øé € Ð OÁ¸AÐ&7Ö!7ÃùrW   )Úaxisc              3   óF   "  € T F  qP                   ^ ,          x € K  	  R# 5i)r   N)Úshape)rR   Úes   & r   rU   rV   Ú   s   é € Ð9©j¨Ÿ'™' !Ÿ*š*«jùs   ‚!éÿÿÿÿ)"ÚgetÚsizeÚset_modalityr   r'   ÚmodelÚembed_tokensr)   Úapply_mm_projectorr,   r.   r   rT   rY   r7   Úwherer8   r\   ÚrangeÚtolistÚanyÚappendÚlenÚ
isinstanceÚlistÚastypeÚdtypeÚintÚitemÚconcatenateÚexpand_dimsÚmaxÚzerosÚstack)+r/   rC   r=   r>   rE   rF   rG   Ú
has_imagesrI   Úimage_featuresÚcachedrK   rL   Úaudio_featuresÚencoded_audioÚ_Úsafe_input_idsÚtext_embedsÚBÚ
new_embedsÚimg_idxÚaudio_offsetÚbÚcur_input_idsÚcur_text_embedsÚhas_specialÚpartsÚprevÚiÚtoken_idÚfeatÚjÚnum_audio_tokensÚ
embed_sizeÚ
audio_featÚmergedr5   Úmax_lenÚpaddedr]   ÚpadrY   rT   s+   &&&,                                     @@r   r<   ÚModel.get_input_embeddingsD   s>  ù€ ð $ŸZ™ZÐ(<¸dÓCÐØ"ŸJ™JÐ':¸DÓAÐØ%Ÿz™zÐ*@À$ÓGÐà!¨Ð-ˆ
Ø&¨dÐ2×RÐRÐ7I×7NÑ7NÐQRÑ7Rˆ	÷ ŸØ×Ñ¨
ÐÔHç§)Ü*Ø"×1Ñ1×7Ñ7×DÑDÀYÓOôð ð
 ˆßØ—Z‘ZÐ 7¸Ó>ˆFØÒ!Ø!'‘à'-§z¡zÐ2HÈ$Ó'OÐ$Ø!'§¡Ð,<¸dÓ!C�à!%×!2Ñ!2Ø ¸ó"�ð "&×!8Ñ!8¸Ó!H�ð ˆßà#×1Ñ1Ø"ó ÑˆMð "×2Ñ2°=ÀxÐ2ÓPˆNð !ŸK™K×9Ñ9ÐØ ŸK™K×9Ñ9Ðà"ˆßÜŸXšXØÐ"3Ñ3´R·X²X¸a³[À.óˆN÷ ÜŸXšXØÐ"3Ñ3´R·X²X¸a³[À.óˆNð ×)Ñ)×/Ñ/×<Ñ<¸^ÓLˆð �O‰O˜AÕˆØˆ
ØˆØˆä�q—ˆAØ% a�L×/Ñ/Ó1ˆMØ)¨!�nˆOð  ˆKßŸc›cÔ!PÁ-Ó!PŸcŸcšcÔ!PÁ-Ó!P×PÒPØ"�ßŸS›SÔ OÁÓ OŸSŸSšSÔ OÁÓ O×OÒOØ"�çØ×!Ñ! /Ô2Ùð ˆEØˆDØˆAØ”c˜-Ó(Õ(Ø(¨Õ+�àÐ0Ô0·Zà˜4”xØŸ™ _°T¸!Ð%<Ô=ä! .´$×7Ò7Ø-¨gÕ6×=Ñ=¸o×>SÑ>SÓT™à-¨gÕ6×=Ñ=¸o×>SÑ>SÓT˜Ø—L‘L Ô&Ø˜q•L�GØ˜q�5‘DàÐ!2Ô2·yà˜4”xØŸ™ _°T¸!Ð%<Ô=ð �AàœC Ó.Ô.°=ÀÕ3CÐGXÔ3Xà˜Q�šØ'(¨1¥uÐ$ð )Ò4ä%(Ð):¸<Õ)H×)MÑ)MÓ)OÓ%P˜
Ø%3°LÀ+À:À+Ð4MÕ%N×%UÑ%UØ+×1Ñ1ó&˜
ð %¨Õ)™à%3°AÐ7HÐ8HÐ7HÐ4HÕ%I×%PÑ%PØ+×1Ñ1ó&˜
ð —L‘L Ô,Ø�DØ�AÚà�Q•“ð ”c˜-Ó(Ô(Ø—‘˜_¨T¨UÐ3Ô4çÜŸš¨°AÔ6‘à(�Ø×Ñ˜f×%ñY ð^ �Œ6ÜŸNšN¨:°a­=¸qÔA‰MäÑ9©jÓ9Ó9ˆGØˆFÛ�Ø—7‘7˜1•: Ô'ÜŸ(š( G¨a¯g©g°a­jÕ$8¸!¿'¹'À"½+Ð#FÓG�CØ—M‘M¤"§.¢.°!°S°ÀÔ"BÖCà—M‘M !Ö$ñ  ô ŸHšH VÓ,ˆMä&°]ÔCÐCr   c                óB   € V P                   P                  P                  # rP   )r'   rb   Úlayers©r/   s   &r   r•   ÚModel.layersæ   s   € à×"Ñ"×(Ñ(×/Ñ/Ð/r   c                ó.   € V P                   P                  # rP   )r'   Úhead_dimr–   s   &r   r™   ÚModel.head_dimê   s   € à×"Ñ"×+Ñ+Ð+r   c                ó.   € V P                   P                  # rP   )r'   Ú
n_kv_headsr–   s   &r   rœ   ÚModel.n_kv_headsî   s   € à×"Ñ"×-Ñ-Ð-r   c                ó   € V P                   # rP   )r)   r–   s   &r   Úvision_modelÚModel.vision_modelò   s   € à× Ñ Ð r   c                ó„   a € V 3R lp\        V\        4      '       d   V Uu. uF
  q2! V4      NK  	  up# V! V4      # u upi )z6Project vision features to language model hidden size.c                 óB   <€ T pSP                    F  pV! V4      pK  	  V# rP   )r*   )rŠ   rS   Úlayerr/   s   &  €r   Ú_projectÚ*Model.apply_mm_projector.<locals>._projectù   s&   ø€ ØˆAØ×*Ô*�Ù˜!“H’ñ +àˆHr   )rk   rl   )r/   rw   r¤   rŠ   s   f&  r   rd   ÚModel.apply_mm_projectorö   s@   ø€ õ	ô �n¤d×+Ò+Ù/=Ó>©~ t�H˜T–N©~Ñ>Ð>Ù˜Ó'Ð'ùò ?s   ¢=c                ó†   € VP                  R4      '       d
   RV,           # VP                  R4      '       d
   RV,           # V# )a  Remap checkpoint LLM key to the language_model structure.

model.layers.*       -> language_model.model.layers.*
model.embed_tokens.* -> language_model.model.embed_tokens.*
model.norm.*         -> language_model.model.norm.*
lm_head.*            -> language_model.lm_head.*
zmodel.zlanguage_model.zlm_head.)Ú
startswith)r/   Úkeys   &&r   Ú_remap_llm_keyÚModel._remap_llm_key  s=   € ð �>‰>˜(×#Ò#Ø$ sÕ*Ð*Ø�>‰>˜*×%Ò%Ø$ sÕ*Ð*Øˆ
r   c                ó(  € \        V P                  R R4      p\        V P                  RR4      pRpV'       d-   VP                  RR4      pVP                  RR4      pWe,          pRpV'       d-   VP                  RR4      pVP                  RR	4      pWe,          p/ p/ p	/ p
/ p/ p/ p/ pVP                  4        EFç  w  ppR
V9   d   K  RV9   g   RV9   g   RV9   d   K'  RV9   d   VP	                  RR4      pVVV&   KG  RV9   dJ   VP	                  RR4      p\
        P                  ! RRV4      p\
        P                  ! RRV4      pVVV&   K—  RV9   d   VP	                  RR4      pVVV&   K·  RV9   d   VP	                  RR4      pVVV&   K×  RV9   d,   VP	                  RR4      pV P                  V4      pVVV&   EK	  R V9   d,   VP	                  R R4      pV P                  V4      pVV	V&   EK;  R!V9   d,   VP	                  R!R4      pV P                  V4      pVV
V&   EKm  R"V9   d,   VP	                  R"R4      pV P                  V4      pVVV&   EKŸ  R#V9   d,   VP	                  R#R4      pV P                  V4      pVVV&   EKÑ  V P                  V4      pVVV&   EKê  	  VP                  4        FI  w  ppVV9   d8   VV	9   d1   VV,          pV	V,          pVVVV,          ,          ,           pVVV&   KD  VVV&   KK  	  W n        W°n	        Wpn
        W€n        W�n        W@n        VP                  4        UUu/ uF	  w  ppVVbK  	  uppV n        R$V n        V'       d-   V P                   P#                  V4      pVP%                  V4       V# u uppi )%Úvision_loraNÚspeech_lorag      ð?Úré   Ú
lora_alphai   i@  i€  Úposition_idsÚglb_GNÚsub_GNzimg_processor.head.z(embed_tokens_extend.audio_embed.encoder.z.model.embed_tokens_extend.audio_embed.encoder.zaudio_encoder.z1embed_tokens_extend.audio_embed.audio_projection.z7model.embed_tokens_extend.audio_embed.audio_projection.zaudio_projection.z(speech|vision)\.0\.z
\1.proj_0.z(speech|vision)\.2\.z
\1.proj_2.z.embed_tokens_extend.image_embed.img_processor.z4model.embed_tokens_extend.image_embed.img_processor.zvision_tower.vision_tower.z/embed_tokens_extend.image_embed.img_projection.z5model.embed_tokens_extend.image_embed.img_projection.zmm_projector.z.lora_A.vision.Ú.z.lora_B.vision.z.lora_A.speech.z.lora_B.speech.z.base_layer.Úvision)r+   r   r_   ÚitemsÚreplaceÚreÚsubrª   Ú_speech_lora_aÚ_speech_lora_bÚ_speech_lora_scaleÚ_vision_lora_aÚ_vision_lora_bÚ_vision_lora_scaleÚ_base_weightsÚ_active_lorar,   ÚsanitizeÚupdate)r/   Úweightsr­   r®   Úvision_lora_scaler¯   ÚalphaÚspeech_lora_scaleÚlora_a_visionÚlora_b_visionÚlora_a_speechÚlora_b_speechÚbase_weightsÚaudio_weightsÚ	sanitizedÚkÚvÚnew_keyÚbase_keyr©   Úbase_wÚlora_aÚlora_br�   Úaudio_sanitizeds   &&                       r   rÃ   ÚModel.sanitize  sß  € ä˜dŸk™k¨=¸$Ó?ˆÜ˜dŸk™k¨=¸$Ó?ˆàÐßØ—‘  SÓ)ˆAØ—O‘O L°#Ó6ˆEØ %¥	ÐàÐßØ—‘  SÓ)ˆAØ—O‘O L°#Ó6ˆEØ %¥	Ðð ˆØˆØˆØˆØˆØˆØˆ	à—M‘M—O‰DˆAˆqà Ô"Ùà˜1Œ} ¨A¤Ð1FÈ!Ô1KÙð :¸QÔ>ØŸ)™)ØDØ$ó�ð *+�˜gÑ&Ùð CÀaÔGØŸ)™)ØMØ'ó�ô
 Ÿ&š&Ð!8¸-ÈÓQ�ÜŸ&š&Ð!8¸-ÈÓQ�Ø%&�	˜'Ñ"Ùð @À1ÔDØŸ)™)ØJØ0ó�ð &'�	˜'Ñ"Ùð AÀAÔEØŸ)™)ØKØ#ó�ð &'�	˜'Ñ"Ùð ! AÔ%ØŸ9™9Ð%6¸Ó<�Ø×.Ñ.¨xÓ8�Ø*+�˜hÑ'ÚØ  AÔ%ØŸ9™9Ð%6¸Ó<�Ø×.Ñ.¨xÓ8�Ø*+�˜hÑ'ÚØ  AÔ%ØŸ9™9Ð%6¸Ó<�Ø×.Ñ.¨xÓ8�Ø*+�˜hÑ'ÚØ  AÔ%ØŸ9™9Ð%6¸Ó<�Ø×.Ñ.¨xÓ8�Ø*+�˜hÑ'Úð  Ô"ØŸ)™) N°CÓ8�Ø×-Ñ-¨gÓ6�Ø()�˜WÑ%Úð ×)Ñ)¨!Ó,ˆGØ!"ˆI�gÔñ] $ðb (×-Ñ-Ö/‰KˆC�Ø�mÔ#¨¨}Ô(<Ø& sÕ+�Ø& sÕ+�ØÐ"3°vÀµÕ"GÕG�Ø!'�	˜#“à!'�	˜#“ñ 0ð ,ÔØ+ÔØ"3ÔØ+ÔØ+ÔØ"3ÔØ/;×/AÑ/AÔ/CÔDÑ/C¡t q¨!˜a šdÑ/CÒDˆÔØ$ˆÔ÷ Ø"×0Ñ0×9Ñ9¸-ÓHˆOØ×Ñ˜_Ô-àÐùó Es   Ì9Nc                óÔ   € VP                  R4      pT pVRR  F8  pVP                  4       '       d   V\        V4      ,          pK-  \        WE4      pK:  	  \	        WCR,          V4       R# )z1Set a model weight by its dot-separated key path.rµ   Nr^   )ÚsplitÚisdigitro   r+   Úsetattr)r/   r©   Úvaluer†   ÚobjÚps   &&&   r   Ú_set_weight_by_keyÚModel._set_weight_by_key–  sU   € à—	‘	˜#“ˆØˆØ�s˜“ˆAØ�y‰y�{Š{Øœ#˜a›&•k’ä˜c“o’ñ	 ô
 	�˜2•Y Ö&r   c                óš  € \        V R4      '       d   V P                  '       g   R# V P                  P                  4        F  w  rWP                  9   g   K  WP                  9   g   K)  V P                  V,          pV P                  V,          pW P
                  WC,          ,          ,           pV P                  W4       K�  	  RV n        R# )zGSwitch LLM weights from vision LoRA to speech LoRA for audio inference.r»   NrM   )Úhasattrr»   rÁ   r·   r¼   r½   rà   rÂ   ©r/   r©   rÔ   rÕ   rÖ   r�   s   &     r   Úapply_speech_loraÚModel.apply_speech_lora¡  ó�   € ä�tÐ-×.Ò.°d×6I×6IÐ6IÙà×-Ñ-×3Ñ3Ö5‰KˆCØ×)Ñ)Ö)¨c×5HÑ5HÖ.HØ×,Ñ,¨SÕ1�Ø×,Ñ,¨SÕ1�Ø×"9Ñ"9¸V½_Õ"MÕM�Ø×'Ñ'¨Ö4ñ 6ð %ˆÖr   c                óš  € \        V R4      '       d   V P                  '       g   R# V P                  P                  4        F  w  rWP                  9   g   K  WP                  9   g   K)  V P                  V,          pV P                  V,          pW P
                  WC,          ,          ,           pV P                  W4       K�  	  RV n        R# )z'Switch LLM weights back to vision LoRA.r¾   Nr¶   )rã   r¾   rÁ   r·   r¿   rÀ   rà   rÂ   rä   s   &     r   Úapply_vision_loraÚModel.apply_vision_lora®  rç   r   c                óÌ  € \        V R4      ;'       d    V P                  p\        V R4      ;'       d    V P                  pV'       g   V'       g   R# V P                  P	                  4        Fì  w  r4TpV'       dc   W0P                  9   dS   W0P
                  9   dC   WPP                  V P
                  V,          V P                  V,          ,          ,          ,           pV'       dc   W0P                  9   dS   W0P                  9   dC   WPP                  V P                  V,          V P                  V,          ,          ,          ,           pV P                  W54       Kî  	  RV n
        R# )zBApply both vision and speech LoRA deltas for multimodal inference.r¾   r»   NÚboth)rã   r¾   r»   rÁ   r·   r¿   rÀ   r¼   r½   rà   rÂ   )r/   Ú
has_visionÚ
has_speechr©   rÔ   r�   s   &     r   Úapply_both_lorasÚModel.apply_both_loras»  s  € ä˜TÐ#3Ó4×LÐL¸×9LÑ9Lˆ
Ü˜TÐ#3Ó4×LÐL¸×9LÑ9Lˆ
ß§*Ùà×-Ñ-×3Ñ3Ö5‰KˆCØˆFß˜c×%8Ñ%8Ô8¸S×DWÑDWÔ=WØ×"9Ñ"9Ø×'Ñ'¨Õ,¨t×/BÑ/BÀ3Õ/GÕGõ#õ �÷ ˜c×%8Ñ%8Ô8¸S×DWÑDWÔ=WØ×"9Ñ"9Ø×'Ñ'¨Õ,¨t×/BÑ/BÀ3Õ/GÕGõ#õ �ð ×#Ñ# CÖ0ñ 6ð #ˆÖr   c                óÈ   € \        V R4      '       d   V P                  '       g   R# V P                  P                  4        F  w  rV P                  W4       K  	  RV n        R# )z<Reset LLM weights to base (no LoRA) for text-only inference.rÁ   N)rã   rÁ   r·   rà   rÂ   )r/   r©   rÔ   s   &  r   Úapply_base_weightsÚModel.apply_base_weightsÏ  sN   € ä�t˜_×-Ò-°T×5G×5GÐ5GÙà×-Ñ-×3Ñ3Ö5‰KˆCØ×#Ñ# CÖ0ñ 6à ˆÖr   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )r   rH   rI   )Úbool)r   r   s   "€r   r   r    Ø  s   ø€ ÷ #&ñ #&¡dð #&¹tñ #&r   c                óf  € \        V RR4      '       g   R# V'       d   V'       d   RpMV'       d   RpMV'       d   RpMRp\        V RR4      pWC8X  d   R# VR8X  d   V P                  4        R# VR8X  d   V P                  4        R# VR8X  d   V P                  4        R# V P	                  4        R# )z¨Automatically apply the correct LoRA based on input modality.

Args:
    has_image: Whether the input contains images.
    has_audio: Whether the input contains audio.
rÁ   Nrì   rM   r¶   rÂ   )r+   rï   rå   ré   rò   )r/   rH   rI   ÚtargetÚcurrents   &&&  r   ra   ÚModel.set_modalityØ  s™   € ô �t˜_¨d×3Ò3ÙçŸØ‰FßØ‰FßØ‰FàˆFäØ�. (ó
ˆð ÔÙà�VÔØ×!Ñ!Ö#Ø�xÔØ×"Ñ"Ö$Ø�xÔØ×"Ñ"Ö$à×#Ñ#Ö%r   c                ó˜   € \        V R R4      '       d4   V P                  4        / V n        / V n        / V n        / V n        / V n        R pV# )rÁ   Nc                 óB   € R V 9   g   RV 9   g   RV 9   g   RV 9   d   R# R# )r,   r.   r*   r)   FTrQ   )ÚpathÚmodules   &&r   Ú	predicateÚ(Model.quant_predicate.<locals>.predicate	  s(   € à 4Ô'Ø%¨Ô-Ø! TÔ)Ø! TÔ)áÙr   )r+   rï   rÁ   r»   r¼   r¾   r¿   )r/   rþ   s   & r   Úquant_predicateÚModel.quant_predicateý  sT   € ô �4˜¨$×/Ò/Ø×!Ñ!Ô#Ø!#ˆDÔØ"$ˆDÔØ"$ˆDÔØ"$ˆDÔØ"$ˆDÔò	ð Ðr   )rÂ   rÁ   r»   r¼   r½   r¾   r¿   rÀ   r,   r.   r   r'   r*   r&   r)   )NNNNrP   )FF)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r%   r@   r<   Úpropertyr•   r™   rœ   rŸ   rd   rª   rÃ   rà   rå   ré   rï   rò   ra   r   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r1   r   s   @@r   r   r      sÆ   ù‡ € ÷
ó 
÷(
ò 
÷&`Dò `DðD ñ0ó ð0ð ñ,ó ð,ð ñ.ó ð.ð ñ!ó ð!ò(òòCòJ	'ò%ò%ò#ò(!÷#&ò #&ðJ ñó ÷ð r   r   )r¹   Útypingr   Úmlx.coreÚcorer7   Úmlx.nnr   Úbaser   Úaudior   r   r   r   r   Úlanguager	   r¶   r
   r   ÚModuler   rQ   r   r   Ú<module>r     s7   ðÛ 	Ý å Ý å *ß 4ß ,Ý #Ý õôwˆB�I‰Iö wr   