§
    ‚Štjm1  ã                   óÀ   — d dl ZddlmZ ddlmZmZmZ ddlm	Z	m
Z
mZmZ ddlmZmZ ddlmZ ddlmZ  G d	„ d
e
d¬¦  «        Ze G d„ de¦  «        ¦   «         ZdgZdS )é    Né   )ÚBatchFeature)Ú
ImageInputÚconcatenate_listÚmake_flat_list_of_images)ÚMultiModalDataÚProcessingKwargsÚProcessorMixinÚUnpack)ÚPreTokenizedInputÚ	TextInput)Úauto_docstring)Ú
VideoInputc                   ó(   — e Zd ZdddœddiddidœZd	S )
ÚInternVLProcessorKwargsÚleftF)Úpadding_sideÚreturn_mm_token_type_idsÚcrop_to_patchesTÚreturn_tensorsÚpt)Útext_kwargsÚimages_kwargsÚvideos_kwargsN)Ú__name__Ú
__module__Ú__qualname__Ú	_defaults© ó    ún/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/internvl/processing_internvl.pyr   r      sD   € € € € € ð #Ø(-ð
ð 
ð
 ˜tð
ð ˜dð
ðð €I€I€Ir    r   F)Útotalc                   óT  ‡ — e Zd Z	 	 	 	 	 ddefˆ fd„Zedee         fd„¦   «         Zdee         dee         d	ee         d
e	j
        de	j
        de	j
        fd„Ze	 	 	 ddedz  deez  ee         z  ee         z  dz  dedz  dee         def
d„¦   «         Zdd„Zed„ ¦   «         Zˆ xZS )ÚInternVLProcessorNé   Úimage_seq_lengthc                 óú   •—  t          ¦   «         j        |||fd|i|¤Ž || _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j	        | _	        |j
        | _        dS )a  
        image_seq_length (`int`, *optional*, defaults to 256):
            The number of image token to use per image patch. it should be set so that:
            image_seq_length = (config.image_size // config.patch_size) ** 2 * (config.scale_factor**2)
        Úchat_templateN)ÚsuperÚ__init__r&   Ústart_image_tokenÚend_image_tokenÚstart_image_token_idÚend_image_token_idÚcontext_image_tokenÚimage_tokenÚvideo_tokenÚcontext_image_token_idÚimage_token_id)ÚselfÚimage_processorÚ	tokenizerÚvideo_processorr&   r(   ÚkwargsÚ	__class__s          €r!   r*   zInternVLProcessor.__init__+   sŠ   ø€ ð 	�‰ŒÔ˜¨)°_ÐlÐlÐTaÐlÐekÐlÐlÐlà 0ˆÔØ!*Ô!<ˆÔØ(Ô8ˆÔØ$-Ô$BˆÔ!Ø"+Ô">ˆÔØ$Ô8ˆÔØ$Ô0ˆÔØ'Ô>ˆÔÐÐr    Úreturnc                 ó*   — | j         | j        | j        gS ©N)r3   r-   r.   )r4   s    r!   Úimage_token_idsz!InternVLProcessor.image_token_idsD   s   € àÔ# TÔ%>ÀÔ@WÐXÐXr    ÚtextÚimage_num_patchesÚvideo_num_patchesÚimage_num_patches_indicesÚvideo_num_patches_indicesÚvideo_patch_indicesc	           	      ód  ‡ ‡— d}	d}
g }g }g }|D �]}|}‰ j         |v s
‰ j        |v �rº‰ j         |v rÔ‰ j        |vs6|                     ‰ j         ¦  «        |                     ‰ j        ¦  «        k     r•|	dk    r||	dz
           nd}||	         }|                     |||…         ¦  «         |                     ‰ j         dd¦  «        }|                     ‰ j        › ‰ j         ‰ j        z  ||	         z  › ‰ j        › �¦  «         |	dz  }	nÉ||
         }||
dz            }||         }||         }|                     |||…         ¦  «         t          |||…         ¦  «        Šd 	                    ˆˆ fd„t          t          ‰¦  «        ¦  «        D ¦   «         ¦  «        }|                     |¦  «         |                     ‰ j        dd¦  «        }|
dz  }
‰ j         |v �°°‰ j        |v �°ºd|v r0|                     d¦  «        }|                     d|d¦  «        }d|v °0|                     |¦  «         �Œ|||	|
fS )z»
        Processes interleaved text with <image> and <video> placeholders, replacing them with appropriate
        image and video tokens while keeping track of the patches used.
        r   é   z<placeholder>ú
c              3   óv   •K  — | ]3}d |dz   › d‰j         › ‰j        ‰j        z  ‰|         z  › ‰j        › �V — Œ4dS )ÚFramerE   z: N)r+   r0   r&   r,   )Ú.0ÚiÚnum_patchesr4   s     €€r!   ú	<genexpr>z?InternVLProcessor._insert_media_placeholders.<locals>.<genexpr>z   s�   øè è € ð -ð -àð S  A¡ð  Sð  S¨Ô)?ð  SÀÔAQÐTXÔTiÑAiÐlwÐxyÔlzÑAzð  Sð  }Aô  }Qð  Sð  Sð-ð -ð -ð -ð -ð -r    )r0   r1   ÚindexÚappendÚreplacer+   r&   r,   ÚlistÚjoinÚrangeÚlenÚpop)r4   r>   Úimage_pixel_valuesÚvideo_pixel_valuesr?   r@   rA   rB   rC   Úimage_indexÚvideo_indexÚprocessed_textÚimage_video_patchesÚreplace_stringsÚpromptÚ
new_promptÚstart_indexÚ	end_indexÚcurrent_patch_indexÚend_patch_indexÚvideo_promptÚreplace_strrK   s   `                     @r!   Ú_insert_media_placeholdersz,InternVLProcessor._insert_media_placeholdersH   sê  øø€ ð ˆØˆØˆØ ÐØˆð ð &	.ñ &	.ˆFØˆJØÔ" jÐ0Ð0°DÔ4DÈ
Ð4RÑ4RØÔ# zÐ1Ð1ØÔ$¨JÐ6Ð6Ø!×'Ò'¨Ô(8Ñ9Ô9¸J×<LÒ<LÈTÔM]Ñ<^Ô<^Ò^Ð^ð Q\Ð^_ÒP_ÐP_Ð";¸KÈ!¹OÔ"LÐ"LÐef�KØ 9¸+Ô F�IØ'×.Ò.Ð/AÀ+ÈiÐBWÔ/XÑYÔYÐYà!+×!3Ò!3°DÔ4DÀoÐWXÑ!YÔ!Y�JØ#×*Ò*ØÔ1ð  U°4Ô3CÀdÔF[Ñ3[Ð^oÐp{Ô^|Ñ3|ð  Uð  Cô  Sð  Uð  Uñô ð ð   1Ñ$�K�Kð
 +>¸kÔ*JÐ'Ø&9¸+È¹/Ô&J�OØ";Ð<OÔ"P�KØ 9¸/Ô J�IØ'×.Ò.Ð/AÀ+ÈiÐBWÔ/XÑYÔYÐYå"&Ð'8Ð9LÈ_Ð9\Ô']Ñ"^Ô"^�KØ#'§9¢9ð -ð -ð -ð -ð -å!&¥s¨;Ñ'7Ô'7Ñ!8Ô!8ð-ñ -ô -ñ $ô $�Lð $×*Ò*¨<Ñ8Ô8Ð8Ø!+×!3Ò!3°DÔ4DÀoÐWXÑ!YÔ!Y�JØ 1Ñ$�KðA Ô" jÐ0Ñ0°DÔ4DÈ
Ð4RÑ4RðB " ZÐ/Ð/Ø-×1Ò1°!Ñ4Ô4�Ø'×/Ò/°ÀÈaÑPÔP�
ð " ZÐ/Ð/ð ×!Ò! *Ñ-Ô-Ð-Ñ-àÐ2°KÀÐLÐLr    ÚimagesÚvideosr8   c           
      ó:  — |€t          d¦  «        ‚ | j        t          fd| j        j        i|¤Ž}t          |t          t          f¦  «        s|g}g }d}t          j	        dg¦  «        }|�|| j
                             |¦  «        }t          |¦  «        } | j
        dd|i|d         ¤Ž}	|	                     d¦  «        }|	                     d¦  «        }t          j        |¦  «        }g }
d}t          j	        dg¦  «        }t          j	        dg¦  «        }|�ì|d	         } | j        dd
|i|¤Ž}|                     d¦  «        }|j        ^}}}t          j        ||¦  «        }t%          |¦  «        }t          j        |dz   t(          ¦  «        }d|d<   t          j        |¦  «        |dd…<   dg|z  }
t          j        |dz   t(          ¦  «        }d|d<   t          j        |
¦  «        |dd…<   |                     dd¦  «        }i }|€|�z|                      |||||
|||¦  «        \  }}}}|�"|t/          |¦  «        k    rt          d¦  «        ‚|�"|t/          |¦  «        k    rt          d¦  «        ‚dt1          |¦  «        i}|d                              dd¦  «        }|d                              dd¦  «        } | j        |fi |d         ¤Ž}|                      ||dg¬¦  «         |r|                      |d         ¦  «        |d<   t7          i |¥|¥|¬¦  «        S )aA  
        Returns:
            [`BatchFeature`]: A [`BatchFeature`] with the following fields:

            - **input_ids** -- List of token ids to be fed to a model. Returned when `text` is not `None`.
            - **attention_mask** -- List of indices specifying which tokens should be attended to by the model (when
              `return_attention_mask=True` or if *"attention_mask"* is in `self.model_input_names` and if `text` is not
              `None`).
            - **pixel_values** -- Pixel values to be fed to a model. Returned when `images` is not `None`.
        NzYou have to specify text.Útokenizer_init_kwargsr   re   r   rK   Úpixel_valuesr   rf   Úpixel_values_videosrE   zONumber of image placeholders in the prompt does not match the number of images.zONumber of video placeholders in the prompt does not match the number of videos.r   r   r   Úimage)Ú
modalitiesÚ	input_idsÚmm_token_type_ids)ÚdataÚtensor_typer   )Ú
ValueErrorÚ_merge_kwargsr   r6   Úinit_kwargsÚ
isinstancerP   ÚtupleÚnpÚarrayr5   Úfetch_imagesr   rT   Úcumsumr7   ÚshapeÚfullÚsumÚemptyÚintÚflattenrd   rS   r   Ú_check_special_mm_tokensÚcreate_mm_token_type_idsr   )r4   re   r>   rf   r8   Úoutput_kwargsr?   rU   rA   Úimage_inputsr@   rV   rC   rB   Úvideo_kwargsÚvideo_inputsÚ
batch_sizeÚ
num_framesÚ_Únum_frames_per_videoÚimage_videos_inputsrZ   rW   rX   r   r   Útext_inputss                              r!   Ú__call__zInternVLProcessor.__call__ˆ   s­  € ð$ ˆ<ÝÐ8Ñ9Ô9Ð9à*˜Ô*Ý#ð
ð 
à"&¤.Ô"<ð
ð ð
ð 
ˆõ ˜$¥¥u Ñ.Ô.ð 	Ø�6ˆDð ÐØ!ÐÝ$&¤H¨a¨S¡M¤MÐ!ØÐØÔ)×6Ò6°vÑ>Ô>ˆFÝ-¨fÑ5Ô5ˆFØ/˜4Ô/Ð`Ð`°vÐ`ÀÈÔA_Ð`Ð`ˆLØ ,× 0Ò 0°Ñ ?Ô ?ÐØ!-×!1Ò!1°.Ñ!AÔ!AÐÝ(*¬	Ð2CÑ(DÔ(DÐ%àÐØ!ÐÝ œh¨ s™mœmÐÝ$&¤H¨a¨S¡M¤MÐ!ØÐØ(¨Ô9ˆLØ/˜4Ô/ÐNÐN°vÐNÀÐNÐNˆLØ!-×!1Ò!1Ð2GÑ!HÔ!HÐà);Ô)AÐ&ˆJ˜
 QÝ#%¤7¨:°zÑ#BÔ#BÐ ÝÐ1Ñ2Ô2ˆJÝ"$¤(¨:¸©>½3Ñ"?Ô"?ÐØ%&Ð Ñ"Ý&(¤iÐ0DÑ&EÔ&EÐ   Ñ#Ø!"  jÑ 0ÐÝ(*¬°¸a±ÅÑ(EÔ(EÐ%Ø+,Ð% aÑ(Ý,.¬IÐ6GÑ,HÔ,HÐ% a b bÑ)Ø!3×!;Ò!;¸A¸qÑ!AÔ!AÐà ÐØÐ Ð!3ØBF×BaÒBaØØ"Ø"Ø!Ø!Ø)Ø)Ø#ñ	Cô 	CÑ?ˆDÐ% {°Kð Ð! kµS¸±[´[Ò&@Ð&@Ý Ð!rÑsÔsÐsØÐ! kµSÐ9MÑ5NÔ5NÒ&NÐ&NÝ Ð!rÑsÔsÐsð $2Õ3CÐDWÑ3XÔ3XÐ"YÐà& }Ô5×9Ò9Ð:JÈDÑQÔQˆØ#0°Ô#?×#CÒ#CÐD^Ð`dÑ#eÔ#eÐ Ø$�d”n TÐJÐJ¨]¸=Ô-IÐJÐJˆØ×%Ò% d¨KÀWÀIÐ%ÑNÔNÐNà#ð 	gØ/3×/LÒ/LÈ[ÐYdÔMeÑ/fÔ/fˆKÐ+Ñ,ÝÐ!G KÐ!GÐ3FÐ!GÐUcÐdÑdÔdÐdr    c                 óú   ‡ ‡— i }|�jt           j                             di ¦  «        Š‰                     |¦  «         ˆˆ fd„|D ¦   «         }ˆ fd„|D ¦   «         }|                     ||dœ¦  «         t	          di |¤ŽS )a»  
        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.

        Returns:
            `MultiModalData`: A `MultiModalData` object holding number of tokens per each of the provided
            input modalities, along with other useful data.
        Nr   c                 ó8   •— g | ]} ‰j         j        g |¢‰‘R Ž ‘ŒS r   )r5   Úget_number_of_image_patches)rI   Ú
image_sizer   r4   s     €€r!   ú
<listcomp>z@InternVLProcessor._get_num_multimodal_tokens.<locals>.<listcomp>ö   sE   ø€ ð !ð !ð !àð A�Ô$Ô@Ð\À*Ð\ÈmÐ\Ð\Ð\ð!ð !ð !r    c                 ó*   •— g | ]}d ‰j         |z  z   ‘ŒS )é   )r&   )rI   rK   r4   s     €r!   r‘   z@InternVLProcessor._get_num_multimodal_tokens.<locals>.<listcomp>û   s&   ø€ ÐoÐoÐoÈk  TÔ%:¸[Ñ%HÑ IÐoÐoÐor    )Únum_image_tokensÚnum_image_patchesr   )r   r   ÚgetÚupdater   )r4   Úimage_sizesr8   Úvision_datar•   r”   r   s   `     @r!   Ú_get_num_multimodal_tokensz,InternVLProcessor._get_num_multimodal_tokensä   s¼   øø€ ð ˆØÐ"Ý3Ô=×AÒAÀ/ÐSUÑVÔVˆMØ× Ò  Ñ(Ô(Ð(ð!ð !ð !ð !ð !à"-ð!ñ !ô !Ðð
  pÐoÐoÐoÐ]nÐoÑoÔoÐØ×ÒÐ4DÐ[lÐmÐmÑnÔnÐnåÐ,Ð, Ð,Ð,Ð,r    c                 ó<   — | j         j        }| j        j        }||z   S r<   )r6   Úmodel_input_namesr5   )r4   Útokenizer_input_namesÚimage_processor_input_namess      r!   rœ   z#InternVLProcessor.model_input_names   s'   € ð !%¤Ô @ÐØ&*Ô&:Ô&LÐ#Ø$Ð'BÑBÐBr    )NNNr%   N)NNNr<   )r   r   r   r~   r*   ÚpropertyrP   r=   Ústrrv   Úndarrayrd   r   r   r   r   r   r   r   r   rŒ   rš   rœ   Ú__classcell__)r9   s   @r!   r$   r$   )   sÓ  ø€ € € € € ð ØØØ #Øð?ð ?ð
 ð?ð ?ð ?ð ?ð ?ð ?ð2 ðY  c¤ð Yð Yð Yñ „XðYð>Mà�3Œið>Mð
   œ9ð>Mð   œ9ð>Mð $&¤:ð>Mð $&¤:ð>Mð  œZð>Mð >Mð >Mð >Mð@ ð %)ØaeØ$(ð	Yeð Yeà˜TÑ!ðYeð Ð+Ñ+¨d°9¬oÑ=ÀÐEVÔ@WÑWÐZ^Ñ^ðYeð ˜TÑ!ð	Yeð
 Ð0Ô1ðYeð 
ðYeð Yeð Yeñ „^ðYeðv-ð -ð -ð -ð8 ðCð Cñ „XðCð Cð Cð Cð Cr    r$   )Únumpyrv   Úimage_processing_utilsr   Úimage_utilsr   r   r   Úprocessing_utilsr   r	   r
   r   Útokenization_utils_baser   r   Úutilsr   Úvideo_utilsr   r   r$   Ú__all__r   r    r!   ú<module>r«      s*  ðð  Ð Ð Ð à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ #Ð #Ð #Ð #Ð #Ð #Ø %Ð %Ð %Ð %Ð %Ð %ðð ð ð ð Ð.°eð ñ ô ð ð ð[Cð [Cð [Cð [Cð [C˜ñ [Cô [Cñ „ð[Cð| Ð
€€€r    