+
    UV-jv  ã                   óœ   € ^ RI HtHt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Ht  ! R R	]P(                  4      tR# )
é    )ÚListÚOptionalÚUnionN)ÚInputEmbeddingsFeatures)Úprocessing_llama4©ÚModelConfig)ÚLanguageModel)ÚLlama4MultiModalProjectorÚVisionModelc                   ó°   a a€ ] tR t^t oV3R lV 3R lltR tR tR tR tR t	V3R lR	 lt
RV3R
 lR lltR t]R 4       tRV3R lR lltRtVtV ;t# )ÚModelc                ó    <€ V ^8„  d   QhRS[ /# )é   Úconfigr   )ÚformatÚ__classdict__s   "€Úm/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/llama4/llama4.pyÚ__annotate__ÚModel.__annotate__   s   ø€ ÷ 8ñ 8™{ñ 8ó    c                óî   <€ \         SV `  4        Wn        \        VP                  4      V n        \        V4      V n        \        VP                  4      V n
        VP                  P                  V n        R # ©N)ÚsuperÚ__init__r   r   Úvision_configÚvision_modelr   Úmulti_modal_projectorr
   Útext_configÚlanguage_modelÚ
vocab_size)Úselfr   Ú	__class__s   &&€r   r   ÚModel.__init__   sY   ø€ Ü‰ÑÔØŒÜ'¨×(<Ñ(<Ó=ˆÔÜ%>¸vÓ%FˆÔ"Ü+¨F×,>Ñ,>Ó?ˆÔØ ×,Ñ,×7Ñ7ˆŽr   c                ó<   € V P                   P                  V4       R # r   )r    Úset_input_embeddings)r"   Úvalues   &&r   r&   ÚModel.set_input_embeddings   s   € Ø×Ñ×0Ñ0°Ö7r   c                ó6   € V P                   P                  4       # r   )r    Úget_output_embeddings©r"   s   &r   r*   ÚModel.get_output_embeddings   s   € Ø×"Ñ"×8Ñ8Ó:Ð:r   c                ó<   € V P                   P                  V4       R # r   )r    Úset_output_embeddings)r"   Únew_embeddingss   &&r   r.   ÚModel.set_output_embeddings   s   € Ø×Ñ×1Ñ1°.ÖAr   c                ó<   € V P                   P                  V4       R # r   )r    Úset_decoder)r"   Údecoders   &&r   r2   ÚModel.set_decoder   s   € Ø×Ñ×'Ñ'¨Ö0r   c                ó6   € V P                   P                  4       # r   )r    Úget_decoderr+   s   &r   r6   ÚModel.get_decoder"   s   € Ø×"Ñ"×.Ñ.Ó0Ð0r   c                óf   <€ V ^8„  d   QhRS[ P                  RS[S[S[S[,          3,          RS[/# )r   Úpixel_valuesÚvision_feature_layerÚvision_feature_select_strategy)ÚmxÚarrayr   Úintr   Ústr)r   r   s   "€r   r   r   %   s:   ø€ ÷ ñ á—h‘hðñ $¡C©©c­ NÕ3ðñ ),ñ	r   c                óÌ   € VR9  d   \        RV P                   24      hVP                  4        UUu/ uF  w  rVVf   K  WVbK  	  pppV P                  ! V3RR/VB pV# u uppi )Údefaultz$Unexpected select feature strategy: Úoutput_hidden_statesF)rA   Úfull)Ú
ValueErrorr;   Úitemsr   )r"   r9   r:   r;   ÚkwargsÚkÚvÚhidden_states   &&&&,   r   Úget_image_featuresÚModel.get_image_features%   s€   € ð *Ð1DÔDÜØ6°t×7ZÑ7ZÐ6[Ð\óð ð $*§<¡<¤>ÔC¡>™4˜1°Q”$�!’$¡>ˆÑCØ×(Ò(Øñ
Ø/4ð
Ø8>ñ
ˆð Ðùó	 Ds   ³A Á A c                ón   <€ V ^8„  d   QhRS[ S[P                  ,          RS[ S[P                  ,          /# ©r   Ú	input_idsr9   )r   r<   r=   )r   r   s   "€r   r   r   6   s5   ø€ ÷ Jñ Já™BŸH™HÕ%ðJñ ™rŸx™xÕ(ñJr   c                ó¾  € Vf0   \        V P                  P                  P                  V4      R7      # V P                  P                  P                  V4      pV P	                  VVP                  RR4      VP                  RR4      R7      pVP                  RVP                  R,          4      pV P                  V4      pV P                  WtV4      p\        VR7      # )N)Úinputs_embedsr:   r;   rA   )r9   r:   r;   éÿÿÿÿ)
r   r    ÚmodelÚembed_tokensrJ   ÚgetÚreshapeÚshaper   Ú_prepare_inputs_for_multimodal)	r"   rN   r9   rF   rP   Úimage_featuresÚvision_flatÚprojected_vision_flatÚfinal_inputs_embedss	   &&&,     r   Úget_input_embeddingsÚModel.get_input_embeddings6   sÝ   € ð ÒÜ*Ø"×1Ñ1×7Ñ7×DÑDÀYÓOôð ð
 ×+Ñ+×1Ñ1×>Ñ>¸yÓIˆà×0Ñ0Ø%Ø!'§¡Ð,BÀBÓ!GØ+1¯:©:Ø0°)ó,ð 1ó 
ˆð %×,Ñ,¨R°×1EÑ1EÀbÕ1IÓJˆØ $× :Ñ :¸;Ó GÐð #×AÑAØ!°)ó
Ðô 'Ð5HÔIÐIr   c                óŒ  € V P                   P                  pW48H  pVP                  w  rg. p^ p	\        V4       Fò  p
WZ,          p\        P
                  ! V4      P                  4       pV^ 8”  d¤   VW™V,            p\        P                  ! VP                  \        P                  4      4      p\        P                  ! W¾^,
          ^ 4      pWß,          p\        P                  ! VRR7      p\        P                  ! VVW*,          4      pWœ,          p	MW*,          pVP                  V4       Kô  	  \        P                  ! V^ R7      # )r   )ÚaxisrQ   )r   Úimage_token_indexrV   Úranger<   ÚsumÚitemÚcumsumÚastypeÚint32ÚwhereÚexpand_dimsÚappendÚstack)r"   rX   rP   rN   r`   Ú
image_maskÚ
batch_sizeÚseq_lenÚbatch_outputsÚfeature_start_idxÚ	batch_idxÚ
batch_maskÚnum_positionsÚbatch_featuresrd   Úfeature_indicesÚgathered_featuresÚbatch_mask_expandedÚbatch_outputs   &&&&               r   rW   Ú$Model._prepare_inputs_for_multimodalU   s  € Ø ŸK™K×9Ñ9Ðð Ñ3ˆ
à'Ÿo™oÑˆ
ð ˆØÐä˜zÖ*ˆIØ#Õ.ˆJÜŸFšF :Ó.×3Ñ3Ó5ˆMà˜qÔ Ø!/Ø%¸MÕ(Ið"�ô
 Ÿš :×#4Ñ#4´R·X±XÓ#>Ó?�Ü"$§(¢(¨:ÀµzÀ1Ó"E�ð %3Õ$CÐ!ô ')§n¢n°ZÀbÔ&IÐ#Ü!ŸxšxØ'Ð):¸MÕ<Tó �ð "Õ2Ñ!à,Õ7�à× Ñ  Ö.ñ5 +ô8 �xŠx˜¨AÔ.Ð.r   c                óB   € V P                   P                  P                  # r   )r    rR   Úlayersr+   s   &r   rz   ÚModel.layers   s   € à×"Ñ"×(Ñ(×/Ñ/Ð/r   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rM   )r<   r=   )r   r   s   "€r   r   r   ƒ   s'   ø€ ÷ ñ á—8‘8ðñ —h‘hñr   c                óh   € V P                   ! W3/ VB pV P                  VVP                  VR 7      pV# ))ÚinputsrP   Úcache)r\   r    rP   )r"   rN   r9   r   rF   Úinput_embeddings_featuresÚlogitss   &&&&,  r   Ú__call__ÚModel.__call__ƒ   sM   € ð %)×$=Ò$=Øñ%
Ø'-ñ%
Ð!ð ×$Ñ$ØØ3×AÑAØð %ó 
ˆð
 ˆr   )r   r    r   r   r!   )NNr   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r&   r*   r.   r2   r6   rJ   r\   rW   Úpropertyrz   r‚   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r#   r   s   @@r   r   r      sh   ù‡ € ÷8ó 8ò8ò;òBò1ò1÷ð ÷"Jò Jò>(/ðT ñ0ó ð0÷÷ ò r   r   )Útypingr   r   r   Úmlx.coreÚcorer<   Úmlx.nnÚnnÚbaser   Ú r   r   r	   Úlanguager
   Úvisionr   r   ÚModuler   © r   r   Ú<module>r—      s2   ðß (Ñ (å Ý å *Ý Ý Ý #ß :ôFˆB�I‰Iö Fr   