o
    ei                     @   s
  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eZdZG dd deZG dd deZG dd deZG dd deZ G dd deZ!G dd deZ"g dZ#dS )    N   )Cache)FlashAttentionKwargs)GradientCheckpointingLayer)CausalLMOutputWithPast)Unpack)TransformersKwargslogging   )GlmAttentionGlmForCausalLMGlmForSequenceClassificationGlmForTokenClassification)Phi3MLP   )
Glm4Config)Glm4RMSNormzTHUDM/GLM-4-9B-0414c                   @      e Zd ZdS )Glm4MLPN__name__
__module____qualname__ r   r   c/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/transformers/models/glm4/modular_glm4.pyr   #       r   c                       s   e Zd Zdedef fddZ						ddejdejdB d	ejdB d
e	dB de
dB dejdB deejejf dB dee deejeejejf dB f fddZ  ZS )Glm4DecoderLayerconfig	layer_idxc                    sv   t    |j| _t||d| _t|| _t|j|jd| _	t|j|jd| _
t|j|jd| _t|j|jd| _d S )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__r   r   r!   (   s   

zGlm4DecoderLayer.__init__NFhidden_statesattention_maskposition_idspast_key_values	use_cachecache_positionposition_embeddingskwargsreturnc              
   K   sr   |}	|  |}| jd|||||||d|\}}
| |}|	| }|}	| |}| |}| |}|	| }|S )N)r.   r/   r0   r1   r2   r3   r4   r   )r'   r$   r)   r(   r%   r*   )r+   r.   r/   r0   r1   r2   r3   r4   r5   residual_r   r   r   forward3   s*   





zGlm4DecoderLayer.forward)NNNFNN)r   r   r   r   intr!   torchTensor
LongTensorr   booltupler   r   FloatTensorr9   __classcell__r   r   r,   r   r   '   s6    	
r   c                   @   r   )r#   Nr   r   r   r   r   r#   W   r   r#   c                       s.   e Zd Zdee deeB f fddZ  ZS )Glm4ForCausalLMsuper_kwargsr6   c                    s   t  j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."
        ```Nr   )r    r9   )r+   rC   r,   r   r   r9   \   s   zGlm4ForCausalLM.forward)	r   r   r   r   r   r?   r   r9   rA   r   r   r,   r   rB   [   s    rB   c                   @   r   )Glm4ForSequenceClassificationNr   r   r   r   r   rD   y   r   rD   c                   @   r   )Glm4ForTokenClassificationNr   r   r   r   r   rE   }   r   rE   )Glm4PreTrainedModel	Glm4ModelrB   rD   rE   )$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#   rB   rD   rE   __all__r   r   r   r   <module>   s(   
0