+
    UV-j…"  ã                   óp   € ^ RI HtHt ^ RIt^ RIHt ^ RIHt  ! R R]4      t	R.t
^RIHt ]! R]	4       R# )	é    )ÚListÚUnionN)ÚBatchFeature)ÚProcessorMixinc                   ó˜   a a€ ] tR t^t oRtRR.tR.tRtRtRV 3R llt	RV3R lR	 llt
R
 tR tR t]R 4       t]R 4       tRtVtV ;t# )ÚGlm46VProcessorzÁ
Processor for GLM-4V that wraps an image processor and tokenizer.

Handles:
- Image preprocessing via image_processor
- Token replacement for image/video placeholders based on grid dimensions
Úimage_processorÚ	tokenizerÚchat_templateÚAutoImageProcessorÚAutoTokenizerc                óÌ  <€ W n         Wn        R V n        RV n        Ve¦   \	        VRR 4      V n        \	        VRR4      V n        \	        VRR4      V n        V P
                  f!   VP                  V P                  4      V n        \	        VRR4      V n        V P                  f!   VP                  V P                  4      V n        MRV n        RV n        \        SV `%  WVR7       R# )z	<|image|>z	<|video|>NÚimage_tokenÚvideo_tokenÚimage_token_idÚvideo_token_id)r   )
r
   r	   r   r   Úgetattrr   Úconvert_tokens_to_idsr   ÚsuperÚ__init__)Úselfr	   r
   r   ÚkwargsÚ	__class__s   &&&&,€Úp/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/glm4v/processing.pyr   ÚGlm46VProcessor.__init__   sÝ   ø€ ð #ŒØ.Ôð 'ˆÔØ&ˆÔàÒ Ü& y°-ÀÓMˆDÔÜ& y°-ÀÓMˆDÔô #*¨)Ð5EÀtÓ"LˆDÔØ×"Ñ"Ò*Ø&/×&EÑ&EÀd×FVÑFVÓ&W�Ô#ä")¨)Ð5EÀtÓ"LˆDÔØ×"Ñ"Ò*Ø&/×&EÑ&EÀd×FVÑFVÓ&W�Ô#øà"&ˆDÔØ"&ˆDÔä‰Ñ˜À=ÐÖQó    c                óL   <€ V ^8„  d   QhRS[ S[S[S[,          3,          RS[/# )é   ÚtextÚreturn)r   Ústrr   r   )ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚGlm46VProcessor.__annotate__6   s2   ø€ ÷ u
ñ u
ñ ‘C™™c��NÕ#ðu
ñ 
ñu
r   c                ó¦  € / p/ pRpRpVP                  RR4      p	VP                  RR4      p
VP                  RR4      pVe2   V P                  e$   V P                  VR7      pVP                  R4      pVeF   \        V R4      '       d4   V P                  e&   V P                  ! RR	V/VB pVP                  R
4      pVf   R.pM\        V\        4      '       g   V.pV Uu. uF  qÌNK  	  pp\        V P                  R^4      p\        V P                  R4      '       d   V P                  P                  pV^,          pVeå   ^ p\        \        V4      4       FÊ  pV P                  VV,          9   dŠ   W,          p\        VR4      '       d   VP                  4       p\        \        P                  ! V4      V,          4      pVV,          P!                  V P                  RV,          ^4      VV&   V^,          pK¡  VV,          P!                  RV P                  4      VV&   KÌ  	  Veù   ^ p\        \        V4      4       FÞ  pV P"                  VV,          9   g   K  VV,          p\        VR4      '       d   VP                  4       pV^ ,          p\        \        P                  ! V4      V,          V,          4      pRp\        V4       F  pV P                  V,          pVV,          pK!  	  VV,          P!                  V P"                  V^4      VV&   V^,          pKÝ  	  V P$                  ! V3RV	RV
/VB p\'        / VCVCVCVR7      # u upi )ab  
Process images/videos and text for the model.

Args:
    images: Single image or list of images (PIL.Image, np.ndarray, etc.)
    text: Single text or list of texts
    videos: Video inputs (optional)
    **kwargs: Additional arguments passed to image_processor and tokenizer

Returns:
    BatchFeature with:
        - input_ids: Token IDs with image/video placeholders expanded
        - attention_mask: Attention mask
        - pixel_values: Processed image/video patches
        - image_grid_thw: Grid dimensions for each image
        - video_grid_thw: Grid dimensions for each video (if videos provided)
NÚpaddingFÚreturn_token_type_idsÚreturn_tensors)ÚimagesÚimage_grid_thwÚvideo_processorÚvideosÚvideo_grid_thwÚ Ú
merge_sizeÚspatial_merge_sizeÚtolistz<|placeholder|>)ÚdataÚtensor_type© )Úpopr	   ÚgetÚhasattrr,   Ú
isinstanceÚlistr   r1   ÚrangeÚlenr   r2   ÚintÚnpÚprodÚreplacer   r
   r   )r   r*   r   r-   r   Úimage_inputsÚvideo_inputsr+   r.   r'   r(   r)   Útr0   Úmerge_lengthÚindexÚiÚgridÚnum_image_tokensÚvideo_indexÚ
num_framesÚnum_tokens_per_frameÚvideo_structureÚ	frame_idxÚframe_structureÚtext_inputss   &&&&,                     r   Ú__call__ÚGlm46VProcessor.__call__6   s?  € ð0 ˆØˆØˆØˆð —*‘*˜Y¨Ó.ˆØ &§
¡
Ð+BÀEÓ JÐØŸ™Ð$4°dÓ;ˆð Ò $×"6Ñ"6Ò"BØ×/Ñ/°vÐ/Ó>ˆLØ)×-Ñ-Ð.>Ó?ˆNð ÒÜ�tÐ.×/Ò/°D×4HÑ4HÒ4TØ#×3Ò3ÑL¸6ÐLÀVÑL�Ø!-×!1Ñ!1Ð2BÓ!C�ð Š<Ø�4‰DÜ˜D¤$×'Ò'Ø�6ˆDñ  Ó ™4�a’™4ˆÐ ô ˜T×1Ñ1°<ÀÓCˆ
Ü�4×'Ñ'Ð)=×>Ò>Ø×-Ñ-×@Ñ@ˆJØ! 1•}ˆð Ò%ØˆEÜœ3˜t›9Ö%�Ø×&Ñ&¨$¨q­'Ô1à)Õ0�DÜ˜t X×.Ò.Ø#Ÿ{™{›}˜Ü'*¬2¯7ª7°4«=¸LÕ+HÓ'IÐ$ð # 1�gŸo™oØ×(Ñ(Ø)Ð,<Õ<Øó�D˜‘Gð
 ˜Q•J’Eà˜q�'Ÿ/™/Ð*;¸T×=MÑ=MÓN��Q“ñ! &ð& Ò%ØˆKÜœ3˜t›9Ö%�Ø×&Ñ&¨$¨q­'Ö1Ø)¨+Õ6�DÜ˜t X×.Ò.Ø#Ÿ{™{›}˜à!% a¥�Jä+.ÜŸš ›¨Õ5¸ÕCó,Ð(ð
 ')�OÜ%*¨:Ö%6˜	à*.×*:Ñ*:Ð=QÕ*Q˜Ø'¨?Õ:šñ &7ð
 # 1�gŸo™o¨d×.>Ñ.>ÀÐQRÓS�D˜‘GØ 1Õ$’Kñ) &ð. —n’nØñ
àð
ð #8ð
ð ñ	
ˆô Ø@�KÐ@ <Ð@°<Ð@Ø&ô
ð 	
ùò} !s   Ã"
Mc                ó:   € V P                   P                  ! V/ VB # ©zDecode token IDs to text.)r
   Úbatch_decode©r   Úargsr   s   &*,r   rT   ÚGlm46VProcessor.batch_decode­   s   € à�~‰~×*Ò*¨DÐ;°FÑ;Ð;r   c                ó:   € V P                   P                  ! V/ VB # rS   )r
   ÚdecoderU   s   &*,r   rY   ÚGlm46VProcessor.decode±   s   € à�~‰~×$Ò$ dÐ5¨fÑ5Ð5r   c                ó:   € V P                   P                  ! V/ VB # )z(Apply chat template using the tokenizer.)r
   Úapply_chat_templaterU   s   &*,r   r\   Ú#Glm46VProcessor.apply_chat_templateµ   s   € à�~‰~×1Ò1°4ÐB¸6ÑBÐBr   c                ó  € V P                   '       d   V P                   P                  M. p\        V P                  R4      '       d   V P                  P                  M. p\	        \
        P                  W,           4      4      # )z?Return combined input names from tokenizer and image processor.Úmodel_input_names)r
   r_   r8   r	   r:   ÚdictÚfromkeys)r   Útokenizer_input_namesÚimage_processor_input_namess   &  r   r_   Ú!Glm46VProcessor.model_input_names¹   si   € ð 15··°ˆD�N‰N×,Ò,ÀBð 	ô
 �t×+Ñ+Ð-@×AÒAð × Ñ ×2Ò2àð 	$ô
 ”D—M‘MÐ"7Õ"UÓVÓWÐWr   c                ó¤  € ^ RI p^ RIHp ^ RIHpHp VP                  RR4      pVP                  ! V3RV/VB p^RIH	p	 V	! W�4       V! V4      R,          p
/ pV
P                  4       '       d.   \        V
4      ;_uu_ 4       pVP                  V4      pRRR4       VP                  ! V3RV/VB pV ! R
RVR	V/VBVB #   + '       g   i     L3; i)z*Load processor from pretrained model path.N)ÚPath)r   ÚGlm4vImageProcessorÚtrust_remote_codeT)Úload_chat_templatezprocessor_config.jsonr	   r
   r5   )ÚjsonÚpathlibrf   Útransformersr   rg   r6   Úfrom_pretrainedÚbaseri   ÚexistsÚopenÚload)ÚclsÚpretrained_model_name_or_pathr   rj   rf   r   rg   rh   r
   ri   Úproc_cfg_pathÚproc_kwargsÚfÚproc_cfgr	   s   &&,            r   rm   ÚGlm46VProcessor.from_pretrainedÆ   sú   € ó 	Ý çCà"ŸJ™JÐ':¸DÓAÐà!×1Ò1Ø)ñ
à/ð
ð ñ
ˆ	õ
 	.á˜9ÔDñ Ð:Ó;Ð>UÕUˆØˆØ×Ñ×!Ò!Ü�m×$Ô$¨ØŸ9™9 Q›<�÷ %ð .×=Ò=Ø)ñ
à/ð
ð ñ
ˆñ ñ 
Ø+ð
àð
ð ð
ð ñ	
ð 	
÷ %×$ús   ÂB?Â?C	)r	   r   r   r
   r   r   )NNN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú
attributesÚvalid_kwargsÚimage_processor_classÚtokenizer_classr   rP   rT   rY   r\   Úpropertyr_   Úclassmethodrm   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r   r#   s   @@r   r   r      s|   ù‡ € ñð $ [Ð1€JØ#Ð$€LØ0ÐØ%€O÷R÷@u
ò u
òn<ò6òCð ñ
Xó ð
Xð ñ$
ó ÷$
ð $
r   r   )Úinstall_auto_processor_patchÚglm4v)Útypingr   r   Únumpyr>   Ú%transformers.feature_extraction_utilsr   Útransformers.processing_utilsr   r   Ú__all__rn   r‡   r5   r   r   Ú<module>rŽ      s7   ðß ã Ý >Ý 8ôc
�nô c
ðL Ð
€å /á ˜W oÖ 6r   