§
    ‚ŠtjR^  ã                   ó�  — 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	m
Z
 ddlmZ dd	lmZmZ dd
lmZmZ ddl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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-  ed¦  «         G d„ dej.        ¦  «        ¦   «         Z/ G d„ dej.        ¦  «        Z0d„ Z1 ed¦  «        d>d„¦   «         Z2dej3        de4dej3        fd „Z5	 d?d"ej.        d#ej3        d$ej3        d%ej3        d&ej3        dz  d'e6d(e6d)e"e$         fd*„Z7 G d+„ d,ej.        ¦  «        Z8 G d-„ d.ej.        ¦  «        Z9 G d/„ d0e¦  «        Z:e% G d1„ d2e ¦  «        ¦   «         Z;e% G d3„ d4e;¦  «        ¦   «         Z<e% G d5„ d6e;e¦  «        ¦   «         Z= G d7„ d8ee;¦  «        Z> G d9„ d:ee;¦  «        Z? G d;„ d<ee;¦  «        Z@g d=¢ZAdS )@é    )ÚCallable)ÚOptionalN)Únné   )ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úuse_kernel_forward_from_hubÚuse_kernel_func_from_hub)Úcreate_causal_maskÚ!create_sliding_window_causal_mask)ÚGenericForQuestionAnsweringÚ GenericForSequenceClassificationÚGenericForTokenClassificationÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tuple)Úmaybe_autocastÚmerge_with_config_defaults)Úcapture_outputsé   )ÚExaone4ConfigÚRMSNormc                   óT   ‡ — 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 )
ÚExaone4RMSNormç�íµ ÷Æ°>ÚepsÚreturnNc                 ó¬   •— t          ¦   «                              ¦   «          t          j        t	          j        |¦  «        ¦  «        | _        || _        dS )z=
        Exaone4RMSNorm is equivalent to T5LayerNorm
        N)ÚsuperÚ__init__r   Ú	ParameterÚtorchÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizer&   Ú	__class__s      €új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/exaone4/modeling_exaone4.pyr*   zExaone4RMSNorm.__init__3   sD   ø€ õ 	‰Œ×ÒÑÔÐÝ”l¥5¤:¨kÑ#:Ô#:Ñ;Ô;ˆŒØ #ˆÔÐÐó    Úhidden_statesc                 ó  — |j         }|                     t          j        ¦  «        }|                     d¦  «                             dd¬¦  «        }|t          j        || j        z   ¦  «        z  }| j        |                     |¦  «        z  S )Né   éÿÿÿÿT)Úkeepdim)	ÚdtypeÚtor,   Úfloat32ÚpowÚmeanÚrsqrtr/   r.   )r0   r5   Úinput_dtypeÚvariances       r3   ÚforwardzExaone4RMSNorm.forward;   s|   € Ø#Ô)ˆØ%×(Ò(­¬Ñ7Ô7ˆØ ×$Ò$ QÑ'Ô'×,Ò,¨R¸Ð,Ñ>Ô>ˆØ%­¬°H¸tÔ?TÑ4TÑ(UÔ(UÑUˆØŒ{˜]×-Ò-¨kÑ:Ô:Ñ:Ð:r4   c                 óH   — t          | j        j        ¦  «        › d| j        › �S )Nz, eps=)Útupler.   Úshaper/   )r0   s    r3   Ú
extra_reprzExaone4RMSNorm.extra_reprB   s&   € Ý˜œÔ)Ñ*Ô*ÐIÐI°$Ô2GÐIÐIÐIr4   )r%   )
Ú__name__Ú
__module__Ú__qualname__Úfloatr*   r,   ÚTensorrB   rF   Ú__classcell__©r2   s   @r3   r$   r$   1   sŒ   ø€ € € € € ð$ð $¨ð $¸$ð $ð $ð $ð $ð $ð $ð; U¤\ð ;°e´lð ;ð ;ð ;ð ;ðJð Jð Jð Jð Jð Jð Jr4   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 )ÚExaone4RotaryEmbeddingÚinv_freqNÚconfigc                 ó²  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        || _        | j        j        d         | _        | j        }| j        dk    rt          | j                 } || j        |¦  «        \  }| _
        |                      d|d¬¦  «         |                      d|                     ¦   «         d¬¦  «         d S )NÚ	rope_typeÚdefaultrP   F)Ú
persistentÚoriginal_inv_freq)r)   r*   Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenrQ   Úrope_parametersrS   Úcompute_default_rope_parametersr   Úattention_scalingÚregister_bufferÚclone)r0   rQ   ÚdeviceÚrope_init_fnrP   r2   s        €r3   r*   zExaone4RotaryEmbedding.__init__I   sÊ   ø€ Ý‰Œ×ÒÑÔÐØ"(Ô"@ˆÔØ$*Ô$BˆÔ!àˆŒàœÔ4°[ÔAˆŒØ!%Ô!EˆØŒ>˜YÒ&Ð&Ý.¨t¬~Ô>ˆLØ+7¨<¸¼ÀVÑ+LÔ+LÑ(ˆ�$Ô(à×Ò˜Z¨¸eÐÑDÔDÐDØ×ÒÐ0°(·.².Ñ2BÔ2BÈuÐÑUÔUÐUÐUÐUr4   r_   ztorch.deviceÚseq_lenr'   ztorch.Tensorc                 óü   — | j         d         }t          | dd¦  «        p| j        | j        z  }d}d|t	          j        d|dt          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_dimNg      ð?r   r7   ©r:   )r_   r:   )	rZ   Úgetattrr1   Únum_attention_headsr,   ÚarangeÚint64r;   rJ   )rQ   r_   ra   ÚbaseÚdimÚattention_factorrP   s          r3   r[   z6Exaone4RotaryEmbedding.compute_default_rope_parametersY   sŒ   € ð& Ô% lÔ3ˆÝ�f˜j¨$Ñ/Ô/Ðc°6Ô3EÈÔIcÑ3cˆàÐð Ø•U”\ ! S¨!µ5´;Ð?Ñ?Ô?×BÒBÈ&ÕX]ÔXcÐBÑdÔdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r4   c                 óN  — | j         d d d …d f                              ¦   «                              |j        d         dd¦  «                             |j        ¦  «        }|d d …d d d …f                              ¦   «         }t          |j        j        t          ¦  «        r|j        j        dk    r|j        j        nd}t          |d¬¦  «        5  |                     ¦   «         |                     ¦   «         z   
                    dd¦  «        }t          j        ||fd¬	¦  «        }|                     ¦   «         | j        z  }|                     ¦   «         | j        z  }	d d d ¦  «         n# 1 swxY w Y   |                     |j        ¬
¦  «        |	                     |j        ¬
¦  «        fS )Nr   r8   r    ÚmpsÚcpuF)Údevice_typeÚenabledr7   ©rk   re   )rP   rJ   ÚexpandrE   r;   r_   Ú
isinstanceÚtypeÚstrr   Ú	transposer,   ÚcatÚcosr\   Úsinr:   )
r0   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedrp   ÚfreqsÚembry   rz   s
             r3   rB   zExaone4RotaryEmbedding.forwardw   s·  € ð !œM¨$°°°°4¨-Ô8×>Ò>Ñ@Ô@×GÒGÈÔHZÐ[\ÔH]Ð_aÐcdÑeÔe×hÒhÐijÔiqÑrÔrÐØ ,¨Q¨Q¨Q°°a°a°a¨ZÔ 8× >Ò >Ñ @Ô @Ðå'1°!´(´-ÅÑ'EÔ'EÐkÈ!Ì(Ì-Ð[`ÒJ`ÐJ`�a”h”m�mÐfkˆÝ¨¸UÐCÑCÔCð 	5ð 	5Ø&×,Ò,Ñ.Ô.Ð1F×1LÒ1LÑ1NÔ1NÑN×YÒYÐZ[Ð]^Ñ_Ô_ˆEÝ”)˜U E˜N°Ð3Ñ3Ô3ˆCØ—'’'‘)”)˜dÔ4Ñ4ˆCØ—'’'‘)”)˜dÔ4Ñ4ˆCð		5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð �vŠv˜AœGˆvÑ$Ô$ c§f¢f°1´7 fÑ&;Ô&;Ð;Ð;s   ÃBE&Å&E*Å-E*©N)NNN)rG   rH   rI   r,   rK   Ú__annotations__r!   r*   Ústaticmethodr   ÚintrD   rJ   r[   Úno_gradr   rB   rL   rM   s   @r3   rO   rO   F   sù   ø€ € € € € € ØŒlÐÐÑðVð V˜}ð Vð Vð Vð Vð Vð Vð  à'+Ø+/Ø"ð*ð *Ø Ñ$ð*à˜Ô(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ô	%ð	*ð *ð *ñ „\ð*ð: €U„]�_„_Øð<ð <ñ Ôñ „_ð<ð <ð <ð <ð <r4   rO   c                 óœ   — | dd| j         d         dz  …f         }| d| j         d         dz  d…f         }t          j        | |fd¬¦  «        S )z*Rotates half the hidden dims of the input..Nr8   r7   rr   )rE   r,   rx   )r{   Úx1Úx2s      r3   Úrotate_halfr‰   ‡   s]   € à	
ˆ3Ð"�!”'˜"”+ Ñ"Ð"Ð"Ô	#€BØ	
ˆ3�”˜”˜qÑ Ð"Ð"Ð"Ô	#€BÝŒ9�r�c˜2�Y BÐ'Ñ'Ô'Ð'r4   Úrotary_pos_embc                 ó¾   — |                      |¦  «        }|                      |¦  «        }| |z  t          | ¦  «        |z  z   }||z  t          |¦  «        |z  z   }||fS )a…  Applies Rotary Position Embedding to the query and key tensors.

    Args:
        q (`torch.Tensor`): The query tensor.
        k (`torch.Tensor`): The key tensor.
        cos (`torch.Tensor`): The cosine part of the rotary embedding.
        sin (`torch.Tensor`): The sine part of the rotary embedding.
        unsqueeze_dim (`int`, *optional*, defaults to 1):
            The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
            sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
            that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
            k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
            cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
            the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
    Returns:
        `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
    )Ú	unsqueezer‰   )ÚqÚkry   rz   Úunsqueeze_dimÚq_embedÚk_embeds          r3   Úapply_rotary_pos_embr’   Ž   sc   € ð& �-Š-˜Ñ
&Ô
&€CØ
�-Š-˜Ñ
&Ô
&€CØ�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�3‰w�; q™>œ>¨CÑ/Ñ0€GØ�GÐÐr4   r5   Ún_repr'   c                 ó¸   — | j         \  }}}}|dk    r| S | dd…dd…ddd…dd…f                              |||||¦  «        } |                      |||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)rE   rs   Úreshape)r5   r“   ÚbatchÚnum_key_value_headsÚslenrd   s         r3   Ú	repeat_kvr™   ¨   s„   € ð
 2?Ô1DÑ.€EÐ  hØ�‚z€zØÐØ! ! ! ! Q Q Q¨¨a¨a¨a°°°Ð"2Ô3×:Ò:¸5ÐBUÐW\Ð^bÐdlÑmÔm€MØ× Ò  Ð(;¸eÑ(CÀTÈ8ÑTÔTÐTr4   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t          || j        ¦  «        }t          || j        ¦  «        }	t          j        ||                     dd¦  «        ¦  «        |z  }
|�|
|z   }
t
          j                             |
dt          j        ¬¦  «         	                    |j
        ¦  «        }
t
          j                             |
|| j        ¬¦  «        }
t          j        |
|	¦  «        }|                     dd¦  «                             ¦   «         }||
fS )Nr7   r   r8   )rk   r:   )ÚpÚtrainingr    )r™   Únum_key_value_groupsr,   Úmatmulrw   r   Ú
functionalÚsoftmaxr<   r;   r:   r¡   r¥   Ú
contiguous)r›   rœ   r�   rž   rŸ   r    r¡   r¢   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r3   Úeager_attention_forwardr¯   ´   sé   € õ ˜3 Ô ;Ñ<Ô<€JÝ˜U FÔ$?Ñ@Ô@€Lå”<  z×';Ò';¸A¸qÑ'AÔ'AÑBÔBÀWÑL€LØÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2ÅUÄ]Ð(ÑSÔS×VÒVÐW\ÔWbÑcÔc€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€LÝ”,˜|¨\Ñ:Ô:€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r4   c                   óæ   ‡ — e Zd Zde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 )ÚExaone4AttentionrQ   Ú	layer_idxc                 óÒ  •— t          ¦   «                              ¦   «          || _        || _        |j        | _        |j        | _        |j        | _        t          |d|j        |j        z  ¦  «        | _        |j        |j        z  | _	        |j
        | _
        d| _        | j        dz  | _        |j        | _        |j        | _        t          |d¦  «        r|j        |         nd }|dk    | _        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¬¦  «        | _        t1          | j        |j        ¬¦  «        | _        t1          | j        |j        ¬¦  «        | _        d S )	Nrd   Tg      à¿Úlayer_typesÚsliding_attentionF©Úbias©r&   )r)   r*   rQ   r²   rg   r—   r1   rf   rd   r¦   Úattention_dropoutÚ	is_causalr    Úsliding_windowÚsliding_window_patternÚhasattrr´   Ú
is_slidingr   ÚLinearÚq_projÚk_projÚv_projÚo_projr$   Úrms_norm_epsÚq_normÚk_norm)r0   rQ   r²   Ú
layer_typer2   s       €r3   r*   zExaone4Attention.__init__Î   s¬  ø€ Ý‰Œ×ÒÑÔÐØˆŒØ"ˆŒØ#)Ô#=ˆÔ Ø#)Ô#=ˆÔ Ø!Ô-ˆÔÝ ¨
°FÔ4FÈ&ÔJdÑ4dÑeÔeˆŒØ$*Ô$>À&ÔB\Ñ$\ˆÔ!Ø!'Ô!9ˆÔØˆŒØ”} dÑ*ˆŒØ$Ô3ˆÔØ&,Ô&CˆÔ#Ý6=¸fÀmÑ6TÔ6TÐ^�VÔ'¨	Ô2Ð2ÐZ^ˆ
Ø$Ð(;Ò;ˆŒå”i Ô 0°$Ô2JÈTÌ]Ñ2ZÐafÐgÑgÔgˆŒÝ”i Ô 0°$Ô2JÈTÌ]Ñ2ZÐafÐgÑgÔgˆŒÝ”i Ô 0°$Ô2JÈTÌ]Ñ2ZÐafÐgÑgÔgˆŒÝ”i Ô 8¸4¼=Ñ HÈ$ÔJZÐafÐgÑgÔgˆŒå$ T¤]¸Ô8KÐLÑLÔLˆŒÝ$ T¤]¸Ô8KÐLÑLÔLˆŒˆˆr4   Nr5   Úposition_embeddingsrŸ   Úpast_key_valuesr¢   r'   c                 ó°  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }	|                      |¦  «                             |¦  «                             dd¦  «        }
|                      |¦  «        }|                      |	¦  «        }	|\  }}| j	        �| j
        rt          ||	||¦  «        \  }}	|�|                     |	|
| j        ¦  «        \  }	}
t          j        | j        j        t$          ¦  «        } || ||	|
|f| j        sdn| j        | j        | j
        r| j	        nd dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||fS )Nr8   r    r7   rš   )r¡   r    r»   )rE   rd   rÀ   Úviewrw   rÁ   rÂ   rÅ   rÆ   r»   r¾   r’   Úupdater²   r   Úget_interfacerQ   Ú_attn_implementationr¯   r¥   r¹   r    r•   rª   rÃ   )r0   r5   rÈ   rŸ   rÉ   r¢   Úinput_shapeÚhidden_shapeÚquery_statesr«   r¬   ry   rz   Úattention_interfacer®   r­   s                   r3   rB   zExaone4Attention.forwardç   s  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆØ—[’[ Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆ
Ø—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆð —{’{ <Ñ0Ô0ˆØ—[’[ Ñ,Ô,ˆ
à&‰ˆˆSàÔÐ&¨$¬/Ð&Ý';¸LÈ*ÐVYÐ[^Ñ'_Ô'_Ñ$ˆL˜*àÐ&Ø'6×'=Ò'=¸jÈ,ÐX\ÔXfÑ'gÔ'gÑ$ˆJ˜å(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð
%
ð  $œ}ÐH�C�C°$Ô2HØ”LØ26´/ÐK˜4Ô.Ð.Àtð
%
ð 
%
ð ð
%
ð 
%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r4   )NN)rG   rH   rI   r!   r„   r*   r,   rK   rD   r   r   r   rB   rL   rM   s   @r3   r±   r±   Í   sð   ø€ € € € € ðM˜}ð M¸ð Mð Mð Mð Mð Mð Mð: /3Ø(,ð-)ð -)à”|ð-)ð # 5¤<°´Ð#=Ô>ð-)ð œ tÑ+ð	-)ð
  ™ð-)ð Ð+Ô,ð-)ð 
ˆuŒ|˜Uœ\¨DÑ0°%¸¼Ô2EÈÑ2LÐLÔ	Mð-)ð -)ð -)ð -)ð -)ð -)ð -)ð -)r4   r±   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú
Exaone4MLPc                 ó˜  •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        t          j        | j        | j        d¬¦  «        | _        t          j        | j        | j        d¬¦  «        | _        t          j        | j        | j        d¬¦  «        | _	        t          |j                 | _        d S ©NFr¶   )r)   r*   rQ   r1   Úintermediate_sizer   r¿   Ú	gate_projÚup_projÚ	down_projr   Ú
hidden_actÚact_fn©r0   rQ   r2   s     €r3   r*   zExaone4MLP.__init__  s¦   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ!Ô-ˆÔØ!'Ô!9ˆÔÝœ 4Ô#3°TÔ5KÐRWÐXÑXÔXˆŒÝ”y Ô!1°4Ô3IÐPUÐVÑVÔVˆŒÝœ 4Ô#9¸4Ô;KÐRWÐXÑXÔXˆŒÝ˜VÔ.Ô/ˆŒˆˆr4   c                 ó¨   — |                       |                      |                      |¦  «        ¦  «        |                      |¦  «        z  ¦  «        }|S r�   )rÚ   rÜ   rØ   rÙ   )r0   r{   rÚ   s      r3   rB   zExaone4MLP.forward"  sA   € Ø—N’N 4§;¢;¨t¯~ª~¸aÑ/@Ô/@Ñ#AÔ#AÀDÇLÂLÐQRÁOÄOÑ#SÑTÔTˆ	ØÐr4   )rG   rH   rI   r*   rB   rL   rM   s   @r3   rÔ   rÔ     sG   ø€ € € € € ð0ð 0ð 0ð 0ð 0ðð ð ð ð ð ð r4   rÔ   c                   óÒ   ‡ — e Zd Zdedefˆ 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j        fd„Zˆ xZS )ÚExaone4DecoderLayerrQ   r²   c                 ó4  •— t          ¦   «                              ¦   «          |j        | _        t          ||¬¦  «        | _        t          |¦  «        | _        t          |j        |j        ¬¦  «        | _	        t          |j        |j        ¬¦  «        | _
        d S )N)rQ   r²   r¸   )r)   r*   r1   r±   Ú	self_attnrÔ   Úmlpr$   rÄ   Úpost_attention_layernormÚpost_feedforward_layernorm)r0   rQ   r²   r2   s      €r3   r*   zExaone4DecoderLayer.__init__(  s„   ø€ Ý‰Œ×ÒÑÔÐØ!Ô-ˆÔÝ)°À9ÐMÑMÔMˆŒå˜fÑ%Ô%ˆŒÝ(6°vÔ7IÈvÔObÐ(cÑ(cÔ(cˆÔ%Ý*8¸Ô9KÐQWÔQdÐ*eÑ*eÔ*eˆÔ'Ð'Ð'r4   NFr5   rŸ   r|   rÉ   Ú	use_cacherÈ   r¢   r'   c           
      óÎ   — |} | j         d||||||dœ|¤Ž\  }}	|                      |¦  «        }||z   }|}|                      |¦  «        }|                      |¦  «        }||z   }|S )N)r5   rŸ   r|   rÉ   ræ   rÈ   © )râ   rä   rã   rå   )
r0   r5   rŸ   r|   rÉ   ræ   rÈ   r¢   ÚresidualÚ_s
             r3   rB   zExaone4DecoderLayer.forward1  s¡   € ð !ˆØ)˜4œ>ð 
Ø'Ø)Ø%Ø+ØØ 3ð
ð 
ð ð
ð 
Ñˆ�qð ×5Ò5°mÑDÔDˆØ  =Ñ0ˆð !ˆØŸš Ñ/Ô/ˆØ×7Ò7¸ÑFÔFˆØ  =Ñ0ˆØÐr4   )NNNFN)rG   rH   rI   r!   r„   r*   r,   rK   Ú
LongTensorr   ÚboolrD   r   r   rB   rL   rM   s   @r3   rà   rà   '  sÿ   ø€ € € € € ðf˜}ð f¸ð fð fð fð fð fð fð /3Ø04Ø(,Ø!&ØHLðð à”|ðð œ tÑ+ðð Ô&¨Ñ-ð	ð
  ™ðð ˜$‘;ðð # 5¤<°´Ð#=Ô>ÀÑEðð Ð+Ô,ðð 
Œðð ð ð ð ð ð ð r4   rà   c                   óP   — e Zd ZU eed<   dZdZdgZdgZdZ	dZ
dZdZdZeedœZeZdS )ÚExaone4PreTrainedModelrQ   ÚmodelTrà   rÉ   )r5   Ú
attentionsN)rG   rH   rI   r!   r‚   Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_can_compile_fullgraphÚ_supports_attention_backendrà   r±   Ú_can_record_outputsÚconfig_classrè   r4   r3   rî   rî   P  sq   € € € € € € àÐÐÑØÐØ&*Ð#Ø.Ð/ÐØ#4Ð"5ÐØÐØ€NØÐà!ÐØ"&Ðà,Ø&ðð Ðð !€L€L€Lr4   rî   c                   óØ   ‡ — e Zd Z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dz  d
ee         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚExaone4ModelrQ   c                 óÞ  •‡— t          ¦   «                              ‰¦  «         ‰j        | _        ‰j        | _        t          j        ‰j        ‰j        | j        ¦  «        | _        t          j	        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        t          ‰j        ‰j        ¬¦  «        | _        t!          ‰¬¦  «        | _        d| _        |                      ¦   «          d S )Nc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS rè   )rà   )Ú.0r²   rQ   s     €r3   ú
<listcomp>z)Exaone4Model.__init__.<locals>.<listcomp>m  s$   ø€ ÐeÐeÐe¸	Õ  ¨Ñ3Ô3ÐeÐeÐer4   r¸   ©rQ   F)r)   r*   Úpad_token_idÚpadding_idxÚ
vocab_sizer   Ú	Embeddingr1   Úembed_tokensÚ
ModuleListÚrangeÚnum_hidden_layersÚlayersr$   rÄ   ÚnormrO   Ú
rotary_embÚgradient_checkpointingÚ	post_initrÝ   s    `€r3   r*   zExaone4Model.__init__f  sÔ   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø!Ô.ˆÔØ Ô+ˆŒåœL¨Ô):¸FÔ<NÐPTÔP`ÑaÔaˆÔÝ”mØeÐeÐeÐeÅUÈ6ÔKcÑEdÔEdÐeÑeÔeñ
ô 
ˆŒõ # 6Ô#5¸6Ô;NÐOÑOÔOˆŒ	Ý0¸Ð?Ñ?Ô?ˆŒØ&+ˆÔ#ð 	�ŠÑÔÐÐÐr4   NÚ	input_idsrŸ   r|   rÉ   Úinputs_embedsræ   r¢   r'   c           
      óæ  — |d u |d uz  rt          d¦  «        ‚|€|                      |¦  «        }|r|€t          | j        ¬¦  «        }|€V|�|                     ¦   «         nd}t          j        |j        d         |j        ¬¦  «        |z   }| 	                    d¦  «        }t          |x}	t          ¦  «        s8| j        ||||dœ}
dt          di |
¤Ži}	d| j        j        v rt          di |
¤Ž|	d<   |}|                      ||¦  «        }t!          | j        ¦  «        D ],\  }}| j        j        |         } ||f|	|         ||||d	œ|¤Ž}Œ-|                      |¦  «        }t'          ||r|nd ¬
¦  «        S )Nz:You must specify exactly one of input_ids or inputs_embedsr  r   r    )r_   )rQ   r  rŸ   rÉ   r|   Úfull_attentionrµ   )rŸ   r|   rÉ   ræ   rÈ   )Úlast_hidden_staterÉ   rè   )Ú
ValueErrorr  r	   rQ   Úget_seq_lengthr,   rh   rE   r_   rŒ   rt   Údictr   r´   r   r  Ú	enumerater  r  r   )r0   r  rŸ   r|   rÉ   r  ræ   r¢   Úpast_seen_tokensÚcausal_mask_mappingÚmask_kwargsr5   rÈ   ÚiÚdecoder_layerrÇ   s                   r3   rB   zExaone4Model.forwardv  s   € ð ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø ×-Ò-¨iÑ8Ô8ˆMàð 	?˜Ð0Ý*°$´+Ð>Ñ>Ô>ˆOàÐØCRÐC^˜×=Ò=Ñ?Ô?Ð?ÐdeÐÝ œ<¨Ô(;¸AÔ(>À}ÔG[Ð\Ñ\Ô\Ð_oÑoˆLØ'×1Ò1°!Ñ4Ô4ˆLõ °Ð?Ð-ÅÑFÔFð 	lð œ+Ø!.Ø"0Ø#2Ø ,ðð ˆKð !Õ"4Ð"CÐ"C°{Ð"CÐ"Cð#Ðð # d¤kÔ&=Ð=Ð=Ý;\Ð;kÐ;kÐ_jÐ;kÐ;kÐ#Ð$7Ñ8à%ˆØ"Ÿošo¨m¸\ÑJÔJÐå )¨$¬+Ñ 6Ô 6ð 
	ð 
	ÑˆAˆ}ØœÔ0°Ô3ˆJØ)˜MØðà2°:Ô>Ø)Ø /Ø#Ø$7ðð ð ðð ˆMˆMð Ÿ	š	 -Ñ0Ô0ˆå&Ø+Ø/8ÐB˜O˜O¸dð
ñ 
ô 
ð 	
r4   )NNNNNN)rG   rH   rI   r!   r*   r   r   r,   rë   rK   r   ÚFloatTensorrì   r   r   rD   r   rB   rL   rM   s   @r3   rý   rý   d  s	  ø€ € € € € ð˜}ð ð ð ð ð ð ð   Øð .2Ø.2Ø04Ø(,Ø26Ø!%ð=
ð =
àÔ# dÑ*ð=
ð œ tÑ+ð=
ð Ô&¨Ñ-ð	=
ð
  ™ð=
ð Ô(¨4Ñ/ð=
ð ˜$‘;ð=
ð Ð+Ô,ð=
ð 
Ð(Ñ	(ð=
ð =
ð =
ñ „_ñ  Ôð=
ð =
ð =
ð =
ð =
r4   rý   c                   ó  ‡ — e Zd ZddiZddiZddgdgfiZˆ 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fd„¦   «         ¦   «         Zˆ xZS )ÚExaone4ForCausalLMzlm_head.weightzmodel.embed_tokens.weightÚlm_headÚcolwise_gather_outputr5   Úlogitsc                 óþ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        |j        | _        t          j        |j        |j        d¬¦  «        | _        |  	                    ¦   «          d S rÖ   )
r)   r*   rý   rï   r  r   r¿   r1   r!  r  rÝ   s     €r3   r*   zExaone4ForCausalLM.__init__¾  sj   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý! &Ñ)Ô)ˆŒ
Ø Ô+ˆŒÝ”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒð 	�ŠÑÔÐÐÐr4   Nr   r  rŸ   r|   rÉ   r  Úlabelsræ   Úlogits_to_keepr¢   r'   c	           
      óP  —  | j         d||||||dœ|	¤Ž}
|
j        }t          |t          ¦  «        rt	          | d¦  «        n|}|                      |dd…|dd…f         ¦  «        }d}|� | j        d||| j        j        dœ|	¤Ž}t          |||
j
        |
j        |
j        ¬¦  «        S )u�  
        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 AutoModelForCausalLM, AutoTokenizer
        >>> model = AutoModelForCausalLM.from_pretrained("LGAI-EXAONE/EXAONE-4.0-32B")
        >>> tokenizer = AutoTokenizer.from_pretrained("LGAI-EXAONE/EXAONE-4.0-32B")

        >>> prompt = "Explain how wonderful you are"
        >>> messages = [
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": prompt}
        ]
        >>> input_ids = tokenizer.apply_chat_template(
            messages,
            tokenize=True,
            add_generation_prompt=True,
            return_tensors="pt",
            enable_thinking=False,
        )

        >>> output = model.generate(input_ids, max_new_tokens=128)
        >>> tokenizer.decode(output[0], skip_special_tokens=False)
        "[|system|]\nYou are a helpful assistant.[|endofturn|]\n[|user|]\nExplain how wonderful you are[|endofturn|]\n[|assistant|]\n<think>\n\n</think>\n\nOh, thank you for such a kind and lovely question! ðŸ˜Š  \n\nIâ€™m *so* wonderful because Iâ€™m here to make your life easier, brighter, and more fun! Whether you need help with:  \n\nâœ¨ **Learning** â€“ I can explain anything, from quantum physics to baking the perfect cake!  \nðŸ’¡ **Creativity** â€“ Need a poem, story, or a wild idea? Iâ€™ve got you covered!  \nðŸ¤– **Problem-solving** â€“ Stuck on a math problem or a tricky decision? Iâ€™ll help you figure it out"
        ```
        )r  rŸ   r|   rÉ   r  ræ   N)r#  r%  r  )Úlossr#  rÉ   r5   rð   rè   )rï   r  rt   r„   Úslicer!  Úloss_functionrQ   r  r   rÉ   r5   rð   )r0   r  rŸ   r|   rÉ   r  r%  ræ   r&  r¢   Úoutputsr5   Úslice_indicesr#  r(  s                  r3   rB   zExaone4ForCausalLM.forwardÇ  sõ   € ðZ ,6¨4¬:ð ,
ØØ)Ø%Ø+Ø'Øð,
ð ,
ð ð,
ð ,
ˆð  Ô1ˆå8BÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ%�4Ô%Ðp¨V¸FÈtÌ{ÔOeÐpÐpÐioÐpÐpˆDå%ØØØ#Ô3Ø!Ô/ØÔ)ð
ñ 
ô 
ð 	
r4   )NNNNNNNr   )rG   rH   rI   Ú_tied_weights_keysÚ_tp_planÚ_pp_planr*   r   r   r,   rë   rK   r   r  rì   r„   r   r   r   rB   rL   rM   s   @r3   r   r   ¸  s^  ø€ € € € € à*Ð,GÐHÐØÐ2Ð3€HØ˜_Ð-°¨zÐ:Ð;€Hðð ð ð ð ð Øð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ðD
ð D
àÔ# dÑ*ðD
ð œ tÑ+ðD
ð Ô&¨Ñ-ð	D
ð
  ™ðD
ð Ô(¨4Ñ/ðD
ð Ô  4Ñ'ðD
ð ˜$‘;ðD
ð ˜eœlÑ*ðD
ð Ð+Ô,ðD
ð 
 ðD
ð D
ð D
ñ „^ñ ÔðD
ð D
ð D
ð D
ð D
r4   r   c                   ó   — e Zd ZdS )Ú Exaone4ForSequenceClassificationN©rG   rH   rI   rè   r4   r3   r1  r1    ó   € € € € € Ø€Dr4   r1  c                   ó   — e Zd ZdS )ÚExaone4ForTokenClassificationNr2  rè   r4   r3   r5  r5    r3  r4   r5  c                   ó   — e Zd ZdZdS )ÚExaone4ForQuestionAnsweringÚtransformerN)rG   rH   rI   rñ   rè   r4   r3   r7  r7    s   € € € € € Ø%ÐÐÐr4   r7  )rî   rý   r   r1  r5  r7  )r    )rš   )BÚcollections.abcr   Útypingr   r,   r   Úactivationsr   Úcache_utilsr   r	   Ú
generationr
   Úintegrationsr   r   Úmasking_utilsr   r   Úmodeling_layersr   r   r   r   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_exaone4r!   ÚModuler$   rO   r‰   r’   rK   r„   r™   rJ   r¯   r±   rÔ   rà   rî   rý   r   r1  r5  r7  Ú__all__rè   r4   r3   ú<module>rK     sñ  ðð, %Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø )Ð )Ð )Ð )Ð )Ð )Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ RÐ RÐ RÐ RÐ RÐ RÐ RÐ Rðð ð ð ð ð ð ð ð ð ð ð ð PÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0ð Ð˜YÑ'Ô'ðJð Jð Jð Jð J�R”Yñ Jô Jñ (Ô'ðJð(><ð ><ð ><ð ><ð ><˜RœYñ ><ô ><ð ><ðB(ð (ð (ð ÐÐ*Ñ+Ô+ðð ð ñ ,Ô+ðð2	U˜Uœ\ð 	U°#ð 	U¸%¼,ð 	Uð 	Uð 	Uð 	Uð& ð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð2G)ð G)ð G)ð G)ð G)�r”yñ G)ô G)ð G)ðTð ð ð ð �”ñ ô ð ð &ð &ð &ð &ð &Ð4ñ &ô &ð &ðR ð!ð !ð !ð !ð !˜_ñ !ô !ñ „ð!ð& ðP
ð P
ð P
ð P
ð P
Ð)ñ P
ô P
ñ „ðP
ðf ðT
ð T
ð T
ð T
ð T
Ð/°ñ T
ô T
ñ „ðT
ðn	ð 	ð 	ð 	ð 	Ð'GÐI_ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð$AÐCYñ 	ô 	ð 	ð&ð &ð &ð &ð &Ð"=Ð?Uñ &ô &ð &ðð ð €€€r4   