Ë
    ÛÓ^j¢  ã                   óH  — d dl Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZmZ d	d
lmZmZmZmZ d	dlmZ ddlmZ ddlmZ  ej2                  e«      ZdZ G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z  G d„ de«      Z! G d„ de«      Z"g d¢Z#y)é    Né   )ÚCache)ÚFlashAttentionKwargs)ÚGradientCheckpointingLayer)ÚCausalLMOutputWithPast)ÚUnpack)ÚTransformersKwargsÚloggingé   )ÚGlmAttentionÚGlmForCausalLMÚGlmForSequenceClassificationÚGlmForTokenClassification)ÚPhi3MLPé   )Ú
Glm4Config)ÚGlm4RMSNormzTHUDM/GLM-4-9B-0414c                   ó   — e Zd Zy)ÚGlm4MLPN©Ú__name__Ú
__module__Ú__qualname__© ó    úp/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/glm4/modular_glm4.pyr   r   #   ó   „ Ør   r   c                   óD  ‡ — 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ej                  eej                  ej                  f   dz  f   fd„Zˆ xZS )ÚGlm4DecoderLayerÚconfigÚ	layer_idxc                 ó¸  •— t         ‰| �  «        |j                  | _        t        ||¬«      | _        t        |«      | _        t        |j                  |j                  ¬«      | _	        t        |j                  |j                  ¬«      | _
        t        |j                  |j                  ¬«      | _        t        |j                  |j                  ¬«      | _        y )N)r    r!   )Úeps)ÚsuperÚ__init__Úhidden_sizeÚGlm4AttentionÚ	self_attnr   Úmlpr   Úrms_norm_epsÚinput_layernormÚpost_attention_layernormÚpost_self_attn_layernormÚpost_mlp_layernorm)Úselfr    r!   Ú	__class__s      €r   r%   zGlm4DecoderLayer.__init__(   s¡   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔÜ&¨fÀ	ÔJˆŒä˜6“?ˆŒÜ*¨6×+=Ñ+=À6×CVÑCVÔWˆÔÜ(3°F×4FÑ4FÈF×L_ÑL_Ô(`ˆÔ%Ü(3°F×4FÑ4FÈF×L_ÑL_Ô(`ˆÔ%Ü"-¨f×.@Ñ.@Àf×FYÑFYÔ"ZˆÕr   NÚhidden_statesÚattention_maskÚposition_idsÚpast_key_valuesÚ	use_cacheÚposition_embeddingsÚkwargsÚreturnc           
      ó  — |}| j                  |«      } | j                  d||||||dœ|¤Ž\  }}	| j                  |«      }||z   }|}| j                  |«      }| j	                  |«      }| j                  |«      }||z   }|S )N)r1   r2   r3   r4   r5   r6   r   )r+   r(   r-   r,   r)   r.   )
r/   r1   r2   r3   r4   r5   r6   r7   ÚresidualÚ_s
             r   ÚforwardzGlm4DecoderLayer.forward3   s®   € ð !ˆØ×,Ñ,¨]Ó;ˆà)˜4Ÿ>™>ð 
Ø'Ø)Ø%Ø+ØØ 3ñ
ð ñ
Ñˆ�qð ×5Ñ5°mÓDˆØ  =Ñ0ˆà ˆØ×5Ñ5°mÓDˆØŸ™ Ó/ˆØ×/Ñ/°Ó>ˆØ  =Ñ0ˆØÐr   )NNNFN)r   r   r   r   Úintr%   ÚtorchÚTensorÚ
LongTensorr   ÚboolÚtupler   r   ÚFloatTensorr<   Ú__classcell__©r0   s   @r   r   r   '   sæ   ø„ ð	[˜zð 	[°cõ 	[ð /3Ø04Ø(,Ø!&ØHLñà—|‘|ðð Ÿ™ tÑ+ðð ×&Ñ&¨Ñ-ð	ð
  ™ðð ˜$‘;ðð # 5§<¡<°·±Ð#=Ñ>ÀÑEðð Ð-Ñ.ðð 
ˆu× Ñ  %¨×(9Ñ(9¸5×;LÑ;LÐ(LÑ"MÐPTÑ"TÐTÑ	U÷r   r   c                   ó   — e Zd Zy)r'   Nr   r   r   r   r'   r'   U   r   r   r'   c                   ó4   ‡ — e Zd Zdee   deez  fˆ fd„Zˆ xZS )ÚGlm4ForCausalLMÚsuper_kwargsr8   c                 ó"   •— t        ‰| �  di |¤ŽS )ah  
        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, Glm4ForCausalLM

        >>> model = Glm4ForCausalLM.from_pretrained("THUDM/GLM-4-9B-0414")
        >>> tokenizer = AutoTokenizer.from_pretrained("THUDM/GLM-4-9B-0414")

        >>> 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."
        ```r   )r$   r<   )r/   rI   r0   s     €r   r<   zGlm4ForCausalLM.forwardZ   s   ø€ ô4 ‰w‰Ñ. Ñ.Ð.r   )	r   r   r   r   r	   rB   r   r<   rD   rE   s   @r   rH   rH   Y   s+   ø„ ð/àÐ1Ñ2ð/ð 
Ð'Ñ	'÷/ñ /r   rH   c                   ó   — e Zd Zy)ÚGlm4ForSequenceClassificationNr   r   r   r   rL   rL   w   r   r   rL   c                   ó   — e Zd Zy)ÚGlm4ForTokenClassificationNr   r   r   r   rN   rN   {   r   r   rN   )ÚGlm4PreTrainedModelÚ	Glm4ModelrH   rL   rN   )$r>   Úcache_utilsr   Úmodeling_flash_attention_utilsr   Úmodeling_layersr   Úmodeling_outputsr   Úprocessing_utilsr   Úutilsr	   r
   Úglm.modeling_glmr   r   r   r   Úphi3.modeling_phi3r   Úconfiguration_glm4r   Úmodeling_glm4r   Ú
get_loggerr   ÚloggerÚ_CHECKPOINT_FOR_DOCr   r   r'   rH   rL   rN   Ú__all__r   r   r   ú<module>r_      s˜   ðó  å  Ý BÝ 9Ý 6Ý &ß 0ß tÓ tÝ (Ý *Ý &ð 
ˆ×	Ñ	˜HÓ	%€à+Ð ô	ˆgô 	ô+Ð1ô +ô\	�Lô 	ô/�nô /ô<	Ð$@ô 	ô	Ð!:ô 	ò�r   