+
    UV-j…  ã                   óº   € ^ RI Ht ^ RIHt ^ RIHt ^RIHt ^RI	H
t
 ^RIHt ^RIHt ^RIHt  ! R R	]P"                  4      t ! R
 R]P"                  4      tR# )é    )ÚOptionalN)ÚInputEmbeddingsFeatures)Úprocessing_pixtral©ÚModelConfig)ÚLanguageModel)ÚVisionModelc                   óP   a a€ ] tR t^t oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚLlavaMultiModalProjectorc                ó    <€ V ^8„  d   QhRS[ /# ©é   Úconfigr   )ÚformatÚ__classdict__s   "€Úo/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/pixtral/pixtral.pyÚ__annotate__Ú%LlavaMultiModalProjector.__annotate__   s   ø€ ÷ 
ñ 
™{ñ 
ó    c                óp  <€ \         SV `  4        \        P                  ! VP                  P
                  VP                  P
                  R R7      V n        \        P                  ! 4       V n	        \        P                  ! VP                  P
                  VP                  P
                  R R7      V n
        R# )T)ÚbiasN)ÚsuperÚ__init__ÚnnÚLinearÚvision_configÚhidden_sizeÚtext_configÚlinear_1ÚGELUÚgeluÚlinear_2©Úselfr   Ú	__class__s   &&€r   r   Ú!LlavaMultiModalProjector.__init__   s}   ø€ Ü‰ÑÔÜŸ	š	Ø× Ñ ×,Ñ,¨f×.@Ñ.@×.LÑ.LÐSWô
ˆŒô —G’G“IˆŒ	ÜŸ	š	Ø×Ñ×*Ñ*¨F×,>Ñ,>×,JÑ,JÐQUô
ˆŽr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r   ÚxÚreturn©ÚmxÚarray)r   r   s   "€r   r   r      s#   ø€ ÷ ñ ™"Ÿ(™(ð ¡r§x¡xñ r   c                ól   € V P                  V4      pV P                  V4      pV P                  V4      pV# ©N)r   r!   r"   )r$   r(   s   &&r   Ú__call__Ú!LlavaMultiModalProjector.__call__   s0   € Ø�M‰M˜!ÓˆØ�I‰I�a‹LˆØ�M‰M˜!ÓˆØˆr   )r!   r   r"   )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r/   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r%   r   s   @@r   r   r      s   ù‡ € ÷
ó 
÷÷ ð r   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 4       t]R 4       t	RV3R lR llt
R	 tR
tVtV ;t# )ÚModelc                ó    <€ V ^8„  d   QhRS[ /# r   r   )r   r   s   "€r   r   ÚModel.__annotate__    s   ø€ ÷ Tñ T™{ñ Tr   c                óü   <€ \         SV `  4        Wn        \        VP                  4      V n        \        VP                  4      V n        \        V4      V n
        VP                  V n        VP                  V n        R # r.   )r   r   r   r	   r   Úvision_towerr   r   Úlanguage_modelr   Úmulti_modal_projectorÚvision_feature_layerÚvision_feature_select_strategyr#   s   &&€r   r   ÚModel.__init__    sb   ø€ Ü‰ÑÔØŒÜ'¨×(<Ñ(<Ó=ˆÔÜ+¨F×,>Ñ,>Ó?ˆÔÜ%=¸fÓ%EˆÔ"Ø$*×$?Ñ$?ˆÔ!Ø.4×.SÑ.SˆÖ+r   c                ón   <€ V ^8„  d   QhRS[ S[P                  ,          RS[ S[P                  ,          /# )r   Ú	input_idsÚpixel_values)r   r+   r,   )r   r   s   "€r   r   r<   )   s5   ø€ ÷ *Jñ *Já™BŸH™HÕ%ð*Jñ ™rŸx™xÕ(ñ*Jr   c                óô  € VP                  R R4      pVf0   \        V P                  P                  P	                  V4      R7      # V P                  P                  P	                  V4      pVP                  RR4      pVe   TpM¾\        V\        4      '       dD   \        P                  ! V Uu. uF   p\        P                  ! V4      R,          NK"  	  up^ R7      pVP                  ^8X  d
   VR,          pV P                  VP                  ^ ^^^4      RVR7      Ev ršW P                  ,          pV P                  V4      pV P                  V P                   P"                  WuV4      p\        VR7      # u upi )Úimage_sizesN)Úinputs_embedsÚcached_image_features©ÚaxisT)Úoutput_hidden_statesrH   )N.)Úgetr   r?   ÚmodelÚembed_tokensÚ
isinstanceÚlistr+   Úconcatenater,   Úndimr>   Ú	transposerA   r@   Ú#merge_input_ids_with_image_featuresr   Úimage_token_index)r$   rE   rF   ÚkwargsrH   rI   ÚcachedÚimage_featuresÚpvÚ_Úhidden_statesÚselected_image_featureÚfinal_inputs_embedss   &&&,         r   Úget_input_embeddingsÚModel.get_input_embeddings)   sd  € ð —j‘j °Ó5ˆØÒÜ*Ø"×1Ñ1×7Ñ7×DÑDÀYÓOôð ð
 ×+Ñ+×1Ñ1×>Ñ>¸yÓIˆà—‘Ð3°TÓ:ˆØÒØ#‰Nô ˜,¬×-Ò-Ü!Ÿ~š~Ù7CÓD±|°”R—X’X˜b“\ )×,Ð,±|ÑDÈ1ô �ð × Ñ  AÔ%Ø+¨IÕ6�à $× 1Ñ 1Ø×&Ñ& q¨!¨Q°Ó2Ø%)Ø'ð !2ó !ÑˆQð &3×3LÑ3LÕ%MÐ"ð "×7Ñ7Ð8NÓOˆNð #×FÑFØ�K‰K×)Ñ)¨>È)ó
Ðô 'Ð5HÔIÐIùò) Es   Â.&E5c           	     óR  € VP                   ^8X  d*   VP                  ^ ,          ^8X  d   VP                  ^ 4      pW08H  pVP                  w  rV. p^ p\        V4       EF0  p	WI,          p
\        P
                  ! V
4      P                  4       pV^ 8”  dá   VWˆV,            pVP                  ^ ,          V8w  d&   \        RV RVP                  ^ ,           RV	 24      h\        P                  ! V
P                  \        P                  4      4      p\        P                  ! W­^,
          ^ 4      pWÎ,          p\        P                  ! V
RR7      p\        P                  ! VWòV	,          4      pW‹,          pMW),          pVP                  V4       EK3  	  \        P                  ! V^ R7      # )a–  Merge image features into input embeddings at image token positions.

Args:
    image_token_index: Token ID for image placeholder
    image_features: Vision features from the projector [1, num_features, hidden_dim]
    inputs_embeds: Input embeddings [batch_size, seq_len, hidden_dim]
    input_ids: Input token IDs [batch_size, seq_len]

Returns:
    Updated input embeddings with image features inserted
z!Number of image token positions (z+) does not match number of image features (z) for batch rK   éÿÿÿÿ)rT   ÚshapeÚsqueezeÚranger+   ÚsumÚitemÚ
ValueErrorÚcumsumÚastypeÚint32ÚwhereÚexpand_dimsÚappendÚstack)rW   rZ   rI   rE   Úimage_positionsÚ
batch_sizeÚseq_lenÚbatch_outputsÚfeature_start_idxÚ	batch_idxÚ
image_maskÚnum_positionsÚbatch_featuresrj   Úfeature_indicesÚgathered_featuresÚimage_mask_expandedÚbatch_outputs   &&&&              r   rV   Ú)Model.merge_input_ids_with_image_featuresU   s‘  € ð  ×Ñ !Ô#¨×(<Ñ(<¸QÕ(?À1Ô(DØ+×3Ñ3°AÓ6ˆNð $Ñ8ˆð (Ÿo™oÑˆ
ð ˆØÐä˜z×*ˆIà(Õ3ˆJÜŸFšF :Ó.×3Ñ3Ó5ˆMà˜qÔ à!/Ø%¸MÕ(Ið"�ð
 "×'Ñ'¨Õ*¨mÔ;Ü$Ø;¸M¸?ð K5Ø5C×5IÑ5IÈ!Õ5LÐ4MÈ\ÐZcÐYdðfóð ô Ÿš :×#4Ñ#4´R·X±XÓ#>Ó?�Ü"$§(¢(¨:ÀµzÀ1Ó"E�ð %3Õ$CÐ!ô ')§n¢n°ZÀbÔ&IÐ#Ü!ŸxšxØ'Ð):È)Õ<Tó �ð "Õ2Ñ!ð  -Õ7�à× Ñ  ×.ñI +ôN �xŠx˜¨AÔ.Ð.r   c                óB   € V P                   P                  P                  # r.   )r?   rO   Úlayers)r$   s   &r   r€   ÚModel.layers›   s   € à×"Ñ"×(Ñ(×/Ñ/Ð/r   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r   rE   rF   Úmaskr*   )r   r   s   "€r   r   r<   Ÿ   s5   ø€ ÷ ñ á—8‘8ðñ —h‘hðñ �h‰hñ	r   c                óh   € V P                   ! W3/ VB pV P                  VVVP                  R 7      pV# ))ÚcacherI   )r`   r?   rI   )r$   rE   rF   rƒ   r…   rX   Úinput_embeddings_featuresÚlogitss   &&&&&,  r   r/   ÚModel.__call__Ÿ   sM   € ð %)×$=Ò$=Øñ%
Ø'-ñ%
Ð!ð ×$Ñ$ØØØ3×AÑAð %ó 
ˆð
 ˆr   c                ój   € R  pVP                  4        UUu/ uF  w  r4V! V4      VbK  	  upp# u uppi )c                 ó,  € R V 9   dU   RV 9  dN   RV 9   d   V P                  R R4      p RV 9   d   V P                  R R4      p RV 9   d   V P                  R R4      p V # RV 9   dU   R V 9  dN   RV 9   d   V P                  RR4      p RV 9   d   V P                  RR4      p RV 9   d   V P                  RR4      p V # RV 9   d   R	V 9  d   V P                  RR	4      p V # R
V 9   d   RV 9  d   V P                  R
R4      p V # RV 9   d   V P                  RR4      p V # )r>   Úvision_modelÚtransformerzvision_tower.vision_modelÚ
patch_convÚln_preÚvision_encoderzmodel.vision_encoderzmodel.language_modelzlanguage_model.modelÚlm_headr?   zlanguage_model.lm_headzmodel.vision_projectionr@   )Úreplace)Úkeys   &r   Útransform_keyÚ%Model.sanitize.<locals>.transform_key²   sH  € Ø Ô$¨¸sÔ)BØ  CÔ'ØŸ+™+ nÐ6QÓR�CØ 3Ô&ØŸ+™+ nÐ6QÓR�CØ˜s”?ØŸ+™+ nÐ6QÓR�Cð2 ˆJð/ " SÔ(¨^À3Ô-FØ  CÔ'ØŸ+™+Ø.Ð0Kó�Cð   3Ô&ØŸ+™+Ø.Ð0Kó�Cð ˜s”?ØŸ+™+Ø.Ð0Kó�Cð ˆJð (¨3Ô.Ð3IÐQTÔ3TØ—k‘kÐ"8Ð:PÓQ�ð ˆJð ˜cÔ!Ð&6¸cÔ&AØ—k‘k )Ð-EÓF�ð
 ˆJð +¨cÔ1Ø—k‘kÐ";Ð=TÓU�àˆJr   )Úitems)r$   Úweightsr“   ÚkÚvs   &&   r   ÚsanitizeÚModel.sanitize±   s4   € ò 	ðD 18·±´Ô@±©¨‘˜aÓ  !Ò#±Ò@Ð@ùÓ@s   —/)r   r?   r@   rA   rB   r>   )NNr.   )r1   r2   r3   r4   r   r`   ÚstaticmethodrV   Úpropertyr€   r/   r™   r5   r6   r7   r8   s   @@r   r:   r:      s_   ù‡ € ÷Tó T÷*Jò *JðX ñC/ó ðC/ðJ ñ0ó ð0÷ò ÷$#Aò #Ar   r:   )Útypingr   Úmlx.coreÚcorer+   Úmlx.nnr   Úbaser   Ú r   r   r   Úlanguager   Úvisionr	   ÚModuler   r:   © r   r   Ú<module>r§      sA   ðÝ å Ý å *Ý  Ý Ý #Ý ô˜rŸy™yô ô$uAˆB�I‰Iö uAr   