Ë
    ÜÓ^júç  ã                   óÖ  — d dl Z d dlmZ d dlmZ d dlmZ d dlZd dlm	Z	 d dl
m	c mZ d dl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 ddl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*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z;  e2jx                  e=«      Z> G d„ de	j~                  «      Z@ G d„ de	j~                  «      ZA G d„ dej                  j~                  «      ZB G d„ de	j~                  «      ZC G d„ d e	jˆ                  «      ZE G d!„ d"e	j~                  «      ZF G d#„ d$e	j~                  «      ZGd%ej�                  d&ej�                  d'ej�                  d(eIej�                  ej�                  f   fd)„ZJd*ej�                  d+eKd(ej�                  fd,„ZL	 d_d-e	j~                  d.ej�                  d/ej�                  d0ej�                  d1ej�                  dz  d2eMd3eMfd4„ZN	 d_d-e	j~                  d.ej�                  d/ej�                  d0ej�                  d1ej�                  dz  d2eMd3eMfd5„ZO G d6„ d7e	j~                  «      ZP G d8„ d9e«      ZQe0 G d:„ d;e+«      «       ZRe0 G d<„ d=eR«      «       ZS G d>„ d?eRe«      ZT e0d@¬A«      e G dB„ dCe%«      «       «       ZU G dD„ dEej                  j~                  «      ZV G dF„ dGe	j~                  «      ZWdH„ ZX G dI„ dJe	j~                  «      ZYdKej�                  d.ej�                  fdL„ZZd.ej�                  d/ej�                  dKej�                  d(eIej�                  ej�                  f   fdM„Z[ G dN„ dOe	j~                  «      Z\ G dP„ dQe	j~                  «      Z] G dR„ dSe«      Z^ G dT„ dUe	j~                  «      Z_ G dV„ dWe	j~                  «      Z` G dX„ dYe	j~                  «      Za G dZ„ d[eR«      Zb G d\„ d]eRe«      Zcg d^¢Zdy)`é    N)ÚCallable)Ú	dataclass)ÚOptional)ÚLlama4VisionConfigé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úcreate_causal_maskÚcreate_chunked_causal_mask)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPastÚBaseModelOutputWithPoolingÚCausalLMOutputWithPastÚModelOutput)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚloggingÚtorch_compilable_check)Úmaybe_autocastÚmerge_with_config_defaults)Úcapture_outputsé   )ÚLlama4ConfigÚLlama4TextConfigc                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚLlama4TextExpertsÚconfigc                 ó  •— t         ‰| �  «        |j                  | _        |j                  | _        |j
                  | _        | j                  | _        t        j                  t        j                  | j                  | j
                  d| j                  z  «      «      | _        t        j                  t        j                  | j                  | j                  | j
                  f«      «      | _        t        |j                     | _        y ©Né   )ÚsuperÚ__init__Únum_local_expertsÚnum_expertsÚintermediate_sizeÚhidden_sizeÚ
expert_dimÚnnÚ	ParameterÚtorchÚzerosÚgate_up_projÚemptyÚ	down_projr	   Ú
hidden_actÚact_fn©Úselfr(   Ú	__class__s     €úu/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/llama4/modeling_llama4.pyr-   zLlama4TextExperts.__init__8   s¿   ø€ Ü‰ÑÔØ!×3Ñ3ˆÔØ!'×!9Ñ!9ˆÔØ!×-Ñ-ˆÔØ×0Ñ0ˆŒÜŸL™L¬¯©°T×5EÑ5EÀt×GWÑGWÐYZÐ]a×]lÑ]lÑYlÓ)mÓnˆÔÜŸ™¤e§k¡k°4×3CÑ3CÀTÇ_Á_ÐVZ×VfÑVfÐ2gÓ&hÓiˆŒÜ˜V×.Ñ.Ñ/ˆ�ó    Úhidden_statesÚreturnc                 óv  — |j                  | j                  j                  d   d| j                  «      }t	        j
                  || j                  «      }|j                  dd¬«      \  }}t	        j
                  || j                  |«      z  | j                  «      }|j                  d| j                  «      }|S )a2  
        This should really not be run on a single machine, as we are reaching compute bound:
        - the inputs are expected to be "sorted" per expert already.
        - the weights are viewed with another dim, to match num_expert, 1, shape * num_tokens, shape

        Args:
            hidden_states (torch.Tensor): (batch_size * token_num, hidden_size)
            selected_experts (torch.Tensor): (batch_size * token_num, top_k)
            routing_weights (torch.Tensor): (batch_size * token_num, top_k)
        Returns:
            torch.Tensor
        r   éÿÿÿÿr+   ©Údim)	Úviewr7   Úshaper1   r5   ÚbmmÚchunkr;   r9   )r=   rA   Úgate_upÚgateÚupÚnext_statess         r?   ÚforwardzLlama4TextExperts.forwardB   s›   € ð &×*Ñ*¨4×+<Ñ+<×+BÑ+BÀ1Ñ+EÀrÈ4×K[ÑK[Ó\ˆÜ—)‘)˜M¨4×+<Ñ+<Ó=ˆØ—=‘= ¨�=Ó+‰ˆˆbÜ—i‘i  d§k¡k°$Ó&7Ñ!7¸$¿.¹.ÓIˆØ!×&Ñ& r¨4×+;Ñ+;Ó<ˆØÐr@   )	Ú__name__Ú
__module__Ú__qualname__r%   r-   r5   ÚTensorrO   Ú__classcell__©r>   s   @r?   r'   r'   7   s+   ø„ ð0Ð/õ 0ð U§\¡\ð °e·l±l÷ r@   r'   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚLlama4TextMLPc                 óf  •— t         ‰| �  «        |€|j                  }|| _        t	        j
                  |j                  |d¬«      | _        t	        j
                  |j                  |d¬«      | _        t	        j
                  ||j                  d¬«      | _	        t        |j                     | _        y ©NF©Úbias)r,   r-   r0   r(   r3   ÚLinearr1   Ú	gate_projÚup_projr9   r	   r:   Úactivation_fn)r=   r(   r0   r>   s      €r?   r-   zLlama4TextMLP.__init__Y   s‹   ø€ Ü‰ÑÔàÐ$Ø &× 8Ñ 8ÐàˆŒÜŸ™ 6×#5Ñ#5Ð7HÈuÔUˆŒÜ—y‘y ×!3Ñ!3Ð5FÈUÔSˆŒÜŸ™Ð#4°f×6HÑ6HÈuÔUˆŒÜ# F×$5Ñ$5Ñ6ˆÕr@   c                 óˆ   — | j                  | j                  |«      «      | j                  |«      z  }| j                  |«      S ©N)r_   r]   r^   r9   )r=   Úxr9   s      r?   rO   zLlama4TextMLP.forwarde   s7   € Ø×&Ñ& t§~¡~°aÓ'8Ó9¸D¿L¹LÈ»OÑKˆ	Ø�~‰~˜iÓ(Ð(r@   ra   ©rP   rQ   rR   r-   rO   rT   rU   s   @r?   rW   rW   X   s   ø„ õ
7ö)r@   rW   c                   ó8   ‡ — e Zd Zddefˆ fd„Zd„ Zd„ Zd„ Zˆ xZS )ÚLlama4TextL2NormÚepsc                 ó0   •— t         ‰| �  «        || _        y ra   )r,   r-   rf   )r=   rf   r>   s     €r?   r-   zLlama4TextL2Norm.__init__k   s   ø€ Ü‰ÑÔØˆ�r@   c                 óŒ   — |t        j                  |j                  d«      j                  dd¬«      | j                  z   «      z  S ©Nr+   rD   T)Úkeepdim©r5   ÚrsqrtÚpowÚmeanrf   ©r=   rb   s     r?   Ú_normzLlama4TextL2Norm._normo   ó4   € Ø”5—;‘;˜qŸu™u Q›xŸ}™}¨R¸˜}Ó>ÀÇÁÑIÓJÑJÐJr@   c                 ó^   — | j                  |j                  «       «      j                  |«      S ra   )rp   ÚfloatÚtype_asro   s     r?   rO   zLlama4TextL2Norm.forwardr   s"   € Ø�z‰z˜!Ÿ'™'›)Ó$×,Ñ,¨QÓ/Ð/r@   c                 ó    — d| j                   › �S )Nzeps=©rf   ©r=   s    r?   Ú
extra_reprzLlama4TextL2Norm.extra_repru   s   € Ø�d—h‘h�ZÐ Ð r@   )g�íµ ÷Æ°>)	rP   rQ   rR   rs   r-   rp   rO   rx   rT   rU   s   @r?   re   re   j   s   ø„ ñ˜Eõ òKò0ö!r@   re   c                   ó2   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zd„ Zˆ xZS )ÚLlama4TextRMSNormc                 óŠ   •— t         ‰| �  «        || _        t        j                  t        j                  |«      «      | _        y)z<
        Llama4RMSNorm is equivalent to T5LayerNorm
        N)r,   r-   rf   r3   r4   r5   ÚonesÚweight)r=   r1   rf   r>   s      €r?   r-   zLlama4TextRMSNorm.__init__z   s0   ø€ ô 	‰ÑÔØˆŒÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆ�r@   c                 óŒ   — |t        j                  |j                  d«      j                  dd¬«      | j                  z   «      z  S ri   rk   ro   s     r?   rp   zLlama4TextRMSNorm._norm‚   rq   r@   c                 ó|   — | j                  |j                  «       «      j                  |«      }|| j                  z  S ra   )rp   rs   rt   r}   )r=   rb   Úoutputs      r?   rO   zLlama4TextRMSNorm.forward…   s0   € Ø—‘˜AŸG™G›IÓ&×.Ñ.¨qÓ1ˆØ˜Ÿ™Ñ#Ð#r@   c                 ó^   — t        | j                  j                  «      › d| j                  › �S )Nz, eps=)Útupler}   rH   rf   rw   s    r?   rx   zLlama4TextRMSNorm.extra_repr‰   s'   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$·(±(°Ð<Ð<r@   )gñhãˆµøä>)rP   rQ   rR   r-   rp   rO   rx   rT   rU   s   @r?   rz   rz   y   s   ø„ õ<òKò$ö=r@   rz   c                   ó(   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ xZS )ÚLlama4Routerc                 ó–   •— t         ‰| �  |j                  |j                  d¬«       |j                  | _        |j
                  | _        y rY   )r,   r-   r1   r.   r/   Únum_experts_per_tokÚtop_kr<   s     €r?   r-   zLlama4Router.__init__Ž   s>   ø€ Ü‰Ñ˜×+Ñ+¨V×-EÑ-EÈEÐÔRØ!×3Ñ3ˆÔØ×/Ñ/ˆ�
r@   c                 ót  •— t         ‰| �  |«      }t        j                  || j                  d¬«      \  }}t        j
                  |t        d«      «      j                  d||«      }t        j                  j                  j                  |j                  «       «      j                  |j                  «      }||fS )Nr#   rE   z-inf)r,   rO   r5   Útopkr‡   Ú	full_likers   Úscatter_r3   Ú
functionalÚsigmoidÚtoÚdtype)r=   rA   Úrouter_logitsÚrouter_top_valueÚrouter_indicesÚrouter_scoresr>   s         €r?   rO   zLlama4Router.forward“   s’   ø€ Ü™™¨Ó6ˆÜ+0¯:©:°mÀTÇZÁZÐUVÔ+WÑ(Ð˜.ÜŸ™¨´u¸V³}ÓE×NÑNÈqÐR`ÐbrÓsˆÜŸ™×+Ñ+×3Ñ3°M×4GÑ4GÓ4IÓJ×MÑMÈm×NaÑNaÓbˆØ˜mÐ+Ð+r@   rc   rU   s   @r?   r„   r„   �   s   ø„ ô0÷
,ð ,r@   r„   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚLlama4TextMoec                 óè   •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        t        |«      | _	        t        |«      | _        t        |«      | _        y ra   )r,   r-   r†   r‡   r1   Ú
hidden_dimr.   r/   r'   Úexpertsr„   ÚrouterrW   Úshared_expertr<   s     €r?   r-   zLlama4TextMoe.__init__�   s[   ø€ Ü‰ÑÔØ×/Ñ/ˆŒ
Ø ×,Ñ,ˆŒØ!×3Ñ3ˆÔÜ(¨Ó0ˆŒÜ" 6Ó*ˆŒÜ*¨6Ó2ˆÕr@   c                 óÎ  — |j                  d| j                  «      }| j                  |«      \  }}|j                  |j                  d   d«      }||j                  dd«      j                  dd«      z  }| j                  |«      }| j                  |«      }|j                  |j                  |j                  d   d|j                  d   «      j                  d¬«      «       ||fS )NrD   r#   r   rE   )
Úreshaper—   r™   ÚrepeatrH   Ú	transposer˜   rš   Úadd_Úsum)r=   rA   r“   r�   Ú	routed_inÚ
routed_outÚouts          r?   rO   zLlama4TextMoe.forward¦   sÖ   € Ø%×-Ñ-¨b°$·/±/ÓBˆØ'+§{¡{°=Ó'AÑ$ˆ�}Ø!×(Ñ(¨×)<Ñ)<¸QÑ)?ÀÓCˆ	Ø × 7Ñ 7¸¸1Ó =× EÑ EÀbÈ!Ó LÑLˆ	Ø—\‘\ )Ó,ˆ
Ø× Ñ  Ó/ˆØ�‰�×#Ñ# M×$7Ñ$7¸Ñ$:¸BÀ
×@PÑ@PÐQSÑ@TÓU×YÑYÐ^_ÐYÓ`ÔaØ�MÐ!Ð!r@   rc   rU   s   @r?   r•   r•   œ   s   ø„ ô3ö"r@   r•   c                   óÄ   ‡ — e Zd ZU ej                  ed<   ddefˆ fd„Ze	 	 	 ddedz  de	d   de
dz  ded	ef   fd
„«       Z ej                  «       ed„ «       «       Zˆ xZS )ÚLlama4TextRotaryEmbeddingÚinv_freqNr(   c                 ó®  •— t         ‰| �  «        |j                  | _        |j                  | _        || _        | j
                  j                  d   | _        | j                  }| j                  dk7  rt        | j                     } || j
                  |«      \  }| _
        | j                  d|d¬«       | j                  d|j                  «       d¬«       y )NÚ	rope_typeÚdefaultr¦   F©Ú
persistentÚoriginal_inv_freq)r,   r-   Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenr(   Úrope_parametersr¨   Úcompute_default_rope_parametersr   Úattention_scalingÚregister_bufferÚclone)r=   r(   ÚdeviceÚrope_init_fnr¦   r>   s        €r?   r-   z"Llama4TextRotaryEmbedding.__init__¶   s¶   ø€ Ü‰ÑÔØ"(×"@Ñ"@ˆÔØ$*×$BÑ$BˆÔ!àˆŒàŸ™×4Ñ4°[ÑAˆŒØ!%×!EÑ!EˆØ�>‰>˜YÒ&Ü.¨t¯~©~Ñ>ˆLÙ+7¸¿¹ÀVÓ+LÑ(ˆ�$Ô(à×Ñ˜Z¨¸eÐÔDØ×ÑÐ0°(·.±.Ó2BÈuÐÕUr@   rµ   ztorch.deviceÚseq_lenrB   ztorch.Tensorc                 ó  — | j                   d   }t        | dd«      xs | j                  | j                  z  }d}d|t	        j
                  d|dt        j                  ¬«      j                  |t        j                  ¬«      |z  z  z  }||fS )	a¨  
        Computes the inverse frequencies according to the original RoPE implementation
        Args:
            config ([`~transformers.PreTrainedConfig`]):
                The model configuration.
            device (`torch.device`):
                The device to use for initialization of the inverse frequencies.
            seq_len (`int`, *optional*):
                The current sequence length. Unused for this type of RoPE.
        Returns:
            Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
            post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
        Ú
rope_thetaÚhead_dimNç      ð?r   r+   ©r�   )rµ   r�   )	r°   Úgetattrr1   Únum_attention_headsr5   ÚarangeÚint64rŽ   rs   )r(   rµ   r·   ÚbaserF   Úattention_factorr¦   s          r?   r±   z9Llama4TextRotaryEmbedding.compute_default_rope_parametersÆ   s�   € ð& ×%Ñ% lÑ3ˆÜ�f˜j¨$Ó/Òc°6×3EÑ3EÈ×IcÑIcÑ3cˆàÐð Ø”U—\‘\ ! S¨!´5·;±;Ô?×BÑBÈ&ÔX]×XcÑXcÐBÓdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r@   c                 óv  — | j                   d d d …d f   j                  «       j                  |j                  d   dd«      }|d d …d d d …f   j                  «       }t	        |j
                  j                  t        «      r/|j
                  j                  dk7  r|j
                  j                  nd}t        |d¬«      5  |j                  |j
                  «      |z  j                  dd«      }t        j                  t        j                  |«      |«      }|| j                  z  }d d d «       |S # 1 sw Y   S xY w)	Nr   rD   r#   ÚmpsÚcpuF)Údevice_typeÚenabledr+   )r¦   rs   ÚexpandrH   Ú
isinstancerµ   ÚtypeÚstrr    rŽ   rž   r5   ÚpolarÚ	ones_liker²   )r=   rb   Úposition_idsÚinv_freq_expandedÚposition_ids_expandedrÆ   ÚfreqsÚ	freqs_ciss           r?   rO   z!Llama4TextRotaryEmbedding.forwardå   s  € ð !ŸM™M¨$²°4¨-Ñ8×>Ñ>Ó@×GÑGÈ×HZÑHZÐ[\ÑH]Ð_aÐcdÓeÐØ ,ªQ°²a¨ZÑ 8× >Ñ >Ó @Ðä'1°!·(±(·-±-ÄÔ'EÈ!Ï(É(Ï-É-Ð[`ÒJ`�a—h‘h—m’mÐfkˆÜ¨¸UÔCñ 	;Ø&×)Ñ)¨!¯(©(Ó3Ð6KÑK×VÑVÐWXÐZ[Ó\ˆEÜŸ™¤E§O¡O°EÓ$:¸EÓBˆIØ! D×$:Ñ$:Ñ:ˆI÷	;ð
 Ð÷	;ð
 Ðús   Â=A'D.Ä.D8ra   )NNN)rP   rQ   rR   r5   rS   Ú__annotations__r%   r-   Ústaticmethodr   Úintr‚   rs   r±   Úno_gradr   rO   rT   rU   s   @r?   r¥   r¥   ²   s™   ø… Ø�l‰lÓñVÐ/õ Vð  à*.Ø+/Ø"ñ*Ø  4Ñ'ð*à˜Ñ(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ñ	%ò	*ó ð*ð< €U‡]�]ƒ_Øñ
ó ó ô
r@   r¥   ÚxqÚxkrÒ   rB   c           	      ó&  — t        j                   | j                  «       j                  g | j                  d d ¢d‘d‘­Ž «      }t        j                   |j                  «       j                  g |j                  d d ¢d‘d‘­Ž «      }t        j
                  ||d d …d d …d d d …f   z  «      j                  d«      }t        j
                  ||d d …d d …d d d …f   z  «      j                  d«      }|j                  | «      |j                  |«      fS )NrD   r+   r   )r5   Úview_as_complexrs   rœ   rH   Úview_as_realÚflattenrt   )r×   rØ   rÒ   Úxq_Úxk_Úxq_outÚxk_outs          r?   Úapply_rotary_embrá   ô   sñ   € ô
 ×
Ñ
Ð 2 §¡£
× 2Ñ 2Ð I°B·H±H¸S¸b°MÐ IÀ2Ð IÀqÒ IÓ
J€CÜ
×
Ñ
Ð 2 §¡£
× 2Ñ 2Ð I°B·H±H¸S¸b°MÐ IÀ2Ð IÀqÒ IÓ
J€CÜ×Ñ  i²²1°dºA°Ñ&>Ñ >Ó?×GÑGÈÓJ€FÜ×Ñ  i²²1°dºA°Ñ&>Ñ >Ó?×GÑGÈÓJ€FØ�>‰>˜"Ó˜vŸ~™~¨bÓ1Ð1Ð1r@   rA   Ún_repc                 óª   — | j                   \  }}}}|dk(  r| S | dd…dd…ddd…dd…f   j                  |||||«      } | j                  |||z  ||«      S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    r#   N)rH   rÈ   rœ   )rA   râ   ÚbatchÚnum_key_value_headsÚslenrº   s         r?   Ú	repeat_kvrç      so   € ð
 2?×1DÑ1DÑ.€EÐ  hØ�‚zØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐBUÐW\Ð^bÐdlÓm€MØ× Ñ  Ð(;¸eÑ(CÀTÈ8ÓTÐTr@   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutc                 óÈ  — t        || j                  «      }t        || j                  «      }	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   rD   rE   ©ÚpÚtrainingr#   )rç   Únum_key_value_groupsr5   Úmatmulrž   r3   rŒ   Úsoftmaxrî   rò   Ú
contiguous©rè   ré   rê   rë   rì   rí   rî   ÚkwargsÚ
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r?   Úeager_attention_forwardrý     sÈ   € ô ˜3 × ;Ñ ;Ó<€JÜ˜U F×$?Ñ$?Ó@€Lä—<‘<  z×';Ñ';¸A¸qÓ'AÓBÀWÑL€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2Ð(Ó>€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨\Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r@   c                 óâ  — t        || j                  «      }t        || j                  «      }	t        j                  ||j	                  dd«      «      | j
                  dz  z  }
|�|
|z   }
t        j                  j                  |
d¬«      }
t        j                  j                  |
|| j                  ¬«      }
t        j                  |
|	«      }|j	                  dd«      j                  «       }||
fS )Nr+   r   ç      à¿rD   rE   rð   r#   )rç   ró   r5   rô   rž   rº   r3   rŒ   rõ   rî   rò   rö   r÷   s               r?   Úvision_eager_attention_forwardr   '  sÒ   € ô ˜3 × ;Ñ ;Ó<€JÜ˜U F×$?Ñ$?Ó@€Lä—<‘<  z×';Ñ';¸A¸qÓ'AÓBÀVÇ_Á_ÐVZÑEZÑZ€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2Ð(Ó>€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨\Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r@   c                   ó  ‡ — e Zd ZdZdefˆ fd„Z	 ddej                  deej                  ej                  f   dej                  dz  de	dz  d	e
e   d
eej                  ej                  dz  eej                     dz  f   fd„Zˆ xZS )ÚLlama4TextAttentionz=Multi-headed attention from 'Attention Is All You Need' paperr(   c                 ó²  •— t         ‰| �  «        || _        || _        t	        |d|j
                  |j                  z  «      | _        |j                  | _        |j                  |j                  z  | _	        |j                  | _        | j                  dz  | _
        |j                  | _        |j                  | _        |j                  | _        |j                  | _        d| _        |j                   |   | _        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                  z  |j
                  |j(                  ¬«      | _        | j                  j2                  r(| j"                  rt5        |j6                  «      | _        y y y )Nrº   rÿ   TrZ   )r,   r-   r(   Ú	layer_idxr½   r1   r¾   rº   rå   ró   rí   Ú
attn_scaleÚfloor_scaleÚattn_temperature_tuningÚattention_dropoutÚ	is_causalÚno_rope_layersÚuse_roper3   r\   Úattention_biasÚq_projÚk_projÚv_projÚo_projÚuse_qk_normre   Úrms_norm_epsÚqk_norm©r=   r(   r  r>   s      €r?   r-   zLlama4TextAttention.__init__C  sÓ  ø€ Ü‰ÑÔØˆŒØ"ˆŒÜ ¨
°F×4FÑ4FÈ&×JdÑJdÑ4dÓeˆŒØ#)×#=Ñ#=ˆÔ Ø$*×$>Ñ$>À&×B\ÑB\Ñ$\ˆÔ!Ø#)×#=Ñ#=ˆÔ Ø—}‘} dÑ*ˆŒØ ×+Ñ+ˆŒØ!×-Ñ-ˆÔØ'-×'EÑ'EˆÔ$Ø!'×!9Ñ!9ˆÔØˆŒØ×-Ñ-¨iÑ8ˆŒÜ—i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfô
ˆŒô —i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfô
ˆŒô —i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfô
ˆŒô —i‘iØ×&Ñ&¨¯©Ñ6¸×8JÑ8JÐQW×QfÑQfô
ˆŒð �;‰;×"Ò" t§}¢}Ü+¨F×,?Ñ,?Ó@ˆD�Lð (5Ð"r@   NrA   Úposition_embeddingsrì   Úpast_key_valuesrø   rB   c                 óÞ  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      } | j	                  |«      j                  g |¢d‘| j                  ‘­Ž }	| j                  |«      j                  |«      j                  dd«      }
| j                  r)t        ||	|j                  |j                  «      «      \  }}	t        | d«      r"| j                  |«      }| j                  |	«      }	| j                  rþ| j                  sò|�|j                  | j                  «      nd}t!        j"                  |j                   d   |j                  ¬«      |z   }t!        j$                  t!        j&                  |j)                  «       dz   | j*                  z  «      «      | j,                  z  dz   }|j                  d|d   ddf«      j/                  g |¢d‘d‘­«      }||z  j                  |j0                  «      }|j                  dd«      }|	j                  dd«      }	|� |j3                  |	|
| j                  «      \  }	}
t5        j6                  | j8                  j:                  t<        «      } || ||	|
|f| j>                  sdn| j@                  | jB                  d	œ|¤Ž\  }} |jD                  g |¢d‘­Ž jG                  «       }| jI                  |«      }||fS )
NrD   r#   r+   r  r   ©rµ   r»   ç        )rî   rí   )%rH   rº   r  rG   r  r  rž   r  rá   rŽ   rµ   Úhasattrr  r  Úget_seq_lengthr  r5   r¿   Úlog1pÚfloorrs   r  r  rÈ   r�   Úupdater   Úget_interfacer(   Ú_attn_implementationrý   rò   r  rí   rœ   rö   r  )r=   rA   r  rì   r  rø   Úinput_shapeÚhidden_shapeÚquery_statesrù   rú   Úpast_seen_tokensÚ	positionsÚattn_scalesÚattention_interfacerü   rû   s                    r?   rO   zLlama4TextAttention.forwarda  sÓ  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓDˆØ4�T—[‘[ Ó/×4Ñ4ÐU°kÐUÀ2ÐUÀtÇ}Á}ÒUˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆà�=Š=Ü'7Ø˜jÐ*=×*@Ñ*@À×ATÑATÓ*Uó(Ñ$ˆL˜*ô �4˜Ô#ØŸ<™<¨Ó5ˆLØŸ™ jÓ1ˆJð ×'Ò'°·²ØQ`ÐQl˜×=Ñ=¸d¿n¹nÔMÐrsÐÜŸ™ ]×%8Ñ%8¸Ñ%;ÀM×DXÑDXÔYÐ\lÑlˆIä—‘œEŸK™K¨¯©Ó):¸SÑ)@ÀD×DTÑDTÑ(TÓUÓVÐY]×YhÑYhÑhÐknÑnð ð &×*Ñ*¨A¨{¸2©ÀÀ1Ð+EÓF×MÑMÐNbÐP[ÐNbÐ]^ÐNbÐ`aÑNbÓcˆKØ(¨;Ñ6×:Ñ:¸<×;MÑ;MÓNˆLà#×-Ñ-¨a°Ó3ˆØ×)Ñ)¨!¨QÓ/ˆ
àÐ&Ø'6×'=Ñ'=¸jÈ,ÐX\×XfÑXfÓ'gÑ$ˆJ˜ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r@   ra   )rP   rQ   rR   Ú__doc__r%   r-   r5   rS   r‚   r
   r   r   rO   rT   rU   s   @r?   r  r  @  sª   ø„ ÙGðAÐ/õ AðF )-ñ8)à—|‘|ð8)ð # 5§<¡<°·±Ð#=Ñ>ð8)ð Ÿ™ tÑ+ð	8)ð
  ™ð8)ð Ð-Ñ.ð8)ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸¿¹Ñ2EÈÑ2LÐLÑ	M÷8)r@   r  c                   ó:  ‡ — e Zd Zˆ fd„Z	 	 	 	 	 ddej
                  dej
                  dz  dej                  dz  dedz  dedz  de	ej
                  ej
                  f   dz  d	e
e   d
e	ej                  e	ej                  ej                  f   dz  f   fd„Zˆ xZS )ÚLlama4TextDecoderLayerc                 ó¤  •— t         ‰| �  «        |j                  | _        || _        t	        ||«      | _        ||j                  v | _        | j                  rt        |«      | _	        nt        ||j                  ¬«      | _	        t        |j                  |j                  ¬«      | _        t        |j                  |j                  ¬«      | _        y )N)r0   rv   )r,   r-   r1   r  r  Ú	self_attnÚ
moe_layersÚis_moe_layerr•   Úfeed_forwardrW   Úintermediate_size_mlprz   r  Úinput_layernormÚpost_attention_layernormr  s      €r?   r-   zLlama4TextDecoderLayer.__init__�  s¦   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔØ"ˆŒÜ,¨V°YÓ?ˆŒØ%¨×):Ñ):Ð:ˆÔØ×ÒÜ -¨fÓ 5ˆDÕä -¨fÈ×HdÑHdÔ eˆDÔä0°×1CÑ1CÈ×I\ÑI\Ô]ˆÔÜ(9¸&×:LÑ:LÐRX×ReÑReÔ(fˆÕ%r@   NrA   rì   rÎ   r  Ú	use_cacher  rø   rB   c           	      ó  — |}| j                  |«      } | j                  d|||||dœ|¤Ž\  }	}
||	z   }|}| j                  |«      }| j                  |«      }| j                  r|\  }}
||j                  |j                  «      z   }|S )N)rA   r  rì   r  r3  © )r1  r,  r2  r/  r.  rG   rH   )r=   rA   rì   rÎ   r  r3  r  rø   ÚresidualÚattention_statesÚ_s              r?   rO   zLlama4TextDecoderLayer.forward«  sµ   € ð !ˆà×,Ñ,¨]Ó;ˆð -˜dŸn™nð 
Ø'Ø 3Ø)Ø+Øñ
ð ñ
ÑÐ˜!ð !Ð#3Ñ3ˆð !ˆØ×5Ñ5°mÓDˆØ×)Ñ)¨-Ó8ˆØ×ÒØ,ÑˆM˜1Ø  =×#5Ñ#5°h·n±nÓ#EÑEˆØÐr@   )NNNFN)rP   rQ   rR   r-   r5   rS   Ú
LongTensorr
   Úboolr‚   r   r   ÚFloatTensorrO   rT   rU   s   @r?   r*  r*  œ  sÖ   ø„ ôgð" /3Ø04Ø(,Ø!&ØHLñ à—|‘|ð ð Ÿ™ tÑ+ð ð ×&Ñ&¨Ñ-ð	 ð
  ™ð ð ˜$‘;ð ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð ð Ð-Ñ.ð ð 
ˆu× Ñ  %¨×(9Ñ(9¸5×;LÑ;LÐ(LÑ"MÐPTÑ"TÐTÑ	U÷ r@   r*  c                   ót   ‡ — e Zd ZU eed<   dZdZdgZdZdZ	dZ
dZdZ ej                  «       ˆ fd„«       Zˆ xZS )ÚLlama4PreTrainedModelr(   )ÚimageÚtextTr  Fc                 óÈ  •— t         ‰| �  |«       t        | j                  d«      r| j                  j                  n| j                  j
                  j                  }t        |t        «      rEt        j                  |j                  d|¬«       t        j                  |j                  d|¬«       y t        |t        «      r:t        j                  |j                  |j                  |j                  «      «       y t        |t         «      rWt        j                  |j"                  |j$                  ¬«       t        j                  |j&                  |j$                  ¬«       y y )NÚinitializer_ranger  )rn   Ústd)rB  )r,   Ú_init_weightsr  r(   rA  Útext_configrÉ   r'   ÚinitÚnormal_r7   r9   ÚLlama4VisionRotaryEmbeddingÚcopy_Úfreqs_ciÚ_compute_freqs_ciÚLlama4VisionModelÚclass_embeddingÚscaleÚpositional_embedding_vlm)r=   rè   rB  r>   s      €r?   rC  z#Llama4PreTrainedModel._init_weightsÛ  sí   ø€ ä‰Ñ˜fÔ%ô �t—{‘{Ð$7Ô8ð �K‰K×)Ò)à—‘×(Ñ(×:Ñ:ð 	ô
 �fÔ/Ô0Ü�L‰L˜×,Ñ,°3¸CÕ@Ü�L‰L˜×)Ñ)°¸Ö=Ü˜Ô ;Ô<Ü�J‰J�v—‘¨×(@Ñ(@ÀÇÁÓ(OÕPÜ˜Ô 1Ô2Ü�L‰L˜×/Ñ/°V·\±\ÕBÜ�L‰L˜×8Ñ8¸f¿l¹lÖKð 3r@   )rP   rQ   rR   r$   rÓ   Úinput_modalitiesÚsupports_gradient_checkpointingÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_can_compile_fullgraphÚ_supports_attention_backendr5   rÖ   rC  rT   rU   s   @r?   r=  r=  Î  sW   ø… àÓØ(ÐØ&*Ð#Ø#4Ð"5ÐØ ÐØ€NØÐà!ÐØ"&Ðà€U‡]�]ƒ_óLó ôLr@   r=  c                   ó(  ‡ — e Zd ZU dgZdZdZeed<   ee	e
dœZdefˆ fd„Zeeee	 	 	 	 	 	 d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dz  dee   deez  fd„«       «       «       «       Zˆ xZS )ÚLlama4TextModelr*  Úmodel)r?  r(   )Ú
attentionsrA   r�   c           	      ó  •— t         ‰| �  |«       |j                  | _        |j                  | _        t        j                  |j                  |j                  | j                  «      | _        t        j                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        t        |j                  |j                  ¬«      | _        t#        |¬«      | _        d| _        | j)                  «        y c c}w )Nrv   ©r(   F)r,   r-   Úpad_token_idÚpadding_idxÚ
vocab_sizer3   Ú	Embeddingr1   Úembed_tokensÚ
ModuleListÚrangeÚnum_hidden_layersr*  Úlayersrz   r  Únormr¥   Ú
rotary_embÚgradient_checkpointingÚ	post_initr  s      €r?   r-   zLlama4TextModel.__init__ù  sÆ   ø€ Ü‰Ñ˜Ô Ø!×.Ñ.ˆÔØ ×+Ñ+ˆŒäŸL™L¨×):Ñ):¸F×<NÑ<NÐPT×P`ÑP`ÓaˆÔÜ—m‘mÜHMÈf×NfÑNfÓHgÖh¸9Ô# F¨IÕ6Òhó
ˆŒô & f×&8Ñ&8¸f×>QÑ>QÔRˆŒ	Ü3¸6ÔBˆŒØ&+ˆÔ#ð 	�‰Õùò is   ÂDNÚ	input_idsrì   rÎ   r  Úinputs_embedsr3  rø   rB   c           
      ó4  — |d u |d uz  rt        d«      ‚|€>| j                  |j                  | j                  j                  j                  «      «      }|r|€t        | j                  ¬«      }|€V|�|j                  «       nd}t        j                  |j                  d   |j                  ¬«      |z   }|j                  d«      }t        |x}	t        «      s)| j                  ||||dœ}
t        d
i |
¤Žt        d
i |
¤Ždœ}	|}| j!                  ||«      }t#        | j$                  d | j                  j&                   «      D ].  \  }} ||f|	| j                  j(                  |      ||||dœ|¤Ž}Œ0 | j+                  |«      }t-        ||r|¬	«      S d ¬	«      S )Nú:You must specify exactly one of input_ids or inputs_embedsr\  r   r#   r  )r(   rk  rì   r  rÎ   )Úfull_attentionÚchunked_attention)rì   rÎ   r  r3  r  )Úlast_hidden_stater  r5  )Ú
ValueErrorra  rŽ   r}   rµ   r   r(   r  r5   r¿   rH   Ú	unsqueezerÉ   Údictr   r   rg  Ú	enumeratere  rd  Úlayer_typesrf  r   )r=   rj  rì   rÎ   r  rk  r3  rø   r$  Úcausal_mask_mappingÚmask_kwargsrA   Úfreq_cisÚiÚdecoder_layers                  r?   rO   zLlama4TextModel.forward	  sÄ  € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø ×-Ñ-¨i¯l©l¸4×;LÑ;L×;SÑ;S×;ZÑ;ZÓ.[Ó\ˆMá˜Ð0Ü*°$·+±+Ô>ˆOàÐØCRÐC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<™<¨×(;Ñ(;¸AÑ(>À}×G[ÑG[Ô\Ð_oÑoˆLØ'×1Ñ1°!Ó4ˆLô °Ð?Ð-ÄÔFð Ÿ+™+Ø!.Ø"0Ø#2Ø ,ñˆKô #5Ñ"C°{Ñ"CÜ%?Ñ%NÀ+Ñ%Nñ#Ðð
 &ˆð —?‘? =°,Ó?ˆä )¨$¯+©+Ð6U¸¿¹×8UÑ8UÐ*VÓ Wò 		ÑˆAˆ}Ù)Øðà2°4·;±;×3JÑ3JÈ1Ñ3MÑNØ)Ø /Ø#Ø$,ñð ñ‰Mð		ð Ÿ	™	 -Ó0ˆä&Ø+Ù/8˜Oô
ð 	
à>Bô
ð 	
r@   )NNNNNN)rP   rQ   rR   Ú_no_split_modulesÚbase_model_prefixrO  r%   rÓ   r  r*  r•   Ú_can_record_outputsr-   r   r!   r"   r   r5   r9  rS   r
   r;  r:  r   r   r‚   r   rO   rT   rU   s   @r?   rX  rX  í  s  ø… à1Ð2ÐØÐØ ÐØÓà)Ø/Ø&ñÐðÐ/õ ð  ØØØð .2Ø.2Ø04Ø(,Ø26Ø!%ñ<
à×#Ñ# dÑ*ð<
ð Ÿ™ tÑ+ð<
ð ×&Ñ&¨Ñ-ð	<
ð
  ™ð<
ð ×(Ñ(¨4Ñ/ð<
ð ˜$‘;ð<
ð Ð+Ñ,ð<
ð 
Ð(Ñ	(ò<
ó ó ó  ó ô<
r@   rX  c                   óT  ‡ — e Zd ZU dgZdZddiZddiZeed<   defˆ fd„Z	e
e	 	 	 	 	 	 	 	 d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j                  d	z  ded	z  deej                  z  dee   deez  fd„«       «       Zˆ xZS )ÚLlama4ForCausalLMr*  Úlanguage_modelzlm_head.weightzmodel.embed_tokens.weightÚlm_headÚcolwise_gather_outputr(   c                 óè   •— t         ‰| �  |«       t        |«      | _        |j                  | _        t        j                  |j                  |j                  d¬«      | _        | j                  «        y rY   )
r,   r-   rX  rY  r_  r3   r\   r1   r�  ri  r<   s     €r?   r-   zLlama4ForCausalLM.__init__S  sU   ø€ Ü‰Ñ˜Ô Ü$ VÓ,ˆŒ
Ø ×+Ñ+ˆŒÜ—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒð 	�‰Õr@   Nrj  rì   rÎ   r  rk  Úlabelsr3  Úlogits_to_keeprø   rB   c	           
      ój  —  | j                   d||||||dœ|	¤Ž}
|
d   }t        |t        «      rt        | d«      n|}| j	                  |dd…|dd…f   «      }d}|�* | j
                  d||| j                  j                  dœ|	¤Ž}t        |||
j                  |
j                  |
j                  ¬«      S )az  
        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
        >>> from transformers import AutoTokenizer, Llama4ForCausalLM

        >>> model = Llama4ForCausalLM.from_pretrained("meta-llama4/Llama4-2-7b-hf")
        >>> tokenizer = AutoTokenizer.from_pretrained("meta-llama4/Llama4-2-7b-hf")

        >>> prompt = "Hey, are you conscious? Can you talk to me?"
        >>> inputs = tokenizer(prompt, return_tensors="pt")

        >>> # Generate
        >>> generate_ids = model.generate(inputs.input_ids, max_length=30)
        >>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        "Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
        ```)rj  rì   rÎ   r  rk  r3  r   N)Úlogitsr„  r_  )Úlossr‡  r  rA   rZ  r5  )rY  rÉ   rÕ   Úslicer�  Úloss_functionr(   r_  r   r  rA   rZ  )r=   rj  rì   rÎ   r  rk  r„  r3  r…  rø   ÚoutputsrA   Úslice_indicesr‡  rˆ  s                  r?   rO   zLlama4ForCausalLM.forward\  sØ   € ðH �$—*‘*ð 
ØØ)Ø%Ø+Ø'Øñ
ð ñ
ˆð   ™
ˆä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜mªA¨}ºaÐ,?Ñ@ÓAˆØˆØÐØ%�4×%Ñ%Ðp¨V¸FÈtÏ{É{×OeÑOeÑpÐioÑpˆDä%ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r@   )NNNNNNNr   )rP   rQ   rR   r{  r|  Ú_tied_weights_keysÚ_tp_planr%   rÓ   r-   r   r   r5   r9  rS   r
   r;  r:  rÕ   r   r   r‚   r   rO   rT   rU   s   @r?   r  r  L  s&  ø… Ø1Ð2ÐØ(ÐØ*Ð,GÐHÐØÐ2Ð3€HØÓðÐ/õ ð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñ:
à×#Ñ# dÑ*ð:
ð Ÿ™ tÑ+ð:
ð ×&Ñ&¨Ñ-ð	:
ð
  ™ð:
ð ×(Ñ(¨4Ñ/ð:
ð × Ñ  4Ñ'ð:
ð ˜$‘;ð:
ð ˜eŸl™lÑ*ð:
ð Ð+Ñ,ð:
ð 
Ð'Ñ	'ò:
ó ó ô:
r@   r  zQ
    Base class for Llava causal language model (or autoregressive) outputs.
    ©Úcustom_introc                   óú   — 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)	ÚLlama4CausalLMOutputWithPasta3  
    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.
    Nrˆ  r‡  r  rA   rZ  Úimage_hidden_states)rP   rQ   rR   r(  rˆ  r5   r;  rÓ   r‡  r  r
   rA   r‚   rZ  r“  r5  r@   r?   r’  r’  ›  s‹   … ñð &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø$(€O�U˜T‘\Ó(Ø59€M�5˜×*Ñ*Ñ+¨dÑ2Ó9Ø26€J��e×'Ñ'Ñ(¨4Ñ/Ó6Ø48Ð˜×*Ñ*¨TÑ1Ô8r@   r’  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚLlama4VisionMLP2c                 ó~  •— t         ‰| �  «        |j                  | _        |j                  | _        t	        j
                  | j                  |j                  d¬«      | _        t	        j
                  |j                  |j                  d¬«      | _	        t	        j                  «       | _        |j                  | _        y rY   )r,   r-   r1   r0   r3   r\   Úprojector_input_dimÚfc1Úprojector_output_dimÚfc2ÚGELUr_   Úprojector_dropoutrî   r<   s     €r?   r-   zLlama4VisionMLP2.__init__º  s‡   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔØ!'×!9Ñ!9ˆÔÜ—9‘9˜T×3Ñ3°V×5OÑ5OÐV[Ô\ˆŒÜ—9‘9˜V×8Ñ8¸&×:UÑ:UÐ\aÔbˆŒÜŸW™W›YˆÔØ×/Ñ/ˆ�r@   c                 óÞ   — | j                  |«      }| j                  |«      }t        j                  || j                  | j                  ¬«      }| j                  | j                  |«      «      S )Nrð   )r˜  r_   ÚFrî   rò   rš  ©r=   rA   s     r?   rO   zLlama4VisionMLP2.forwardÃ  sT   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆÜŸ	™	 -°4·<±<È$Ï-É-ÔXˆØ×!Ñ! $§(¡(¨=Ó"9Ó:Ð:r@   rc   rU   s   @r?   r•  r•  ¹  s   ø„ ô0ö;r@   r•  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚLlama4MultiModalProjectorc                 ó¬   •— t         ‰| �  «        t        j                  |j                  j
                  |j                  j                  d¬«      | _        y rY   )	r,   r-   r3   r\   Úvision_configÚvision_output_dimrD  r1   Úlinear_1r<   s     €r?   r-   z"Llama4MultiModalProjector.__init__Ë  s?   ø€ Ü‰ÑÔÜŸ	™	Ø× Ñ ×2Ñ2Ø×Ñ×*Ñ*Øô
ˆ�r@   c                 ó(   — | j                  |«      }|S ra   )r¥  )r=   Úimage_featuresrA   s      r?   rO   z!Llama4MultiModalProjector.forwardÓ  s   € ØŸ™ nÓ5ˆØÐr@   rc   rU   s   @r?   r¡  r¡  Ê  s   ø„ ô
ör@   r¡  c           
      óJ  — | j                   \  }}}t        t        j                  |«      «      }| j	                  |||d«      } | j                  «       \  }}}}| 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                  «       }|j	                  |d|j                   d   «      }	|	S )NrD   r   r+   r#   r   )rH   rÕ   ÚmathÚsqrtrG   ÚsizeÚpermuterö   )
Úinput_tensorÚshuffle_ratioÚ
batch_sizeÚnum_patchesÚchannelsÚ
patch_sizeÚheightÚwidthÚreshaped_tensorÚoutput_tensors
             r?   Úpixel_shuffler·  Ø  s%  € à(4×(:Ñ(:Ñ%€J�˜XÜ”T—Y‘Y˜{Ó+Ó,€Jà×$Ñ$ Z°¸ZÈÓL€LØ*6×*;Ñ*;Ó*=Ñ'€J�˜˜xà"×'Ñ'¨
°F¼CÀÈÑ@UÓ<VÔX[Ð\dÐgtÑ\tÓXuÓv€OØ%×-Ñ-¨a°°A°qÓ9×DÑDÓF€Oà%×*Ñ*Ø”C˜ Ñ.Ó/´°U¸]Ñ5JÓ1KÌSÐQYÐ]jÐlmÑ]mÑQnÓMoó€Oð &×-Ñ-¨a°°A°qÓ9×DÑDÓF€Oà#×(Ñ(¨°R¸×9NÑ9NÈrÑ9RÓS€MØÐr@   c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚLlama4VisionPixelShuffleMLPc                 óÚ   •— t         ‰| �  «        |j                  | _        t        |j                  | j                  dz  z  «      | _        |j                  | _        t        |«      | _	        y r*   )
r,   r-   Úpixel_shuffle_ratiorÕ   r—  Ú	inner_dimr™  Ú
output_dimr•  Úmlpr<   s     €r?   r-   z$Llama4VisionPixelShuffleMLP.__init__í  sX   ø€ Ü‰ÑÔØ#)×#=Ñ#=ˆÔ Ü˜V×7Ñ7¸D×<TÑ<TÐVWÑ<WÑXÓYˆŒØ ×5Ñ5ˆŒÜ# FÓ+ˆ�r@   Úencoded_patchesrB   c                 óP   — t        || j                  «      }| j                  |«      S ra   )r·  r»  r¾  )r=   r¿  s     r?   rO   z#Llama4VisionPixelShuffleMLP.forwardô  s#   € Ü'¨¸×9QÑ9QÓRˆØ�x‰x˜Ó(Ð(r@   ©rP   rQ   rR   r-   r5   rS   rO   rT   rU   s   @r?   r¹  r¹  ì  s#   ø„ ô,ð) u§|¡|ð )¸¿¹÷ )r@   r¹  rI  c                 ó°   — |j                   }t        |j                  «      D ��cg c]  \  }}|dk(  s||dz
  k(  r|nd‘Œ }}} | j                  |Ž S c c}}w )Nr#   )Úndimrt  rH   rG   )rI  ré   rÃ  ry  ÚdrH   s         r?   Úreshape_for_broadcastrÅ  ú  sW   € Ø�:‰:€DÜ=FÀuÇ{Á{Ó=S×T±T°Q¸�!�q’&˜A ¨¡šM‰Q¨qÑ0ÐT€EÑTØˆ8�=‰=˜%Ð Ð ùó Us   ¥Ac                 óB  — t        j                   | j                  «       j                  g | j                  d d ¢d‘d‘­Ž «      }t        j                   |j                  «       j                  g |j                  d d ¢d‘d‘­Ž «      }t        ||¬«      }|j                  |j                  «      }t        j                  ||z  «      j                  d«      }t        j                  ||z  «      j                  d«      }|j                  | «      |j                  |«      fS )NrD   r+   )rI  ré   r   )r5   rÚ   rs   rœ   rH   rÅ  rŽ   rµ   rÛ   rÜ   rt   )ré   rê   rI  Úquery_Úkey_Ú	query_outÚkey_outs          r?   Úvision_apply_rotary_embrË     sø   € ô
 ×"Ñ"Ð#8 5§;¡;£=×#8Ñ#8Ð#R¸%¿+¹+ÀcÀrÐ:JÐ#RÈBÐ#RÐPQÒ#RÓS€FÜ× Ñ Ð!4 §¡£×!4Ñ!4Ð!L°c·i±iÀÀ°nÐ!LÀbÐ!LÈ!Ò!LÓM€DÜ$¨h¸fÔE€HØ�{‰{˜6Ÿ=™=Ó)€HÜ×"Ñ" 6¨HÑ#4Ó5×=Ñ=¸aÓ@€IÜ× Ñ  ¨¡Ó1×9Ñ9¸!Ó<€GØ×Ñ˜UÓ# W§_¡_°SÓ%9Ð9Ð9r@   c                   óò   ‡ — e Zd Zdefˆ fd„Z	 	 ddej                  dej                  dej                  dz  dedz  dee	   d	e
ej                  ej                  dz  e
ej                     dz  f   fd
„Zˆ xZS )ÚLlama4VisionAttentionr(   c                 óø  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        |j                  |j
                  z  | _        d| _        |j                  | _	        | j                  dz  | _
        t        j                  | j                  | j                  | j                  z  d¬«      | _        t        j                  | j                  | j                  | j                  z  d¬«      | _        t        j                  | j                  | j                  | j                  z  d¬«      | _        t        j                  | j                  | j                  z  | j                  d¬«      | _        y )Nr#   rÿ   TrZ   )r,   r-   r(   r1   Ú	embed_dimr¾   Ú	num_headsrº   ró   r  rí   r3   r\   r  r  r  r  r<   s     €r?   r-   zLlama4VisionAttention.__init__  s  ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØ×*Ñ*¨f×.HÑ.HÑHˆŒØ$%ˆÔ!Ø!'×!9Ñ!9ˆÔØ—}‘} dÑ*ˆŒä—i‘i §¡°·±ÀÇÁÑ0NÐUYÔZˆŒÜ—i‘i §¡°·±ÀÇÁÑ0NÐUYÔZˆŒÜ—i‘i §¡°·±ÀÇÁÑ0NÐUYÔZˆŒÜ—i‘i §¡°·±Ñ >ÀÇÁÐUYÔZˆ�r@   NrA   rI  rì   r  rø   rB   c                 ó¶  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      }| j	                  |«      j                  |«      }	| j                  |«      j                  |«      }
t        ||	|¬«      \  }}	|j                  dd«      }|	j                  dd«      }	|
j                  dd«      }
t        j                  | j                  j                  t        «      } || ||	|
d f| j                  sdn| j                  d ddœ|¤Ž\  }} |j                  g |¢d‘­Ž j!                  «       }| j#                  |«      }||fS )NrD   )rI  r#   r+   r  F)rî   rí   r	  )rH   rº   r  rG   r  r  rË  rž   r   r  r(   r   r   rò   r  rœ   rö   r  )r=   rA   rI  rì   r  rø   r!  r"  r#  rù   rú   r'  rü   rû   s                 r?   rO   zLlama4VisionAttention.forward  sj  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓDˆØ—[‘[ Ó/×4Ñ4°\ÓBˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓDˆä#:¸<ÈÐ^fÔ#gÑ ˆ�jà#×-Ñ-¨a°Ó3ˆØ×)Ñ)¨!¨QÓ/ˆ
Ø#×-Ñ-¨a°Ó3ˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Ló)
Ðñ %8ØØØØØð
%
ð  $Ÿ}š}‘C°$×2HÑ2HØØñ
%
ð ñ
%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r@   ©NN)rP   rQ   rR   r   r-   r5   rS   r
   r   r   r‚   rO   rT   rU   s   @r?   rÍ  rÍ    s›   ø„ ð[Ð1õ [ð& /3Ø(,ñ')à—|‘|ð')ð —,‘,ð')ð Ÿ™ tÑ+ð	')ð
  ™ð')ð Ð-Ñ.ð')ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸¿¹Ñ2EÈÑ2LÐLÑ	M÷')r@   rÍ  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚLlama4VisionMLPc                 ó&  •— t         ‰| �  «        || _        t        j                  «       | _        t        j                  |j                  |j                  d¬«      | _	        t        j                  |j                  |j                  d¬«      | _
        y )NTrZ   )r,   r-   r(   r3   r›  r_   r\   r1   r0   r˜  rš  r<   s     €r?   r-   zLlama4VisionMLP.__init__I  se   ø€ Ü‰ÑÔØˆŒÜŸW™W›YˆÔÜ—9‘9˜V×/Ñ/°×1IÑ1IÐPTÔUˆŒÜ—9‘9˜V×5Ñ5°v×7IÑ7IÐPTÔUˆ�r@   rA   rB   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S ra   )r˜  r_   rš  rŸ  s     r?   rO   zLlama4VisionMLP.forwardP  s4   € ØŸ™ Ó/ˆØ×*Ñ*¨=Ó9ˆØŸ™ Ó/ˆØÐr@   rÁ  rU   s   @r?   rÔ  rÔ  H  s$   ø„ ôVð U§\¡\ð °e·l±l÷ r@   rÔ  c            
       óŠ   ‡ — e Zd Zdefˆ fd„Z	 	 d	dej                  dej                  dej                  dz  dedz  fd„Zˆ xZ	S )
ÚLlama4VisionEncoderLayerr(   c                 ó  •— t         ‰| �  «        |j                  | _        t        |«      | _        t        |«      | _        t        j                  |j                  «      | _	        t        j                  |j                  «      | _
        y ra   )r,   r-   r1   rÍ  r,  rÔ  r¾  r3   Ú	LayerNormr1  r2  r<   s     €r?   r-   z!Llama4VisionEncoderLayer.__init__X  sb   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔä.¨vÓ6ˆŒÜ" 6Ó*ˆŒä!Ÿ|™|¨F×,>Ñ,>Ó?ˆÔÜ(*¯©°V×5GÑ5GÓ(HˆÕ%r@   NÚhidden_staterI  rì   Úoutput_attentionsc                 óÌ   — |}| j                  |«      }| j                  |||¬«      \  }}||z   }|}| j                  |«      }| j                  |«      }||z   }|f}|r||fz  }|S )N)rI  rì   )r1  r,  r2  r¾  )r=   rÛ  rI  rì   rÜ  r6  rû   r‹  s           r?   rO   z Llama4VisionEncoderLayer.forwardb  s�   € ð  ˆà×+Ñ+¨LÓ9ˆà%)§^¡^ØØØ)ð &4ó &
Ñ"ˆ�lð
   ,Ñ.ˆð  ˆØ×4Ñ4°\ÓBˆØ—x‘x Ó-ˆØ ,Ñ.ˆà�/ˆáØ˜�Ñ&ˆGàˆr@   rÒ  )
rP   rQ   rR   r   r-   r5   rS   r:  rO   rT   rU   s   @r?   rØ  rØ  W  sZ   ø„ ðIÐ1õ Ið /3Ø)-ñà—l‘lðð —,‘,ðð Ÿ™ tÑ+ð	ð
   $™;÷r@   rØ  c                   ó°   ‡ — e Zd ZdZdefˆ fd„Z	 	 	 	 ddej                  dej                  dej                  dz  dedz  d	edz  d
edz  de	e
z  fd„Zˆ xZS )ÚLlama4VisionEncoderz½
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`Llama4VisionEncoderLayer`].

    Args:
        config: Llama4VisionConfig
    r(   c                 óÞ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        || _        y c c}w )NF)
r,   r-   r(   r3   rb  rc  rd  rØ  re  rh  )r=   r(   r8  r>   s      €r?   r-   zLlama4VisionEncoder.__init__Œ  sW   ø€ Ü‰ÑÔØˆŒÜ—m‘mÌuÐU[×UmÑUmÓOnÖ$oÈ!Ô%=¸fÕ%EÒ$oÓpˆŒØ&+ˆÔ#Øˆ�ùò %ps   ½A*NrA   rI  rì   rÜ  Úoutput_hidden_statesÚreturn_dictrB   c                 óz  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|rdnd}|rdnd}| j                  D ]&  }	|r||fz   } |	||||¬«      }
|r	||
d   fz   }|
d   }Œ( |r||fz   }|st        d„ |||fD «       «      S t        |||¬«      S )ad  
        Args:
            inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`):
                Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation.
                This is useful if you want more control over how to convert `input_ids` indices into associated vectors
                than the model's internal embedding lookup matrix.
            attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
                Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

                - 1 for tokens that are **not masked**,
                - 0 for tokens that are **masked**.

                [What are attention masks?](../glossary#attention-mask)
            output_attentions (`bool`, *optional*):
                Whether or not to return the attentions tensors of all attention layers. See `attentions` under
                returned tensors for more detail.
            output_hidden_states (`bool`, *optional*):
                Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors
                for more detail.
            return_dict (`bool`, *optional*):
                Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
        Nr5  )rÛ  rì   rÜ  rI  r#   r   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wra   r5  ©Ú.0Úvs     r?   ú	<genexpr>z.Llama4VisionEncoder.forward.<locals>.<genexpr>Ï  s   è ø€ Òe˜qÐWXÑWdœÑeùó   ‚Š©rp  rA   rZ  )r(   rÜ  rá  râ  re  r‚   r   )r=   rA   rI  rì   rÜ  rá  râ  Úencoder_statesÚall_attentionsÚencoder_layerÚlayer_outputss              r?   rO   zLlama4VisionEncoder.forward“  s   € ð> 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆá3™¸ˆÙ0™°dˆà!Ÿ[™[ò 	-ˆMÙ#Ø!/°=Ð2BÑ!B�á)Ø*Ø-Ø"3Ø!ô	ˆMñ !Ø!/°=ÀÑ3CÐ2EÑ!E�à)¨!Ñ,‰Mð	-ñ   Ø+¨}Ð.>Ñ>ˆNáÜÑe ]°NÀNÐ$SÔeÓeÐeÜØ+¸>ÐVdô
ð 	
r@   ©NNNN)rP   rQ   rR   r(  r   r-   r5   rS   r:  r‚   r   rO   rT   rU   s   @r?   rß  rß  ƒ  sŽ   ø„ ñðÐ1õ ð /3Ø)-Ø,0Ø#'ñ?
à—|‘|ð?
ð —,‘,ð?
ð Ÿ™ tÑ+ð	?
ð
   $™;ð?
ð # T™kð?
ð ˜D‘[ð?
ð 
�Ñ	 ÷?
r@   rß  c                   óV   ‡ — e Zd Zˆ fd„Zdej
                  dej
                  fd„Zˆ xZS )ÚLlama4UnfoldConvolutionc                 ó<  •— t         ‰| �  «        |j                  }t        |t        «      r||f}t
        j                  j                  ||j                  ¬«      | _        t        j                  |j                  |d   z  |d   z  |j                  d¬«      | _        y )N)Úkernel_sizeÚstrider   r#   FrZ   )r,   r-   r²  rÉ   rÕ   r5   r3   ÚUnfoldÚunfoldr\   Únum_channelsr1   Úlinear)r=   r(   ró  r>   s      €r?   r-   z Llama4UnfoldConvolution.__init__Ö  s‚   ø€ Ü‰ÑÔØ×'Ñ'ˆÜ�k¤3Ô'Ø&¨Ð4ˆKÜ—h‘h—o‘o°+Àf×FWÑFW�oÓXˆŒÜ—i‘iØ×Ñ +¨a¡.Ñ0°;¸q±>ÑAØ×ÑØô
ˆ�r@   rA   rB   c                 óp   — | j                  |«      }|j                  ddd«      }| j                  |«      }|S )Nr   r+   r#   )rö  r¬  rø  rŸ  s     r?   rO   zLlama4UnfoldConvolution.forwardâ  s8   € ØŸ™ MÓ2ˆØ%×-Ñ-¨a°°AÓ6ˆØŸ™ MÓ2ˆØÐr@   rÁ  rU   s   @r?   rñ  rñ  Õ  s#   ø„ ô

ð U§\¡\ð °e·l±l÷ r@   rñ  c                   ó:   ‡ — e Zd Zdefˆ fd„Zed„ «       Zd„ Zˆ xZS )rG  r(   c                 óv   •— t         ‰| �  «        || _        | j                  d| j	                  |«      d¬«       y )NrI  Frª   )r,   r-   r(   r³   rJ  r<   s     €r?   r-   z$Llama4VisionRotaryEmbedding.__init__ê  s6   ø€ Ü‰ÑÔØˆŒØ×Ñ˜Z¨×)?Ñ)?ÀÓ)GÐTYÐÕZr@   c                 ó¸  — | j                   | j                  z  }t        j                  |dz  t        j                  ¬«      j                  |dz  d«      }t        j                  ||d d gd¬«      }d|d<   ||z  }||z  }| j                  | j                  z  dz  }d| j                  d	   t        j                  d|d«      d |dz   j                  «       |z  z  z  }|dz   d
   |d d d d …f   z  j                  dd¬«      }|dz   d
   |d d d d …f   z  j                  dd¬«      }t        j                  ||gd¬«      j                  «       j                  «       dd d d…f   }	|	j                  |j                  ddd«      dk  d«      }	t        j                  t        j                  t        j                   |	«      t        j"                  |	«      gd¬«      «      }
|
S )Nr+   r¼   r#   r   rE   éþÿÿÿ)rD   rD   r»   r¹   ).NrD   .)Ú
image_sizer²  r5   r¿   Úint32rœ   Úcatr1   r¾   r°   rs   Úrepeat_interleaverö   Úmasked_fillrÚ   ÚstackÚcosÚsin)r(   ÚidxÚimg_idxÚfrequencies_xÚfrequencies_yÚfreq_dimÚ	rope_freqÚfreqs_xÚfreqs_yrÑ   rx  s              r?   rJ  z-Llama4VisionRotaryEmbedding._compute_freqs_ciï  sÒ  € à×Ñ 6×#4Ñ#4Ñ4ˆÜ—,‘,˜s A™v¬U¯[©[Ô9×AÑAÀ#ÀqÁ&È!ÓLˆÜ—)‘)˜W g¨b¨q kÐ2¸Ô:ˆØˆ�‰Ø #™ˆØ 3™ˆØ×%Ñ%¨×)CÑ)CÑCÀqÑHˆØØ×"Ñ" <Ñ0Ü—‘˜Q ¨!Ó,Ð->°¸A±Ð?×EÑEÓGÈ(ÑRñTñ
ˆ	ð " AÑ% yÑ1°I¸dÀDÊ!¸mÑ4LÑL×_Ñ_Ð`aÐgiÐ_ÓjˆØ! AÑ% yÑ1°I¸dÀDÊ!¸mÑ4LÑL×_Ñ_Ð`aÐgiÐ_ÓjˆÜ—	‘	˜7 GÐ,°"Ô5×;Ñ;Ó=×HÑHÓJÈ3ÑPSÐRSÐPSÈ8ÑTˆØ×!Ñ! '§/¡/°"°a¸Ó";¸aÑ"?ÀÓCˆÜ×(Ñ(¬¯©´e·i±iÀÓ6FÌÏ	É	ÐRWÓHXÐ5YÐ_aÔ)bÓcˆØˆr@   c                 óL   — | j                   j                  |j                  «      S ra   )rI  rŽ   rµ   rŸ  s     r?   rO   z#Llama4VisionRotaryEmbedding.forward  s   € Ø�}‰}×Ñ × 4Ñ 4Ó5Ð5r@   )	rP   rQ   rR   r   r-   rÔ   rJ  rO   rT   rU   s   @r?   rG  rG  é  s+   ø„ ð[Ð1õ [ð
 ñó ðö&6r@   rG  c                   óÒ   ‡ — e Zd ZU dZdZdgZeed<   defˆ fd„Zd„ Z		 	 	 	 dde
j                  d	e
j                  dz  d
edz  dedz  dedz  deee
j                  df   z  fd„Zˆ xZS )rK  Úvision_model)r>  rØ  r(   c                 ór  •— t         ‰| �  |«       |j                  | _        |j                  | _        |j                  | _        |j
                  | _        | j                  | j                  z  dz  dz   | _        |j                  dz  | _        t        |«      | _	        t        j                  | j                  t        j                  | j                  «      z  «      | _        t        j                  | j                  t        j                  | j                  | j                  «      z  «      | _        t!        |«      | _        t        j$                  | j                  «      | _        t        j$                  | j                  «      | _        t+        |«      | _        t/        |«      | _        | j3                  «        y )Nr+   r#   rÿ   )r,   r-   rþ  r²  r1   r÷  r°  rM  rñ  Úpatch_embeddingr3   r4   r5   ÚrandnrL  rN  rG  Úrotary_embeddingrÚ  Úlayernorm_preÚlayernorm_postrß  rY  r¹  Úvision_adapterri  r<   s     €r?   r-   zLlama4VisionModel.__init__  sA  ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒØ ×+Ñ+ˆŒØ!×-Ñ-ˆÔØ"×/Ñ/ˆÔà ŸO™O¨t¯©Ñ>À1ÑDÀqÑHˆÔØ×'Ñ'¨Ñ-ˆŒ
ä6°vÓ>ˆÔä!Ÿ|™|¨D¯J©J¼¿¹ÀT×EUÑEUÓ9VÑ,VÓWˆÔÜ(*¯©°T·Z±ZÄ%Ç+Á+Èd×N^ÑN^Ð`d×`pÑ`pÓBqÑ5qÓ(rˆÔ%Ü ;¸FÓ CˆÔô  Ÿ\™\¨$×*:Ñ*:Ó;ˆÔÜ Ÿl™l¨4×+;Ñ+;Ó<ˆÔô )¨Ó0ˆŒ
Ü9¸&ÓAˆÔØ�‰Õr@   c                 ó   — | j                   S )zg
        This function is used to fetch the first embedding layer to activate grads on inputs.
        )r  rw   s    r?   Úget_input_embeddingsz&Llama4VisionModel.get_input_embeddings&  s   € ð ×#Ñ#Ð#r@   NÚpixel_valuesrì   rÜ  rá  râ  rB   .c                 ó  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|j                  \  }}}	}
d}d}| j                  |«      }|j                  \  }}}|j                  ||z  |z  ||«      }| j                  j                  |j                  d   d|j                  d   «      }t        j                  ||gd¬«      }|dz  }|j                  ||z  |||«      }| j                  j                  |j                  |j                  ¬«      }||z   }| j                  |«      }|j!                  |d|«      }| j#                  |«      }| j%                  |d|||¬«      }|j&                  }| j)                  |«      }|dd…dd…dd…f   }| j+                  |«      }|r|j,                  nd}|r|d   }nd}|st/        d	„ |||fD «       «      S t1        |||¬
«      S )a  

        Example:

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

        >>> checkpoint = "meta-llama/Llama-3.2-11B-Vision"
        >>> model = MllamaVisionModel.from_pretrained(checkpoint)
        >>> processor = AutoProcessor.from_pretrained(checkpoint)

        >>> url = "https://www.ilankelman.org/stopsigns/australia.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))
        >>> inputs = processor(images=image, return_tensors="pt")

        >>> output = model(**inputs)

        >>> print(output.last_hidden_state.shape)
        torch.Size([1, 1, 4, 1025, 7680])
        ```
        Nr#   r   rD   rE   ©r�   rµ   )rì   rá  rÜ  rI  r+   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wra   r5  rå  s     r?   rè  z,Llama4VisionModel.forward.<locals>.<genexpr>ˆ  s   è ø€ Ò_˜qÐQRÑQ^œÑ_ùré  rê  )r(   rÜ  rá  râ  rH   r  rœ   rL  rÈ   r5   r   rN  rŽ   r�   rµ   r  rG   r  rY  rp  r  r  rA   r‚   r   )r=   r  rì   rÜ  rá  râ  rø   Úbatch_size_times_num_tilesr÷  r³  r´  Únum_concurrent_mediaÚ
num_chunksrÛ  r8  r°  r—   rL  Úpositional_embeddingrI  r€   rA   rZ  s                          r?   rO   zLlama4VisionModel.forward,  sT  € ðD 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆð CO×BTÑBTÑ?Ð" L°&¸%Ø ÐØˆ
Ø×+Ñ+¨LÓ9ˆØ%1×%7Ñ%7Ñ"ˆˆ;˜
ð $×+Ñ+Ø&Ð)=Ñ=À
ÑJÈKÐYcó
ˆð ×.Ñ.×5Ñ5°l×6HÑ6HÈÑ6KÈQÐP\×PbÑPbÐceÑPfÓgˆÜ—y‘y ,°Ð!@ÀaÔHˆØ�qÑˆð $×+Ñ+Ø&Ð)=Ñ=¸zÈ;ÐXbó
ˆð  $×<Ñ<×?Ñ?Àl×FXÑFXÐam×atÑatÐ?ÓuÐØ#Ð&:Ñ:ˆà×)Ñ)¨,Ó7ˆà#×(Ñ(Ð)CÀRÈÓTˆØ×(Ñ(¨Ó6ˆà—‘ØØØ!5Ø/Øð ó 
ˆð ×/Ñ/ˆà×*Ñ*¨<Ó8ˆà#¢A s¨ sªA IÑ.ˆð ×*Ñ*¨<Ó8ˆá0D˜×,Ò,È$ˆáØ ™‰JàˆJáÜÑ_ \°=À*Ð$MÔ_Ó_Ð_ä)Ø*Ø'Ø!ô
ð 	
r@   rï  )rP   rQ   rR   r|  rO  r{  r   rÓ   r-   r  r5   rS   r:  r   r‚   rO   rT   rU   s   @r?   rK  rK    s°   ø… Ø&ÐØ!ÐØ3Ð4ÐØÓðÐ1õ ò2$ð /3Ø)-Ø,0Ø#'ñb
à—l‘lðb
ð Ÿ™ tÑ+ðb
ð   $™;ð	b
ð
 # T™kðb
ð ˜D‘[ðb
ð 
$ e¨E¯L©L¸#Ð,=Ñ&>Ñ	>÷b
r@   rK  c            #       ó   ‡ — e Zd ZU ddgZi ZdZeed<   defˆ fd„Zd„ Z	d„ Z
d„ Zd	„ Ze ed
¬«       ed¬«      dej"                  dedee   deez  fd„«       «       «       Zdej0                  dej"                  dej"                  fd„Ze ed
¬«      e	 	 	 	 	 	 	 	 	 	 	 	 	 d#dej0                  dz  dej"                  dz  dej4                  dz  dej0                  dz  dedz  dej"                  dz  dedz  dej0                  dz  dedz  dedz  dedz  dedz  d eej4                  z  dee   deez  fd!„«       «       «       Z	 	 	 	 	 	 d$d"„Z ˆ xZ!S )%ÚLlama4ForConditionalGenerationr*  rØ  rY  r(   c                 ó¸  •— t         ‰| �  |«       t        |j                  «      | _        t        |«      | _        t        |j                  «      | _	        |j                  j                  | _
        t        | j                  d«      r| j                  j                  | _        n)| j                  j                  j                  xs d| _        | j                  «        y )Nr]  rD   )r,   r-   rK  r£  r  r¡  Úmulti_modal_projectorr  rD  r€  r_  r  r(   r]  ri  r<   s     €r?   r-   z'Llama4ForConditionalGeneration.__init__—  s�   ø€ Ü‰Ñ˜Ô Ü-¨f×.BÑ.BÓCˆÔä%>¸vÓ%FˆÔ"Ü/°×0BÑ0BÓCˆÔØ ×,Ñ,×7Ñ7ˆŒÜ�4—;‘; Ô/Ø $§¡× 8Ñ 8ˆDÕà $§¡× 7Ñ 7× DÑ DÒ JÈˆDÔà�‰Õr@   c                 ó6   — | j                   j                  «       S ra   )r€  Úget_output_embeddingsrw   s    r?   r'  z4Llama4ForConditionalGeneration.get_output_embeddings¥  s   € Ø×"Ñ"×8Ñ8Ó:Ð:r@   c                 ó:   — | j                   j                  |«       y ra   )r€  Úset_output_embeddings)r=   Únew_embeddingss     r?   r)  z4Llama4ForConditionalGeneration.set_output_embeddings¨  s   € Ø×Ñ×1Ñ1°.ÕAr@   c                 ó:   — | j                   j                  |«       y ra   )r€  Úset_decoder)r=   Údecoders     r?   r,  z*Llama4ForConditionalGeneration.set_decoder«  s   € Ø×Ñ×'Ñ'¨Õ0r@   c                 ó6   — | j                   j                  «       S ra   )r€  Úget_decoderrw   s    r?   r/  z*Llama4ForConditionalGeneration.get_decoder®  s   € Ø×"Ñ"×.Ñ.Ó0Ð0r@   F)Útie_last_hidden_stateszOObtains image last hidden states from the vision tower and apply al projection.r�  r  Úvision_feature_select_strategyrø   rB   c                 ó€   — |j                  «       D ��ci c]  \  }}|€Œ	||“Œ }}} | j                  |fi |¤ŽS c c}}w )aj  
        pixel_values (`torch.FloatTensor]` of shape `(batch_size, channels, height, width)`)
            The tensors corresponding to the input images.
        vision_feature_select_strategy (`str`):
            The feature selection strategy used to select the vision feature from the vision backbone.
            Can be one of `"default"` or `"full"`
        )Úitemsr  )r=   r  r1  rø   Úkrç  s         r?   Úget_image_featuresz1Llama4ForConditionalGeneration.get_image_features±  sG   € ð  $*§<¡<£>×C™4˜1˜a°Q±]�!�Q‘$ÐCˆÑCØ ˆt× Ñ  Ñ8°Ñ8Ð8ùó Ds   ”
:Ÿ:rj  rk  r§  c                 ó
  — |€m| | j                  «       t        j                  | j                  j                  t        j
                  |j                  ¬«      «      k(  }|j                  d«      }n|| j                  j                  k(  }|j                  «       }|j                  d«      j                  |j                  «      }t        ||j                  d   z  |j                  «       k(  d|› d|j                  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.
        r  rD   z6Image features and image tokens do not match, tokens: z, features: r   )r  r5   Útensorr(   Úimage_token_idÚlongrµ   Úallr    rr  rŽ   r   rH   Únumel)r=   rj  rk  r§  Úspecial_image_maskÚn_image_tokenss         r?   Úget_placeholder_maskz3Llama4ForConditionalGeneration.get_placeholder_maskÄ  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ˆØ/×9Ñ9¸"Ó=×@Ñ@À×AUÑAUÓVÐÜØ˜]×0Ñ0°Ñ4Ñ4¸×8LÑ8LÓ8NÑNØDÀ^ÐDTÐT`Ðao×auÑauÐvwÑaxÐ`yÐzô	
ð "Ð!r@   Nrì   rÎ   r  r„  r3  rÜ  rá  râ  r…  c                 óª  — |
�|
n| j                   j                  }
|�|n| j                   j                  }|�|n| j                   j                  }|du |duz  rt	        d«      ‚|�|�t	        d«      ‚|€ | j                  «       |«      }|�š| j                  ||d¬«      j                  }|j                  d|j                  d«      «      }| j                  |«      j                  |j                  |j                  «      }| j                  |||¬«      }|j                  ||«      } | j                   d|||||	|
|||dœ	|¤Ž}|d	   }d}|��<|�¥|dd…|j"                  d
   d
z
   d…f   j                  |j                  «      }|ddd…dd…f   |j                  |j                  «      d	k7     j%                  «       }|dd
d…f   |j                  |j                  «      d	k7     j%                  «       }n1|ddd…dd…f   j%                  «       }|dd
d…f   j%                  «       }t'        j(                  «       } ||j                  d|j                  d«      «      |j                  d«      j                  |j                  «      «      }|s|f|d
d z   }|�|f|z   S |S t+        |||j,                  |j.                  |j0                  |�¬«      S d¬«      S )añ  
        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
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import AutoProcessor, LlavaForConditionalGeneration

        >>> model = LlavaForConditionalGeneration.from_pretrained("llava-hf/llava-1.5-7b-hf")
        >>> processor = AutoProcessor.from_pretrained("llava-hf/llava-1.5-7b-hf")

        >>> prompt = "USER: <image>\nWhat's the content of the image? ASSISTANT:"
        >>> url = "https://www.ilankelman.org/stopsigns/australia.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> inputs = processor(images=image, text=prompt, return_tensors="pt")

        >>> # Generate
        >>> generate_ids = model.generate(**inputs, max_new_tokens=15)
        >>> processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
        "USER:  \nWhat's the content of the image? ASSISTANT: The image features a busy city street with a stop sign prominently displayed"
        ```Nrm  zdYou cannot specify both pixel_values and inputs_embeds at the same time, and must specify either oneT)r  r1  râ  rD   )rk  r§  )	rì   rÎ   r  rk  r3  rÜ  rá  râ  r…  r   r#   .)rˆ  r‡  r  rA   rZ  r“  r5  )r(   rÜ  rá  râ  rq  r  r5  rp  rG   r«  r%  rŽ   rµ   r�   r>  Úmasked_scatterr€  rH   rö   r3   ÚCrossEntropyLossr’  r  rA   rZ  )r=   rj  r  rì   rÎ   r  rk  r1  r„  r3  rÜ  rá  râ  r…  rø   r§  Úvision_flatÚprojected_vision_flatr<  r‹  r‡  rˆ  Úshift_attention_maskÚshift_logitsÚshift_labelsÚloss_fctr€   s                              r?   rO   z&Llama4ForConditionalGeneration.forwardÛ  sQ  € ðd 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ#¨Ð(AÜØvóð ð Ð Ø7˜D×5Ñ5Ó7¸	ÓBˆMàÐ#Ø!×4Ñ4Ø)Ø/MØ ð 5ó ÷  Ñð	 ð )×-Ñ-¨b°.×2EÑ2EÀbÓ2IÓJˆKØ$(×$>Ñ$>¸{Ó$K×$NÑ$NØ×$Ñ$ m×&9Ñ&9ó%Ð!ð "&×!:Ñ!:Ø¨ÐG\ð ";ó "Ðð *×8Ñ8Ð9KÐMbÓcˆMà%�$×%Ñ%ð 
Ø)Ø%Ø+Ø'ØØ/Ø!5Ø#Ø)ñ
ð ñ
ˆð ˜‘ˆàˆØÑàÐ)ð (6²a¸6¿<¹<È¹?ÈQÑ;NÐ9OÑ9QÐ6QÑ'R×'UÑ'UÐV\×VcÑVcÓ'dÐ$Ø% c¨3¨B¨3² kÑ2Ð3G×3JÑ3JÈ6Ï=É=Ó3YÐ]^Ñ3^Ñ_×jÑjÓl�Ø% c¨1©2 g™Ð/C×/FÑ/FÀvÇ}Á}Ó/UÐYZÑ/ZÑ[×fÑfÓh‘à% c¨3¨B¨3² kÑ2×=Ñ=Ó?�Ø% c¨1©2 g™×9Ñ9Ó;�ä×*Ñ*Ó,ˆHÙØ×!Ñ! " l×&7Ñ&7¸Ó&;Ó<¸l×>OÑ>OÐPRÓ>S×>VÑ>VÐWc×WjÑWjÓ>kóˆDñ Ø�Y ¨¨ Ñ,ˆFØ'+Ð'7�D�7˜VÑ#ÐC¸VÐCä+ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø2>Ð2J ô
ð 	
ð QUô
ð 	
r@   c           	      ó~   —  | j                   j                  |f|||||dœ|¤Ž}	|s|j                  dd«      s||	d<   |	S )N)r  rk  rì   r…  Úis_first_iterationr3  Tr  )r€  Úprepare_inputs_for_generationÚget)
r=   rj  r  rk  r  rì   r…  rI  rø   Úmodel_inputss
             r?   rJ  z<Llama4ForConditionalGeneration.prepare_inputs_for_generation\  sb   € ð I�t×*Ñ*×HÑHØð
à+Ø'Ø)Ø)Ø1ñ
ð ñ
ˆñ  V§Z¡Z°¸TÔ%Bð
 ,8ˆL˜Ñ(àÐr@   )NNNNNNNNNNNNr   )NNNNNF)"rP   rQ   rR   r{  rŽ  r|  r$   rÓ   r-   r'  r)  r,  r/  r!   r"   r   r5   r;  rË   r   r   r‚   r   r5  r9  r>  rS   r
   r:  rÕ   r’  rO   rJ  rT   rU   s   @r?   r#  r#  ‘  sV  ø… Ø1Ð3MÐNÐØ€HØÐØÓð˜|õ ò;òBò1ò1ð  Ù¨EÔ2ÙÐ!rÔsð9à×'Ñ'ð9ð ),ð9ð Ð+Ñ,ð	9ð
 
Ð+Ñ	+ò9ó tó 3ó  ð9ð "Ø×)Ñ)ð"Ø:?×:KÑ:Kð"Ø]b×]nÑ]nó"ð.  Ù¨EÔ2Øð .2Ø15Ø.2Ø04Ø(,Ø26Ø59Ø*.Ø!%Ø)-Ø,0Ø#'Ø-.ñ|
à×#Ñ# dÑ*ð|
ð ×'Ñ'¨$Ñ.ð|
ð Ÿ™ tÑ+ð	|
ð
 ×&Ñ&¨Ñ-ð|
ð  ™ð|
ð ×(Ñ(¨4Ñ/ð|
ð ),¨d©
ð|
ð × Ñ  4Ñ'ð|
ð ˜$‘;ð|
ð   $™;ð|
ð # T™kð|
ð ˜D‘[ð|
ð ˜eŸl™lÑ*ð|
ð Ð+Ñ,ð|
ð  
Ð-Ñ	-ò!|
ó ó 3ó  ð|
ðB ØØØØØ ÷r@   r#  )r=  rX  rK  r  r#  )r  )er©  Úcollections.abcr   Údataclassesr   Útypingr   r5   Útorch.nnr3   Útorch.nn.functionalrŒ   rž  Ú/transformers.models.llama4.configuration_llama4r   Ú r   rE  Úactivationsr	   Úcache_utilsr
   r   Ú
generationr   Úmasking_utilsr   r   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   r   r   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr    r!   Úutils.output_capturingr"   Úconfiguration_llama4r$   r%   Ú
get_loggerrP   ÚloggerÚModuler'   rW   re   rz   r\   r„   r•   r¥   rS   r‚   rá   rÕ   rç   rs   rý   r   r  r*  r=  rX  r  r’  r•  r¡  r·  r¹  rÅ  rË  rÍ  rÔ  rØ  rß  rñ  rG  rK  r#  Ú__all__r5  r@   r?   ú<module>rf     sæ  ðó Ý $Ý !Ý ã Ý ß Ð å Nå &Ý !ß .Ý )ß KÝ BÝ 9÷õ ÷÷ GÝ &ß jÕ jß GÝ 5ß @ð 
ˆ×	Ñ	˜HÓ	%€ô˜Ÿ	™	ô ôB)�B—I‘Iô )ô$!�u—x‘x—‘ô !ô=˜Ÿ	™	ô =ô(,�2—9‘9ô ,ô"�B—I‘Iô "ô,? §	¡	ô ?ðD	2Ø�‰ð	2à�‰ð	2ð �|‰|ð	2ð ˆ5�<‰<˜Ÿ™Ð%Ñ&ó		2ð	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ó 	Uð( ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ó%ðB ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ó%ô2Y)˜"Ÿ)™)ô Y)ôx/Ð7ô /ðd ôL˜Oó Ló ðLð< ô[
Ð+ó [
ó ð[
ô|L
Ð-¨ô L
ñ^ ðôð
 ô9 ;ó 9ó óð9ô0;�u—x‘x—‘ô ;ô" §	¡	ô òô(
) "§)¡)ô 
)ð! E§L¡Lð !¸¿¹ó !ð:Ø�<‰<ð:à	�‰ð:ð �l‰lð:ð ˆ5�<‰<˜Ÿ™Ð%Ñ&ó	:ô7)˜BŸI™Iô 7)ôt�b—i‘iô ô)Ð9ô )ôXO
˜"Ÿ)™)ô O
ôd˜bŸi™iô ô(6 "§)¡)ô 6ô<G
Ð-ô G
ôTiÐ%:¸Oô iòX�r@   