Ë
    ÜÓ^j%  ã                   ó  — d Z ddlZddlmZ ddl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mZmZ dd	lmZ  e«       rd
dlmZ  ej0                  e«      Z G d„ de
d¬«      Zdefd„Zd„ Ze ed¬«       G d„ de«      «       «       ZdgZ y)z
Processor class for Pixtral.
é    Né   )ÚBatchFeature)Ú
ImageInputÚis_valid_image)ÚMultiModalDataÚProcessingKwargsÚProcessorMixinÚUnpack)ÚPreTokenizedInputÚ	TextInput)Úauto_docstringÚis_vision_availableÚlogging)Úrequiresé   )Úget_resize_output_image_sizec                   ó    — e Zd ZdddœddidœZy)ÚPixtralProcessorKwargsF)ÚpaddingÚreturn_mm_token_type_idsÚreturn_tensorsÚpt)Útext_kwargsÚcommon_kwargsN)Ú__name__Ú
__module__Ú__qualname__Ú	_defaults© ó    úy/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/pixtral/processing_pixtral.pyr   r   (   s"   „ ð Ø(-ñ
ð
 ˜dð
ñ�Ir    r   F)ÚtotalÚreturnc                 óH   — t        | t        «      xr | j                  d«      S )NÚhttp)Ú
isinstanceÚstrÚ
startswith)Úvals    r!   Úis_urlr*   5   s   € Ü�cœ3ÓÒ: C§N¡N°6Ó$:Ð:r    c                 ó2   — t        | «      xs t        | «      S ©N)r*   r   )Úelems    r!   Úis_image_or_image_urlr.   :   s   € Ü�$‹<Ò/œ>¨$Ó/Ð/r    )ÚtorchvisionÚtorch)Úbackendsc            
       óÀ   ‡ — e Zd Z	 	 	 	 	 	 	 	 ddedefˆ fd„Zedee   fd„«       Ze	 	 dde	dz  de
ez  ee
   z  ee   z  d	ee   defd
„«       Zdd„Zed„ «       Zˆ xZS )ÚPixtralProcessorNÚ
patch_sizeÚspatial_merge_sizec	                 óp  •— t         ‰
| �  |||¬«       || _        || _        || _        |j                  | j                  «      | _        || _        || _        |j                  | j                  «      | _        |j                  | j                  «      | _	        |j                  | j                  «      | _
        y)a–  
        patch_size (`int`, *optional*, defaults to 16):
            Patch size from the vision tower.
        spatial_merge_size (`int`, *optional*, defaults to 1):
            The downsampling factor for the spatial merge operation.
        image_token (`str`, *optional*, defaults to `"[IMG]"`):
            Special token used to denote image location.
        image_break_token (`str`, *optional*, defaults to `"[IMG_BREAK]"`):
            Special token used to denote the end of a line of pixels in an image.
        image_end_token (`str`, *optional*, defaults to `"[IMG_END]"`):
            Special token used to denote the end of an image input.
        )Úchat_templateN)ÚsuperÚ__init__r4   r5   Úimage_tokenÚconvert_tokens_to_idsÚimage_token_idÚimage_break_tokenÚimage_end_tokenÚimage_break_token_idÚimage_end_token_id)ÚselfÚimage_processorÚ	tokenizerr4   r5   r7   r:   r=   r>   ÚkwargsÚ	__class__s             €r!   r9   zPixtralProcessor.__init__A   s¤   ø€ ô0 	‰Ñ˜¨)À=ÐÔQà$ˆŒØ"4ˆÔØ&ˆÔØ'×=Ñ=¸d×>NÑ>NÓOˆÔØ!2ˆÔØ.ˆÔØ'×=Ñ=¸d×>NÑ>NÓOˆÔØ$-×$CÑ$CÀD×DZÑDZÓ$[ˆÔ!Ø"+×"AÑ"AÀ$×BVÑBVÓ"WˆÕr    r#   c                 óH   — | j                   | j                  | j                  gS r,   )r<   r?   r@   )rA   s    r!   Úimage_token_idsz PixtralProcessor.image_token_idse   s!   € à×#Ñ# T×%>Ñ%>À×@WÑ@WÐXÐXr    ÚimagesÚtextrD   c           	      óæ  —  | j                   t        fdt        | j                  di «      i|¤Ž}| j                  | j
                  z  }|�||d   d<    | j                  |fi |d   ¤Ž}ni }t        |t        «      r|g}n.t        |t        «      st        |d   t        «      st        d«      ‚|}|j                  d«      ��t        |d	   «      }g }g }	|D ]ý  }
| j                  |
v r¯t        |«      \  }}||z  }||z  }| j                  g|z  | j                  gz   g|z  }|D ��cg c]  }|D ]  }|‘Œ Œ }}}| j                   |d
<   dj#                  |«      }|	j%                  |«       |
j'                  | j                  dd«      }
| j                  |
v rŒ¯d|
v r)|	j)                  d«      }|
j'                  d|d«      }
d|
v rŒ)|j%                  |
«       Œÿ |d   j)                  dd«      }|d   j)                  dd«      }|d   j)                  dd«        | j                  |fi |d   ¤ddi¤Ž}| j+                  ||dg¬«       |r| j-                  |d   «      |d<   t/        i |¥|¥|¬«      S c c}}w )a?  
        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`.
        Útokenizer_init_kwargsÚinit_kwargsNÚimages_kwargsr4   r   zAInvalid input text. Please provide a string, or a list of stringsÚpixel_valuesÚimage_sizeséÿÿÿÿÚ z<placeholder>r   r   r   r   FÚreturn_token_type_idsÚimage)Ú
modalitiesÚ	input_idsÚmm_token_type_ids)ÚdataÚtensor_type)Ú_merge_kwargsr   ÚgetattrrC   r4   r5   rB   r&   r'   ÚlistÚ	TypeErrorÚgetÚiterr:   Únextr=   r>   ÚjoinÚappendÚreplaceÚpopÚ_check_special_mm_tokensÚcreate_mm_token_type_idsr   )rA   rH   rI   rD   Úoutput_kwargsr4   Úimage_inputsÚprompt_stringsrO   Úreplace_stringsÚsampleÚheightÚwidthÚnum_height_tokensÚnum_width_tokensÚreplace_tokensÚsublistÚitemÚreplace_strr   r   Útext_inputss                         r!   Ú__call__zPixtralProcessor.__call__i   sÔ  € ð$ +˜×*Ñ*Ü"ñ
ä")¨$¯.©.¸-ÈÓ"Lð
ð ñ
ˆð —_‘_ t×'>Ñ'>Ñ>ˆ
àÐØ;EˆM˜/Ñ*¨<Ñ8Ø/˜4×/Ñ/°ÑY¸-ÈÑ:XÑY‰LàˆLä�dœCÔ Ø�6‰DÜ˜D¤$Ô'´
¸4À¹7ÄCÔ0HÜÐ_Ó`Ð`ð ˆØ×Ñ˜NÓ+Ñ7ä˜|¨MÑ:Ó;ˆKØˆNØ ˆOàò .�Ø×&Ñ&¨&Ñ0Ü$(¨Ó$5‘M�F˜EØ(.°*Ñ(<Ð%Ø',°
Ñ':Ð$à×)Ñ)Ð*Ð-=Ñ=À×AWÑAWÐ@XÑXð&à)ñ&*�Nð ;I×%]¨wÐU\Ò%]ÈT¢dÐ%] dÐ%]�NÑ%]Ø)-×)=Ñ)=�N 2Ñ&Ø"$§'¡'¨.Ó"9�KØ#×*Ñ*¨;Ô7Ø#Ÿ^™^¨D×,<Ñ,<¸oÈqÓQ�Fð ×&Ñ&¨&Ò0ð &¨Ñ/Ø"1×"5Ñ"5°aÓ"8�KØ#Ÿ^™^¨O¸[È!ÓL�Fð &¨Ò/ð ×%Ñ% fÕ-ð%.ð( ' }Ñ5×9Ñ9Ð:JÈDÓQˆØ#0°Ñ#?×#CÑ#CÐD^Ð`eÓ#fÐ à�mÑ$×(Ñ(Ð)@À$ÔGØ$�d—n‘n ^Ñi°}À]Ñ7SÑiÐdhÒiˆØ×%Ñ% n°kÈwÈiÐ%ÔXá#Ø/3×/LÑ/LÈ[ÐYdÑMeÓ/fˆKÐ+Ñ,ÜÐ!@ KÐ!@°<Ð!@ÈnÔ]Ð]ùó) &^s   Ä%I-c                 ó
  — i }|�õt         j                  j                  di «      }|j                  |«       |j                  dd«      xs | j                  j
                  }| j                  | j                  z  }g }|D ]W  \  }}	t        t        j                  ||	df«      |d   |d   f||f¬«      \  }
}|
|z  }||z  }|j                  |dz   |z  «       ŒY dgt        |«      z  }|j                  ||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.
        NrM   Úsizer   Úlongest_edge)rv   r4   r   )Únum_image_tokensÚnum_image_patchesr   )r   r   r]   ÚupdaterB   rv   r4   r5   r   ÚnpÚzerosra   Úlenr   )rA   rO   rD   Úvision_datarM   rv   r4   rx   rk   rl   Úresized_heightÚresized_widthrm   rn   ry   s                  r!   Ú_get_num_multimodal_tokensz+PixtralProcessor._get_num_multimodal_tokensµ   s-  € ð ˆØÐ"Ü2×<Ñ<×@Ñ@ÀÐRTÓUˆMØ× Ñ  Ô(à ×$Ñ$ V¨TÓ2ÒO°d×6JÑ6J×6OÑ6OˆDØŸ™¨4×+BÑ+BÑBˆJà!ÐØ!,ò T‘�˜Ü0LÜ—H‘H˜f e¨QÐ/Ó0Ø˜~Ñ.°°^Ñ0DÐEØ *¨JÐ7ô1Ñ-� ð
 %3°jÑ$@Ð!Ø#0°JÑ#>Ð Ø ×'Ñ'Ð)9¸AÑ)=ÐARÑ(RÕSðTð "# ¤c¨+Ó&6Ñ 6ÐØ×ÑÐ4DÐ[lÑmÔnäÑ, Ñ,Ð,r    c                 ól   — | j                   j                  }| j                  j                  }||z   dgz   S )NrO   )rC   Úmodel_input_namesrB   )rA   Útokenizer_input_namesÚimage_processor_input_namess      r!   rƒ   z"PixtralProcessor.model_input_namesÙ   s7   € à $§¡× @Ñ @ÐØ&*×&:Ñ&:×&LÑ&LÐ#Ø$Ð'BÑBÀmÀ_ÑTÐTr    )NNé   r   Nz[IMG]z[IMG_BREAK]z	[IMG_END])NNr,   )r   r   r   Úintr9   Úpropertyr[   rG   r   r   r   r   r
   r   r   rt   r�   rƒ   Ú__classcell__)rE   s   @r!   r3   r3   >   sì   ø„ ð
 ØØØ"#ØØØ'Ø#ñ"Xð ð	"Xð
  õ"XðH ðY  c¡ò Yó ðYð ð %)ØZ^ñI^à˜TÑ!ðI^ð Ð+Ñ+¨d°9©oÑ=ÀÐEVÑ@WÑWðI^ð Ð/Ñ0ð	I^ð
 
òI^ó ðI^óV"-ðH ñUó ôUr    r3   )!Ú__doc__Únumpyr{   Úfeature_extraction_utilsr   Úimage_utilsr   r   Úprocessing_utilsr   r   r	   r
   Útokenization_utils_baser   r   Úutilsr   r   r   Úutils.import_utilsr   Úimage_processing_pixtralr   Ú
get_loggerr   Úloggerr   Úboolr*   r.   r3   Ú__all__r   r    r!   ú<module>r—      s§   ðñó å 4ß 5÷ó ÷ Dß AÑ AÝ *ñ ÔÝFð 
ˆ×	Ñ	˜HÓ	%€ô	Ð-°Uõ 	ð;�4ó ;ò
0ð Ù	Ð+Ô,ô]U�~ó ]Uó -ó ð]Uð@ Ð
�r    