§
    ‚Štjh.  ã                   óp  — d dl Z d dl mZ d dlmZmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZ  ej        e¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ dej        ¦  «        Z G d„ de¦  «        Z  G d„ de¦  «        Z! G d„ de¦  «        Z"g d¢Z#dS )é    N)Únn)ÚLlavaCausalLMOutputWithPastÚLlavaForConditionalGenerationÚ
LlavaModelÚLlavaModelOutputWithPastÚLlavaPreTrainedModelé   )ÚACT2FN)ÚCache)ÚBaseModelOutputWithPastÚBaseModelOutputWithPooling)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚlogging)Úcan_return_tupleé   )ÚVipLlavaConfigc                   ó   — e Zd ZdS )ÚVipLlavaModelOutputWithPastN©Ú__name__Ú
__module__Ú__qualname__© ó    úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/vipllava/modular_vipllava.pyr   r   &   ó   € € € € € Ø€Dr   r   c                   ó   — e Zd ZdS )ÚVipLlavaCausalLMOutputWithPastNr   r   r   r   r    r    *   r   r   r    c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚVipLlavaMultiModalProjectorÚconfigc                 óö  •— t          ¦   «                              ¦   «          t          |j        t          ¦  «        rdnt          |j        ¦  «        }t          j        ||j        j	        z  |j
        ¬¦  «        | _        t          j        ||j        j	        z  |j        j	        d¬¦  «        | _        t          |j                 | _        t          j        |j        j	        |j        j	        d¬¦  «        | _        d S )Nr   )ÚepsT)Úbias)ÚsuperÚ__init__Ú
isinstanceÚvision_feature_layersÚintÚlenr   Ú	LayerNormÚvision_configÚhidden_sizeÚprojector_layernorm_epsÚprojector_layernormÚLinearÚtext_configÚlinear_1r
   Úprojector_hidden_actÚactÚlinear_2)Úselfr#   Únum_feature_layersÚ	__class__s      €r   r(   z$VipLlavaMultiModalProjector.__init__/   sÜ   ø€ Ý‰Œ×ÒÑÔÐÝ",¨VÔ-IÍ3Ñ"OÔ"OÐv˜Q˜QÕUXÐY_ÔYuÑUvÔUvÐÝ#%¤<Ø Ô!5Ô!AÑAÀvÔGeð$
ñ $
ô $
ˆÔ õ œ	Ø Ô!5Ô!AÑAØÔÔ*Øð
ñ 
ô 
ˆŒõ
 ˜&Ô5Ô6ˆŒÝœ	 &Ô"4Ô"@À&ÔBTÔB`ÐgkÐlÑlÔlˆŒˆˆr   c                 ó®   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|S ©N)r1   r4   r6   r7   )r8   Úhidden_statess     r   Úforwardz#VipLlavaMultiModalProjector.forward>   sN   € Ø×0Ò0°Ñ?Ô?ˆØŸš mÑ4Ô4ˆØŸš Ñ/Ô/ˆØŸš mÑ4Ô4ˆØÐr   )r   r   r   r   r(   r>   Ú__classcell__)r:   s   @r   r"   r"   .   sZ   ø€ € € € € ðm˜~ð mð mð mð mð mð mðð ð ð ð ð ð r   r"   c                   ó   — e Zd ZdS )ÚVipLlavaPreTrainedModelNr   r   r   r   rA   rA   F   r   r   rA   c                   óz  — e Zd Ze ed¬¦  «        	 ddej        deee         z  dz  de	e
         deez  fd„¦   «         ¦   «         Zee	 	 	 	 	 	 	 	 dd	ej        dz  dej        dz  d
ej        dz  dej        dz  dedz  dej        dz  deee         z  dz  dedz  de	e
         deez  fd„¦   «         ¦   «         ZdS )ÚVipLlavaModelzWObtains image last hidden states from the vision tower and apply multimodal projection.)Úcustom_introNÚpixel_valuesr*   ÚkwargsÚreturnc                 ó,  ‡— |�|n| j         j        }d|d<    | j        |fi |¤ŽŠt          |t          ¦  «        r‰j        |         dd…dd…f         }n$ˆfd„|D ¦   «         }t          j        |d¬¦  «        }|                      |¦  «        }|‰_	        ‰S )á\  
        pixel_values (`torch.FloatTensor]` of shape `(batch_size, channels, height, width)`):
            The tensors corresponding to the input images.
        vision_feature_layers (`Union[int, list[int]]`, *optional*):
            The vision feature layer, or the list of indexes of the layers to select
            the vision feature.
        NTÚoutput_hidden_statesr   c                 óB   •— g | ]}‰j         |         d d …dd …f         ‘ŒS )Nr   )r=   )Ú.0ÚindexÚimage_outputss     €r   ú
<listcomp>z4VipLlavaModel.get_image_features.<locals>.<listcomp>l   s2   ø€ ÐkÐkÐkÈE˜mÔ9¸%Ô@ÀÀÀÀAÀBÀBÀÔGÐkÐkÐkr   éÿÿÿÿ)Údim)
r#   r*   Úvision_towerr)   r+   r=   ÚtorchÚcatÚmulti_modal_projectorÚpooler_output)r8   rE   r*   rF   Úimage_featuresrN   s        @r   Úget_image_featuresz VipLlavaModel.get_image_featuresK   sÝ   ø€ ð$ &;Ð%FÐ!Ð!ÈDÌKÔLmð 	ð *.ˆÐ%Ñ&Ø)˜Ô)Øð
ð 
àð
ð 
ˆõ Ð+­SÑ1Ô1ð 	?Ø*Ô8Ð9NÔOÐPQÐPQÐPQÐSTÐSUÐSUÐPUÔVˆNˆNð lÐkÐkÐkÐUjÐkÑkÔkˆNÝ"œY ~¸2Ð>Ñ>Ô>ˆNØ×3Ò3°NÑCÔCˆØ&4ˆÔ#àÐr   Ú	input_idsÚattention_maskÚposition_idsÚpast_key_valuesÚinputs_embedsÚ	use_cacheÚ	lm_kwargsc	           	      óê  — |�|n| j         j        }|du |duz  rt          d¦  «        ‚|€ |                      ¦   «         |¦  «        }|�j|                      ||¬¦  «        j        }
|
                     |j        |j        ¦  «        }
|  	                    |||
¬¦  «        }| 
                    ||
¦  «        } | j        d|||||dœ|	¤Ž}t          |j        |j        |j        |j        |�|
nd¬¦  «        }|S )zÃ
        vision_feature_layers (`Union[int, list[int]]`, *optional*):
            The vision feature layer, or the list of indexes of the layers to select
            the vision feature.
        Nz:You must specify exactly one of input_ids or inputs_embeds©rE   r*   )r]   rW   )rZ   r[   r\   r]   r^   )Úlast_hidden_stater\   r=   Ú
attentionsÚimage_hidden_statesr   )r#   r*   Ú
ValueErrorÚget_input_embeddingsrX   rV   ÚtoÚdeviceÚdtypeÚget_placeholder_maskÚmasked_scatterÚlanguage_modelr   rb   r\   r=   rc   )r8   rY   rE   rZ   r[   r\   r]   r*   r^   r_   rW   Úspecial_image_maskÚoutputsÚoutputs                 r   r>   zVipLlavaModel.forwards   sb  € ð( &;Ð%FÐ!Ð!ÈDÌKÔLmð 	ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø7˜D×5Ò5Ñ7Ô7¸	ÑBÔBˆMàÐ#Ø!×4Ò4Ø)ÐAVð 5ñ ô äð ð ,×.Ò.¨}Ô/CÀ]ÔEXÑYÔYˆNØ!%×!:Ò!:Ø¨À~ð ";ñ "ô "Ðð *×8Ò8Ð9KÈ^Ñ\Ô\ˆMà+>¨4Ô+>ð ,
Ø)Ø%Ø+Ø'Øð,
ð ,
ð ð,
ð ,
ˆõ -Ø%Ô7Ø#Ô3Ø!Ô/ØÔ)Ø2>Ð2J  ÐPTð
ñ 
ô 
ˆð ˆr   r<   )NNNNNNNN)r   r   r   r   r   rS   ÚFloatTensorr+   Úlistr   r   Útupler   rX   Ú
LongTensorÚTensorr   Úboolr   r>   r   r   r   rC   rC   J   s•  € € € € € ØØ€^Ønðñ ô ð 9=ð"ð "àÔ'ð"ð  # T¨#¤Y™°Ñ5ð"ð Ð+Ô,ð	"ð
 
Ð+Ñ	+ð"ð "ð "ñô ñ Ôð"ðH Øð .2Ø15Ø.2Ø04Ø(,Ø26Ø8<Ø!%ð5ð 5àÔ# dÑ*ð5ð Ô'¨$Ñ.ð5ð œ tÑ+ð	5ð
 Ô&¨Ñ-ð5ð  ™ð5ð Ô(¨4Ñ/ð5ð  # T¨#¤Y™°Ñ5ð5ð ˜$‘;ð5ð Ð.Ô/ð5ð 
Ð,Ñ	,ð5ð 5ð 5ñ „^ñ Ôð5ð 5ð 5r   rC   c                   ó‚  — e Zd Ze	 ddej        deee         z  dz  dee	         de
ez  fd„¦   «         Zee	 	 	 	 	 	 	 	 	 	 ddej        dz  dej        dz  d	ej        dz  d
ej        dz  dedz  dej        dz  deee         z  dz  dej        dz  dedz  deej        z  dee	         de
ez  fd„¦   «         ¦   «         ZdS )Ú VipLlavaForConditionalGenerationNrE   r*   rF   rG   c                 ó,   —  | j         j        d||dœ|¤ŽS )rI   ra   r   )ÚmodelrX   )r8   rE   r*   rF   s       r   rX   z3VipLlavaForConditionalGeneration.get_image_features®   s5   € ð -ˆtŒzÔ,ð 
Ø%Ð=Rð
ð 
ØV\ð
ð 
ð 	
r   r   rY   rZ   r[   r\   r]   Úlabelsr^   Úlogits_to_keepr_   c                 ó˜  — |�|n| j         j        } | j        d|||||||	|dœ|¤Ž}|j        }t	          |
t
          ¦  «        rt          |
 d¦  «        n|
}|                      |dd…|dd…f         ¦  «        }d}|�'|                      ||| j         j	        j
        ¬¦  «        }t          |||j        |j        |j        |j        ¬¦  «        S )aó  
        vision_feature_layers (`Union[int, list[int]]`, *optional*):
            The vision feature layer, or the list of indexes of the layers to select
            the vision feature.
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.

        Example:

        ```python
        >>> import torch
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import AutoProcessor, VipLlavaForConditionalGeneration

        >>> model = VipLlavaForConditionalGeneration.from_pretrained("llava-hf/vip-llava-7b-hf", device_map="auto", dtype=torch.float16)
        >>> processor = AutoProcessor.from_pretrained("llava-hf/vip-llava-7b-hf")

        >>> prompt = "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions.###Human: <image>\n{}###Assistant:"
        >>> question = "Can you please describe this image?"
        >>> prompt = prompt.format(question)
        >>> url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/compel-neg.png"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> inputs = processor(text=text, images=image, return_tensors="pt").to(0, torch.float16)

        >>> # Generate
        >>> generate_ids = model.generate(**inputs, max_new_tokens=20)
        >>> processor.decode(generate_ids[0][len(inputs["input_ids"][0]):], skip_special_tokens=True)
        The image features a brown and white cat sitting on a green surface, with a red ball in its
        ```N)rY   rE   rZ   r[   r\   r]   r^   r*   )Úlogitsrz   Ú
vocab_size)Úlossr}   r\   r=   rc   rd   r   )r#   r*   ry   rb   r)   r+   ÚsliceÚlm_headÚloss_functionr3   r~   r    r\   r=   rc   rd   )r8   rY   rE   rZ   r[   r\   r]   r*   rz   r^   r{   r_   rn   r=   Úslice_indicesr}   r   s                    r   r>   z(VipLlavaForConditionalGeneration.forwardÀ   s  € ðj &;Ð%FÐ!Ð!ÈDÌKÔLmð 	ð 0:¨t¬zð 
0
ØØ%Ø)Ø%Ø+Ø'ØØ"7ð
0
ð 
0
ð ð
0
ð 
0
ˆð  Ô1ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ×%Ò%¨V¸FÈtÌ{ÔOfÔOqÐ%ÑrÔrˆDå-ØØØ#Ô3Ø!Ô/ØÔ)Ø 'Ô ;ð
ñ 
ô 
ð 	
r   r<   )
NNNNNNNNNr   )r   r   r   r   rS   rp   r+   rq   r   r   rr   r   rX   r   rs   rt   r   ru   r    r>   r   r   r   rw   rw   ­   s®  € € € € € Øð 9=ð
ð 
àÔ'ð
ð  # T¨#¤Y™°Ñ5ð
ð Ð+Ô,ð	
ð
 
Ð+Ñ	+ð
ð 
ð 
ñ „^ð
ð" Øð .2Ø15Ø.2Ø04Ø(,Ø26Ø8<Ø*.Ø!%Ø-.ðR
ð R
àÔ# dÑ*ðR
ð Ô'¨$Ñ.ðR
ð œ tÑ+ð	R
ð
 Ô&¨Ñ-ðR
ð  ™ðR
ð Ô(¨4Ñ/ðR
ð  # T¨#¤Y™°Ñ5ðR
ð Ô  4Ñ'ðR
ð ˜$‘;ðR
ð ˜eœlÑ*ðR
ð Ð.Ô/ðR
ð 
Ð/Ñ	/ðR
ð R
ð R
ñ „^ñ ÔðR
ð R
ð R
r   rw   )rC   rw   rA   )$rS   r   Ú(transformers.models.llava.modeling_llavar   r   r   r   r   Úactivationsr
   Úcache_utilsr   Úmodeling_outputsr   r   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   Úconfiguration_vipllavar   Ú
get_loggerr   Úloggerr   r    ÚModuler"   rA   rC   rw   Ú__all__r   r   r   ú<module>r�      s4  ðð €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð "Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  Ø SÐ SÐ SÐ SÐ SÐ SÐ SÐ SØ &Ð &Ð &Ð &Ð &Ð &Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø -Ð -Ð -Ð -Ð -Ð -Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð 
ˆÔ	˜HÑ	%Ô	%€ð	ð 	ð 	ð 	ð 	Ð":ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð%@ñ 	ô 	ð 	ðð ð ð ð  "¤)ñ ô ð ð0	ð 	ð 	ð 	ð 	Ð2ñ 	ô 	ð 	ð`ð `ð `ð `ð `�Jñ `ô `ð `ðFg
ð g
ð g
ð g
ð g
Ð'Dñ g
ô g
ð g
ðT [Ð
ZÐ
Z€€€r   