Ë
    ÜÓ^j@  ã                   ó    — 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y)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y)ÚLlavaProcessorKwargsÚtext_kwargsF)ÚpaddingÚreturn_mm_token_type_idsÚreturn_text_replacement_offsetsN)Ú__name__Ú
__module__Ú__qualname__Ú	_defaults© ó    úu/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/llava/processing_llava.pyr   r      s   „ à 5ÀeÐpuÑvð�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 )	ÚLlavaProcessorc                 óÜ   •— || _         || _        || _        t        |d«      r|j                  n|| _        |j                  | j                  d¬«      d   | _        t        ‰	| �!  |||¬«       y)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_tokensé    )Ú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__(   so   ø€ ð. %ˆŒØ+FˆÔ(Ø.LˆÔ+Ü4;¸IÀ}Ô4U˜9×0Ò0Ð[fˆÔØ'×.Ñ.¨t×/?Ñ/?ÐTYÐ.ÓZÐ[\Ñ]ˆÔÜ‰Ñ˜¨)À=ÐÕ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-   r0   ÚheightÚwidthÚnum_image_tokenss          r   Úreplace_image_tokenz"LlavaProcessor.replace_image_tokenF   sx   € Ø# NÑ3°IÑ>ˆÜ&¤~°lÓ'CÓD‰ˆ�Ø" d§o¡oÑ5¸%À4Ç?Á?Ñ:RÑSÐVZ×VvÑVvÑvÐØ×.Ñ.°)Ò;Ø Ñ!ÐØ×ÑÐ"2Ñ2Ð2r   c                 óÒ  — i }|�Ùt         j                  j                  di «      }|j                  |«       |j                  dd«      xs | j                  j
                  }|d   |d   }}|| j                  z  || j                  z  z  }|| j                  z  }| j                  dk(  r|dz  }|gt        |«      z  }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.
        NÚimages_kwargsÚ	crop_sizer3   r4   r1   r2   )r5   Únum_image_patchesr   )r   r   ÚgetÚupdater(   r9   r   r    r!   Úlenr   )
r'   Úimage_sizesr*   Úvision_datar8   r9   Úresized_heightÚresized_widthr5   r:   s
             r   Ú_get_num_multimodal_tokensz)LlavaProcessor._get_num_multimodal_tokensN   sþ   € ð ˆØÐ"Ü0×:Ñ:×>Ñ>¸ÐPRÓSˆMØ× Ñ  Ô(Ø%×)Ñ)¨+°tÓ<Ò^À×@TÑ@T×@^Ñ@^ˆIØ,5°hÑ,?ÀÈ7ÑAS˜MˆNà .°$·/±/Ñ AÀmÐW[×WfÑWfÑFfÑgÐØ × @Ñ @Ñ@ÐØ×2Ñ2°iÒ?Ø  AÑ%Ð à 0Ð1´C¸Ó4DÑDÐØ!" ¤c¨+Ó&6Ñ 6ÐØ×ÑÐ4DÐ[lÑmÔnäÑ, Ñ,Ð,r   )NNNNNz<image>r   )N)r   r   r   r   Úvalid_processor_kwargsr&   ÚdictÚintÚstrr6   rB   Ú__classcell__)r+   s   @r   r   r   $   sE   ø„ à1Ðð ØØØ'+ØØØ$%õRð<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>rO      sj   ðñ÷ :÷ñ ÷
 -ð 
ˆ×	Ñ	˜HÓ	%€ôÐ+°5õ ð ôF-�^ó F-ó ðF-ðR Ð
�r   