§
    ‚ŠtjX%  ã                   ó¤   — d dl ZddlmZmZmZ ddlmZmZ  ej	        e
¦  «        Z G d„ ded¬¦  «        Ze G d	„ d
e¦  «        ¦   «         Zd
gZdS )é    Né   )ÚMultiModalDataÚProcessingKwargsÚProcessorMixin)Úauto_docstringÚloggingc                   ó$   — e Zd ZddddœddidœZdS )ÚGlm4vProcessorKwargsFT)ÚpaddingÚreturn_token_type_idsÚreturn_mm_token_type_idsÚreturn_metadata)Útext_kwargsÚvideos_kwargsN)Ú__name__Ú
__module__Ú__qualname__Ú	_defaults© ó    úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/glm4v/processing_glm4v.pyr
   r
      s9   € € € € € ð Ø%*Ø(,ð
ð 
ð
 ,¨TÐ2ðð €I€I€Ir   r
   F)Útotalc                   ó®   ‡ — e Zd ZeZdˆ fd„	Zdededefd„Z	dededefd	„Z
dd
„Z	 dd„Zeˆ fd„¦   «         Zdedeee                  fd„Zddefd„Zˆ xZS )ÚGlm4vProcessorNc                 ó  •— t          |d¦  «        sdn|j        | _        t          |d¦  «        sdn|j        | _        t          |dd ¦  «        r|j        n|                     | j        ¦  «        | _        t          |dd ¦  «        r|j        n|                     | j        ¦  «        | _        t          ¦   «                              ||||¬¦  «         |                     d¦  «        | _	        |                     d	¦  «        | _
        d S )
NÚimage_tokenz	<|image|>Úvideo_tokenz	<|video|>Úimage_token_idÚvideo_token_id)Úchat_templatez<|begin_of_video|>z<|end_of_video|>)Úhasattrr   r   Úgetattrr   Úconvert_tokens_to_idsr   ÚsuperÚ__init__Úvideo_start_idÚvideo_end_id)ÚselfÚimage_processorÚ	tokenizerÚvideo_processorr    ÚkwargsÚ	__class__s         €r   r%   zGlm4vProcessor.__init__-   s  ø€ Ý.5°iÀÑ.OÔ.OÐj˜;˜;ÐU^ÔUjˆÔÝ.5°iÀÑ.OÔ.OÐj˜;˜;ÐU^ÔUjˆÔõ �yÐ"2°DÑ9Ô9ðCˆIÔ$Ð$à×0Ò0°Ô1AÑBÔBð 	Ôõ �yÐ"2°DÑ9Ô9ðCˆIÔ$Ð$à×0Ò0°Ô1AÑBÔBð 	Ôõ
 	‰Œ×Ò˜¨)°_ÐTaÐÑbÔbÐbØ'×=Ò=Ð>RÑSÔSˆÔØ%×;Ò;Ð<NÑOÔOˆÔÐÐr   Úimage_inputsÚ	image_idxÚreturnc                 óz   — | j         j        dz  }|d         |                              ¦   «         |z  }| j        |z  S )Né   Úimage_grid_thw)r)   Ú
merge_sizeÚprodr   )r(   r.   r/   Úmerge_lengthÚnum_image_tokenss        r   Úreplace_image_tokenz"Glm4vProcessor.replace_image_token>   sC   € ØÔ+Ô6¸Ñ9ˆØ'Ð(8Ô9¸)ÔD×IÒIÑKÔKÈ|Ñ[ÐØÔÐ"2Ñ2Ð2r   Úvideo_inputsÚ	video_idxc                 óÈ  — | j         j        dz  }|d         |         d         }|d         |                              ¦   «         |z  |z  }|d         |         }d}|j        €t                               d¦  «         |j        €dn|j        |_        |j        d d d…         }g }	t          dt          |¦  «        ¦  «        D ]}
|	 	                    ||
         ¦  «         Œ|	d |…         }t          |¦  «        |k     r2| 	                    |r|d         nd¦  «         t          |¦  «        |k     °2t          |¦  «        D ]&}||         }|  
                    ||¬	¦  «        }||z  }Œ'|S )
Nr2   Úvideo_grid_thwr   Úvideo_metadataÚ a  GLM4V requires frame timestamps to construct prompts, but the `fps` of the input video could not be inferred. Probably `video_metadata` was missing from inputs and you passed pre-sampled frames. Defaulting to `fps=24`. Please provide `video_metadata` for more accurate results.é   éÿÿÿÿ)r7   )r+   r4   r5   ÚfpsÚloggerÚwarning_onceÚ
timestampsÚrangeÚlenÚappendÚreplace_frame_token_id)r(   r9   r:   r6   Ú
num_framesr7   ÚmetadataÚvideo_structurerD   Úunique_timestampsÚidxÚselected_timestampsÚ	frame_idxÚtimestamp_secÚframe_structures                  r   Úreplace_video_tokenz"Glm4vProcessor.replace_video_tokenC   s   € ØÔ+Ô6¸Ñ9ˆØ!Ð"2Ô3°IÔ>¸qÔAˆ
Ø'Ð(8Ô9¸)ÔD×IÒIÑKÔKÈ|Ñ[Ð_iÑiÐØÐ 0Ô1°)Ô<ˆØˆàŒ<ÐÝ×Òðeñô ð ð
 &œ\Ð1�r�r°x´|ˆŒØÔ(¨¨¨1¨Ô-ˆ
àÐÝ˜�C 
™OœOÑ,Ô,ð 	6ð 	6ˆCØ×$Ò$ Z°¤_Ñ5Ô5Ð5Ð5à/°°°Ô<ÐÝÐ%Ñ&Ô&¨Ò3Ð3Ø×&Ò&ÐBUÐ'\Ð':¸2Ô'>Ð'>Ð[\Ñ]Ô]Ð]õ Ð%Ñ&Ô&¨Ò3Ð3õ ˜zÑ*Ô*ð 	/ð 	/ˆIØ/°	Ô:ˆMØ"×9Ò9¸-ÐZjÐ9ÑkÔkˆOØ˜Ñ.ˆOˆOàÐr   c                 óô  ‡ ‡	‡
‡— i }|�Œt           j                             di ¦  «        Š	‰	                     |¦  «         ‰	                     dd¦  «        p‰ j        j        Š
ˆ	ˆ fd„|D ¦   «         }ˆ
fd„|D ¦   «         }|                     ||dœ¦  «         |�Wt           j                             di ¦  «        Š‰                     |¦  «         ˆ ˆfd„|D ¦   «         }ˆ
fd	„|D ¦   «         }||d
<   t          di |¤ŽS )aK  
        Computes the number of placeholder tokens needed for multimodal inputs with the given sizes.
        Args:
            image_sizes (`list[list[int]]`, *optional*):
                The input sizes formatted as (height, width) per each image.
            video_sizes (`list[list[int]]`, *optional*):
                The input sizes formatted as (num_frames, height, width) per each video.
        Returns:
            `MultiModalData`: A `MultiModalData` object holding number of tokens per each of the provided
            input modalities, along with other useful data.
        NÚimages_kwargsr4   c                 ó8   •— g | ]} ‰j         j        g |¢‰‘R Ž ‘ŒS r   )r)   Úget_number_of_image_patches)Ú.0Ú
image_sizerT   r(   s     €€r   ú
<listcomp>z=Glm4vProcessor._get_num_multimodal_tokens.<locals>.<listcomp>u   óE   ø€ ð !ð !ð !àð A�Ô$Ô@Ð\À*Ð\ÈmÐ\Ð\Ð\ð!ð !ð !r   c                 ó    •— g | ]
}|‰d z  z  ‘ŒS ©r2   r   ©rW   Únum_patchesr4   s     €r   rY   z=Glm4vProcessor._get_num_multimodal_tokens.<locals>.<listcomp>y   ó"   ø€ ÐdÐdÐdÀ; °
¸A±Ñ!=ÐdÐdÐdr   )r7   Únum_image_patchesr   c                 ó8   •— g | ]} ‰j         j        g |¢‰‘R Ž ‘ŒS r   )r+   Úget_number_of_video_patches)rW   Ú
video_sizer(   r   s     €€r   rY   z=Glm4vProcessor._get_num_multimodal_tokens.<locals>.<listcomp>   rZ   r   c                 ó    •— g | ]
}|‰d z  z  ‘ŒS r\   r   r]   s     €r   rY   z=Glm4vProcessor._get_num_multimodal_tokens.<locals>.<listcomp>ƒ   r_   r   Únum_video_tokensr   )r
   r   ÚgetÚupdater)   r4   r   )r(   Úimage_sizesÚvideo_sizesr,   Úvision_datar`   r7   Únum_video_patchesre   rT   r4   r   s   `        @@@r   Ú_get_num_multimodal_tokensz)Glm4vProcessor._get_num_multimodal_tokensb   sh  øøøø€ ð ˆØÐ"Ý0Ô:×>Ò>¸ÐPRÑSÔSˆMØ× Ò  Ñ(Ô(Ð(Ø&×*Ò*¨<¸Ñ>Ô>ÐaÀ$ÔBVÔBaˆJð!ð !ð !ð !ð !à"-ð!ñ !ô !Ðð  eÐdÐdÐdÐRcÐdÑdÔdÐØ×ÒÐ4DÐ[lÐmÐmÑnÔnÐnàÐ"Ý0Ô:×>Ò>¸ÐPRÑSÔSˆMØ× Ò  Ñ(Ô(Ð(ð!ð !ð !ð !ð !à"-ð!ñ !ô !Ðð  eÐdÐdÐdÐRcÐdÑdÔdÐØ.>ˆKÐ*Ñ+åÐ,Ð, Ð,Ð,Ð,r   TFc                 ó.   —  | j         j        |f||dœ|¤ŽS )aš  
        Post-process the output of the model to decode the text.

        Args:
            generated_outputs (`torch.Tensor` or `np.ndarray`):
                The output of the model `generate` function. The output is expected to be a tensor of shape `(batch_size, sequence_length)`
                or `(sequence_length,)`.
            skip_special_tokens (`bool`, *optional*, defaults to `True`):
                Whether or not to remove special tokens in the output. Argument passed to the tokenizer's `batch_decode` method.
            clean_up_tokenization_spaces (`bool`, *optional*, defaults to `False`):
                Whether or not to clean up the tokenization spaces. Argument passed to the tokenizer's `batch_decode` method.
            **kwargs:
                Additional arguments to be passed to the tokenizer's `batch_decode method`.

        Returns:
            `list[str]`: The decoded text.
        )Úskip_special_tokensÚclean_up_tokenization_spaces)r*   Úbatch_decode)r(   Úgenerated_outputsrn   ro   r,   s        r   Úpost_process_image_text_to_textz.Glm4vProcessor.post_process_image_text_to_textˆ   s:   € ð( +ˆtŒ~Ô*Øð
à 3Ø)Eð
ð 
ð ð	
ð 
ð 	
r   c                 ó2   •— t          ¦   «         j        dgz   S )NÚmm_token_type_ids)r$   Úmodel_input_names)r(   r-   s    €r   ru   z Glm4vProcessor.model_input_names£   s   ø€ å‰wŒwÔ(Ð,?Ð+@Ñ@Ð@r   Ú	input_idsc                 ó€  — g }|D ]¸}t          j        |¦  «        }t          j        |¦  «        }t          j        || j        k    d¬¦  «        }t          j        || j        k    d¬¦  «        }||k    }d||| j        k    |z  <   d||| j        k    | z  <   |                     |                     ¦   «         ¦  «         Œ¹|S )Nr   )Úaxisr2   é   )	ÚnpÚarrayÚ
zeros_likeÚcumsumr&   r'   r   rG   Útolist)	r(   rv   rt   ÚinputÚ	array_idsÚmm_token_typesÚstartsÚendsÚis_video_modalitys	            r   Úcreate_mm_token_type_idsz'Glm4vProcessor.create_mm_token_type_ids§   sÕ   € ð ÐØð 	>ð 	>ˆEÝœ ™œˆIÝœ]¨5Ñ1Ô1ˆNõ
 ”Y˜y¨DÔ,?Ò?ÀaÐHÑHÔHˆFÝ”9˜Y¨$Ô*;Ò;À!ÐDÑDÔDˆDØ &¨¢ÐàUVˆN˜I¨Ô)<Ò<Ð@QÑQÑRØXYˆN˜I¨Ô)<Ò<ÐBSÐASÑTÑUØ×$Ò$ ^×%:Ò%:Ñ%<Ô%<Ñ=Ô=Ð=Ð=Ø Ð r   ry   r7   c                 ó<   — d| j         |z  › dt          |¦  «        › �S )Nz<|begin_of_image|>z<|end_of_image|>)r   Úint)r(   rP   r7   s      r   rH   z%Glm4vProcessor.replace_frame_token_id¼   s+   € Øm DÔ$4Ð7GÑ$GÐmÐmÕY\Ð]jÑYkÔYkÐmÐmÐmr   )NNNN)NN)TF)ry   )r   r   r   r
   Úvalid_processor_kwargsr%   Údictr‡   Ústrr8   rR   rl   rr   Úpropertyru   Úlistr…   rH   Ú__classcell__)r-   s   @r   r   r   )   sI  ø€ € € € € à1ÐðPð Pð Pð Pð Pð Pð"3°ð 3Àð 3Èð 3ð 3ð 3ð 3ð
°ð Àð Èð ð ð ð ð>$-ð $-ð $-ð $-ðN Y^ð
ð 
ð 
ð 
ð6 ðAð Að Að Añ „XðAð!°$ð !¸4ÀÀSÄ	¼?ð !ð !ð !ð !ð*nð nÀcð nð nð nð nð nð nð nð nr   r   )Únumpyrz   Úprocessing_utilsr   r   r   Úutilsr   r   Ú
get_loggerr   rB   r
   r   Ú__all__r   r   r   ú<module>r“      sä   ðð* Ð Ð Ð à PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,ð 
ˆÔ	˜HÑ	%Ô	%€ðð ð ð ð Ð+°5ð ñ ô ð ð ðSnð Snð Snð Snð Sn�^ñ Snô Snñ „ðSnðl Ð
€€€r   