+
    UV-j§2  ã                   ó¬   € ^ 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 ^RIHt RtR R	 ltR
 R lt ! R R]P*                  4      tR# )é    )ÚOptionalN)ÚInputEmbeddingsFeaturesÚLanguageModelOutput©ÚModelConfig)ÚLanguageModel)ÚVisionModelg     ½ï@c                ó$   € V ^8„  d   QhR\         /# )é   Úreturn)Úfloat)Úformats   "Úm/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/molmo2/molmo2.pyÚ__annotate__r      s   € ÷ ñ ¤uñ ó    c                 ó¢   € \        \        P                  ! V 4      P                  4      pV \        P                  8X  d   \        \        V4      # V# ©N)r   ÚmxÚfinfoÚmaxÚfloat16ÚminÚMAX_FLOAT16_IMAGE_FEATURE)ÚdtypeÚ	dtype_maxs   & r   Úimage_feature_clip_limitr      s:   € Ü”b—h’h˜u“o×)Ñ)Ó*€IØ”—
‘
ÔÜÔ,¨iÓ8Ð8ØÐr   c                óX   € V ^8„  d   QhR\         P                  R\         P                  /# )r   Úimage_featuresr   )r   Úarray)r   s   "r   r   r      s"   € ÷ <ñ <¬¯©ð <´R·X±Xñ <r   c                 óÜ   € \        V P                  4      p\        P                  ! \        P                  ! V 4      \        P
                  ! V 4      V 4      p \        P                  ! W) V4      # r   )r   r   r   ÚwhereÚisnanÚ
zeros_likeÚclip)r   Ú
clip_limits   & r   Úclip_image_featuresr&      sN   € Ü)¨.×*>Ñ*>Ó?€JÜ—X’XÜ
�Š�Ó ¤"§-¢-°Ó"?Àó€Nô �7Š7�> ;°
Ó;Ð;r   c                   óÒ   a a€ ] tR t^t oV3R lV 3R llt]R 4       tV3R lR ltV3R lR ltRR	R
R	RR	RR	RR	R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R tRtVtV ;t# )ÚModelc                ó    <€ V ^8„  d   QhRS[ /# )r   Úconfigr   )r   Ú__classdict__s   "€r   r   ÚModel.__annotate__   s   ø€ ÷ >ñ >™{ñ >r   c                óš   <€ \         SV `  4        Wn        \        VP                  V4      V n        \        VP                  4      V n        R # r   )	ÚsuperÚ__init__r*   r   Útext_configÚlanguage_modelr	   Úvision_configÚvision_tower)Úselfr*   Ú	__class__s   &&€r   r/   ÚModel.__init__   s;   ø€ Ü‰ÑÔØŒÜ+¨F×,>Ñ,>ÀÓGˆÔÜ'¨×(<Ñ(<Ó=ˆÖr   c                ó.   € V P                   P                  # r   )r1   Úlayers)r4   s   &r   r8   ÚModel.layers%   s   € à×"Ñ"×)Ñ)Ð)r   c                óà   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  RS[ P                  RS[ P                  RS[S[ P                  S[ P                  3,          /# )r   Ú	input_idsÚpixel_valuesÚimage_token_poolingÚimage_gridsÚimage_num_cropsr   ©r   r   Útuple)r   r+   s   "€r   r   r,   )   su   ø€ ÷ r)ñ r)á—8‘8ðr)ñ —h‘hðr)ñ  ŸX™Xð	r)ñ
 —X‘Xðr)ñ Ÿ™ðr)ñ 
‰r�x‰x™Ÿ™Ð!Õ	"ñr)r   c                ó<  € WP                   P                  8H  P                  ^R7      pV^,          pVP                  ^ ,          p\	        VP                  4       P                  4       4      p	VP                  ^ ,          V	8w  d#   \        RV	 RVP                  ^ ,           24      hVP                  ^ ,          V	8w  d#   \        RV	 RVP                  ^ ,           24      hVR
,          P                  ^R7      VR,          P                  ^R7      ,           P                  VP                  4      P                  R4      p
VP                  w  r¼p\        P                  ! \        P                  ! \        P                  ! V4      \        P                  ! V4      P                  \        P                   4      P#                  4       4      \        P                   R7      p\        P$                  ! V3VP                  R7      p\        P$                  ! V3V
P                  R7      p\'        V	4       FW  p\	        VV,          P                  4       4      pVV,          VV,          ,           VV&   VV,          V
V,          ,           VV&   KY  	  \	        VP                  4       P                  4       4      pVV8w  d   \        RV RV 24      h\	        VP                  4       P                  4       4      pVVP                  ^ ,          8w  d#   \        RV RVP                  ^ ,           24      h\	        VP)                  4       P                  4       4      p\        P*                  ! VVWÍ3RVP                  R7      p^ p\'        V4       F?  p\	        VV,          P                  4       4      pVVVV,            VVR	V13&   VV,          pKA  	  \	        VP)                  4       P                  4       4      pVP                  ^,          p\        P*                  ! VVV3RVP                  R7      pW\,          pVP#                  4       p^ p^ p^ p \-        V4       EFG  w  pp!\	        VV,          P                  4       4      p"\        P                  ! VVVV",            4      p#VVVV!,            p$^ .\        P.                  ! V$P#                  4       4      P#                  4       R	R ,           p%V
VVV!,            P#                  4       p&^ p'\'        V!4       Fh  p(\	        V&V(,          4      p)\	        V%V(,          4      p*V#V'V'V),            p+\        P0                  ! V+^ 8¬  V+V*,           V+4      V#V'V'V),           % V'V),          p'Kj  	  V#VVR	V"13&   VV",          pVV!,          pV V",          p EKJ  	  VV3# )é   ©Úaxisú	Expected z image grids, got z image crop counts, got ©r   z crops, got z pooled patches, got ©Úvalsr   N)ºNNN:Nr   N)rJ   :r   NNéÿÿÿÿ)r*   Úimage_end_token_idÚsumÚshapeÚintÚitemÚ
ValueErrorÚprodÚastyper   Úreshaper   r   ÚnpÚrepeatÚarangeÚint32ÚtolistÚzerosÚranger   ÚfullÚ	enumerateÚcumsumr!   ),r4   r;   r<   r=   r>   r?   Ú
raw_countsÚcountsÚ
batch_sizeÚ
num_imagesÚnum_pooled_patches_per_imageÚn_cropsÚ	n_patchesÚpixels_per_patchÚexample_ids_for_imageÚcrops_per_exampleÚpooled_per_exampleÚ	image_idxÚexÚtotal_cropsÚtotal_pooledÚ	max_cropsÚimagesÚoffset_cropÚiÚnumÚ
max_pooledÚ	token_dimÚnew_token_poolingÚpatches_per_imageÚcounts_listÚpooled_offsetÚpatch_offsetÚcÚ
num_pooledÚcurÚper_img_patchesÚindex_offsetsÚper_img_pooledÚoffsetÚjÚnÚidx_offÚ	cur_slices,   &&&&&&                                      r   Úbuild_batched_imagesÚModel.build_batched_images)   s+  € ð  §;¡;×#AÑ#AÑA×FÑFÈAÐFÓNˆ
Ø˜q•ˆØ—\‘\ !•_ˆ
ä˜Ÿ™›×*Ñ*Ó,Ó-ˆ
à×Ñ˜QÕ :Ô-ÜØ˜J˜<Ð'9¸+×:KÑ:KÈAÕ:NÐ9OÐPóð ð × Ñ  Õ# zÔ1ÜØ˜J˜<Ð'?À×@UÑ@UÐVWÕ@XÐ?YÐZóð ð
 ˜Õ×$Ñ$¨!Ð$Ó,¨{¸5Õ/A×/FÑ/FÈAÐ/FÓ/NÕNß‰V�O×)Ñ)Ó*ß‰W�R‹[ð 	%ð 0<×/AÑ/AÑ,ˆÐ,ä "§¢Ü�IŠIÜ—	’	˜*Ó%¤r§x¢x°Ó'7×'>Ñ'>¼r¿x¹xÓ'H×'OÑ'OÓ'Qóô —(‘(ô	!
Ðô ŸHšH j ]¸/×:OÑ:OÔPÐÜŸXšXØˆMÐ!=×!CÑ!Cô
Ðô ˜zÖ*ˆIÜÐ*¨9Õ5×:Ñ:Ó<Ó=ˆBØ$5°bÕ$9¸OÈIÕ<VÕ$VÐ˜bÑ!à" 2Õ&Ð)EÀiÕ)PÕPð ˜rÓ"ñ +ô Ð+×/Ñ/Ó1×6Ñ6Ó8Ó9ˆØ˜'Ô!Ü˜y¨¨°\À'ÀÐKÓLÐLäÐ-×1Ñ1Ó3×8Ñ8Ó:Ó;ˆØÐ.×4Ñ4°QÕ7Ô7ÜØ˜L˜>Ð)>Ð?R×?XÑ?XÐYZÕ?[Ð>\Ð]óð ô Ð)×-Ñ-Ó/×4Ñ4Ó6Ó7ˆ	Ü—’Ø˜ IÐ@ØØ×$Ñ$ô
ˆð ˆÜ�zÖ"ˆAÜÐ'¨Õ*×/Ñ/Ó1Ó2ˆCØ*¨;¸ÀsÕ9JÐKˆF�1�d�s�d�7‰OØ˜3ÕŠKñ #ô
 Ð+×/Ñ/Ó1×6Ñ6Ó8Ó9ˆ
Ø'×-Ñ-¨aÕ0ˆ	ÜŸGšGØ˜ YÐ/ØØ%×+Ñ+ô
Ðð ,Õ7ÐØ—m‘m“oˆØˆ	ØˆØˆÜ˜{×+‰EˆB�ÜÐ/°Õ3×8Ñ8Ó:Ó;ˆJÜ—(’(Ø# M°MÀJÕ4NÐOóˆCð 0°	¸IÈ½MÐJˆOØ˜C¤"§)¢)¨O×,BÑ,BÓ,DÓ"E×"LÑ"LÓ"NÈsÐPRÐ"SÕSˆMØ9Ø˜I¨�Mðç‰f‹hð ð ˆFÜ˜1–X�Ü˜ qÕ)Ó*�Ü˜m¨AÕ.Ó/�Ø ¨°!­Ð4�	Ü+-¯8ª8Ø ‘NØ Õ'Øó,��F˜V a�ZÐ(ð
 ˜!•’ñ ð 25Ð˜b + : +˜oÑ.Ø˜ZÕ'ˆMØ˜�NˆIØ˜JÕ&‹Lñ7 ,ð: Ð(Ð(Ð(r   c                óÆ   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  RS[ P                  RS[S[ P                  S[ P                  3,          /# )r   r;   Úpixel_values_videosÚvideo_token_poolingÚvideo_gridsr   r@   )r   r+   s   "€r   r   r,   �   sf   ø€ ÷ K)ñ K)á—8‘8ðK)ñ  ŸX™XðK)ñ  ŸX™Xð	K)ñ
 —X‘XðK)ñ 
‰r�x‰x™Ÿ™Ð!Õ	"ñK)r   c                ój  € V P                   P                  '       d   V P                   P                  MV P                   P                  p\        P
                  ! W8H  ^R7      P                  \        P                  4      pVP                  ^ ,          p\        VP                  4       P                  4       4      pVP                  ^ ,          V8w  d#   \        RV RVP                  ^ ,           24      hVR	,          VR
,          ,          P                  VP                  4      p	VP                  w  r«p\        P                  ! V3\        P                  R7      p\        P                  ! V3VP                  R7      p^ p\        V4       F^  pVV,          P                  4       ^8X  g   K!  \        WO,          ^ ,          P                  4       4      VV&   WŸ,          VV&   V^,          pK`  	  V'       d(   \        VP!                  4       P                  4       4      M^ p\        P"                  ! VVW¼3RVP                  R7      p^ p\        V4       FH  p\        VV,          P                  4       4      pV^ 8”  g   K,  VVVV,            VVRV13&   VV,          pKJ  	  V'       d(   \        VP!                  4       P                  4       4      M^ pVP                  ^,          p\        P"                  ! VVV3RVP                  R7      p^ p\        V4       FH  p\        VV,          P                  4       4      pV^ 8”  g   K,  VVVV,            VVRV13&   VV,          pKJ  	  VV
8w  d   \        RV
 RV 24      hVVP                  ^ ,          8w  d#   \        RVP                  ^ ,           RV 24      hVV3# )rC   rD   rF   z videos, got rG   rH   Nz frames, got z pooled tokens, got )rJ   rC   )rJ   r   rK   )r*   Úuse_frame_special_tokensÚframe_end_token_idrL   r   ÚanyrS   rX   rN   rO   rM   rP   rQ   r   rZ   r[   r   r\   )r4   r;   rˆ   r‰   rŠ   Úend_token_idr`   ra   Ú
num_videosÚnum_pooled_patches_per_videoÚn_framesre   rf   Úframes_per_exampleri   Úvideo_indexrq   Ú
max_framesÚvideosr€   rr   rs   rt   ru   rx   s   &&&&&                    r   Úbuild_batched_videosÚModel.build_batched_videos�   sZ  € ð �{‰{×3×3Ð3ð �K‰K×*Ò*à—‘×/Ñ/ð 	ô
 —’˜	Ñ1¸Ô:×AÑAÄ"Ç(Á(ÓKˆØ—\‘\ !•_ˆ
Ü˜Ÿ™›×*Ñ*Ó,Ó-ˆ
à×Ñ˜QÕ :Ô-ÜØ˜J˜< }°[×5FÑ5FÀqÕ5IÐ4JÐKóð ð )4°DÕ(9¸KÈÕ<MÕ(M×'UÑ'UØ×%Ñ%ó(
Ð$ð 1D×0IÑ0IÑ-ˆÐ-äŸXšX z m¼2¿8¹8ÔDÐÜŸXšX z mÐ;N×;TÑ;TÔUÐàˆÜ�zÖ"ˆAØ�a�y�~‰~Ó 1Ö$Ü(+¨KÕ,DÀQÕ,G×,LÑ,LÓ,NÓ(OÐ" 1Ñ%Ø(DÕ(QÐ" 1Ñ%Ø˜qÕ ’ñ	 #÷ >H”SÐ+×/Ñ/Ó1×6Ñ6Ó8Ô9ÈQˆ
Ü—’Ø˜ YÐAØØ%×+Ñ+ô
ˆð ˆÜ�zÖ"ˆAÜÐ(¨Õ+×0Ñ0Ó2Ó3ˆCØ�QŽwØ"5°f¸vÈ½|Ð"L��q˜$˜3˜$�w‘Ø˜#•’ñ	 #÷ >H”SÐ+×/Ñ/Ó1×6Ñ6Ó8Ô9ÈQˆ
Ø'×-Ñ-¨aÕ0ˆ	ÜŸGšGØ˜ YÐ/ØØ%×+Ñ+ô
Ðð ˆÜ�zÖ"ˆAÜÐ(¨Õ+×0Ñ0Ó2Ó3ˆCØ�QŽwØ-@Ø! M°CÕ$7ð.Ð! ! T c T 'Ñ*ð  Õ$’ñ #ð �XÔÜ˜y¨¨
°-À¸xÐHÓIÐIØÐ/×5Ñ5°aÕ8Ô8ÜØÐ/×5Ñ5°aÕ8Ð9Ð9MÈmÈ_Ð]óð ð Ð(Ð(Ð(r   r<   Nr=   r>   r?   r‰   rŠ   c                ó”  <€ V ^8„  d   QhRS[ P                  RS[S[ P                  ,          RS[S[ P                  ,          RS[S[ P                  ,          RS[S[ P                  ,          RS[S[ P                  ,          RS[S[ P                  ,          RS[S[S[ P                  ,          S[S[ P                  ,          3,          /# )	r   r;   r<   r=   r>   r?   r‰   rŠ   r   )r   r   r   rA   )r   r+   s   "€r   r   r,   ê   s³   ø€ ÷ )
ñ )
ñ —8‘8ð)
ñ ™rŸx™xÕ(ð	)
ñ
 &¡b§h¡hÕ/ð)
ñ ™bŸh™hÕ'ð)
ñ "¡"§(¡(Õ+ð)
ñ &¡b§h¡hÕ/ð)
ñ ™bŸh™hÕ'ð)
ñ 
‰x™Ÿ™Õ!¡8©B¯H©HÕ#5Ð5Õ	6ñ)
r   c               óÈ   € Vf   R# Vf   Ve)   Ve   Vf   \        R4      hV P                  VVVVR7      # Ve	   Ve   Vf   \        R4      hV P                  VVVVVR7      # )Nz;video_token_pooling and video_grids are required for videos)r;   rˆ   r‰   rŠ   zMimage_token_pooling, image_grids, and image_num_crops are required for images)r;   r<   r=   r>   r?   )NN)rQ   r—   r…   )r4   r;   r<   r=   r>   r?   r‰   rŠ   s   &$$$$$$$r   Úmerge_visual_inputsÚModel.merge_visual_inputsê   s©   € ð ÒØÐàÒ*¨kÒ.EØ"Ò*¨kÒ.AÜ ØQóð ð ×,Ñ,Ø#Ø$0Ø$7Ø'ð	 -ó ð ð  Ò'ØÒ"ØÒ&äØ_óð ð ×(Ñ(ØØ%Ø 3Ø#Ø+ð )ó 
ð 	
r   c                óx   <€ V ^8„  d   QhRS[ P                  RS[S[ P                  ,          RS[ P                  /# )r   r;   r<   r   )r   r   r   )r   r+   s   "€r   r   r,     s:   ø€ ÷ '8ñ '8á—8‘8ð'8ñ ™rŸx™xÕ(ð'8ñ
 
�‰ñ'8r   c                ó8  € WR8g  P                  VP                  4      ,          pV P                  P                  P	                  V4      pVEeB   V P                  VVVP                  RR4      VP                  RR4      VP                  RR4      VP                  RR4      VP                  RR4      R7      w  r%V P                  P                  P                  P                  P                  pVP                  V4      pVP                  RR4      pVe   TpMV P                  W%4      p\        V4      p\        P                  ! VR4      V P                  P                  8H  p	\!        V	P#                  4       P%                  4       4      VP&                  ^ ,          8w  dH   \)        R	\!        V	P#                  4       P%                  4       4       R
VP&                  ^ ,           24      h\        P                  ! VRVP&                  R,          34      p
\        P*                  ! \,        P.                  ! \,        P*                  ! V	4      4      ^ ,          \        P0                  R7      pW«,          V,           W«&   V
P                  VP&                  4      p\3        VR7      # )rC   Nr=   r>   r?   r‰   rŠ   )r;   r<   r=   r>   r?   r‰   rŠ   Úcached_image_featuresrF   z image features, got rG   )Úinputs_embedsrK   )rK   )rS   r   r1   ÚmodelÚwter›   Úgetr3   Ú	image_vitÚpatch_embeddingÚweightr&   r   rT   r*   Úimage_patch_idrO   rM   rP   rN   rQ   r   rU   r!   Úuint32r   )r4   r;   r<   ÚkwargsÚxÚtoken_poolingr   Úcachedr   Úis_image_patchÚflat_xÚ	positionss   &&&,        r   Úget_input_embeddingsÚModel.get_input_embeddings  s  € ð ¨b¡× 8Ñ 8¸¿¹Ó IÕIˆ	Ø×Ñ×%Ñ%×)Ñ)¨)Ó4ˆàÓ#à*.×*BÑ*BØ#Ø)Ø$*§J¡JÐ/DÀdÓ$KØ"ŸJ™J }°dÓ;Ø &§
¡
Ð+<¸dÓ CØ$*§J¡JÐ/DÀdÓ$KØ"ŸJ™J }°dÓ;ð +Có +Ñ'ˆLð ×%Ñ%×/Ñ/×?Ñ?×FÑF×LÑLˆEØ'×.Ñ.¨uÓ5ˆLØ—Z‘ZÐ 7¸Ó>ˆFØÒ!Ø!'‘à!%×!2Ñ!2°<Ó!O�Ü0°Ó@ˆNÜŸZšZ¨	°5Ó9¸T¿[¹[×=WÑ=WÑWˆNÜ�>×%Ñ%Ó'×,Ñ,Ó.Ó/°>×3GÑ3GÈÕ3JÔJÜ Ø¤ N×$6Ñ$6Ó$8×$=Ñ$=Ó$?Ó @ÐAÐAVÐWe×WkÑWkÐlmÕWnÐVoÐpóð ô —Z’Z  B¨¯©°­Ð#4Ó5ˆFÜŸš¤§¢¬"¯(ª(°>Ó*BÓ!CÀAÕ!FÌbÏiÉiÔXˆIØ &Õ 1°NÕ BˆFÑØ—‘˜qŸw™wÓ'ˆAä&°QÔ7Ð7r   c                óŽ   <€ V ^8„  d   QhRS[ P                  RS[S[ P                  ,          RS[S[ P                  ,          RS[/# )r   r;   r<   Úmaskr   )r   r   r   r   )r   r+   s   "€r   r   r,   >  sI   ø€ ÷ 
ñ 
á—8‘8ð
ñ ™rŸx™xÕ(ð
ñ ‘r—x‘xÕ ð	
ñ 
ñ
r   c                ó    € VP                   ^8X  d
   VR,          pV P                  ! RRVRV/VB pV P                  VVP                  VVR7      # )rC   r;   r<   )r    r³   Úcache)NrJ   © )Úndimr°   r1   r    )r4   r;   r<   r³   rµ   r©   Úinput_embeddings_featuress   &&&&&, r   Ú__call__ÚModel.__call__>  so   € ð �>‰>˜QÔØ! 'Õ*ˆIà$(×$=Ò$=ñ %
Øð%
Ø.:ð%
Ø>Dñ%
Ð!ð ×"Ñ"ØØ3×AÑAØØð	 #ó 
ð 	
r   c                óp   € R  R l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                ó0   € V ^8„  d   QhR\         R\         /# )r   Úkeyr   )Ústr)r   s   "r   r   Ú$Model.sanitize.<locals>.__annotate__U  s   € ÷ 		ñ 		œsð 		¤sñ 		r   c                 ó&  € V P                  R 4      '       d   V P                  R R^4      p V P                  R4      '       d   V P                  RR^4      p V P                  R4      '       d   V P                  RR^4      p V P                  RR4      p V # )zmodel.transformer.zlanguage_model.model.zmodel.vision_backbone.zvision_tower.zlm_head.zlanguage_model.lm_head.z.transformer.resblocks.z.transformer.)Ú
startswithÚreplace)r½   s   &r   Útransform_keyÚ%Model.sanitize.<locals>.transform_keyU  s‚   € Ø�~‰~Ð2×3Ò3Ø—k‘kÐ"6Ð8OÐQRÓS�Ø�~‰~Ð6×7Ò7Ø—k‘kÐ":¸OÈQÓO�Ø�~‰~˜j×)Ò)Ø—k‘k *Ð.GÈÓK�à—+‘+Ð7¸ÓIˆCØˆJr   )Úitems)r4   ÚweightsrÃ   ÚkÚvs   &&   r   ÚsanitizeÚModel.sanitizeT  s3   € õ		ð 18·±´Ô@±©¨‘˜aÓ  !Ò#±Ò@Ð@ùÓ@s   š2)r*   r1   r3   r   )NNN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r/   Úpropertyr8   r…   r—   r›   r°   r¹   rÉ   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r5   r+   s   @@r   r(   r(      s¥   ù‡ € ÷>ó >ð ñ*ó ð*÷r)ð r)÷hK)ð K)ðZ)
ð ,0ð	)
ð
 37ð)
ð +/ð)
ð /3ð)
ð 37ð)
ð +/÷)
ò )
÷V'8ò '8÷R
ò 
÷,Aò Ar   r(   )Útypingr   Úmlx.coreÚcorer   Úmlx.nnÚnnÚnumpyrU   Úbaser   r   r*   r   Úlanguager   Úvisionr	   r   r   r&   ÚModuler(   r¶   r   r   Ú<module>rÝ      sA   ðÝ å Ý Û ç ?Ý Ý #Ý à#Ð õõ<ôBAˆB�I‰Iö BAr   