§
    ‚Štj%  ã                   ó>  — 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j        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 dS )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dS )ÚPixtralProcessorKwargsF)ÚpaddingÚreturn_mm_token_type_idsÚreturn_tensorsÚpt)Útext_kwargsÚcommon_kwargsN)Ú__name__Ú
__module__Ú__qualname__Ú	_defaults© ó    úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/pixtral/processing_pixtral.pyr   r   (   s8   € € € € € ð Ø(-ð
ð 
ð
 ˜dð
ðð €I€I€Ir    r   F)ÚtotalÚreturnc                 óV   — t          | t          ¦  «        o|                      d¦  «        S )NÚhttp)Ú
isinstanceÚstrÚ
startswith)Úvals    r!   Úis_urlr*   5   s#   € Ý�c�3ÑÔÐ: C§N¢N°6Ñ$:Ô$:Ð:r    c                 ó>   — t          | ¦  «        p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é   r   ú[IMG]ú[IMG_BREAK]ú	[IMG_END]Ú
patch_sizeÚspatial_merge_sizec	                 óŽ  •— t          ¦   «                              |||¬¦  «         || _        || _        || _        |                     | j        ¦  «        | _        || _        || _        |                     | j        ¦  «        | _        |                     | j        ¦  «        | _	        |                     | j        ¦  «        | _
        dS )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__r8   r9   Ú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Ú	tokenizerr8   r9   r;   r>   rA   rB   ÚkwargsÚ	__class__s             €r!   r=   zPixtralProcessor.__init__A   sµ   ø€ õ0 	‰Œ×Ò˜¨)À=ÐÑQÔQÐQà$ˆŒØ"4ˆÔØ&ˆÔØ'×=Ò=¸dÔ>NÑOÔOˆÔØ!2ˆÔØ.ˆÔØ'×=Ò=¸dÔ>NÑOÔOˆÔØ$-×$CÒ$CÀDÔDZÑ$[Ô$[ˆÔ!Ø"+×"AÒ"AÀ$ÔBVÑ"WÔ"WˆÔÐÐr    r#   c                 ó*   — | j         | j        | j        gS r,   )r@   rC   rD   )rE   s    r!   Úimage_token_idsz PixtralProcessor.image_token_idse   s   € àÔ# TÔ%>ÀÔ@WÐXÐXr    ÚimagesÚtextrH   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¦  «        ‚|}|                     d¦  «        ��	t          |d	         ¦  «        }g }g }	|D ]í}
| j        |
v r™t          |¦  «        \  }}||z  }||z  }| j        g|z  | j        gz   g|z  }d
„ |D ¦   «         }| j        |d<   d                     |¦  «        }|	                     |¦  «         |
                     | j        dd¦  «        }
| j        |
v °™d|
v r0|	                     d¦  «        }|
                     d|d¦  «        }
d|
v °0|                     |
¦  «         Œî|d                              dd¦  «        }|d                              dd¦  «        }|d                              dd¦  «          | j        |fi |d         ¤ddi¤Ž}|                      ||dg¬¦  «         |r|                      |d         ¦  «        |d<   t/          i |¥|¥|¬¦  «        S )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_kwargsr8   r   zAInvalid input text. Please provide a string, or a list of stringsÚpixel_valuesÚimage_sizesc                 ó   — g | ]	}|D ]}|‘ŒŒ
S r   r   )Ú.0ÚsublistÚitems      r!   ú
<listcomp>z-PixtralProcessor.__call__.<locals>.<listcomp>Ÿ   s&   € Ð%]Ð%]Ð%]¨wÐU\Ð%]Ð%]ÈT dÐ%]Ð%]Ð%]Ð%]r    éÿÿÿÿÚ z<placeholder>r   r   r   r   FÚreturn_token_type_idsÚimage)Ú
modalitiesÚ	input_idsÚmm_token_type_ids)ÚdataÚtensor_type)Ú_merge_kwargsr   ÚgetattrrG   r8   r9   rF   r&   r'   ÚlistÚ	TypeErrorÚgetÚiterr>   ÚnextrA   rB   ÚjoinÚappendÚreplaceÚpopÚ_check_special_mm_tokensÚcreate_mm_token_type_idsr   )rE   rL   rM   rH   Úoutput_kwargsr8   Úimage_inputsÚprompt_stringsrS   Úreplace_stringsÚsampleÚheightÚwidthÚnum_height_tokensÚnum_width_tokensÚreplace_tokensÚreplace_strr   r   Útext_inputss                       r!   Ú__call__zPixtralProcessor.__call__i   s0  € ð$ +˜Ô*Ý"ð
ð 
å")¨$¬.¸-ÈÑ"LÔ"Lð
ð ð
ð 
ˆð ”_ tÔ'>Ñ>ˆ
àÐØ;EˆM˜/Ô*¨<Ñ8Ø/˜4Ô/°ÐYÐY¸-ÈÔ:XÐYÐYˆLˆLàˆLå�d�CÑ Ô ð 	aØ�6ˆDˆDÝ˜D¥$Ñ'Ô'ð 	aµ
¸4À¼7ÅCÑ0HÔ0Hð 	aÝÐ_Ñ`Ô`Ð`ð ˆØ×Ò˜NÑ+Ô+Ñ7å˜|¨MÔ:Ñ;Ô;ˆKØˆNØ ˆOàð .ð .�ØÔ&¨&Ð0Ð0Ý$(¨Ñ$5Ô$5‘M�F˜EØ(.°*Ñ(<Ð%Ø',°
Ñ':Ð$àÔ)Ð*Ð-=Ñ=ÀÔAWÐ@XÑXð&à)ñ&*�Nð &^Ð%]¸.Ð%]Ñ%]Ô%]�NØ)-Ô)=�N 2Ñ&Ø"$§'¢'¨.Ñ"9Ô"9�KØ#×*Ò*¨;Ñ7Ô7Ð7Ø#Ÿ^š^¨DÔ,<¸oÈqÑQÔQ�Fð Ô&¨&Ð0Ð0ð &¨Ð/Ð/Ø"1×"5Ò"5°aÑ"8Ô"8�KØ#Ÿ^š^¨O¸[È!ÑLÔL�Fð &¨Ð/Ð/ð ×%Ò% fÑ-Ô-Ð-Ð-à& }Ô5×9Ò9Ð:JÈDÑQÔQˆØ#0°Ô#?×#CÒ#CÐD^Ð`eÑ#fÔ#fÐ à�mÔ$×(Ò(Ð)@À$ÑGÔGÐGØ$�d”n ^ÐiÐi°}À]Ô7SÐiÐiÐdhÐiÐiÐiˆØ×%Ò% n°kÈwÈiÐ%ÑXÔXÐXà#ð 	gØ/3×/LÒ/LÈ[ÐYdÔMeÑ/fÔ/fˆKÐ+Ñ,ÝÐ!@ KÐ!@°<Ð!@ÈnÐ]Ñ]Ô]Ð]r    c                 ó  — i }|�út           j                             di ¦  «        }|                     |¦  «         |                     dd¦  «        p| j        j        }| j        | j        z  }g }|D ]d\  }}	t          t          j
        ||	df¦  «        |d         |d         f||f¬¦  «        \  }
}|
|z  }||z  }|                     |dz   |z  ¦  «         Œedgt          |¦  «        z  }|                     ||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.
        NrQ   Úsizer   Úlongest_edge)r}   r8   r   )Únum_image_tokensÚnum_image_patchesr   )r   r   rf   ÚupdaterF   r}   r8   r9   r   ÚnpÚzerosrj   Úlenr   )rE   rS   rH   Úvision_datarQ   r}   r8   r   rt   ru   Úresized_heightÚresized_widthrv   rw   r€   s                  r!   Ú_get_num_multimodal_tokensz+PixtralProcessor._get_num_multimodal_tokensµ   sO  € ð ˆØÐ"Ý2Ô<×@Ò@ÀÐRTÑUÔUˆMØ× Ò  Ñ(Ô(Ð(à ×$Ò$ V¨TÑ2Ô2ÐO°dÔ6JÔ6OˆDØœ¨4Ô+BÑBˆJà!ÐØ!,ð Tð T‘�˜Ý0LÝ”H˜f e¨QÐ/Ñ0Ô0Ø˜~Ô.°°^Ô0DÐEØ *¨JÐ7ð1ñ 1ô 1Ñ-� ð
 %3°jÑ$@Ð!Ø#0°JÑ#>Ð Ø ×'Ò'Ð)9¸AÑ)=ÐARÑ(RÑSÔSÐSÐSà!" ¥c¨+Ñ&6Ô&6Ñ 6ÐØ×ÒÐ4DÐ[lÐmÐmÑnÔnÐnåÐ,Ð, Ð,Ð,Ð,r    c                 óD   — | j         j        }| j        j        }||z   dgz   S )NrS   )rG   Úmodel_input_namesrF   )rE   Útokenizer_input_namesÚimage_processor_input_namess      r!   rŠ   z"PixtralProcessor.model_input_namesÙ   s,   € à $¤Ô @ÐØ&*Ô&:Ô&LÐ#Ø$Ð'BÑBÀmÀ_ÑTÐTr    )NNr4   r   Nr5   r6   r7   )NNr,   )r   r   r   Úintr=   Úpropertyrd   rK   r   r   r   r   r
   r   r   r{   rˆ   rŠ   Ú__classcell__)rI   s   @r!   r3   r3   >   sl  ø€ € € € € ð
 ØØØ"#ØØØ'Ø#ð"Xð "Xð ð	"Xð
  ð"Xð "Xð "Xð "Xð "Xð "XðH ðY  c¤ð Yð Yð Yñ „XðYð ð %)ØZ^ðI^ð I^à˜TÑ!ðI^ð Ð+Ñ+¨d°9¬oÑ=ÀÐEVÔ@WÑWðI^ð Ð/Ô0ð	I^ð
 
ðI^ð I^ð I^ñ „^ðI^ðV"-ð "-ð "-ð "-ðH ðUð Uñ „XðUð Uð Uð 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Ð 4Ð 4Ð 4Ð 4Ð 4Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð ð ð DÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ *Ð *Ð *Ð *Ð *Ð *ð ÐÑÔð GØFÐFÐFÐFÐFÐFð 
ˆÔ	˜HÑ	%Ô	%€ð	ð 	ð 	ð 	ð 	Ð-°Uð 	ñ 	ô 	ð 	ð;�4ð ;ð ;ð ;ð ;ð
0ð 0ð 0ð Ø	€Ð+Ð,Ñ,Ô,ð]Uð ]Uð ]Uð ]Uð ]U�~ñ ]Uô ]Uñ -Ô,ñ „ð]Uð@ Ð
€€€r    