Ë
    ÜÓ^jh.  ã                   óX  — 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j2                  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#y)é    N)Únn)ÚLlavaCausalLMOutputWithPastÚLlavaForConditionalGenerationÚ
LlavaModelÚLlavaModelOutputWithPastÚLlavaPreTrainedModelé   )ÚACT2FN)ÚCache)ÚBaseModelOutputWithPastÚBaseModelOutputWithPooling)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚlogging)Úcan_return_tupleé   )ÚVipLlavaConfigc                   ó   — e Zd Zy)ÚVipLlavaModelOutputWithPastN©Ú__name__Ú
__module__Ú__qualname__© ó    úx/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/vipllava/modular_vipllava.pyr   r   &   ó   „ Ør   r   c                   ó   — e Zd Zy)Ú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                 óH  •— 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¬«      | _        y )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Ñ-IÌ3Ô"O™QÔUXÐY_×YuÑYuÓUvÐÜ#%§<¡<Ø ×!5Ñ!5×!AÑ!AÑAÀv×GeÑGeô$
ˆÔ ô Ÿ	™	Ø ×!5Ñ!5×!AÑ!AÑAØ×Ñ×*Ñ*Øô
ˆŒô
 ˜&×5Ñ5Ñ6ˆŒÜŸ	™	 &×"4Ñ"4×"@Ñ"@À&×BTÑBT×B`ÑB`ÐgkÔlˆ�r   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S ©N)r1   r4   r6   r7   )r8   Úhidden_statess     r   Úforwardz#VipLlavaMultiModalProjector.forward>   sB   € Ø×0Ñ0°Ó?ˆØŸ™ mÓ4ˆØŸ™ Ó/ˆØŸ™ mÓ4ˆØÐr   )r   r   r   r   r(   r>   Ú__classcell__)r:   s   @r   r"   r"   .   s   ø„ ðm˜~õ mör   r"   c                   ó   — e Zd Zy)ÚVipLlavaPreTrainedModelNr   r   r   r   rA   rA   F   r   r   rA   c                   ó~  — 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y)ÚVipLlavaModelzWObtains image last hidden states from the vision tower and apply multimodal projection.)Úcustom_introNÚpixel_valuesr*   ÚkwargsÚreturnc                 ón  — |�|n| j                   j                  }d|d<    | j                  |fi |¤Ž}t        |t        «      r|j
                  |   dd…dd…f   }n<|D �cg c]  }|j
                  |   dd…dd…f   ‘Œ }}t        j                  |d¬«      }| j                  |«      }||_	        |S c c}w )á\  
        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   éÿÿÿÿ)Údim)
r#   r*   Úvision_towerr)   r+   r=   ÚtorchÚcatÚmulti_modal_projectorÚpooler_output)r8   rE   r*   rF   Úimage_outputsÚimage_featuresÚindexs          r   Úget_image_featuresz VipLlavaModel.get_image_featuresK   sÖ   € ð$ &;Ð%FÑ!ÈDÏKÉK×LmÑLmð 	ð *.ˆÐ%Ñ&Ø)˜×)Ñ)Øñ
àñ
ˆô Ð+¬SÔ1Ø*×8Ñ8Ð9NÑOÒPQÐSTÑSUÐPUÑV‰Nð VkÖkÈE˜m×9Ñ9¸%Ñ@ÂÀAÁBÀÓGÐkˆNÐkÜ"ŸY™Y ~¸2Ô>ˆNØ×3Ñ3°NÓCˆØ&4ˆÔ#àÐùò ls   Á B2Ú	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                  «       |«      }|�i| j	                  ||¬«      j
                  }
|
j                  |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*   )rZ   rS   )rW   rX   rY   rZ   r[   )Úlast_hidden_staterY   r=   Ú
attentionsÚimage_hidden_statesr   )r#   r*   Ú
ValueErrorÚget_input_embeddingsrU   rQ   ÚtoÚdeviceÚdtypeÚget_placeholder_maskÚmasked_scatterÚlanguage_modelr   r_   rY   r=   r`   )r8   rV   rE   rW   rX   rY   rZ   r*   r[   r\   rS   Úspecial_image_maskÚoutputsÚoutputs                 r   r>   zVipLlavaModel.forwards   sF  € ð( &;Ð%FÑ!ÈDÏKÉK×LmÑLmð 	ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø7˜D×5Ñ5Ó7¸	ÓBˆMàÐ#Ø!×4Ñ4Ø)ÐAVð 5ó ç‰mð ð ,×.Ñ.¨}×/CÑ/CÀ]×EXÑEXÓYˆNØ!%×!:Ñ!:Ø¨À~ð ";ó "Ðð *×8Ñ8Ð9KÈ^Ó\ˆMà+>¨4×+>Ñ+>ð ,
Ø)Ø%Ø+Ø'Øñ,
ð ñ,
ˆô -Ø%×7Ñ7Ø#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø2>Ð2J¡ÐPTô
ˆð ˆr   r<   )NNNNNNNN)r   r   r   r   r   rN   ÚFloatTensorr+   Úlistr   r   Útupler   rU   Ú
LongTensorÚTensorr   Úboolr   r>   r   r   r   rC   rC   J   s]  „ ØÙØnôð 9=ñ"à×'Ñ'ð"ð  # T¨#¡Y™°Ñ5ð"ð Ð+Ñ,ð	"ð
 
Ð+Ñ	+ò"óó ð"ðH Øð .2Ø15Ø.2Ø04Ø(,Ø26Ø8<Ø!%ñ5à×#Ñ# dÑ*ð5ð ×'Ñ'¨$Ñ.ð5ð Ÿ™ tÑ+ð	5ð
 ×&Ñ&¨Ñ-ð5ð  ™ð5ð ×(Ñ(¨4Ñ/ð5ð  # T¨#¡Y™°Ñ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y)Ú VipLlavaForConditionalGenerationNrE   r*   rF   rG   c                 ó@   —  | j                   j                  d||dœ|¤ŽS )rI   r^   r   )ÚmodelrU   )r8   rE   r*   rF   s       r   rU   z3VipLlavaForConditionalGeneration.get_image_features®   s0   € ð -ˆt�z‰z×,Ñ,ð 
Ø%Ð=Rñ
ØV\ñ
ð 	
r   rV   rW   rX   rY   rZ   Úlabelsr[   Úlogits_to_keepr\   c                 óÖ  — |�|n| j                   j                  } | j                  d|||||||	|dœ|¤Ž}|j                  }t	        |
t
        «      rt        |
 d«      n|
}| j                  |dd…|dd…f   «      }d}|�2| j                  ||| 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)rV   rE   rW   rX   rY   rZ   r[   r*   )Úlogitsrw   Ú
vocab_size)Úlossrz   rY   r=   r`   ra   r   )r#   r*   rv   r_   r)   r+   ÚsliceÚlm_headÚloss_functionr3   r{   r    rY   r=   r`   ra   )r8   rV   rE   rW   rX   rY   rZ   r*   rw   r[   rx   r\   rk   r=   Úslice_indicesrz   r|   s                    r   r>   z(VipLlavaForConditionalGeneration.forwardÀ   s  € ðj &;Ð%FÑ!ÈDÏKÉK×LmÑLmð 	ð 0:¨t¯z©zð 
0
ØØ%Ø)Ø%Ø+Ø'ØØ"7ñ
0
ð ñ
0
ˆð  ×1Ñ1ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ×%Ñ%¨V¸FÈtÏ{É{×OfÑOf×OqÑOqÐ%ÓrˆDä-ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø '× ;Ñ ;ô
ð 	
r   r<   )
NNNNNNNNNr   )r   r   r   r   rN   rm   r+   rn   r   r   ro   r   rU   r   rp   rq   r   rr   r    r>   r   r   r   rt   rt   ­   sˆ  „ Øð 9=ñ
à×'Ñ'ð
ð  # T¨#¡Y™°Ñ5ð
ð Ð+Ñ,ð	
ð
 
Ð+Ñ	+ò
ó ð
ð" Øð .2Ø15Ø.2Ø04Ø(,Ø26Ø8<Ø*.Ø!%Ø-.ñR
à×#Ñ# dÑ*ðR
ð ×'Ñ'¨$Ñ.ðR
ð Ÿ™ tÑ+ð	R
ð
 ×&Ñ&¨Ñ-ðR
ð  ™ðR
ð ×(Ñ(¨4Ñ/ðR
ð  # T¨#¡Y™°Ñ5ðR
ð × Ñ  4Ñ'ðR
ð ˜$‘;ðR
ð ˜eŸl™lÑ*ðR
ð Ð.Ñ/ðR
ð 
Ð/Ñ	/òR
ó ó ñR
r   rt   )rC   rt   rA   )$rN   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   rt   Ú__all__r   r   r   ú<module>r�      s£   ðó Ý ÷õ õ "Ý  ß SÝ &ß @Ñ @Ý -Ý 2ð 
ˆ×	Ñ	˜HÓ	%€ô	Ð":ô 	ô	Ð%@ô 	ô "§)¡)ô ô0	Ð2ô 	ô`�Jô `ôFg
Ð'Dô g
òT [�r   