Ë
    ÛÓ^j¬<  ã                   ó|  — d 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 ddlmZ ddlmZ ddlmZmZmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.  ej^                  e0«      Z1dZ2dZ3 ed¬«      e G d„ de«      «       «       Z4 G d„ de)«      Z5 G d„ de!«      Z6 G d„ dejn                  «      Z8 G d„ d e.«      Z9 G d!„ d"e-«      Z: G d#„ d$e(«      Z; G d%„ d&e;e'«      Z< G d'„ d(e#«      Z= G d)„ d*e%«      Z> G d+„ d,e&«      Z? G d-„ d.e$«      Z@g d/¢ZAy)0zLG AI Research EXAONE Labé    )ÚCallableN)Ústrict)Únné   )ÚCacheÚDynamicCache)ÚPreTrainedConfig)Úcreate_causal_maskÚ!create_sliding_window_causal_mask)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚRopeParameters)ÚALL_ATTENTION_FUNCTIONS)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚlogging)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚGemma2RotaryEmbedding)	ÚLlamaForCausalLMÚLlamaForQuestionAnsweringÚLlamaForSequenceClassificationÚLlamaForTokenClassificationÚ
LlamaModelÚLlamaPreTrainedModelÚLlamaRMSNormÚapply_rotary_pos_embÚeager_attention_forward)ÚOlmo2DecoderLayerÚOlmo2MLPzLGAI-EXAONE/EXAONE-4.0-32BÚExaone4Config)Ú
checkpointc            
       óÒ  ‡ — e Zd ZU dZdZdgZddddddddddœ	Zdgd	gfd
dgd
gfd
gd
gfdœZdZe	e
d<   dZe	e
d<   dZe	e
d<   dZe	e
d<   dZe	e
d<   dZe	e
d<   dZee
d<   dZe	e
d<   dZee
d<   dZee
d<   dZee
d <   d!Ze	d"z  e
d#<   d$Ze	ee	   z  d"z  e
d%<   d"Ze	d"z  e
d&<   d'Zee
d(<   d"Zeez  d"z  e
d)<   d*Z ee	z  e
d+<   dZ!e	d"z  e
d,<   d-Z"ee	z  d"z  e
d.<   d"Z#ee   d"z  e
d/<   ˆ fd0„Z$ˆ xZ%S )1r#   a~  
    sliding_window_pattern (`str`, *optional*):
        The pattern to use for sliding window attention. Can be one of:
            - `None`: No sliding window attention is used
            - `int`: Every `sliding_window` layers, use global attention, else use local attention.
            - `str`: A sequence of "L" (local attention) and "G" (global attention) characters that defines the
              attention pattern. The pattern starts from layer 0 and repeats every `sliding_window` layers. The
              final layer always uses global attention regardless of the pattern.
        For instance, sliding_window_pattern="LLLG" same as sliding_window=4, which means:
            - Layer 0, 1, 2: local attention,
            - Layer 3: global attention,
            ...(repeated)

    Example:

    ```python
    >>> from transformers import Exaone4Model, Exaone4Config

    >>> # Initializing a EXAONE configuration
    >>> configuration = Exaone4Config()

    >>> # Initializing a model from configuration
    >>> model = Exaone4Model(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```Úexaone4Úpast_key_valuesÚcolwiseÚreplicated_with_grad_allreduceÚrowwise)	zlayers.*.self_attn.q_projzlayers.*.self_attn.k_projzlayers.*.self_attn.v_projzlayers.*.self_attn.q_normzlayers.*.self_attn.k_normzlayers.*.self_attn.o_projzlayers.*.mlp.gate_projzlayers.*.mlp.up_projzlayers.*.mlp.down_projÚ	input_idsÚinputs_embedsÚhidden_statesÚattention_mask)Úembed_tokensÚlayersÚnormi � Ú
vocab_sizei   Úhidden_sizei @  Úintermediate_sizeé    Únum_hidden_layersÚnum_attention_headsÚnum_key_value_headsÚsiluÚ
hidden_acti   Úmax_position_embeddingsg{®Gáz”?Úinitializer_rangegñhãˆµøä>Úrms_norm_epsTÚ	use_cacher   NÚbos_token_idr   Úeos_token_idÚpad_token_idFÚtie_word_embeddingsÚrope_parametersç        Úattention_dropoutÚsliding_windowé   Úsliding_window_patternÚlayer_typesc                 ó  •— | j                   €d| _        | j                  €Nt        | j                  «      D �cg c]*  }|dz   | j                  z  dk7  r|| j                  k  rdnd‘Œ, c}| _        t        ‰| �  di |¤Ž y c c}w )Nr   é   Úsliding_attentionÚfull_attention© )rF   rH   rI   Úranger6   ÚsuperÚ__post_init__)ÚselfÚkwargsÚiÚ	__class__s      €úv/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/exaone4/modular_exaone4.pyrQ   zExaone4Config.__post_init__�   s’   ø€ Ø×ÑÐ&Ø*+ˆDÔ'Ø×ÑÐ#ô
 ˜t×5Ñ5Ó6ö	 ð ð ˜‘U˜t×:Ñ:Ñ;¸qÒ@ÀQÈ×I_ÑI_ÒE_ñ $à%ñ&ò ˆDÔô 	‰ÑÑ' Ó'ùò s   ¸/A?)&Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
model_typeÚkeys_to_ignore_at_inferenceÚbase_model_tp_planÚbase_model_pp_planr2   ÚintÚ__annotations__r3   r4   r6   r7   r8   r:   Ústrr;   r<   Úfloatr=   r>   Úboolr?   r@   ÚlistrA   rB   rC   r   ÚdictrE   rF   rH   rI   rQ   Ú__classcell__©rU   s   @rV   r#   r#   9   s‰  ø… ñð8 €JØ#4Ð"5Ðð &/Ø%.Ø%.Ø%EØ%EØ%.Ø"+Ø )Ø"+ñ
Ðð &˜¨Ð(9Ð:Ø#Ð%5Ð6¸Ð8IÐJØ!Ð" _Ð$5Ð6ñÐð €J�ÓØ€K�ÓØ"Ð�sÓ"ØÐ�sÓØ!Ð˜Ó!Ø!Ð˜Ó!Ø€J�ÓØ#'Ð˜SÓ'Ø#Ð�uÓ#Ø€L�%ÓØ€IˆtÓØ €L�#˜‘*Ó Ø+,€L�#˜˜S™	‘/ DÑ(Ó,Ø#€L�#˜‘*Ó#Ø %Ð˜Ó%Ø48€O�^ dÑ*¨TÑ1Ó8Ø%(Ð�u˜s‘{Ó(Ø!%€N�C˜$‘JÓ%Ø/0Ð˜C #™I¨Ñ,Ó0Ø$(€K��c‘˜TÑ!Ó(÷(ð (ó    c                   ó   — e Zd Zy)ÚExaone4RMSNormN©rW   rX   rY   rN   rh   rV   rj   rj   �   ó   „ Ørh   rj   c                   ó   — e Zd Zy)ÚExaone4RotaryEmbeddingNrk   rN   rh   rV   rn   rn   “   rl   rh   rn   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 )ÚExaone4AttentionÚconfigÚ	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                  |j2                  ¬«      | _        t1        | j                  |j2                  ¬«      | _        y )	NÚhead_dimTg      à¿rI   rL   F)Úbias©Úeps)rP   Ú__init__rq   rr   r7   r8   r3   Úgetattrrt   Únum_key_value_groupsrE   Ú	is_causalÚscalingrF   rH   ÚhasattrrI   Ú
is_slidingr   ÚLinearÚq_projÚk_projÚv_projÚo_projrj   r=   Úq_normÚk_norm)rR   rq   rr   Ú
layer_typerU   s       €rV   rx   zExaone4Attention.__init__˜   sÂ  ø€ Ü‰ÑÔØˆŒØ"ˆŒØ#)×#=Ñ#=ˆÔ Ø#)×#=Ñ#=ˆÔ Ø!×-Ñ-ˆÔÜ ¨
°F×4FÑ4FÈ&×JdÑJdÑ4dÓeˆŒØ$*×$>Ñ$>À&×B\ÑB\Ñ$\ˆÔ!Ø!'×!9Ñ!9ˆÔØˆŒØ—}‘} dÑ*ˆŒØ$×3Ñ3ˆÔØ&,×&CÑ&CˆÔ#Ü6=¸fÀmÔ6T�V×'Ñ'¨	Ò2ÐZ^ˆ
Ø$Ð(;Ñ;ˆŒä—i‘i × 0Ñ 0°$×2JÑ2JÈTÏ]É]Ñ2ZÐafÔgˆŒÜ—i‘i × 0Ñ 0°$×2JÑ2JÈTÏ]É]Ñ2ZÐafÔgˆŒÜ—i‘i × 0Ñ 0°$×2JÑ2JÈTÏ]É]Ñ2ZÐafÔgˆŒÜ—i‘i × 8Ñ 8¸4¿=¹=Ñ HÈ$×JZÑJZÐafÔgˆŒä$ T§]¡]¸×8KÑ8KÔLˆŒÜ$ T§]¡]¸×8KÑ8KÔLˆ�rh   Nr-   Úposition_embeddingsr.   r'   rS   Úreturnc                 ó°  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }	| j                  |«      j                  |«      j	                  dd«      }
| j                  |«      }| j                  |	«      }	|\  }}| j                  �| j                  rt        ||	||«      \  }}	|� |j                  |	|
| j                  «      \  }	}
t        j                  | j                   j"                  t$        «      } || ||	|
|f| j&                  sdn| j(                  | j*                  | j                  r| j                  nd dœ|¤Ž\  }} |j,                  g |¢d‘­Ž j/                  «       }| j1                  |«      }||fS )NéÿÿÿÿrK   r   rD   )Údropoutr|   rF   )Úshapert   r€   ÚviewÚ	transposer�   r‚   r„   r…   rF   r~   r   Úupdaterr   r   Úget_interfacerq   Ú_attn_implementationr    ÚtrainingrE   r|   ÚreshapeÚ
contiguousrƒ   )rR   r-   r‡   r.   r'   rS   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚcosÚsinÚattention_interfaceÚattn_outputÚattn_weightss                   rV   ÚforwardzExaone4Attention.forward±   sÒ  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆØ—[‘[ Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆð —{‘{ <Ó0ˆØ—[‘[ Ó,ˆ
à&‰ˆˆSà×ÑÐ&¨$¯/ª/Ü';¸LÈ*ÐVYÐ[^Ó'_Ñ$ˆL˜*àÐ&Ø'6×'=Ñ'=¸jÈ,ÐX\×XfÑXfÓ'gÑ$ˆJ˜ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð
%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘LØ26·/²/˜4×.Ò.Àtñ
%
ð ñ
%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(rh   )NN)rW   rX   rY   r#   r_   rx   ÚtorchÚTensorÚtupler   r   r   rŸ   rf   rg   s   @rV   rp   rp   —   s°   ø„ ðM˜}ð M¸õ Mð: /3Ø(,ñ-)à—|‘|ð-)ð # 5§<¡<°·±Ð#=Ñ>ð-)ð Ÿ™ tÑ+ð	-)ð
  ™ð-)ð Ð+Ñ,ð-)ð 
ˆu�|‰|˜UŸ\™\¨DÑ0°%¸¿¹Ñ2EÈÑ2LÐLÑ	M÷-)rh   rp   c                   ó   — e Zd Zy)Ú
Exaone4MLPNrk   rN   rh   rV   r¤   r¤   á   rl   rh   r¤   c                   ó   — e Zd Zy)ÚExaone4DecoderLayerNrk   rN   rh   rV   r¦   r¦   å   rl   rh   r¦   c                   ó   — e Zd ZeZdgZy)ÚExaone4PreTrainedModelr¦   N)rW   rX   rY   r#   Úconfig_classÚ_no_split_modulesrN   rh   rV   r¨   r¨   é   s   „ Ø €LØ.Ð/Ñrh   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         ‰| �  |«       t        j                  t	        |j
                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        t        |j                  |j                  ¬«      | _        | j                  «        y c c}w )Nrv   )rP   rx   r   Ú
ModuleListrO   r6   r¦   r0   rj   r3   r=   r1   Ú	post_init)rR   rq   rr   rU   s      €rV   rx   zExaone4Model.__init__ï   so   ø€ Ü‰Ñ˜Ô Ü—m‘mÜEJÈ6×KcÑKcÓEdÖe¸	Ô  ¨Õ3Òeó
ˆŒô # 6×#5Ñ#5¸6×;NÑ;NÔOˆŒ	ð 	�‰Õùò fs   ·BNr+   r.   Úposition_idsr'   r,   r>   rS   rˆ   c           
      óè  — |d u |d uz  rt        d«      ‚|€| j                  |«      }|r|€t        | j                  ¬«      }|€V|�|j	                  «       nd}t        j                  |j                  d   |j                  ¬«      |z   }|j                  d«      }t        |x}	t        «      sE| j                  ||||dœ}
dt        di |
¤Ži}	d| j                  j                  v rt        di |
¤Ž|	d<   |}| j                  ||«      }t!        | j"                  «      D ]0  \  }}| j                  j                  |   } ||f|	|   ||||d	œ|¤Ž}Œ2 | j%                  |«      }t'        ||r|¬
«      S d ¬
«      S )Nz:You must specify exactly one of input_ids or inputs_embeds)rq   r   rK   )Údevice)rq   r,   r.   r'   r°   rM   rL   )r.   r°   r'   r>   r‡   )Úlast_hidden_stater'   rN   )Ú
ValueErrorr/   r   rq   Úget_seq_lengthr    ÚarangerŒ   r²   Ú	unsqueezeÚ
isinstancere   r
   rI   r   Ú
rotary_embÚ	enumerater0   r1   r   )rR   r+   r.   r°   r'   r,   r>   rS   Úpast_seen_tokensÚcausal_mask_mappingÚmask_kwargsr-   r‡   rT   Údecoder_layerr†   s                   rV   rŸ   zExaone4Model.forwardù   sº  € ð ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø ×-Ñ-¨iÓ8ˆMá˜Ð0Ü*°$·+±+Ô>ˆOàÐØCRÐC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<™<¨×(;Ñ(;¸AÑ(>À}×G[ÑG[Ô\Ð_oÑoˆLØ'×1Ñ1°!Ó4ˆLô °Ð?Ð-ÄÔFð Ÿ+™+Ø!.Ø"0Ø#2Ø ,ñˆKð !Ô"4Ñ"C°{Ñ"Cð#Ðð # d§k¡k×&=Ñ&=Ñ=Ü;\Ñ;kÐ_jÑ;kÐ#Ð$7Ñ8à%ˆØ"Ÿo™o¨m¸\ÓJÐä )¨$¯+©+Ó 6ò 
	ÑˆAˆ}ØŸ™×0Ñ0°Ñ3ˆJÙ)Øðà2°:Ñ>Ø)Ø /Ø#Ø$7ñð ñ‰Mð
	ð Ÿ	™	 -Ó0ˆä&Ø+Ù/8˜Oô
ð 	
à>Bô
ð 	
rh   )NNNNNN)rW   rX   rY   r#   rx   r   r   r    Ú
LongTensorr¡   r   ÚFloatTensorrc   r   r   r¢   r   rŸ   rf   rg   s   @rV   r¬   r¬   î   sË   ø„ ð˜}õ ð  Øð .2Ø.2Ø04Ø(,Ø26Ø!%ñ=
à×#Ñ# dÑ*ð=
ð Ÿ™ tÑ+ð=
ð ×&Ñ&¨Ñ-ð	=
ð
  ™ð=
ð ×(Ñ(¨4Ñ/ð=
ð ˜$‘;ð=
ð Ð+Ñ,ð=
ð 
Ð(Ñ	(ò=
ó ó  ô=
rh   r¬   c                   ó  ‡ — e Zd Z	 	 	 	 	 	 	 	 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ˆ fd„Zˆ xZS )ÚExaone4ForCausalLMNr+   r.   r°   r'   r,   Úlabelsr>   Úlogits_to_keeprS   rˆ   c	                 ó6   •— t        ‰
| �  d||||||||dœ|	¤Ž y)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Ã   r>   rÄ   NrN   )rP   rŸ   )rR   r+   r.   r°   r'   r,   rÃ   r>   rÄ   rS   rU   s             €rV   rŸ   zExaone4ForCausalLM.forward<  s9   ø€ ôV 	‰‰ð 
	
ØØ)Ø%Ø+Ø'ØØØ)ñ
	
ð ó
	
rh   )NNNNNNNr   )rW   rX   rY   r    r¿   r¡   r   rÀ   rc   r_   r   r   r   rŸ   rf   rg   s   @rV   rÂ   rÂ   ;  sÕ   ø„ ð .2Ø.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñ5
à×#Ñ# dÑ*ð5
ð Ÿ™ tÑ+ð5
ð ×&Ñ&¨Ñ-ð	5
ð
  ™ð5
ð ×(Ñ(¨4Ñ/ð5
ð × Ñ  4Ñ'ð5
ð ˜$‘;ð5
ð ˜eŸl™lÑ*ð5
ð Ð+Ñ,ð5
ð 
 ÷5
ñ 5
rh   rÂ   c                   ó   — e Zd Zy)Ú Exaone4ForSequenceClassificationNrk   rN   rh   rV   rÇ   rÇ   t  rl   rh   rÇ   c                   ó   — e Zd Zy)ÚExaone4ForTokenClassificationNrk   rN   rh   rV   rÉ   rÉ   x  rl   rh   rÉ   c                   ó   — e Zd Zy)ÚExaone4ForQuestionAnsweringNrk   rN   rh   rV   rË   rË   |  rl   rh   rË   )r#   r¨   r¬   rÂ   rÇ   rÉ   rË   )BrZ   Úcollections.abcr   r    Úhuggingface_hub.dataclassesr   r   Úcache_utilsr   r   Úconfiguration_utilsr	   Úmasking_utilsr
   r   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   Úutils.output_capturingr   Úgemma2.modeling_gemma2r   Úllama.modeling_llamar   r   r   r   r   r   r   r   r    Úolmo2.modeling_olmo2r!   r"   Ú
get_loggerrW   ÚloggerÚ_CHECKPOINT_FOR_DOCÚ_CONFIG_FOR_DOCr#   rj   rn   ÚModulerp   r¤   r¦   r¨   r¬   rÂ   rÇ   rÉ   rË   Ú__all__rN   rh   rV   ú<module>rá      s?  ðñ  å $ã Ý .Ý ç .Ý 3ß R÷õ 2Ý 5Ý &ß @Ñ @Ý 7Ý 5Ý :÷
÷ 
õ 
÷ ?ð 
ˆ×	Ñ	˜HÓ	%€à2Ð Ø!€ñ Ð7Ô8ØôQ(Ð$ó Q(ó ó 9ðQ(ôh	�\ô 	ô	Ð2ô 	ôG)�r—y‘yô G)ôT	�ô 	ô	Ð+ô 	ô0Ð1ô 0ô
J
Ð)¨:ô J
ôZ6
Ð)ô 6
ôr	Ð'Eô 	ô	Ð$?ô 	ô	Ð";ô 	ò�rh   