Ë
    ÛÓ^j+‘  ã                   óz  — d dl Zd dl mZ d dlmZ d dlZd dlmZ ddlm	Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZmZ ddlmZmZ ddlmZ ddlmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z,m-Z-  ed«       G d„ dej\                  «      «       Z/	 dFdej\                  dej`                  dej`                  dej`                  dej`                  dz  de1de1e2z  fd„Z3 G d „ d!ej\                  «      Z4 e!d"¬#«      e G d$„ d%e«      «       «       Z5 G d&„ d'ej\                  «      Z6 G d(„ d)ej\                  «      Z7 G d*„ d+ej\                  «      Z8ejr                  e/d,œZ: G d-„ d.e«      Z; G d/„ d0ej\                  «      Z<e! G d1„ d2e«      «       Z=e! G d3„ d4e=«      «       Z>e! G d5„ d6e«      «       Z? G d7„ d8ej\                  «      Z@ e!d9¬#«      e G d:„ d;e«      «       «       ZA e!d<¬#«       G d=„ d>e?«      «       ZB e!d?¬#«      e G d@„ dAe«      «       «       ZC e!dB¬#«       G dC„ dDe?e«      «       ZDg dE¢ZEy)Gé    N)ÚCallable)Ú	dataclassé   )Úinitialization)ÚACT2FN)ÚCache)ÚGenerationMixin)Úuse_kernel_forward_from_hub)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPastÚBaseModelOutputWithPooling)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚtorch_compilable_checkÚ	torch_int)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )Ú	AutoModelé   )ÚInternVLConfigÚInternVLVisionConfigÚRMSNormc                   óh   ‡ — e Zd Zddeddfˆ fd„Zdej                  dej                  fd„Zd„ Zˆ xZ	S )	ÚInternVLVisionRMSNormÚepsÚreturnNc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)zD
        InternVLVisionRMSNorm is equivalent to T5LayerNorm
        N)ÚsuperÚ__init__ÚnnÚ	ParameterÚtorchÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizer"   Ú	__class__s      €úy/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/internvl/modeling_internvl.pyr&   zInternVLVisionRMSNorm.__init__/   s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕó    Úhidden_statesc                 ó"  — |j                   }|j                  t        j                  «      }|j	                  d«      j                  dd¬«      }|t        j                  || j                  z   «      z  }| j                  |j                  |«      z  S )Nr   éÿÿÿÿT)Úkeepdim)	ÚdtypeÚtor)   Úfloat32ÚpowÚmeanÚrsqrtr,   r+   )r-   r2   Úinput_dtypeÚvariances       r0   ÚforwardzInternVLVisionRMSNorm.forward7   sy   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r1   c                 ó^   — t        | j                  j                  «      › d| j                  › �S )Nz, eps=)Útupler+   Úshaper,   ©r-   s    r0   Ú
extra_reprz InternVLVisionRMSNorm.extra_repr>   s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr1   )g�íµ ÷Æ°>)
Ú__name__Ú
__module__Ú__qualname__Úfloatr&   r)   ÚTensorr>   rC   Ú__classcell__©r/   s   @r0   r!   r!   -   s7   ø„ ñ$¨ð $¸$õ $ð; U§\¡\ð ;°e·l±ló ;öJr1   r!   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutc                 óx  — |}|}	t        j                  ||j                  dd«      «      |z  }
|�|
|z   }
t        j                  j                  |
d¬«      }
t        j                  j                  |
|| j                  ¬«      }
t        j                  |
|	«      }|j                  dd«      j                  «       }||
fS )Nr   r   r4   ©Údim)ÚpÚtrainingr   )	r)   ÚmatmulÚ	transposer'   Ú
functionalÚsoftmaxrQ   rV   Ú
contiguous)rK   rL   rM   rN   rO   rP   rQ   ÚkwargsÚ
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r0   Úeager_attention_forwardra   B   s°   € ð €JØ€Lä—<‘<  z×';Ñ';¸A¸qÓ'AÓBÀWÑL€LØÐ!Ø# nÑ4ˆô —=‘=×(Ñ(¨¸2Ð(Ó>€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨\Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r1   c                   ót   ‡ — e Zd ZdZdefˆ fd„Z	 d	dej                  dej                  dz  dee	   fd„Z
ˆ xZS )
ÚInternVLVisionAttentionz+Attention Class for InternVL Vision EncoderÚconfigc                 ó  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        | j                  | j                  z  | _        | j                  | j                  z  | j                  k7  r&t        d| j                  › d| j                  › d�«      ‚| j                  dz  | _	        |j                  | _
        |j                  }|j                  }d| _        t        j                  | j                  | j                  | j                  z  |j                   ¬«      | _        t        j                  | j                  | j                  | j                  z  |j                   ¬«      | _        t        j                  | j                  | j                  | j                  z  |j                   ¬«      | _        t        j                  | j                  | j                  «      | _        |dkD  rt        j*                  |«      nt        j,                  «       | _        |rt/        | j                  «      nt        j,                  «       | _        |rt/        | j                  «      | _        y t        j,                  «       | _        y )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).g      à¿F©Úbiasr   )r%   r&   rd   r.   Ú	embed_dimÚnum_attention_headsÚ	num_headsÚhead_dimÚ
ValueErrorÚscaleÚattention_dropoutÚprojection_dropoutÚuse_qk_normÚ	is_causalr'   ÚLinearÚattention_biasÚq_projÚk_projÚv_projÚprojection_layerÚDropoutÚIdentityr!   Úq_normÚk_norm)r-   rd   Úproj_dropoutÚqk_normr/   s       €r0   r&   z InternVLVisionAttention.__init___   sÈ  ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Ñ8ˆŒØ�=‰=˜4Ÿ>™>Ñ)¨T¯^©^Ò;ÜØMÈdÏnÉnÐM]ð ^Ø—N‘NÐ# 2ð'óð ð —]‘] DÑ(ˆŒ
Ø!'×!9Ñ!9ˆÔØ×0Ñ0ˆØ×$Ñ$ˆð ˆŒä—i‘i §¡°·±ÀÇÁÑ0NÐU[×UjÑUjÔkˆŒÜ—i‘i §¡°·±ÀÇÁÑ0NÐU[×UjÑUjÔkˆŒÜ—i‘i §¡°·±ÀÇÁÑ0NÐU[×UjÑUjÔkˆŒÜ "§	¡	¨$¯.©.¸$¿.¹.Ó IˆÔØ>JÈQÒ>N¤"§*¡*¨\Ô":ÔTV×T_ÑT_ÓTaˆÔá?FÔ+¨D¯N©NÔ;ÌBÏKÉKËMˆŒÙ?FÔ+¨D¯N©NÓ;ˆ�ÌBÏKÉKËMˆ�r1   Nr2   rO   r\   c                 ór  — |j                  «       \  }}}| j                  |«      }| j                  |«      }| j                  |«      }	| j	                  |«      }| j                  |«      }|j                  ||| j                  | j                  «      j                  dd«      }|j                  ||| j                  | j                  «      j                  dd«      }|	j                  ||| j                  | j                  «      j                  dd«      }	t        j                  | j                  j                  t        «      }
 |
| |||	|f| j                   sdn| j"                  | j$                  ddœ|¤Ž\  }}|j                  ||| j&                  «      }| j)                  |«      }| j+                  |«      }||fS )Nr   r   ç        F)rQ   rP   rq   )Úsizert   ru   rv   rz   r{   Úreshaperj   rk   rX   Úviewr   Úget_interfacerd   Ú_attn_implementationra   rV   rn   rm   rh   rw   ro   )r-   r2   rO   r\   Ú
batch_sizeÚseq_lenÚ_Úquery_statesr]   r^   Úattention_interfacer`   r_   Úoutputs                 r0   r>   zInternVLVisionAttention.forward{   s›  € ð "/×!3Ñ!3Ó!5Ñˆ
�G˜Qà—{‘{ =Ó1ˆØ—[‘[ Ó/ˆ
Ø—{‘{ =Ó1ˆà—{‘{ <Ó0ˆØ—[‘[ Ó,ˆ
à#×+Ñ+¨J¸ÀÇÁÐQU×Q^ÑQ^Ó_×iÑiÐjkÐmnÓoˆØ×'Ñ'¨
°G¸T¿^¹^ÈTÏ]É]Ó[×eÑeÐfgÐijÓkˆ
Ø#×(Ñ(¨°W¸d¿n¹nÈdÏmÉmÓ\×fÑfÐghÐjkÓlˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð
%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—J‘JØñ
%
ð ñ
%
Ñ!ˆ�\ð "×)Ñ)¨*°g¸t¿~¹~ÓNˆà×&Ñ& {Ó3ˆØ×(Ñ(¨Ó0ˆà�|Ð#Ð#r1   ©N)rD   rE   rF   Ú__doc__r   r&   r)   rH   r   r   r>   rI   rJ   s   @r0   rc   rc   \   sN   ø„ Ù5ðZÐ3õ Zð> /3ñ'$à—|‘|ð'$ð Ÿ™ tÑ+ð'$ð Ð+Ñ,÷	'$r1   rc   z7
    Class for outputs of [`InternVLVisionModel`].
    ©Úcustom_introc                   ó   — e Zd ZdZy)Ú$InternVLVisionModelOutputWithPoolingaF  
    pooler_output (`torch.FloatTensor` of shape `(batch_size, hidden_size)`):
        Average of the last layer hidden states of the patch tokens (excluding the *[CLS]* token) if
        *config.use_mean_pooling* is set to True. If set to False, then the final hidden state of the *[CLS]* token
        will be returned.
    N)rD   rE   rF   rŒ   © r1   r0   r�   r�   ¥   s   „ òr1   r�   c                   óZ   ‡ — e Zd ZdZˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚInternVLVisionPatchEmbeddingszì
    This class turns `pixel_values` of shape `(batch_size, num_channels, height, width)` into the initial
    `hidden_states` (patch embeddings) of shape `(batch_size, seq_length, hidden_size)` to be consumed by a
    Transformer.
    c                 ó^  •— t         ‰| �  «        |j                  |j                  }}|j                  |j
                  }}|d   |d   z  |d   |d   z  z  }|d   |d   z  |d   |d   z  f}|| _        || _        || _        || _        || _        t        j                  ||||¬«      | _
        y )Nr   r   )Úkernel_sizeÚstride)r%   r&   Ú
image_sizeÚ
patch_sizeÚnum_channelsr.   Únum_patchesÚpatch_shaper'   ÚConv2dÚ
projection)	r-   rd   r—   r˜   r™   r.   rš   r›   r/   s	           €r0   r&   z&InternVLVisionPatchEmbeddings.__init__»   s¿   ø€ Ü‰ÑÔØ!'×!2Ñ!2°F×4EÑ4E�Jˆ
Ø$*×$7Ñ$7¸×9KÑ9K�kˆà! !‘}¨
°1©Ñ5¸*ÀQ¹-È:ÐVWÉ=Ñ:XÑYˆØ! !‘}¨
°1©Ñ5°zÀ!±}È
ÐSTÉÑ7UÐVˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔØ&ˆÔäŸ)™) L°+È:Ð^hÔiˆ�r1   Úpixel_valuesr#   c                 ó  — |j                   \  }}}}|| j                  k7  rt        d«      ‚| j                  |j	                  | j                  j
                  j                  «      «      }|j                  d«      j                  dd«      }|S )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.r   r   )	rA   r™   rl   r�   r7   r+   r6   ÚflattenrX   )r-   rž   r…   r™   ÚheightÚwidthÚ
embeddingss          r0   r>   z%InternVLVisionPatchEmbeddings.forwardÊ   s€   € Ø2>×2DÑ2DÑ/ˆ
�L &¨%Ø˜4×,Ñ,Ò,ÜØwóð ð —_‘_ \§_¡_°T·_±_×5KÑ5K×5QÑ5QÓ%RÓSˆ
Ø×'Ñ'¨Ó*×4Ñ4°Q¸Ó:ˆ
àÐr1   )	rD   rE   rF   rŒ   r&   r)   rH   r>   rI   rJ   s   @r0   r“   r“   ´   s)   ø„ ñôjð
 E§L¡Lð 
°U·\±\÷ 
r1   r“   c                   óÆ   ‡ — e Zd ZdZdeddfˆ fd„Zdej                  dededej                  fd	„Z		 dd
ej                  dej                  dz  dej                  fd„Zˆ xZS )ÚInternVLVisionEmbeddingszc
    Construct the CLS token, position and patch embeddings. Optionally, also the mask token.

    rd   r#   Nc                 ó2  •— t         ‰| �  «        t        j                  t	        j
                  dd|j                  «      «      | _        |j                  r:t        j                  t	        j
                  dd|j                  «      «      | _	        nd | _	        t        |«      | _        |j                  | _        t        |j                  t        j                   j"                  «      r|j                  n|j                  |j                  f| _        | j                  j$                  }|j&                  r=t        j                  t	        j
                  d|dz   |j                  «      «      | _        nd | _        t        j*                  |j,                  «      | _        y )Nr   )r%   r&   r'   r(   r)   Úzerosr.   Ú	cls_tokenÚuse_mask_tokenÚ
mask_tokenr“   Úpatch_embeddingsr˜   Ú
isinstancer—   ÚcollectionsÚabcÚIterablerš   Ú use_absolute_position_embeddingsÚposition_embeddingsrx   Úhidden_dropout_probrQ   )r-   rd   rš   r/   s      €r0   r&   z!InternVLVisionEmbeddings.__init__ß   s$  ø€ Ü‰ÑÔäŸ™¤e§k¡k°!°Q¸×8JÑ8JÓ&KÓLˆŒØ× Ò Ü Ÿl™l¬5¯;©;°q¸!¸V×=OÑ=OÓ+PÓQˆD�Oà"ˆDŒOÜ =¸fÓ EˆÔØ ×+Ñ+ˆŒô ˜&×+Ñ+¬[¯_©_×-EÑ-EÔFð ×Òà×#Ñ# V×%6Ñ%6Ð7ð 	Œð
 ×+Ñ+×7Ñ7ˆØ×2Ò2Ü')§|¡|´E·K±KÀÀ;ÐQRÁ?ÐTZ×TfÑTfÓ4gÓ'hˆDÕ$à'+ˆDÔ$Ü—z‘z &×"<Ñ"<Ó=ˆ�r1   r£   r¡   r¢   c                 ó²  — |j                   d   dz
  }| j                  j                   d   dz
  }t        j                  j	                  «       s||k(  r||k(  r| j                  S | j                  dd…dd…f   }| j                  dd…dd…f   }|j                   d   }|| j
                  d   z  }	|| j
                  d   z  }
t        |dz  «      }|j                  d|||«      }|j                  dddd«      }t        j                  j                  ||	|
fdd	¬
«      }|j                  dddd«      j                  dd|«      }t        j                  ||fd¬«      S )a   
        This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher resolution
        images. This method is also adapted to support torch.jit tracing.

        Adapted from:
        - https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
        - https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
        r   Nr4   r   ç      à?r   r   ÚbicubicF)r€   ÚmodeÚalign_cornersrS   )rA   r±   r)   ÚjitÚ
is_tracingr˜   r   r�   Úpermuter'   rY   Úinterpolater‚   Úcat)r-   r£   r¡   r¢   rš   Únum_positionsÚclass_pos_embedÚpatch_pos_embedrT   Ú
new_heightÚ	new_widthÚsqrt_num_positionss               r0   Úinterpolate_pos_encodingz1InternVLVisionEmbeddings.interpolate_pos_encodingõ   sj  € ð !×&Ñ& qÑ)¨AÑ-ˆØ×0Ñ0×6Ñ6°qÑ9¸AÑ=ˆô �y‰y×#Ñ#Ô%¨+¸Ò*FÈ6ÐUZÊ?Ø×+Ñ+Ð+à×2Ñ2²1°b°q°b°5Ñ9ˆØ×2Ñ2²1°a±b°5Ñ9ˆà×Ñ˜rÑ"ˆà˜tŸ™¨qÑ1Ñ1ˆ
Ø˜TŸ_™_¨QÑ/Ñ/ˆ	ä& }°cÑ'9Ó:ÐØ)×1Ñ1°!Ð5GÐI[Ð]`ÓaˆØ)×1Ñ1°!°Q¸¸1Ó=ˆäŸ-™-×3Ñ3ØØ˜iÐ(ØØð	 4ó 
ˆð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ#ÓNˆä�y‰y˜/¨?Ð;ÀÔCÐCr1   rž   Úbool_masked_posc                 óÞ  — |j                   \  }}}}| j                  |«      }|j                  «       \  }}}|�K| j                  j	                  ||d«      }	|j                  d«      j                  |	«      }
|d|
z
  z  |	|
z  z   }| j                  j	                  |dd«      }t        j                  ||fd¬«      }| j                  �|| j                  |||«      z   }| j                  |«      }|S )Nr4   r   rS   )rA   r«   r€   rª   ÚexpandÚ	unsqueezeÚtype_asr¨   r)   r¼   r±   rÃ   rQ   )r-   rž   rÄ   r‡   r¡   r¢   r£   r…   r†   Úmask_tokensÚwÚ
cls_tokenss               r0   r>   z InternVLVisionEmbeddings.forward  só   € ð
 +×0Ñ0Ñˆˆ1ˆf�eØ×*Ñ*¨<Ó8ˆ
Ø!+§¡Ó!2Ñˆ
�G˜QàÐ&ØŸ/™/×0Ñ0°¸WÀbÓIˆKà×)Ñ)¨"Ó-×5Ñ5°kÓBˆAØ# q¨1¡uÑ-°¸a±Ñ?ˆJà—^‘^×*Ñ*¨:°r¸2Ó>ˆ
Ü—Y‘Y 
¨JÐ7¸QÔ?ˆ
à×#Ñ#Ð/Ø# d×&CÑ&CÀJÐPVÐX]Ó&^Ñ^ˆJà—\‘\ *Ó-ˆ
àÐr1   r‹   )rD   rE   rF   rŒ   r   r&   r)   rH   ÚintrÃ   Ú
BoolTensorr>   rI   rJ   s   @r0   r¥   r¥   Ù   sˆ   ø„ ñð
>Ð3ð >¸õ >ð,&D°5·<±<ð &DÈð &DÐUXð &DÐ]b×]iÑ]ió &DðV 48ñà—l‘lðð ×)Ñ)¨DÑ0ðð 
�‰÷	r1   r¥   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚInternVLVisionMLPc                 ó  •— t         ‰| �  «        || _        t        |j                     | _        t        j                  |j                  |j                  «      | _
        t        j                  |j                  |j                  «      | _        y r‹   )r%   r&   rd   r   Ú
hidden_actÚactivation_fnr'   rr   r.   Úintermediate_sizeÚfc1Úfc2©r-   rd   r/   s     €r0   r&   zInternVLVisionMLP.__init__8  sd   ø€ Ü‰ÑÔØˆŒÜ# F×$5Ñ$5Ñ6ˆÔÜ—9‘9˜V×/Ñ/°×1IÑ1IÓJˆŒÜ—9‘9˜V×5Ñ5°v×7IÑ7IÓJˆ�r1   r2   r#   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r‹   )rÔ   rÒ   rÕ   )r-   r2   s     r0   r>   zInternVLVisionMLP.forward?  s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆØÐr1   )rD   rE   rF   r&   r)   rH   r>   rI   rJ   s   @r0   rÏ   rÏ   7  s$   ø„ ôKð U§\¡\ð °e·l±l÷ r1   rÏ   )Ú
layer_normÚrms_normc                   ó¢   ‡ — e Zd ZdZdeddfˆ fd„Zdej                  deej                     eej                  ej                  f   z  fd„Z	ˆ xZ
S )ÚInternVLVisionLayerz?This corresponds to the Block class in the timm implementation.rd   r#   Nc                 ó®  •— t         ‰| �  «        |j                  | _        d| _        t	        |«      | _        t        |«      | _        t        |j                     |j                  |j                  ¬«      | _        t        |j                     |j                  |j                  ¬«      | _        |j                  }t        j                   |t#        j$                  |j                  «      z  d¬«      | _        t        j                   |t#        j$                  |j                  «      z  d¬«      | _        t        j*                  |j,                  «      | _        y )Nr   ©r"   T)Úrequires_grad)r%   r&   Úchunk_size_feed_forwardÚseq_len_dimrc   Ú	attentionrÏ   ÚmlpÚNORM2FNÚ	norm_typer.   Úlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterÚlayer_scale_init_valuer'   r(   r)   r*   Úlambda_1Úlambda_2rx   r²   rQ   )r-   rd   Úinit_valuesr/   s      €r0   r&   zInternVLVisionLayer.__init__L  sù   ø€ Ü‰ÑÔØ'-×'EÑ'EˆÔ$ØˆÔÜ0°Ó8ˆŒÜ$ VÓ,ˆŒä '¨×(8Ñ(8Ñ 9¸&×:LÑ:LÐRX×RgÑRgÔ hˆÔÜ& v×'7Ñ'7Ñ8¸×9KÑ9KÐQW×QfÑQfÔgˆÔà×3Ñ3ˆÜŸ™ [´5·:±:¸f×>PÑ>PÓ3QÑ%QÐaeÔfˆŒÜŸ™ [´5·:±:¸f×>PÑ>PÓ3QÑ%QÐaeÔfˆŒÜ—z‘z &×"<Ñ"<Ó=ˆ�r1   r2   c                 ó  — | j                  | j                  |«      «      \  }}| j                  |z  }||z   }| j                  |«      }| j	                  |«      }| j                  |«      }| j                  �| j                  |z  }||z   }|S r‹   )rá   ræ   ré   rç   râ   rQ   rê   )r-   r2   Úattention_outputr‡   Úlayer_outputs        r0   r>   zInternVLVisionLayer.forward[  sœ   € ð #Ÿn™nØ×!Ñ! -Ó0ó
ÑÐ˜!ð  Ÿ=™=Ð+;Ñ;Ðð )¨=Ñ8ˆð ×+Ñ+¨MÓ:ˆà—x‘x Ó-ˆØ—|‘| LÓ1ˆà�=‰=Ð$ØŸ=™=¨<Ñ7ˆLð $ mÑ3ˆàÐr1   )rD   rE   rF   rŒ   r   r&   r)   rH   r@   r>   rI   rJ   s   @r0   rÛ   rÛ   I  sU   ø„ ÙIð>Ð3ð >¸õ >ðà—|‘|ðð 
ˆu�|‰|Ñ	˜u U§\¡\°5·<±<Ð%?Ñ@Ñ	@÷r1   rÛ   c                   óR   ‡ — e Zd Zdeddfˆ fd„Zdej                  deez  fd„Z	ˆ xZ
S )ÚInternVLVisionEncoderrd   r#   Nc                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        y c c}w )NF)
r%   r&   rd   r'   Ú
ModuleListÚrangeÚnum_hidden_layersrÛ   ÚlayerÚgradient_checkpointing)r-   rd   Úir/   s      €r0   r&   zInternVLVisionEncoder.__init__x  sO   ø€ Ü‰ÑÔØˆŒÜ—]‘]ÌÈv×OgÑOgÓIhÖ#iÀAÔ$7¸Õ$?Ò#iÓjˆŒ
Ø&+ˆÕ#ùò $js   ½A#r2   c                 óL   — | j                   D ]
  } ||«      }Œ t        |¬«      S )N)Úlast_hidden_state)rõ   r   )r-   r2   Úlayer_modules      r0   r>   zInternVLVisionEncoder.forward~  s3   € ð !ŸJ™Jò 	8ˆLÙ(¨Ó7‰Mð	8ô Ø+ô
ð 	
r1   )rD   rE   rF   r   r&   r)   rH   r@   r   r>   rI   rJ   s   @r0   rð   rð   w  s7   ø„ ð,Ð3ð ,¸õ ,ð	
à—|‘|ð	
ð 
�Ñ	 ÷	
r1   rð   c                   ó‚   ‡ — e Zd ZU eed<   dZdZdZdZdgZ	dZ
dZdZdZeedœZ ej$                  «       ˆ fd„«       Zˆ xZS )	ÚInternVLVisionPreTrainedModelrd   Úinternvl_visionrž   )ÚimageÚvideoTrÛ   )r2   Ú
attentionsc                 ó$  •— t         ‰| �  |«       t        |t        «      rwt	        j
                  |j                  «       |j                  �t	        j
                  |j                  «       |j                  � t	        j
                  |j                  «       yyt        |t        «      rit	        j                  |j                  | j                  j                  «       t	        j                  |j                  | j                  j                  «       yy)zInitialize the weightsN)r%   Ú_init_weightsr¬   r¥   ÚinitÚzeros_r¨   rª   r±   rÛ   Ú	constant_ré   rd   rè   rê   )r-   rK   r/   s     €r0   r  z+InternVLVisionPreTrainedModel._init_weightsœ  s¸   ø€ ô 	‰Ñ˜fÔ%Ü�fÔ6Ô7Ü�K‰K˜×(Ñ(Ô)Ø× Ñ Ð,Ü—‘˜F×-Ñ-Ô.Ø×)Ñ)Ð5Ü—‘˜F×6Ñ6Õ7ð 6ä˜Ô 3Ô4Ü�N‰N˜6Ÿ?™?¨D¯K©K×,NÑ,NÔOÜ�N‰N˜6Ÿ?™?¨D¯K©K×,NÑ,NÕOð 5r1   )rD   rE   rF   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendrÛ   rc   Ú_can_record_outputsr)   Úno_gradr  rI   rJ   s   @r0   rü   rü   Š  sn   ø… à Ó Ø)ÐØ$€OØ)ÐØ&*Ð#Ø.Ð/ÐØ€NØÐØÐØ"&Ðð -Ø-ñÐð
 €U‡]�]ƒ_óPó ôPr1   rü   c                   ó¦   ‡ — e Zd Zdeddfˆ fd„Zd„ Ze ed¬«      e	 dde	j                  d	e	j                  dz  deez  fd
„«       «       «       Zˆ xZS )ÚInternVLVisionModelrd   r#   Nc                 ó2  •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        |j                  rt        j                  «       n*t        j                  |j                  |j                  ¬«      | _        | j                  «        y )NrÝ   )r%   r&   rd   r¥   r£   rð   ÚencoderÚuse_mean_poolingr'   ry   Ú	LayerNormr.   rå   Ú	layernormÚ	post_initrÖ   s     €r0   r&   zInternVLVisionModel.__init__­  so   ø€ Ü‰Ñ˜Ô ØˆŒä2°6Ó:ˆŒÜ,¨VÓ4ˆŒð $×4Ò4ŒB�K‰KŒM¼"¿,¹,Àv×GYÑGYÐ_e×_tÑ_tÔ:uð 	Œð
 	�‰Õr1   c                 ó.   — | j                   j                  S r‹   )r£   r«   rB   s    r0   Úget_input_embeddingsz(InternVLVisionModel.get_input_embeddings»  s   € Ø�‰×/Ñ/Ð/r1   F)Útie_last_hidden_statesrž   rÄ   c                 óº   — | j                  ||¬«      }| j                  |«      }|d   }| j                  |«      }t        ||j                  |j
                  ¬«      S )zË
        bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, num_patches)`, *optional*):
            Boolean masked positions. Indicates which patches are masked (1) and which aren't (0).
        )rÄ   r   )rù   r2   r   )r£   r  r  r�   r2   r   )r-   rž   rÄ   r\   Úembedding_outputÚencoder_outputsÚsequence_outputs          r0   r>   zInternVLVisionModel.forward¾  s`   € ð  Ÿ?™?¨<È˜?ÓYÐàŸ,™,Ð'7Ó8ˆØ)¨!Ñ,ˆØŸ.™.¨Ó9ˆä3Ø-Ø)×7Ñ7Ø&×1Ñ1ô
ð 	
r1   r‹   )rD   rE   rF   r   r&   r  r   r   r   r)   rH   rÍ   r@   r�   r>   rI   rJ   s   @r0   r  r  «  su   ø„ ðÐ3ð ¸õ ò0ð  Ù¨EÔ2ØàUYñ
Ø!ŸL™Lð
Ø;@×;KÑ;KÈdÑ;Rð
à	Ð5Ñ	5ò
ó ó 3ó  ô
r1   r  c                   ó>   — e Zd ZU eed<   dZdZdZdgZdZ	dZ
dZdZdZy)ÚInternVLPreTrainedModelrd   Úmodel)rþ   Útextrÿ   TÚpast_key_valuesN)rD   rE   rF   r   r  r  r	  r
  Ú_skip_keys_device_placementr  r  Ú_can_compile_fullgraphr  r  r‘   r1   r0   r"  r"  Õ  s@   … àÓØÐØ1ÐØ&*Ð#Ø#4Ð"5ÐàÐØ€Nà!ÐØÐØ"&Ñr1   r"  c                   ó*   ‡ — e Zd Zdefˆ fd„Zd„ Zˆ xZS )ÚInternVLMultiModalProjectorrd   c                 ó*  •— t         ‰| �  «        t        j                  |j                  j
                  t        d|j                  z  «      dz  z  «      | _        t        j                  |j                  j
                  t        d|j                  z  «      dz  z  |j                  j
                  «      | _        t        |j                     | _        t        j                  |j                  j
                  |j                  j
                  «      | _        y )Nr   r   )r%   r&   r'   r  Úvision_configr.   rÌ   Údownsample_ratiorØ   rr   Útext_configÚlinear_1r   Úprojector_hidden_actÚactÚlinear_2rÖ   s     €r0   r&   z$InternVLMultiModalProjector.__init__æ  sÍ   ø€ Ü‰ÑÔÜŸ,™, v×';Ñ';×'GÑ'GÌ#ÈaÐRX×RiÑRiÑNiÓJjÐnoÑJoÑ'oÓpˆŒÜŸ	™	Ø× Ñ ×,Ñ,¬s°1°v×7NÑ7NÑ3NÓ/OÐSTÑ/TÑTÐV\×VhÑVh×VtÑVtó
ˆŒô ˜&×5Ñ5Ñ6ˆŒÜŸ	™	 &×"4Ñ"4×"@Ñ"@À&×BTÑBT×B`ÑB`Óaˆ�r1   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S r‹   )rØ   r.  r0  r1  )r-   Úimage_featuresr2   s      r0   r>   z#InternVLMultiModalProjector.forwardï  s@   € ØŸ™¨Ó7ˆØŸ™ mÓ4ˆØŸ™ Ó/ˆØŸ™ mÓ4ˆØÐr1   )rD   rE   rF   r   r&   r>   rI   rJ   s   @r0   r)  r)  å  s   ø„ ðb˜~õ bör1   r)  zM
    Base class for InternVL outputs, with hidden states and attentions.
    c                   ó:   — e Zd ZU dZdZej                  dz  ed<   y)ÚInternVLModelOutputWithPastaÏ  
    past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
        It is a [`~cache_utils.Cache`] instance. For more details, see our [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache).

        Contains pre-computed hidden-states (key and values in the self-attention blocks) that can be used (see
        `past_key_values` input) to speed up sequential decoding.
    image_hidden_states (`torch.FloatTensor`, *optional*):
        A `torch.FloatTensor` of size `(batch_size, num_images, sequence_length, hidden_size)`.
        image_hidden_states of the model produced by the vision encoder and after projecting the last hidden state.
    NÚimage_hidden_states)rD   rE   rF   rŒ   r6  r)   ÚFloatTensorr  r‘   r1   r0   r5  r5  ÷  s   … ñ	ð 59Ð˜×*Ñ*¨TÑ1Ô8r1   r5  zx
    The InternVL model which consists of a vision backbone and a language model, without a language modeling head.
    c                   ó:  ‡ — e Zd Zdefˆ fd„Zee ed¬«      	 	 ddej                  de
ee
   z  ee
   z  dz  dedz  d	ee   d
eez  f
d„«       «       «       Zdej$                  dej                  dej                  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  ee
   z  dz  dedz  d	ee   d
eez  fd„«       «       Zddej(                  defd„Zˆ xZS )ÚInternVLModelrd   c                 óô   •— t         ‰| �  |«       t        j                  |j                  «      | _        t        |«      | _        t        j                  |j                  «      | _	        | j                  «        y r‹   )r%   r&   r   Úfrom_configr+  Úvision_towerr)  Úmulti_modal_projectorr-  Úlanguage_modelr  rÖ   s     €r0   r&   zInternVLModel.__init__  sY   ø€ Ü‰Ñ˜Ô Ü%×1Ñ1°&×2FÑ2FÓGˆÔä%@ÀÓ%HˆÔ"Ü'×3Ñ3°F×4FÑ4FÓGˆÔØ�‰Õr1   zWObtains image last hidden states from the vision tower and apply multimodal projection.r�   Nrž   Úvision_feature_layerÚvision_feature_select_strategyr\   r#   c                 ó&  — |j                  | j                  ¬«      }| j                  j                  }|dk7  rd|d<    | j                  d|ddœ|¤Ž}|dk(  r|j
                  }n|j                  |   }|dk(  r|dd…dd…dd…f   }|j                  d   }t        |d	z  «      }	|j                  d
   }
|j                  |
|	|	d«      }| j                  ||¬«      }|j                  |
d|j                  d   «      }| j                  |«      }||_        |S )a!  
        pixel_values (`torch.FloatTensor]` of shape `(batch_size, channels, height, width)`)
            The tensors corresponding to the input images.
        vision_feature_layer (`int` or `list[int]`):
            Layer index or list of layer indices to extract features from.
        )r6   r4   TÚoutput_hidden_states)rž   Úreturn_dictÚdefaultNr   r´   r   )Úscale_factorr‘   )r7   r6   rd   r,  r<  rù   r2   rA   rÌ   r�   Úpixel_shuffler=  Úpooler_output)r-   rž   r?  r@  r\   r,  Úvision_outputsÚvision_featuresÚchannelsÚfeature_sizer…   s              r0   Úget_image_featuresz InternVLModel.get_image_features  s:  € ð$ $—‘¨T¯Z©Z�Ó8ˆàŸ;™;×7Ñ7ÐØ 2Ò%Ø-1ˆFÐ)Ñ*Ø*˜×*Ñ*Ða¸ÐRVÑaÐZ`ÑaˆØ 2Ò%Ø,×>Ñ>‰Oà,×:Ñ:Ð;OÑPˆOØ)¨YÒ6Ø-ªa°±²Q¨hÑ7ˆOð #×(Ñ(¨Ñ+ˆÜ˜8 S™=Ó)ˆØ$×*Ñ*¨1Ñ-ˆ
ð *×1Ñ1°*¸lÈLÐZ\Ó]ˆð ×,Ñ,¨_ÐK[Ð,Ó\ˆð *×1Ñ1°*¸bÀ/×BWÑBWÐXZÑB[Ó\ˆð ×4Ñ4°_ÓEˆØ'6ˆÔ$àÐr1   Ú	input_idsÚinputs_embedsr3  c                 ó.  — |€m| | j                  «       t        j                  | j                  j                  t        j
                  |j                  ¬«      «      k(  }|j                  d«      }n|| j                  j                  k(  }|j                  «       }|j                  d   |j                  d   z  }|j                  d«      j                  |j                  «      }t        ||j                  d   z  |j                  «       k(  d|› d|› �«       |S )zï
        Obtains multimodal placeholder mask from `input_ids` or `inputs_embeds`, and checks that the placeholder token count is
        equal to the length of multimodal features. If the lengths are different, an error is raised.
        )r6   Údevicer4   r   r   z6Image features and image tokens do not match, tokens: z, features: )r  r)   Útensorrd   Úimage_token_idÚlongrP  ÚallÚsumrA   rÇ   r7   r   Únumel)r-   rM  rN  r3  Úspecial_image_maskÚn_image_tokensÚn_image_featuress          r0   Úget_placeholder_maskz"InternVLModel.get_placeholder_maskM  s  € ð ÐØ!.Ð2M°$×2KÑ2KÓ2MÜ—‘˜TŸ[™[×7Ñ7¼u¿z¹zÐR_×RfÑRfÔgó3ñ "Ðð "4×!7Ñ!7¸Ó!;Ñà!*¨d¯k©k×.HÑ.HÑ!HÐà+×/Ñ/Ó1ˆØ)×/Ñ/°Ñ2°^×5IÑ5IÈ!Ñ5LÑLÐØ/×9Ñ9¸"Ó=×@Ñ@À×AUÑAUÓVÐÜØ˜]×0Ñ0°Ñ4Ñ4¸×8LÑ8LÓ8NÑNØDÀ^ÐDTÐT`ÐaqÐ`rÐsô	
ð "Ð!r1   rO   Úposition_idsr%  c	                 óä  — |d u |d uz  rt        d«      ‚|€ | j                  «       |«      }|�k| j                  |||d¬«      j                  }
|
j	                  |j
                  |j                  «      }
| j                  |||
¬«      }|j                  ||
«      } | j                  d||||dœ|	¤Ž}t        |j                  |j                  |j                  |j                  |�
¬«      S d ¬«      S )Nz:You must specify exactly one of input_ids or inputs_embedsT)rž   r?  r@  rC  )rN  r3  )rO   r[  r%  rN  )rù   r%  r2   r   r6  r‘   )rl   r  rL  rG  r7   rP  r6   rZ  Úmasked_scatterr>  r5  rù   r%  r2   r   )r-   rM  rž   rO   r[  r%  rN  r?  r@  r\   r3  rW  Úoutputss                r0   r>   zInternVLModel.forwarde  s9  € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø7˜D×5Ñ5Ó7¸	ÓBˆMàÐ#Ø!×4Ñ4Ø)Ø%9Ø/MØ ð	 5ó ÷
 ‰mð ð ,×.Ñ.¨}×/CÑ/CÀ]×EXÑEXÓYˆNØ!%×!:Ñ!:Ø¨À~ð ";ó "Ðð *×8Ñ8Ð9KÈ^Ó\ˆMà%�$×%Ñ%ð 
Ø)Ø%Ø+Ø'ñ	
ð
 ñ
ˆô +Ø%×7Ñ7Ø#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø2>Ð2J ô
ð 	
ð
 QUô
ð 	
r1   rI  rE  c           
      ó¼  — |j                  «       \  }}}}||z  dk7  s||z  dk7  rt        d«      ‚|j                  ||t        ||z  «      t        ||z  «      «      }|j	                  dddd«      j                  «       }|j                  |t        ||z  «      t        ||z  «      t        ||dz  z  «      «      }|j	                  dddd«      j                  «       }|S )a&  Perform pixel shuffle downsampling on vision features.

        Args:
            vision_features (`torch.Tensor`):
                Input tensor of shape (batch_size, width, height, channels).
            scale_factor (`float`, *optional*, defaults to `0.5`):
                Factor by which to downsample. Default is 0.5, which halves the dimensions.

        Returns:
            vision_features (`torch.Tensor`):
                Downsampled tensor of shape (batch_size, height*scale_factor, width*scale_factor, channels/(scale_factor^2)).
        r   zKHeight and width must be divisible by scale_factor for proper downsampling.r   r   r   )r€   rl   r‚   rÌ   rº   r[   )r-   rI  rE  r…   r¢   r¡   rJ  s          r0   rF  zInternVLModel.pixel_shuffle–  sø   € ð />×.BÑ.BÓ.DÑ+ˆ
�E˜6 8à�LÑ  AÒ%¨°Ñ)=ÀÒ)BÜÐjÓkÐkð *×.Ñ.Ø˜œs 6¨LÑ#8Ó9¼3¸xÈ,Ñ?VÓ;Wó
ˆð *×1Ñ1°!°Q¸¸1Ó=×HÑHÓJˆð *×.Ñ.Øœ˜F \Ñ1Ó2´C¸ÀÑ8LÓ4MÌsÐS[Ð_kÐmnÑ_nÑSoÓOpó
ˆð
 *×1Ñ1°!°Q¸¸1Ó=×HÑHÓJˆàÐr1   ©NN)NNNNNNNN)r´   )rD   rE   rF   r   r&   r   r   r   r)   r7  rÌ   ÚlistÚstrr   r   r@   r   rL  Ú
LongTensorrZ  rH   r   r5  r>   rG   rF  rI   rJ   s   @r0   r9  r9    sà  ø„ ð˜~õ ð  ØÙØnôð DHØ59ñ	,à×'Ñ'ð,ð " D¨¡I™o°°S±	Ñ9¸DÑ@ð,ð ),¨d©
ð	,ð
 Ð+Ñ,ð,ð 
Ð+Ñ	+ò,óó ó  ð
,ð\"Ø×)Ñ)ð"Ø:?×:KÑ:Kð"Ø]b×]nÑ]nó"ð0 Øð .2Ø15Ø.2Ø04Ø(,Ø26ØCGØ59ñ-
à×#Ñ# dÑ*ð-
ð ×'Ñ'¨$Ñ.ð-
ð Ÿ™ tÑ+ð	-
ð
 ×&Ñ&¨Ñ-ð-
ð  ™ð-
ð ×(Ñ(¨4Ñ/ð-
ð " D¨¡I™o°°S±	Ñ9¸DÑ@ð-
ð ),¨d©
ð-
ð Ð+Ñ,ð-
ð 
Ð,Ñ	,ò-
ó ó ð-
ñ^!¨U¯\©\ð !È÷ !r1   r9  zT
    Base class for InternVL causal language model (or autoregressive) outputs.
    c                   óú   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	e
dz  ed<   dZeej                     dz  ed<   dZeej                     dz  ed<   dZej                  dz  ed<   y)	ÚInternVLCausalLMOutputWithPasta4  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction).
    logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
    past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
        It is a [`~cache_utils.Cache`] instance. For more details, see our [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache).

        Contains pre-computed hidden-states (key and values in the self-attention blocks) that can be used (see
        `past_key_values` input) to speed up sequential decoding.
    image_hidden_states (`torch.FloatTensor`, *optional*):
        A `torch.FloatTensor` of size `(batch_size, num_images, sequence_length, hidden_size)`.
        image_hidden_states of the model produced by the vision encoder and after projecting the last hidden state.
    NÚlossÚlogitsr%  r2   r   r6  )rD   rE   rF   rŒ   rf  r)   r7  r  rg  r%  r   r2   r@   r   r6  r‘   r1   r0   re  re  º  s‹   … ñð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø$(€O�U˜T‘\Ó(Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ó6Ø48Ð˜×*Ñ*¨TÑ1Ô8r1   re  zV
    The INTERNVL model which consists of a vision backbone and a language model.
    c                   óB  ‡ — e Zd ZddiZdefˆ fd„Zdej                  fd„Ze		 	 dde
j                  d	eee   z  ee   z  dz  d
e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  ee   z  dz  d
edz  de
j*                  dz  dee
j,                  z  de
j,                  dz  dee   deez  fd„«       «       Z	 	 	 	 	 	 dˆ fd„	Zˆ xZS )Ú InternVLForConditionalGenerationzlm_head.weightz(model.language_model.embed_tokens.weightrd   c                 óî   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  j                  |j                  j                  d¬«      | _	        | j                  «        y )NFrf   )r%   r&   r9  r#  r'   rr   r-  r.   Ú
vocab_sizeÚlm_headr  rÖ   s     €r0   r&   z)InternVLForConditionalGeneration.__init__à  sS   ø€ Ü‰Ñ˜Ô Ü" 6Ó*ˆŒ
Ü—y‘y ×!3Ñ!3×!?Ñ!?À×ASÑAS×A^ÑA^ÐejÔkˆŒØ�‰Õr1   r#   c                 ó   — | j                   S r‹   )rl  rB   s    r0   Úget_output_embeddingsz6InternVLForConditionalGeneration.get_output_embeddingsæ  s   € Ø�|‰|Ðr1   Nrž   r?  r@  r\   c                 óB   —  | j                   j                  d|||dœ|¤ŽS )N)rž   r?  r@  r‘   )r#  rL  )r-   rž   r?  r@  r\   s        r0   rL  z3InternVLForConditionalGeneration.get_image_featuresé  s5   € ð -ˆt�z‰z×,Ñ,ð 
Ø%Ø!5Ø+Iñ
ð ñ	
ð 	
r1   rM  rO   r[  r%  rN  ÚlabelsÚlogits_to_keepÚimage_sizesc                 óš  —  | j                   d|||||||||dœ	|¤Ž}|d   }t        |
t        «      rt        |
 d«      n|
}| j	                  |dd…|dd…f   «      }d}|	�4 | j
                  d||	| j                  j                  j                  dœ|¤Ž}t        |||j                  |j                  |j                  |j                  ¬«      S )ac  
        Example:

        ```python
        >>> import torch
        >>> from transformers import AutoProcessor, AutoModelForImageTextToText

        >>> torch_device = "cuda"
        >>> processor = AutoProcessor.from_pretrained("OpenGVLab/InternVL3-1B-hf")
        >>> model = AutoModelForImageTextToText.from_pretrained(
        ...     "OpenGVLab/InternVL3-1B-hf", dtype=torch.bfloat16, device_map=torch_device
        ... )

        >>> messages = [
        ...     {
        ...         "role": "user",
        ...         "content": [
        ...             {
        ...                 "type": "image",
        ...                 "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg",
        ...             },
        ...             {
        ...                 "type": "image",
        ...                 "url": "https://thumbs.dreamstime.com/b/golden-gate-bridge-san-francisco-purple-flowers-california-echium-candicans-36805947.jpg",
        ...             },
        ...             {"type": "text", "text": "These images depict two different landmarks. Can you identify them?"},
        ...         ],
        ...     },
        ... ]

        >>> inputs = processor.apply_chat_template(messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt").to(torch_device)
        >>> generate_ids = model.generate(**inputs, max_new_tokens=200)
        >>> print(processor.decode(generate_ids[0, inputs["input_ids"].shape[1] :], skip_special_tokens=True))
        The images depict the Statue of Liberty and the Golden Gate Bridge.
        ```)	rM  rž   rO   r[  r%  rN  r?  r@  rr  r   N)rg  rp  rk  )rf  rg  r%  r2   r   r6  r‘   )r#  r¬   rÌ   Úslicerl  Úloss_functionrd   r-  rk  re  r%  r2   r   r6  )r-   rM  rž   rO   r[  r%  rN  r?  r@  rp  rq  rr  r\   r^  r2   Úslice_indicesrg  rf  s                     r0   r>   z(InternVLForConditionalGeneration.forwardø  sù   € ðh �$—*‘*ð 
ØØ%Ø)Ø%Ø+Ø'Ø!5Ø+IØ#ñ
ð ñ
ˆð   ™
ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆàˆØÐØ%�4×%Ñ%ð Ø f¸¿¹×9PÑ9P×9[Ñ9[ñØ_eñˆDô .ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø '× ;Ñ ;ô
ð 	
r1   c           	      óf   •— t        ‰
| �  |f|||||dœ|¤Ž}	|s|j                  dd«      s||	d<   |	S )N)r%  rN  rO   rq  Úis_first_iterationÚ	use_cacheTrž   )r%   Úprepare_inputs_for_generationÚget)r-   rM  r%  rN  rž   rO   rq  rx  r\   Úmodel_inputsr/   s             €r0   rz  z>InternVLForConditionalGeneration.prepare_inputs_for_generationM  sY   ø€ ô ‘wÑ<Øð
à+Ø'Ø)Ø)Ø1ñ
ð ñ
ˆñ  V§Z¡Z°¸TÔ%Bð
 ,8ˆL˜Ñ(àÐr1   r`  )NNNNNNNNNr   N)NNNNNF)rD   rE   rF   Ú_tied_weights_keysr   r&   r'   ÚModulern  r   r)   r7  rÌ   ra  rb  r   r   r@   r   rL  r   rc  rH   r   re  r>   rz  rI   rJ   s   @r0   ri  ri  Ø  s  ø„ ð +Ð,VÐWÐð˜~õ ð r§y¡yó ð ð DHØ59ñ	
à×'Ñ'ð
ð " D¨¡I™o°°S±	Ñ9¸DÑ@ð
ð ),¨d©
ð	
ð
 Ð+Ñ,ð
ð 
Ð+Ñ	+ò
ó ð
ð Øð .2Ø15Ø.2Ø04Ø(,Ø26ØCGØ59Ø*.Ø-.Ø+/ñQ
à×#Ñ# dÑ*ðQ
ð ×'Ñ'¨$Ñ.ðQ
ð Ÿ™ tÑ+ð	Q
ð
 ×&Ñ&¨Ñ-ðQ
ð  ™ðQ
ð ×(Ñ(¨4Ñ/ðQ
ð " D¨¡I™o°°S±	Ñ9¸DÑ@ðQ
ð ),¨d©
ðQ
ð × Ñ  4Ñ'ðQ
ð ˜eŸl™lÑ*ðQ
ð —\‘\ DÑ(ðQ
ð Ð+Ñ,ðQ
ð 
Ð/Ñ	/òQ
ó ó ðQ
ðl ØØØØØ ÷ñ r1   ri  )rü   r  r"  r9  ri  )r   )FÚcollections.abcr­   r   Údataclassesr   r)   Útorch.nnr'   Ú r   r  Úactivationsr   Úcache_utilsr   Ú
generationr	   Úintegrationsr
   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úautor   Úconfiguration_internvlr   r   r~  r!   rH   rG   rÌ   ra   rc   r�   r“   r¥   rÏ   r  rã   rÛ   rð   rü   r  r"  r)  r5  r9  re  ri  Ú__all__r‘   r1   r0   ú<module>r‘     sŸ  ðó, Ý $Ý !ã Ý å &Ý !Ý  Ý )Ý 7Ý 9ß dÑ dß FÝ &ß gÕ gß IÝ 5Ý ß Hñ ˜YÓ'ôJ˜BŸI™Ió Jó (ðJð6 ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð �S‰[ó%ô4F$˜bŸi™iô F$ñR ðôð
 ôÐ+Eó ó óðô  B§I¡Iô  ôJ[˜rŸy™yô [ô|˜Ÿ	™	ô ð Ÿ™Ð3HÑ
I€ô+Ð4ô +ô\
˜BŸI™Iô 
ð& ôP Oó Pó ðPð@ ô&
Ð7ó &
ó ð&
ðR ô'˜oó 'ó ð'ô "§)¡)ô ñ$ ðôð
 ô9Ð"9ó 9ó óð9ñ ðôô
fÐ+ó fóð
fñR ðôð
 ô9 [ó 9ó óð9ñ0 ðôô
NÐ'>Àó Nóð
Nòb�r1   