
    .`i                         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 d	d
lmZmZ  G d de          ZdS )z!Llama model for fairseq2 weights.    )IterableN)	Parameter)
VllmConfig)get_tensor_model_parallel_rank$get_tensor_model_parallel_world_size)set_weight_attrs)LlamaForCausalLM   )AutoWeightsLoaderWeightsMapperc            
            e Zd Zdddedef fdZdeeeej	        f                  de
e         fdZd	eeef         fd
Zdedej	        d	eeef         deeej	        f         fdZ xZS )Fairseq2LlamaForCausalLM )prefixvllm_configr   c                    t                                          ||           t                      | _        t	                      | _        dd| j         dg| _        d S )N)r   r   zmodel.ptmodel.z.pt)super__init__r   tp_rankr   tp_sizeallow_patterns_overrides)selfr   r   	__class__s      }/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/model_executor/models/fairseq2_llama.pyr   z!Fairseq2LlamaForCausalLM.__init__%   s_    [@@@577;== &T\&&&	)
%%%    weightsreturnc                     t          |          }||d                                                  }t          dddddddd	d
ddd          }|                    |          }t                                                     t            j        j        rdgnd           }|                     fd|D                       S )N	model_keyzmodel.embed_tokens.r   zlm_head.)zdecoder_frontend.embed.zdecoder.zfinal_proj.z.input_layernorm.z.post_attention_layernorm.z.self_attn.o_proj.z.mlp.gate_proj.z.mlp.up_proj.z.mlp.down_proj.z.norm.)z.self_attn_layer_norm.z.ffn_layer_norm.z.self_attn.output_proj.z.ffn.gate_proj.z.ffn.inner_proj.z.ffn.output_proj.z.layer_norm.)orig_to_new_prefixorig_to_new_substr)skip_prefixesc              3   L   K   | ]\  }}                     ||          V  d S N)reshape_fairseq2_weights).0nameloaded_weightparamsr   s      r   	<genexpr>z8Fairseq2LlamaForCausalLM.load_weights.<locals>.<genexpr>R   sM        'D- --dM6JJ     r   )	dictitemsr   applynamed_parametersr   configtie_word_embeddingsload_weights)r   r   weights_wrappedfs2_to_vllm_mapperloaderr*   s   `    @r   r2   z%Fairseq2LlamaForCausalLM.load_weights1   s    w--!/+">?EEGG ++@$)    +>$@+?#4$3%6 (   
 
 
  %**733d++--.."+/;+JTJ<<PT
 
 
 ""    +2  
 
 	
r   r*   c                    |                                 D ]r\  }}|                    d          d|v r&t          |                                          dk     rDt	          fddD                       r`t          |ddi           sdS )	zASets the `is_sharded_weight` flag to True for all sharded weights.norm   c              3       K   | ]}|v V  	d S r%    r'   embmoduless     r   r+   z@Fairseq2LlamaForCausalLM.flag_sharded_weights.<locals>.<genexpr>_   s'      KKSG^KKKKKKr   embed_tokenslm_headis_sharded_weightTN)r-   splitlensizeanyr   )r   r*   r(   paramr>   s       @r   flag_sharded_weightsz-Fairseq2LlamaForCausalLM.flag_sharded_weightsX   s    !<<>> 
	E 
	EKD%jjooG~~#ejjll"3"3a"7"7KKKK/JKKKKK E !)<d(CDDDD
	E 
	Er   r(   r)   c                     dt           j        dt          dt           j        f fd}|                    d          dv r || j        j                  }ndv r || j        j                  }t          fdd	D                       rd
} j        dk    r|j	        |          j        j
        k     r|j	        |          j        z   j        j
        k    s
J d            dgt          |                                          z  } j        ||<   |                    |          }t          ||         ddi           dv r                     |           ||fS )zReshape fairseq2's weights.wn_headsr   c                 :   j         j        |z  }|j        z  |                                 d         k    r|j        z  }|j        z  }j         j        }|                     |||z  dz  d|                              dd                              ||          S )Nr   r9   r
   )r0   head_dimr   rE   hidden_sizeview	transposereshape)rJ   rK   attn_inattn_outr   s       r   permutezBFairseq2LlamaForCausalLM.reshape_fairseq2_weights.<locals>.permuten   s    k*W4G$,&!&&((1+55DL(DL({.Hw7 2a 7HEE1a(++r   r7   k_projq_projc              3       K   | ]}|v V  	d S r%   r;   r<   s     r   r+   zDFairseq2LlamaForCausalLM.reshape_fairseq2_weights.<locals>.<genexpr>   s'      EE#sg~EEEEEEr   r?   r   r
   z*vocab_size should be divisible by tp_size.rB   Fr@   )torchTensorintrC   r0   num_key_value_headsnum_attention_headsrF   r   shape
vocab_sizerD   rE   repeatr   rH   )r   r(   r)   r*   rT   dimrepeatsr>   s   `      @r   r&   z1Fairseq2LlamaForCausalLM.reshape_fairseq2_weightsf   s   	u| 	c 	el 	 	 	 	 	 	 **S// w#GM4;3RSSMM  #GM4;3RSSM EEEE)DEEEEE 	6C |aM$7$<t{?U$U$U!',t|;t{?UUUU? VUU#M$6$6$8$8 9 99#| - 4 4W = = 0CU/KLLL!W,,--f555]""r   )__name__
__module____qualname__r   strr   r   tuplerX   rY   setr2   r,   r   rH   r&   __classcell__)r   s   @r   r   r   $   s
       AC 

 

 

z 

3 

 

 

 

 

 

%
HU33D-E$F %
3s8 %
 %
 %
 %
NE4Y+? E E E E4#4# |4# S)^$	4#
 
sEL 	!4# 4# 4# 4# 4# 4# 4# 4#r   r   )__doc__collections.abcr   rX   torch.nnr   vllm.configr   vllm.distributedr   r   !vllm.model_executor.layers.linearr    vllm.model_executor.models.llamar	   utilsr   r   r   r;   r   r   <module>rq      s   $ ( ' $ $ $ $ $ $        " " " " " "        ? > > > > > = = = = = = 3 3 3 3 3 3 3 3v# v# v# v# v#/ v# v# v# v# v#r   