o
    
۾ie                     @   s   d dl mZ d dl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mZmZ G d	d
 d
eZG dd de
ZdS )    )IterableN)
VllmConfig)default_weight_loader)LlamaForCausalLM
LlamaModel   )LlamaDecoderLayer)AutoWeightsLoaderPPMissingLayerWeightsMapperis_pp_missing_parameterc                       sP   e Zd Zdddedef fddZdeeeej	f  de
e fd	d
Z  ZS )TeleChat2Model )prefixvllm_configr   c                   s   |j j}ddddd|j j_d|j j_d|_d|_t j||d | jD ]}t	|t
s?d |jj_d|jj_d |jj_d|jj_q$d S )	Nn_layern_headffn_hidden_sizelayer_norm_epsilon)num_hidden_layersnum_attention_headsintermediate_sizerms_norm_epssiluTr   r   )model_config	hf_configattribute_map
hidden_actbiasmlp_biassuper__init__layers
isinstancer
   	self_attnqkv_projskip_bias_addmlpgate_up_proj)selfr   r   r   layer	__class__ X/home/ubuntu/.local/lib/python3.10/site-packages/vllm/model_executor/models/telechat2.pyr"   *   s$   






zTeleChat2Model.__init__weightsreturnc              	   C   s  ddg}t |  }t }| jj}| jj| }|D ]\}}d|v r~g }	g }
t|D ]&}|| d }|	|||| d d f  |
||| |d|    q)tj	|	dd}	tj	|
dd}
|
dd}t|| rjq|| }|j}|||	d	 |||
d
 nZd|v r|
dd}t|| rq|| }|j}|||d n<|D ]$\}}}||vrq|
||}t|| rq|| }|j}||||  nt|| rq|| }t|dt}||| || q|S )N)r)   	gate_projr   )r)   up_projr   zself_attn.key_value   r   )dim	key_valuer&   kvqueryqweight_loader)dictnamed_parameterssetconfigr   hidden_sizerangeappendtorchcatreplacer   r;   getattrr   add)r*   r0   stacked_params_mappingparams_dictloaded_paramstotal_num_headshead_dimnameloaded_weightk_weightv_weightistartparamr;   
param_nameweight_nameshard_idr.   r.   r/   load_weightsD   sh   




zTeleChat2Model.load_weights)__name__
__module____qualname__r   strr"   r   tuplerC   Tensorr>   rW   __classcell__r.   r.   r,   r/   r   )   s    ,r   c                   @   sn   e Zd Zeddiddddddd	Zd
efdededee	j
 fddZdeeeejf  dee fddZdS )TeleChat2ForCausalLMztransformer.zmodel.z.layers.z.self_attn.z.embed_tokens.z.o_proj.z.norm.)z.h.z.self_attention.z.word_embeddings.z.dense.z.ln_f.)orig_to_new_prefixorig_to_new_substrr   r   r   
layer_typec                 C   s   t ||dS )Nr   )r   )r*   r   r   rb   r.   r.   r/   _init_model   s   z TeleChat2ForCausalLM._init_modelr0   r1   c                 C   s*   t | | jjr	dgnd d}|j|| jdS )Nzlm_head.)skip_prefixes)mapper)r	   r?   tie_word_embeddingsrW   hf_to_vllm_mapper)r*   r0   loaderr.   r.   r/   rW      s
   z!TeleChat2ForCausalLM.load_weightsN)rX   rY   rZ   r   rg   r   r   r[   typennModulerc   r   r\   rC   r]   r>   rW   r.   r.   r.   r/   r_   ~   s*    
(r_   )collections.abcr   rC   torch.nnrj   vllm.configr   -vllm.model_executor.model_loader.weight_utilsr    vllm.model_executor.models.llamar   r   llamar   utilsr	   r
   r   r   r   r_   r.   r.   r.   r/   <module>   s   U