+
    UV-j8X  ã                  óÖ  € ^ RI Ht ^ RIt^ RI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t^ RIHt ^ RIt^ RIt^ RIHt ^RIHt ^RIHtHtHt ]P8                  ! ]4      t]P?                  ]P@                  4       ]PC                  ]PD                  ! 4       4       ]PG                  R	4       ^t$R+t%R,t&^Èt'R-t(R.t)^t*Rt+^t,R
t-].! ]/! ]P`                  Pc                  RR/4      4      4      t2R R lt3R R lt4R R lt5]$]%]&3R R llt6R R lt7]$3R R llt8R R lt9R R lt:]$R3R R llt;R  R! lt<R0R" R# llt= ! R$ R%4      t>R& t?R' R( lt@R) tA]R*8X  d
   ]A! 4        R# R# )1é    )ÚannotationsN)ÚBytesIO)ÚPath)ÚList)ÚImage)Úgenerate)ÚloadÚ
load_imageÚprocess_inputs_with_fallbackzOThis is a beta version of the video understanding. It may not work as expected.i   ç       @ÚVIDEO_MAX_PIXELSc               ó$   € V ^8„  d   QhRRRRRR/# ©é   ÚnumberÚintÚfactorÚreturn© )Úformats   "Úg/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/video_generate.pyÚ__annotate__r   3   s!   € ÷ +ñ +˜Cð +¨ð +°ñ +ó    c                ó2   € \        W,          4      V,          # )zFReturns the closest integer to 'number' that is divisible by 'factor'.)Úround©r   r   s   &&r   Úround_by_factorr   3   s   € ä�•Ó! FÕ*Ð*r   c               ó$   € V ^8„  d   QhRRRRRR/# r   r   )r   s   "r   r   r   8   s!   € ÷ /ñ /˜3ð /¨ð /°ñ /r   c                óH   € \         P                  ! W,          4      V,          # )z]Returns the smallest integer greater than or equal to 'number' that is divisible by 'factor'.)ÚmathÚceilr   s   &&r   Úceil_by_factorr"   8   s   € ä�9Š9�V•_Ó%¨Õ.Ð.r   c               ó$   € V ^8„  d   QhRRRRRR/# r   r   )r   s   "r   r   r   =   s!   € ÷ 0ñ 0˜Cð 0¨ð 0°ñ 0r   c                óH   € \         P                  ! W,          4      V,          # )zYReturns the largest integer less than or equal to 'number' that is divisible by 'factor'.)r    Úfloorr   s   &&r   Úfloor_by_factorr&   =   s   € ä�:Š:�f•oÓ&¨Õ/Ð/r   c               ó0   € V ^8„  d   QhRRRRRRRRRRRR/# )	r   Úheightr   Úwidthr   Ú
min_pixelsÚ
max_pixelsr   ztuple[int, int]r   )r   s   "r   r   r   B   sD   € ÷ ñ Øðàðð ðð ð	ð
 ðð ñr   c           
     óV  € \        W4      \        W4      ,          \        8”  d/   \        R\         R\        W4      \        W4      ,           24      h\        V\	        W4      4      p\        V\	        W4      4      pWV,          V8”  dK   \
        P                  ! W,          V,          4      p\        W,          V4      p\        W,          V4      pWV3# WV,          V8  dH   \
        P                  ! W0V,          ,          4      p\        W,          V4      p\        W,          V4      pWV3# )a  
Rescales the image so that the following conditions are met:

1. Both dimensions (height and width) are divisible by 'factor'.
2. The total number of pixels is within the range ['min_pixels', 'max_pixels'].
3. The aspect ratio of the image is maintained as closely as possible.
z+absolute aspect ratio must be smaller than z, got )	ÚmaxÚminÚ	MAX_RATIOÚ
ValueErrorr   r    Úsqrtr&   r"   )r(   r)   r   r*   r+   Úh_barÚw_barÚbetas   &&&&&   r   Úsmart_resizer5   B   sø   € ô ˆ6ÓœC Ó.Õ.´Ô:ÜØ9¼)¸ÀFÌ3ÈvÓK]Ô`cÐdjÓ`rÕKrÐJsÐtó
ð 	
ô �œ¨Ó7Ó8€EÜ�œ¨Ó6Ó7€EØ…}�zÔ!Ü�yŠy˜&�.¨JÕ6Ó7ˆÜ ¥¨vÓ6ˆÜ ¥¨fÓ5ˆð
 ˆ<Ðð	 
�˜Ô	#Ü�yŠy˜°¥~Õ6Ó7ˆÜ˜v�}¨fÓ5ˆÜ˜u�|¨VÓ4ˆØˆ<Ðr   c               ó    € V ^8„  d   QhRRRR/# )r   Ú	pil_imageúImage.Imager   r   )r   s   "r   r   r   a   s   € ÷ (ñ (�kð ( kñ (r   c                óÜ   € V P                   R 8X  dL   \        P                  ! RV P                  R4      pVP	                  W P                  4       ^,          R7       V# V P                  R4      # )ÚRGBAÚRGB)Úmask)éÿ   r=   r=   )Úmoder   ÚnewÚsizeÚpasteÚsplitÚconvert)r7   Úwhite_backgrounds   & r   Úto_rgbrE   a   s`   € Ø‡~�~˜ÔÜ Ÿ9š9 U¨I¯N©N¸OÓLÐØ×ÑØŸO™OÓ-¨aÕ0ð 	ô 	
ð  Ðà× Ñ  Ó'Ð'r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úelezdict[str, str | Image.Image]Úsize_factorr   r   r8   r   )r   s   "r   r   r   l   s$   € ÷ 2ñ 2Ø	%ð2Ø47ð2àñ2r   c                óæ  € R V 9   d   V R ,          pM	V R,          pRp\        V\        P                  4      '       d   TpEMˆ\        V\        4      '       d   \        P                  ! V4      pEMZ\        V\        4      '       g"   \        R\        V4      P                   24      hVP                  R4      '       g   VP                  R4      '       dC   \        P                  ! VRR7      p\        P                  ! \        VP                  4      4      pM³VP                  R4      '       d   \        P                  ! VR	,          4      pM~VP                  R
4      '       dR   RV9   dJ   VP                  R^4      w  rV\        P                  ! V4      p\        P                  ! \        V4      4      pM\        P                  ! V4      pVf   \        RV 24      h\!        V4      pRV 9   d'   RV 9   d    \#        V R,          V R,          VR7      w  r‰MLVP$                  w  r«V P                  R\&        4      pV P                  R\(        4      p\#        VV
VVVR7      w  r‰VP+                  W˜34      pV# )ÚimageÚ	image_urlNzUnsupported image type: zhttp://zhttps://T)Ústreamúfile://ºé   NNz
data:imagezbase64,zRUnrecognized image input, support local path, http url, base64 and PIL.Image, got Úresized_heightÚresized_width©r   r*   r+   ©r   r*   r+   )Ú
isinstancer   r   ÚopenÚstrr0   ÚtypeÚ__name__Ú
startswithÚrequestsÚgetr   ÚcontentrB   Úbase64Ú	b64decoderE   r5   r@   Ú
MIN_PIXELSÚ
MAX_PIXELSÚresize)rG   rH   rJ   Ú	image_objÚresponseÚ_Úbase64_dataÚdatarP   rQ   r)   r(   r*   r+   s   &&            r   Úfetch_imagerg   l   s  € ð �#„~Ø�G•‰à�KÕ ˆØ€IÜ�%œŸ™×%Ò%ØŠ	Ü	�Eœ4×	 Ò	 Ü—J’J˜uÓ%Š	Ü˜œs×#Ò#ÜÐ3´D¸³K×4HÑ4HÐ3IÐJÓKÐKØ	×	Ñ	˜)×	$Ò	$¨×(8Ñ(8¸×(DÒ(DÜ—<’< ¨dÔ3ˆÜ—J’Jœw x×'7Ñ'7Ó8Ó9‰	Ø	×	Ñ	˜)×	$Ò	$Ü—J’J˜u R�yÓ)‰	Ø	×	Ñ	˜,×	'Ò	'Ø˜ÔØ"Ÿ[™[¨°AÓ6‰NˆAÜ×#Ò# KÓ0ˆDÜŸ
š
¤7¨4£=Ó1ˆIøä—J’J˜uÓ%ˆ	ØÒÜØ`ÐafÐ`gÐhó
ð 	
ô �9Ó€Eà˜3Ô ?°cÔ#9Ü(4ØÐ Õ!Ø�Õ Øô)
Ñ%ˆ˜ð Ÿ
™
‰ˆØ—W‘W˜\¬:Ó6ˆ
Ø—W‘W˜\¬:Ó6ˆ
Ü(4ØØØØ!Ø!ô)
Ñ%ˆð �L‰L˜-Ð8Ó9€EØ€Lr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rG   ÚdictÚtotal_framesr   Ú	video_fpszint | floatr   r   )r   s   "r   r   r   ¡   s0   € ÷ ñ Ø	ðàðð ðð 	ñ	r   c           	     óR  € RV 9   d   RV 9   d   Q R4       hRV 9   d   \        V R,          \        4      pMÈV P                  R\        4      p\	        V P                  R\
        4      \        4      p\        V P                  R\        \        V4      4      \        4      pW,          V,          pW18”  d   \        P                  RV RV R24       \        \        \        W54      V4      V4      p\        V\        4      p\        V8:  d   W18:  g   \        R	\         R
V RV R24      hV# )z¯Calculate the number of frames for the video to be used as model inputs.

Either a fixed 'nframes' is provided in ele or 'fps' is used to calculate how many frames to sample.
ÚfpsÚnframesz%Only accept either `fps` or `nframes`Ú
min_framesÚ
max_frameszsmart_nframes: nframes[z] > total_frames[Ú]znframes should be in interval [z, z], but got Ú.)r   ÚFRAME_FACTORr[   ÚFPSr"   ÚFPS_MIN_FRAMESr&   r.   ÚFPS_MAX_FRAMESÚloggerÚwarningr-   r0   )rG   rj   rk   rn   rm   ro   rp   s   &&&    r   Úsmart_nframesry   ¡   s  € ð 	�Œ˜ cÔ)ð/à.ó/ð ð �CÔÜ! # i¥.´,Ó?‰à�g‰g�eœSÓ!ˆÜ# C§G¡G¨L¼.Ó$IÌ<ÓXˆ
Ü$Ø�G‰G�L¤#¤n°lÓ"CÓDÄló
ˆ
ð Õ*¨SÕ0ˆØÔ!Ü�N‰NØ)¨'¨Ð2CÀLÀ>ÐQRÐSôô ”cœ#˜gÓ2°JÓ?ÀÓNˆÜ! '¬<Ó8ˆÜ˜GÔ#¨Ô(?ÜØ-¬l¨^¸2¸l¸^È;ÐW^ÐV_Ð_`Ðaó
ð 	
ð €Nr   c               ó    € V ^8„  d   QhRRRR/# )r   rG   ri   r   z(np.ndarray, float)r   )r   s   "r   r   r   Ã   s   € ÷ ' ñ ' Ø	ð' àñ' r   c                ó€  € V R,          pVP                  R4      '       d
   VR,          p\        P                  ! V4      pVP                  4       '       g   \	        RV 24      h\        VP                  \        P                  4      4      pVP                  \        P                  4      ;'       g    Rp\        P                  ! 4       p\        P                  RV RV RV R	\        P                  ! 4       V,
          R
 R2	4       \        WVR7      p\        P                  ! ^ V^,
          V4      P                  4       P!                  \
        4      p. pV Fu  p	VP#                  \        P$                  V	4       VP'                  4       w  r«V
'       g    M:\        P(                  ! V\        P*                  4      pVP-                  V4       Kw  	  VP/                  4        V'       g   \	        R4      h\        P0                  ! V^ R7      p\        P2                  ! VR4      pV\5        VR4      ,          V,          pWÍ3# )zÁ
Read video using cv2.VideoCapture.

The video is read as a NumPy array with shape (T, C, H, W) where T is the number of frames,
C is the number of channels, and H, W are the frame dimensions.
ÚvideorM   rN   zCannot open video: ç      ð?znumpy reader: video_path=z, total_frames=z, video_fps=z, time=z.3fÚs)rj   rk   zNo frames read from the video.©Úaxisg�íµ ÷Æ°>)r   é   é   r   )rY   Úcv2ÚVideoCaptureÚisOpenedr0   r   r[   ÚCAP_PROP_FRAME_COUNTÚCAP_PROP_FPSÚtimerw   Úinfory   ÚnpÚlinspacer   ÚastypeÚsetÚCAP_PROP_POS_FRAMESÚreadÚcvtColorÚCOLOR_BGR2RGBÚappendÚreleaseÚstackÚ	transposer-   )rG   Ú
video_pathÚcaprj   rk   Ústrn   ÚindicesÚframesÚidxÚretÚframeÚvideo_npÚ
sample_fpss   &             r   Ú
load_videor    Ã   sÄ  € ð �W•€JØ×Ñ˜Y×'Ò'Ø •^ˆ
Ü
×
Ò
˜:Ó
&€CØ�<‰<�>Š>ÜÐ.¨z¨lÐ;Ó<Ð<Ü�s—w‘wœs×7Ñ7Ó8Ó9€LØ—‘œ×(Ñ(Ó)×0Ð0¨S€IÜ	�Š‹€BÜ
‡K�KØ
# J <¨¸|¸nÈLÐYbÐXcÐcjÔko×ktÒktÓkvÐwyÕkyÐz}Ðj~Ð~ð  	Aôô ˜CÀiÔP€GÜ�kŠk˜!˜\¨AÕ-¨wÓ7×=Ñ=Ó?×FÑFÄsÓK€GØ€FÛˆØ�‰”×'Ñ'¨Ô-Ø—X‘X“Z‰
ˆßÙÜ—’˜U¤C×$5Ñ$5Ó6ˆØ�‰�eÖñ ð ‡K�K„MßÜÐ9Ó:Ð:ä�xŠx˜ QÔ'€Hä�|Š|˜H lÓ3€HØœ3˜|¨TÓ2Õ2°YÕ>€JØÐÐr   Fc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   rG   ri   Úimage_factorr   Úreturn_video_sample_fpsÚboolr   znp.ndarray | list[Image.Image]r   )r   s   "r   r   r   í   s2   € ÷ Añ AØ	ðAØ ðAØJNðAà#ñAr   c                óV  € \        V R ,          \        4      '       Ed¶   \        V 4      w  r4VP                  w  rVrxV P	                  R\
        4      p	V P	                  R\        4      p
\        \        \        W¥,          \        ,          4      \        V	R,          4      4      pV P	                  RV4      pWË8”  d   \        P                  RV RV R24       \        WË4      pRV 9   d'   R	V 9   d    \        V R,          V R	,          VR
7      w  rÞM\        VVVV	VR7      w  rÞ. pV Fj  p\        P                   ! VR4      p\"        P$                  ! VWí3\"        P&                  R7      p\        P                   ! VR4      pVP)                  V4       Kl  	  \        P*                  ! V^ R7      P-                  \        P.                  4      pV'       d   W43# V# V P1                  4       pVP3                  RR4       VP3                  R R4       V R ,           Uu. uF  p\5        RV/VCVR7      NK  	  pp\7        \9        V4      \        4      p\9        V4      V8  d1   VP;                  VR,          .V\9        V4      ,
          ,          4       V'       d   VVP3                  RR4      3# V# u upi )r|   r*   Útotal_pixelsgÍÌÌÌÌÌð?r+   zThe given max_pixels[z] exceeds limit[z].rP   rQ   rR   rS   )Úinterpolationr   rW   NrJ   )rH   rm   r   )r‚   r   r   )r   r   r‚   éÿÿÿÿ)rT   rV   r    Úshaper[   ÚVIDEO_MIN_PIXELSÚVIDEO_TOTAL_PIXELSr-   r.   r   rs   r   rw   rx   r5   rŠ   r•   rƒ   ra   ÚINTER_CUBICr’   r”   rŒ   Úfloat32ÚcopyÚpoprg   r"   ÚlenÚextend)rG   r¢   r£   r|   rŸ   rn   rd   r(   r)   r*   r¦   r+   Úmax_pixels_supposedrP   rQ   Úresized_framesr�   Úframe_npÚresizedÚprocess_infoÚvideo_elementÚimagess   &&&                   r   Úfetch_videor¹   í   sp  € ô �#�g•,¤×$Ó$Ü& s›OÑˆØ$)§K¡KÑ!ˆ�FØ—W‘W˜\Ô+;Ó<ˆ
Ø—w‘w˜~Ô/AÓBˆÜÜÔ  ,Õ"8¼<Õ"GÓHÜ�
˜TÕ!Ó"ó
ˆ
ð "Ÿg™g l°JÓ?ÐØÔ+Ü�N‰NØ'Ð(;Ð'<Ð<LÈZÈLÐXZÐ[ôô Ð,Ó9ˆ
Ø˜sÔ" ¸#Ô'=Ü,8ØÐ$Õ%Ø�OÕ$Ø#ô-Ñ)ˆN˜Mô -9ØØØ#Ø%Ø%ô-Ñ)ˆNð ˆãˆEä—|’| E¨9Ó5ˆHä—j’jØ˜=Ð9ÌÏÉôˆGô —l’l 7¨IÓ6ˆGØ×!Ñ! 'Ö*ñ ô —’˜¨aÔ0×7Ñ7¼¿
¹
ÓCˆß"ØÐ$Ð$Øˆð —x‘x“zˆØ×Ñ˜ Ô&Ø×Ñ˜ $Ô'ð
 "% W¦ó	
ñ ".�ô Ø˜-Ð8¨<Ð8Àl÷ñ ".ð	 	ð 
ô !¤ V£¬lÓ;ˆÜˆv‹;˜Ô Ø�M‰M˜6 "�:˜,¨'´C¸³KÕ*?Õ@ÔAß"Ø˜<×+Ñ+¨E°3Ó7Ð7Ð7Øˆùò
s   ÈJ&c               ó    € V ^8„  d   QhRRRR/# )r   Úconversationsúlist[dict] | list[list[dict]]r   z
list[dict]r   )r   s   "r   r   r   1  s   € ÷ ñ Ð'Dð Èñ r   c                ó8  € . p\        V ^ ,          \        4      '       d   V .p V  Fq  pV Fh  p\        VR,          \        4      '       g   K"  VR,           F9  pRV9   g   RV9   g   RV9   g   VR,          R9   g   K(  VP                  V4       K;  	  Kj  	  Ks  	  V# )r   r\   rJ   rK   r|   rW   )rJ   rK   r|   )rT   ri   Úlistr’   )r»   Úvision_infosÚconversationÚmessagerG   s   &    r   Úextract_vision_inforÂ   1  s‘   € Ø€LÜ�- Õ"¤D×)Ò)Ø&˜ˆÛ%ˆÛ#ˆGÜ˜' )Õ,¬d×3Ô3Ø" 9×-Ð-�Cà 3œØ&¨#Ô-Ø" cœ>Ø˜v�;Ð*IÖIà$×+Ñ+¨CÖ0ó .ó $ñ &ð Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r»   r¼   Úreturn_video_kwargsr¤   r   zYtuple[list[Image.Image] | None, list[np.ndarray | list[Image.Image]] | None, dict | None]r   )r   s   "r   r   r   C  s&   € ÷ &ñ &Ø0ð&àð&ðñ&r   c                óz  € \        V 4      p. p. p. pV Fp  pR V9   g   RV9   d   VP                  \        V4      4       K-  RV9   d4   \        VRR7      w  rxVP                  V4       VP                  V4       Kg  \	        R4      h	  \        V4      ^ 8X  d   Rp\        V4      ^ 8X  d   RpV'       d   W4RV/3# W43# )rJ   rK   r|   T)r£   z0Content must include image, image_url, or video.Nrm   )rÂ   r’   rg   r¹   r0   r°   )	r»   rÄ   r¿   Úimage_inputsÚvideo_inputsÚvideo_sample_fps_listÚvision_infoÚvideo_inputÚvideo_sample_fpss	   &&       r   Úprocess_vision_inforÌ   C  sÒ   € ô ' }Ó5€Là€LØ€LØÐÛ#ˆØ�kÔ! [°KÔ%?Ø×Ñ¤¨KÓ 8Ö9Ø˜Ô#Ü,7Ø°Tô-Ñ)ˆKð "×(Ñ(Ð)9Ô:Ø×Ñ Ö,äÐOÓPÐPñ $ô ˆ<Ó˜AÔØˆÜ
ˆ<Ó˜AÔØˆßØ¨EÐ3HÐ+IÐIÐIØÐ%Ð%r   c                  ó>   € ] tR tRtR
R R lltR R ltR R ltRtR	# )ÚVideoFrameExtractorib  c               ó   € V ^8„  d   QhRR/# )r   rp   r   r   )r   s   "r   r   Ú VideoFrameExtractor.__annotate__c  s   € ÷ %ñ % 3ñ %r   c                	ó   € Wn         R # ©N©rp   )Úselfrp   s   &&r   Ú__init__ÚVideoFrameExtractor.__init__c  s   € Ø$Žr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rJ   r8   Útarget_sizer   r   r   )r   s   "r   r   rÐ   f  s$   € ÷ 6ñ 6Ø ð6Ø/2ð6à	ñ6r   c                	ól  € VP                   w  r4W48  d   Tp\        WBV,          ,          4      pMTp\        W2V,          ,          4      pVP                  WV3\        P                  P
                  4      pWR,
          ^,          pWb,
          ^,          pWr,           p	W‚,           p
VP                  WxWš34      # )r   )r@   r   ra   r   Ú
ResamplingÚLANCZOSÚcrop)rÔ   rJ   rØ   r)   r(   Ú	new_widthÚ
new_heightÚleftÚtopÚrightÚbottoms   &&&        r   Úresize_and_center_cropÚ*VideoFrameExtractor.resize_and_center_cropf  s¥   € ð Ÿ
™
‰ˆð Œ>Ø#ˆIÜ˜V°UÕ':Õ;Ó<‰Jà$ˆJÜ˜E°6Õ%9Õ:Ó;ˆIð —‘˜iÐ4´e×6FÑ6F×6NÑ6NÓOˆð Õ'¨AÕ-ˆØÕ'¨AÕ-ˆØÕ"ˆØÕ"ˆà�z‰z˜4 eÐ4Ó5Ð5r   c               ó    € V ^8„  d   QhRRRR/# )r   r–   rV   r   zList[Image.Image]r   )r   s   "r   r   rÐ     s   € ÷ ñ ¨ð Ð1Bñ r   c                	óŠ  € \         P                  ! V4      pVP                  4       '       g   \        R V 24      h\	        VP                  \         P                  4      4      p\	        VP                  \         P                  4      4      p\        \        ^ W44      4      p\        V4      V P                  8”  dP   \        P                  ! ^ \        V4      ^,
          V P                  \        R7      pV Uu. uF  quV,          NK  	  pp. pV F�  p	VP                  \         P                  V	4       VP!                  4       w  r«V
'       g   K?  \         P"                  ! V\         P$                  4      p\&        P(                  ! V4      pV P+                  VR4      pVP-                  V4       KŸ  	  VP/                  4        V# u upi )zCould not open video: )Údtypei€  )rƒ   r„   r…   r0   r   r[   r†   r‡   r¾   Úranger°   rp   rŠ   r‹   r�   rŽ   r�   r�   r‘   r   Ú	fromarrayrã   r’   r“   )rÔ   r–   r—   rj   rm   Úframe_indicesr™   Úirš   Ú	frame_idxrœ   r�   r7   s   &&           r   Úextract_framesÚ"VideoFrameExtractor.extract_frames  sT  € Ü×Ò˜zÓ*ˆØ�|‰|�~Š~ÜÐ5°j°\ÐBÓCÐCô ˜3Ÿ7™7¤3×#;Ñ#;Ó<Ó=ˆÜ�#—'‘'œ#×*Ñ*Ó+Ó,ˆô œU 1 lÓ8Ó9ˆô ˆ}Ó §¡Ô/Ü—k’k !¤S¨Ó%7¸!Õ%;¸T¿_¹_ÔTWÔXˆGÙ7>Ó?±w°!¨1×-Ð-±wˆMÐ?àˆÛ&ˆIØ�G‰G”C×+Ñ+¨YÔ7ØŸ™›‰JˆCß‰sÜŸš U¬C×,=Ñ,=Ó>�Ü!ŸOšO¨EÓ2�	Ø ×7Ñ7¸	À3ÓG�	Ø—‘˜iÖ(ñ 'ð 	�‰ŒØˆùò @s   Ã6G rÓ   N)é2   )rX   Ú
__module__Ú__qualname__Ú__firstlineno__rÕ   rã   rí   Ú__static_attributes__r   r   r   rÎ   rÎ   b  s   † ÷%õ6÷2ñ r   rÎ   c                ój   € \        V P                  R 4      ;'       g    \        V P                  R4      # )Úvideo_token_idÚvideo_token_index)ÚhasattrÚconfig)Úmodels   &r   Úis_video_modelrú   ž  s1   € Ü�5—<‘<Ð!1Ó2÷ ð ´gØ�‰Ð)ó7ð r   c               ó    € V ^8„  d   QhRRRR/# )r   r–   z	List[str]r   r¤   r   )r   s   "r   r   r   ¤  s   € ÷ ñ ˜ið ¨Dñ r   c                ó¨   a€ . ROpV  FF  o\         ;QJ d    V3R lV 4       F  '       g   K   RM	  RM! V3R lV 4       4      '       d   KE   R# 	  R# )ú.mp4c              3  ób   <"  € T F$  pSP                  4       P                  V4      x € K&  	  R # 5irÒ   )ÚlowerÚendswith)Ú.0ÚextÚpaths   & €r   Ú	<genexpr>Ú is_video_file.<locals>.<genexpr>§  s'   øé € ÐJÑ9I°#�4—:‘:“<×(Ñ(¨×-Ð-Ó9Iùs   ƒ,/TF)rý   z.aviz.mov)Úany)r–   Úvideo_extensionsr  s   & @r   Úis_video_filer  ¤  s>   ø€ Ú/ÐÛˆß‹sÔJÑ9IÓJ�s�sŠsÔJÑ9IÓJ×JÔJÚñ ñ r   c                 óŽ  € \         P                  ! R R7      p V P                  R\        RRRR7       V P                  R\        ^RJRR	7       V P                  R
\        RRR7       V P                  R\
        RRR7       V P                  RRRR7       V P                  R\        RRR7       V P                  R\
        RRR7       V P                  R\        ^dRR7       V P                  RRR R7       V P                  R!\         P                  RR"R#7       V P                  4       p\        R$VP                   24       \        VP                  4      w  r#\        VR%R4      f/   \        VR&4      '       d   \        VP                  R%R4      Vn        \        V4      '       g   \         P#                  R'4       \%        VP&                  \(        4      '       g!   \%        VP&                  \*        4      '       d-   VP&                  ^ ,          VP&                  ^,          ,          pMVP&                  p/ p\        V4      '       Edþ   \-        VP.                  4      '       d<   R(R)R*R+R,R,VP.                  ^ ,          R-VR.VP0                  /R+R/R/VP2                  /./.pM7R(R)R*. VP.                   Uu. uF	  pR+R0R0V/NK  	  upOR+R/R/VP2                  /N/.pVP4                  '       d&   VP7                  ^ R(R1R*R+R/R/VP4                  /./4       VP9                  VRRR27      p\;        VR4      w  ršpVP<                  e   V
RVP<                   p
V! V.V	V
RR3R47      p\>        P@                  ! VR5,          4      pVPC                  R6VPC                  R7R4      4      pVf   \E        R84      h\>        P@                  ! V4      p\>        P@                  ! VR9,          4      pVPC                  R:R4      e!   \>        P@                  ! VR:,          4      VR:&   VPC                  R;R4      e!   \>        P@                  ! VR;,          4      VR;&   EMê\-        VP.                  4      '       dh   \G        VP.                  4      ^8”  d   \E        R<4      h\I        VP<                  ;'       g    ^24      pVPK                  VP.                  ^ ,          4      pM$VP.                   Uu. uF  p\M        V4      NK  	  pp\O        \G        V4      4       Uu. uF  pR+R0/NK	  	  ppR(R)R*R+R/R/R=/.VOR+R/R/VP2                  /N/.pVP4                  '       d&   VP7                  ^ R(R1R*R+R/R/VP4                  /./4       VP9                  VRRR27      p\        VR>4      '       d®   \%        VP&                  \(        4      '       d   VP&                  MVP&                  VP&                  3VPP                  n)        \        VPP                  R?4      '       d   RVPP                  n*        \        VPP                  R@4      '       d   RVPP                  n+        \Y        TV Uu. uF  pVNK  	  upVRRA7      p\>        P@                  ! VR5,          4      p\>        P@                  ! VR7,          4      p\>        P@                  ! VR9,          4      pRBV9   d!   \>        P@                  ! VRB,          4      VRC&   VP[                  4        FF  w  ppVRK9  g   K  \%        V\        \*        34      '       d   K-  \>        P@                  ! V4      VV&   KH  	  \         P]                  RD4       VP.                  VR,&   WÕR5&   WåR7&   WõRE&   VP^                  VRF&   VP`                  VRG&   \c        VV3RHVRIVPd                  /VB pVPd                  '       g   \        V4       R# R# u upi u upi u upi u upi )LzVideo Description CLI)Údescriptionz--videoÚ+TzPath to the video file)rW   ÚnargsÚrequiredÚhelpz--max-pixelszMaximum number of pixels)rW   r  Údefaultr  z--max-framesNzMaximum number of frames)rW   r  r  z--fpsr}   zFrames per secondz--promptzDescribe this video.zText prompt for the model)r  r  z--systemFzSystem prompt)rW   r  r  z--temperaturegffffffæ?zTemperature for generationz--max-tokensz$Maximum number of tokens to generatez--modelz)mlx-community/Qwen2.5-VL-7B-Instruct-4bitzSelect the model to usez	--verbosezGPrint verbose output (use --no-verbose to print only the final result).)Úactionr  r  z[32mLoading model:[0m Úchat_templateÚ	tokenizerz_Warning: The model selected doesn't natively support video inputs. Performance may be degraded.ÚroleÚuserr\   rW   r|   r+   rm   ÚtextrJ   Úsystem)ÚtokenizeÚadd_generation_promptÚpt)r  r¸   ÚvideosÚpaddingÚreturn_tensorsÚ	input_idsÚpixel_values_videosÚpixel_valuesz,Please provide a valid video or image input.Úattention_maskÚvideo_grid_thwÚimage_grid_thwz-Only one video is supported for video models.zAnswer briefly.Úimage_processorÚ	do_resizeÚdo_image_splitting)r¸   ÚpromptsÚaudioÚpixel_attention_maskÚ
pixel_maskz[32mGenerating response...[0mr<   ÚtemperatureÚ
max_tokensÚpromptÚverbosei Ä  )r  r  r   r(  )3ÚargparseÚArgumentParserÚadd_argumentrV   r   ÚfloatÚBooleanOptionalActionÚ
parse_argsÚprintrù   r	   Úgetattrr÷   r  r  rú   rw   rx   rT   r+   Útupler¾   r  r|   rm   r,  r  ÚinsertÚapply_chat_templaterÌ   rp   ÚmxÚarrayr[   r0   r°   rÎ   rí   r
   rè   r#  r@   r$  r%  r   Úitemsr‰   r*  r+  r   r-  )ÚparserÚargsrù   Ú	processorr+   ÚkwargsÚmessagesrJ   r  rÆ   rÇ   rm   Úinputsr  r  r<   Úframe_extractorrš   rd   Úimage_tokensÚimgÚkeyÚvaluerc   s                           r   ÚmainrG  ¬  s‡  € Ü×$Ò$Ð1HÔI€FØ
×ÑØœ 3°Ð<Tð ô ð ×ÑØÜØØØ'ð ô ð ×ÑØœS¨$Ð5Oð ô ð ×Ñ˜¤e°SÐ?RÐÔSØ
×ÑØÐ2Ð9Tð ô ð ×Ñ˜
¬°uÀ?ÐÔSØ
×ÑØœe¨SÐ7Sð ô ð ×ÑØÜØØ3ð	 ô ð ×ÑØØ;Ø&ð ô ð
 ×ÑØÜ×-Ñ-ØØVð	 ô ð ×ÑÓ€Dä	Ð*¨4¯:©:¨,Ð
7Ô8Ü˜DŸJ™JÓ'Ñ€Eô ˆy˜/¨4Ó0Ò8¼WØ�;÷>ò >ô #*¨)×*=Ñ*=¸ÐPTÓ"Uˆ	Ôô ˜%× Ò Ü�‰Ømô	
ô �$—/‘/¤5×)Ò)¬Z¸¿¹Ì×-NÒ-NØ—_‘_ QÕ'¨$¯/©/¸!Õ*<Õ<‰
à—_‘_ˆ
à€FÜ�e×Óô ˜Ÿ™×$Ò$ð ˜FØà" GØ# T§Z¡Z°¥]Ø(¨*Ø! 4§8¡8ð	ð   ¨°·±Ð=ð ðð‰Hð" ˜FØð  ØIMÏÊÓTÉÀ˜6 7¨G°UÓ;ÉÑTð à ¨°·±Ð=ð ððˆHð �;�;ˆ;Ø�O‰OØØ˜ 9°¸ÀÈÏÉÐ/TÐ.UÐVôð
 ×,Ñ,Ø˜u¸Dð -ó 
ˆô +>¸hÈÓ*MÑ'ˆ Cà�?‰?Ò&Ø'Ð(9¨$¯/©/Ð:ˆLÙØ�ØØØØô
ˆô —H’H˜V KÕ0Ó1ˆ	Ø—z‘zØ! 6§:¡:¨n¸dÓ#Có
ˆð ÒÜÐKÓLÐLÜ—x’x Ó-ˆä�xŠx˜Ð/Õ0Ó1ˆØ�:‰:Ð&¨Ó-Ò9Ü')§x¢x°Ð7GÕ0HÓ'IˆFÐ#Ñ$Ø�:‰:Ð&¨Ó-Ò9Ü')§x¢x°Ð7GÕ0HÓ'IˆFÐ#Ñ$ùô ˜Ÿ™×$Ò$Ü�4—:‘:‹ Ô"Ü Ð!PÓQÐQä"5°d·o±o×6KÐ6KÈÓ"L�Ø(×7Ñ7¸¿
¹
À1½ÓF‘à59·Z²ZÓ@±Z¨E”j Ö'±ZˆFÐ@ô 49¼¸V»Ô3EÓFÑ3E¨a˜ Ó)Ñ3EˆÐFð ˜ØØ˜V VÐ->Ð?ðà!ðð ˜V V¨T¯[©[Ð9ððð	
ˆð �;�;ˆ;Ø�O‰OØØ˜ 9°¸ÀÈÏÉÐ/TÐ.UÐVôð
 ×,Ñ,Ø˜u¸Dð -ó 
ˆô
 �9Ð/×0Ò0ô ˜dŸo™o¬u×5Ò5ð —’à—o‘o t§¡Ð7ð ×%Ñ%Ô*ô
 �y×0Ñ0°+×>Ò>Ø6;�	×)Ñ)Ô3Ü�y×0Ñ0Ð2F×GÒGØ?D�	×)Ñ)Ô<ô .ØÙ#)Ó*¡6˜C“C¡6Ñ*ØØô	
ˆô —H’H˜V KÕ0Ó1ˆ	Ü—x’x  ~Õ 6Ó7ˆÜ�xŠx˜Ð/Õ0Ó1ˆØ! VÔ+Ü#%§8¢8¨FÐ3IÕ,JÓ#KˆF�<Ñ Ø Ÿ,™,ž.‰JˆC�Øð ö ô
 ! ¬¬d¨×4Ô4Ü Ÿhšh u›o��s“ñ )ô ‡K�KÐ7Ô8à—j‘j€Fˆ7�OØ#ˆ;ÑØ)ˆ>ÑØˆ6�NØ ×,Ñ,€Fˆ=ÑØŸ?™?€Fˆ<ÑäØØñð ðð —‘ð	ð
 ñ€Hð �<�<ˆ<ÜˆhŽñ ùò{ Uùòb Aùò GùòJ +s   Ê*^3Ó^8Ó;^=Ø<_
Ú__main__i@  i  Ä i ˆ i 0	 g    €ˆ•A)F)BÚ
__future__r   r.  r]   Úloggingr    Úosrˆ   Úior   Úpathlibr   Útypingr   rƒ   Úmlx.coreÚcorer9  ÚnumpyrŠ   rZ   ÚPILr   r   Úutilsr	   r
   r   Ú	getLoggerrX   rw   ÚsetLevelÚINFOÚ
addHandlerÚStreamHandlerr‰   ÚIMAGE_FACTORr_   r`   r/   rª   r   rs   rt   ru   rv   r   r1  Úenvironr[   r«   r   r"   r&   r5   rE   rg   ry   r    r¹   rÂ   rÌ   rÎ   rú   r  rG  r   r   r   Ú<module>r[     sd  ðÝ "ã Û Û Û Û 	Û Ý Ý Ý ã 
Ý Û Û Ý å ß AÑ Að
 
×	Ò	˜8Ó	$€Ø ‡��—‘Ô Ø × Ñ �'×'Ò'Ó)Ô *à ‡�ØUôð €Ø€
Ø€
Ø€	à Ð Ø Ð Ø€Ø	€Ø€Ø€ñ Ù	ˆ"�*‰*�.‰.Ð+Ð-CÓ
DÓEóÐ õ
+õ
/õ
0ð Ø Ø ÷õ>(ð ;G÷2õjõD' ðV $0ÐQV÷AõH÷$&÷>9ñ 9òxõòUðp ˆzÔÙ†Fñ r   