§
    ‚Štj@  ã                   ó°   — d Z ddlmZm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 )z
Processor class for Llava.
é   )Úget_image_sizeÚto_numpy_array)ÚMultiModalDataÚProcessingKwargsÚProcessorMixin)Úauto_docstringÚloggingc                   ó   — e Zd ZdddddœiZdS )ÚLlavaProcessorKwargsÚtext_kwargsF)ÚpaddingÚreturn_mm_token_type_idsÚreturn_text_replacement_offsetsN)Ú__name__Ú
__module__Ú__qualname__Ú	_defaults© ó    úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/llava/processing_llava.pyr   r      s%   € € € € € à 5ÀeÐpuÐvÐvð€I€I€Ir   r   F)Útotalc                   óN   ‡ — e Zd ZeZ	 	 	 	 	 	 	 d
ˆ fd„	Zdededefd„Z	dd	„Z
ˆ xZS )ÚLlavaProcessorNú<image>é    c                 ó  •— || _         || _        || _        t          |d¦  «        r|j        n|| _        |                     | j        d¬¦  «        d         | _        t          ¦   «                              |||¬¦  «         dS )a®  
        patch_size (`int`, *optional*):
            Patch size from the vision tower.
        vision_feature_select_strategy (`str`, *optional*):
            The feature selection strategy used to select the vision feature from the vision backbone.
            Should be same as in model's config
        image_token (`str`, *optional*, defaults to `"<image>"`):
            Special token used to denote image location.
        num_additional_image_tokens (`int`, *optional*, defaults to 0):
            Number of additional tokens added to the image embeddings, such as CLS (+1). If the backbone has no CLS or other
            extra tokens appended, no need to set this arg.
        Úimage_tokenF)Úadd_special_tokensr   )Úchat_templateN)	Ú
patch_sizeÚnum_additional_image_tokensÚvision_feature_select_strategyÚhasattrr   ÚencodeÚimage_token_idÚsuperÚ__init__)
ÚselfÚimage_processorÚ	tokenizerr    r"   r   r   r!   ÚkwargsÚ	__class__s
            €r   r'   zLlavaProcessor.__init__(   s†   ø€ ð. %ˆŒØ+FˆÔ(Ø.LˆÔ+Ý4;¸IÀ}Ñ4UÔ4UÐf˜9Ô0Ð0Ð[fˆÔØ'×.Ò.¨tÔ/?ÐTYÐ.ÑZÔZÐ[\Ô]ˆÔÝ‰Œ×Ò˜¨)À=ÐÑQÔQÐQÐQÐQr   Úimage_inputsÚ	image_idxÚreturnc                 óÊ   — |d         |         }t          t          |¦  «        ¦  «        \  }}|| j        z  || j        z  z  | j        z   }| j        dk    r|dz  }| j        |z  S )NÚpixel_valuesÚdefaulté   )r   r   r    r!   r"   r   )r(   r-   r.   r1   ÚheightÚwidthÚnum_image_tokenss          r   Úreplace_image_tokenz"LlavaProcessor.replace_image_tokenF   st   € Ø# NÔ3°IÔ>ˆÝ&¥~°lÑ'CÔ'CÑDÔD‰ˆ�Ø" d¤oÑ5¸%À4Ä?Ñ:RÑSÐVZÔVvÑvÐØÔ.°)Ò;Ð;Ø Ñ!ÐØÔÐ"2Ñ2Ð2r   c                 óÊ  — i }|�Ôt           j                             di ¦  «        }|                     |¦  «         |                     dd¦  «        p| j        j        }|d         |d         }}|| j        z  || j        z  z  }|| j        z  }| j        dk    r|dz  }|gt          |¦  «        z  }d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.
        NÚimages_kwargsÚ	crop_sizer4   r5   r2   r3   )r6   Únum_image_patchesr   )r   r   ÚgetÚupdater)   r:   r    r!   r"   Úlenr   )
r(   Úimage_sizesr+   Úvision_datar9   r:   Úresized_heightÚresized_widthr6   r;   s
             r   Ú_get_num_multimodal_tokensz)LlavaProcessor._get_num_multimodal_tokensN   s  € ð ˆØÐ"Ý0Ô:×>Ò>¸ÐPRÑSÔSˆMØ× Ò  Ñ(Ô(Ð(Ø%×)Ò)¨+°tÑ<Ô<Ð^ÀÔ@TÔ@^ˆIØ,5°hÔ,?ÀÈ7ÔAS˜MˆNà .°$´/Ñ AÀmÐW[ÔWfÑFfÑgÐØ Ô @Ñ@ÐØÔ2°iÒ?Ð?Ø  AÑ%Ð à 0Ð1µC¸Ñ4DÔ4DÑDÐØ!" ¥c¨+Ñ&6Ô&6Ñ 6ÐØ×ÒÐ4DÐ[lÐmÐmÑnÔnÐnåÐ,Ð, Ð,Ð,Ð,r   )NNNNNr   r   )N)r   r   r   r   Úvalid_processor_kwargsr'   ÚdictÚintÚstrr7   rC   Ú__classcell__)r,   s   @r   r   r   $   s�   ø€ € € € € à1Ðð ØØØ'+ØØØ$%ðRð Rð Rð Rð Rð Rð<3°ð 3Àð 3Èð 3ð 3ð 3ð 3ð-ð -ð -ð -ð -ð -ð -ð -r   r   N)Ú__doc__Úimage_utilsr   r   Úprocessing_utilsr   r   r   Úutilsr   r	   Ú
get_loggerr   Úloggerr   r   Ú__all__r   r   r   ú<module>rP      s  ððð ð :Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð
 -Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,ð 
ˆÔ	˜HÑ	%Ô	%€ðð ð ð ð Ð+°5ð ñ ô ð ð ðF-ð F-ð F-ð F-ð F-�^ñ F-ô F-ñ „ðF-ðR Ð
€€€r   