Ë
    ÛÓ^jm1  ã                   ó¬   — 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y)é    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y	)
Ú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© ó    ú{/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/internvl/processing_internvl.pyr   r      s.   „ ð #Ø(-ñ
ð
 ˜tð
ð ˜dð
ñ�Ir    r   F)Útotalc                   ó6  ‡ — 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        ‰| �  |||fd|i|¤Ž || _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _	        |j                  | _        y)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ÐTaÐlÐekÒlà 0ˆÔØ!*×!<Ñ!<ˆÔØ(×8Ñ8ˆÔØ$-×$BÑ$BˆÔ!Ø"+×">Ñ">ˆÔØ$×8Ñ8ˆÔØ$×0Ñ0ˆÔØ'×>Ñ>ˆÕr    Úreturnc                 óH   — | j                   | j                  | j                  gS ©N)r2   r,   r-   )r3   s    r!   Úimage_token_idsz!InternVLProcessor.image_token_idsD   s!   € à×#Ñ# T×%>Ñ%>À×@WÑ@WÐXÐXr    ÚtextÚimage_num_patchesÚvideo_num_patchesÚimage_num_patches_indicesÚvideo_num_patches_indicesÚvideo_patch_indicesc	           	      ó0  ‡ ‡— d}	d}
g }g }g }|D �]ÿ  }|}‰ j                   |v s‰ j                  |v �rŸ‰ j                   |v rØ‰ j                  |vs7|j                  ‰ j                   «      |j                  ‰ j                  «      k  r“|	dkD  r||	dz
     nd}||	   }|j                  ||| «       |j	                  ‰ j                   dd«      }|j                  ‰ j
                  › ‰ j                   ‰ j                  z  ||	   z  › ‰ j                  › �«       |	dz  }	n™||
   }||
dz      }||   }||   }|j                  ||| «       t        ||| «      Šdj                  ˆˆ fd„t        t        ‰«      «      D «       «      }|j                  |«       |j	                  ‰ j                  dd«      }|
dz  }
‰ j                   |v r�Œ�‰ j                  |v r�ŒŸd|v r)|j                  d«      }|j	                  d|d«      }d|v rŒ)|j                  |«       �Œ |||	|
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   óž   •K  — | ]D  }d |dz   › d‰j                   › ‰j                  ‰j                  z  ‰|   z  › ‰j                  › �–— ŒF y­w)ÚFramerD   z: N)r*   r/   r%   r+   )Ú.0ÚiÚnum_patchesr3   s     €€r!   ú	<genexpr>z?InternVLProcessor._insert_media_placeholders.<locals>.<genexpr>z   ss   øè ø€ ò -àð    A¡˜w b¨×)?Ñ)?Ð(@À×AQÑAQÐTX×TiÑTiÑAiÐlwÐxyÑlzÑAzÐ@{ð  }A÷  }Qñ  }Qð  |Rô  Sñ-ùs   ƒA
A)r/   r0   ÚindexÚappendÚreplacer*   r%   r+   ÚlistÚjoinÚrangeÚlenÚpop)r3   r=   Úimage_pixel_valuesÚvideo_pixel_valuesr>   r?   r@   rA   rB   Ú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_strrJ   s   `                     @r!   Ú_insert_media_placeholdersz,InternVLProcessor._insert_media_placeholdersH   s‡  ù€ ð ˆØˆØˆØ ÐØˆð ó &	.ˆFØˆJØ×"Ñ" jÑ0°D×4DÑ4DÈ
Ò4RØ×#Ñ# zÑ1Ø×$Ñ$¨JÑ6Ø!×'Ñ'¨×(8Ñ(8Ó9¸J×<LÑ<LÈT×M]ÑM]Ó<^Ò^ð Q\Ð^_ÒP_Ð";¸KÈ!¹OÒ"LÐef�KØ 9¸+Ñ F�IØ'×.Ñ.Ð/AÀ+ÈiÐ/XÔYà!+×!3Ñ!3°D×4DÑ4DÀoÐWXÓ!Y�JØ#×*Ñ*Ø×1Ñ1Ð2°4×3CÑ3CÀd×F[ÑF[Ñ3[Ð^oÐp{Ñ^|Ñ3|Ð2}ð  C÷  Sñ  Sð  ~Tð  Uôð   1Ñ$‘Kð
 +>¸kÑ*JÐ'Ø&9¸+È¹/Ñ&J�OØ";Ð<OÑ"P�KØ 9¸/Ñ J�IØ'×.Ñ.Ð/AÀ+ÈiÐ/XÔYä"&Ð'8Ð9LÈ_Ð']Ó"^�KØ#'§9¡9ô -ä!&¤s¨;Ó'7Ó!8ô-ó $�Lð $×*Ñ*¨<Ô8Ø!+×!3Ñ!3°D×4DÑ4DÀoÐWXÓ!Y�JØ 1Ñ$�KðA ×"Ñ" jÓ0°D×4DÑ4DÈ
Ó4RðB " ZÑ/Ø-×1Ñ1°!Ó4�Ø'×/Ñ/°ÀÈaÓP�
ð " ZÒ/ð ×!Ñ! *Ö-ðM&	.ðP Ð2°KÀÐLÐLr    ÚimagesÚvideosr7   c           
      óÂ  — |€t        d«      ‚ | j                  t        fd| j                  j                  i|¤Ž}t        |t        t        f«      s|g}g }d}t        j                  dg«      }|�t| j                  j                  |«      }t        |«      } | j                  dd|i|d   ¤Ž}	|	j                  d«      }|	j                  d«      }t        j                  |«      }g }
d}t        j                  dg«      }t        j                  dg«      }|�æ|d	   } | j                  dd
|i|¤Ž}|j                  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 |j+                  dd«      }i }|€|�`| j-                  |||||
|||«      \  }}}}|�|t/        |«      k7  rt        d«      ‚|�|t/        «      k7  rt        d«      ‚dt1        |«      i}|d   j                  dd«      }|d   j                  dd«      } | j                  |fi |d   ¤Ž}| j3                  ||dg¬«       |r| j5                  |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   rd   r   rJ   Úpixel_valuesr   re   Úpixel_values_videosrD   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   r5   Úinit_kwargsÚ
isinstancerO   ÚtupleÚnpÚarrayr4   Úfetch_imagesr   rS   Úcumsumr6   ÚshapeÚfullÚsumÚemptyÚintÚflattenrc   rR   r   Ú_check_special_mm_tokensÚcreate_mm_token_type_idsr   )r3   rd   r=   re   r7   Úoutput_kwargsr>   rT   r@   Úimage_inputsr?   rU   rB   rA   Úvideo_kwargsÚvideo_inputsÚ
batch_sizeÚ
num_framesÚ_Únum_frames_per_videoÚimage_videos_inputsrY   rV   rW   r   r   Útext_inputss                              r!   Ú__call__zInternVLProcessor.__call__ˆ   sH  € ð$ ˆ<ÜÐ8Ó9Ð9à*˜×*Ñ*Ü#ñ
à"&§.¡.×"<Ñ"<ð
ð ñ
ˆô ˜$¤¤u Ô.Ø�6ˆDð ÐØ!ÐÜ$&§H¡H¨a¨S£MÐ!ØÐØ×)Ñ)×6Ñ6°vÓ>ˆFÜ-¨fÓ5ˆFØ/˜4×/Ñ/Ñ`°vÐ`ÀÈÑA_Ñ`ˆLØ ,× 0Ñ 0°Ó ?ÐØ!-×!1Ñ!1°.Ó!AÐÜ(*¯	©	Ð2CÓ(DÐ%àÐØ!ÐÜ Ÿh™h¨ s›mÐÜ$&§H¡H¨a¨S£MÐ!ØÐØ(¨Ñ9ˆLØ/˜4×/Ñ/ÑN°vÐNÀÑNˆLØ!-×!1Ñ!1Ð2GÓ!HÐà);×)AÑ)AÐ&ˆJ˜
 QÜ#%§7¡7¨:°zÓ#BÐ ÜÐ1Ó2ˆJÜ"$§(¡(¨:¸©>¼3Ó"?ÐØ%&Ð Ñ"Ü&(§i¡iÐ0DÓ&EÐ  Ð#Ø!"  jÑ 0ÐÜ(*¯©°¸a±ÄÓ(EÐ%Ø+,Ð% aÑ(Ü,.¯I©IÐ6GÓ,HÐ% a bÐ)Ø!3×!;Ñ!;¸A¸qÓ!AÐà ÐØÐ Ð!3ØBF×BaÑBaØØ"Ø"Ø!Ø!Ø)Ø)Ø#ó	CÑ?ˆDÐ% {°Kð Ð! k´S¸³[Ò&@Ü Ð!rÓsÐsØÐ! k´SÐ9MÓ5NÒ&NÜ Ð!rÓsÐsð $2Ô3CÐDWÓ3XÐ"YÐà& }Ñ5×9Ñ9Ð:JÈDÓQˆØ#0°Ñ#?×#CÑ#CÐD^Ð`dÓ#eÐ Ø$�d—n‘n TÑJ¨]¸=Ñ-IÑJˆØ×%Ñ% d¨KÀWÀIÐ%ÔNá#Ø/3×/LÑ/LÈ[ÐYdÑMeÓ/fˆKÐ+Ñ,ÜÐ!G KÐ!GÐ3FÐ!GÐUcÔdÐdr    c                 óR  — i }|��t         j                  j                  di «      }|j                  |«       |D �cg c]   } | j                  j
                  g |¢|‘­Ž ‘Œ" }}|D �cg c]  }d| j                  |z  z   ‘Œ }}|j                  ||dœ«       t        di |¤ŽS c c}w c c}w )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.
        r   é   )Únum_image_tokensÚnum_image_patchesr   )r   r   ÚgetÚupdater4   Úget_number_of_image_patchesr%   r   )	r3   Úimage_sizesr7   Úvision_datar   Ú
image_sizer�   rJ   rŽ   s	            r!   Ú_get_num_multimodal_tokensz,InternVLProcessor._get_num_multimodal_tokensä   sÈ   € ð ˆØÐ"Ü3×=Ñ=×AÑAÀ/ÐSUÓVˆMØ× Ñ  Ô(ð #.ö!àð A�×$Ñ$×@Ñ@Ð\À*Ð\ÈmÔ\ð!Ðð !ð
 ^oÖoÈk  T×%:Ñ%:¸[Ñ%HÓ IÐoÐÐoØ×ÑÐ4DÐ[lÑmÔnäÑ, Ñ,Ð,ùò!ùò
  ps   º%BÁ%B$c                 ód   — | j                   j                  }| j                  j                  }||z   S r;   )r5   Úmodel_input_namesr4   )r3   Útokenizer_input_namesÚimage_processor_input_namess      r!   r˜   z#InternVLProcessor.model_input_names   s2   € ð !%§¡× @Ñ @ÐØ&*×&:Ñ&:×&LÑ&LÐ#Ø$Ð'BÑBÐBr    )NNNé   N)NNNr;   )r   r   r   r}   r)   ÚpropertyrO   r<   Ústrru   Úndarrayrc   r   r   r   r   r   r   r   r   r‹   r–   r˜   Ú__classcell__)r8   s   @r!   r$   r$   )   sM  ø„ ð ØØØ #Øñ?ð
 õ?ð2 ðY  c¡ò Yó ðYð>Mà�3‰ið>Mð
   ™9ð>Mð   ™9ð>Mð $&§:¡:ð>Mð $&§:¡:ð>Mð  ŸZ™Zó>Mð@ ð %)ØaeØ$(ñ	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óv-ð8 ñCó ôCr    r$   )Únumpyru   Ú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ß QÑ Qß XÓ Xß CÝ #Ý %ôÐ.°eõ ð ô[C˜ó [Có ð[Cð| Ð
�r    