
    .`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	 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 ddlmZmZ  G d dej                  Z G d dej                  Z G d dej                  ZdS )zInference-only Ernie-MTP model.    )IterableN)PretrainedConfig)
VllmConfig)RMSNorm)LogitsProcessor)ParallelLMHeadVocabParallelEmbedding)default_weight_loader)IntermediateTensors   )LlamaDecoderLayer)is_pp_missing_parametermaybe_prefixc                   t     e Zd Zdededdf fdZ	 ddej        dej        d	ej        d
edej        f
dZ	 xZ
S )ErnieMultiTokenPredictorLayervllm_configprefixreturnNc                 \   t                                                       |j        j        }t	          |j        |j                  | _        t	          |j        |j                  | _        t          j
        |j        dz  |j        d          | _        t          ||          | _        d S )N)eps   F)bias)super__init__model_config	hf_configr   hidden_sizerms_norm_epsmtp_emb_normmtp_hidden_normnnLinearmtp_linear_projr   	mtp_blockselfr   r   config	__class__s       x/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/model_executor/models/ernie_mtp.pyr   z&ErnieMultiTokenPredictorLayer.__init__/   s    
 	)3#F$6F<OPPP&v'9v?RSSS!y"F$6U 
  
  
 +;??    r   inputs_embeds	positionsprevious_hidden_statesspec_step_indexc                 
   |J d||dk    <   |                      |          }|                     |          }|                     t          j        ||gd                    }|                     ||d           \  }}||z   }|S )Nr   )dim)r,   hidden_statesresidual)r   r    r#   torchcatr$   )r&   r+   r,   r-   r.   r2   r3   s          r)   forwardz%ErnieMultiTokenPredictorLayer.forward>   s     (((()i1n%))-88!%!5!56L!M!M,,I}&<=2FFF
 
 #'..}t #1 #
 #
x !=0r*   r   )__name__
__module____qualname__r   strr   r4   Tensorintr6   __classcell__r(   s   @r)   r   r   .   s        @@ @ 
	@ @ @ @ @ @(  ! | < !&	
  
       r*   r   c                        e Zd Zdddedef fdZdej        dej        fdZ	 	 ddej        dej        dej        dej        d	z  de	dej        fdZ
	 ddej        dede	dej        fdZ xZS )ErnieMultiTokenPredictor r   r   r   c                   t                                                       j        j        }|j        | _        |j        | _        t          j	        
                    fdt          | j        | j        | j        z             D                       | _        t          |j        |j                  | _        t#          |j                  | _        d S )Nc           	      V    i | ]%}t          |          t           d |           &S )z.layers.)r;   r   ).0idxr   r   s     r)   
<dictcomp>z5ErnieMultiTokenPredictor.__init__.<locals>.<dictcomp>a   sR     	 	 	
 	 C7,,s,, 	 	 	r*   )r   r   r   r   num_hidden_layersmtp_start_layer_idxnum_nextn_predict_layersnum_mtp_layersr4   r!   
ModuleDictrangelayersr	   
vocab_sizer   embed_tokensr   logits_processorr%   s    `` r)   r   z!ErnieMultiTokenPredictor.__init__Y   s    )3#)#; $=h))	 	 	 	 	
 !,,t/BB 	 	 	
 
 3
 
 !00A B Br*   	input_idsr   c                 ,    |                      |          S N)rQ   r&   rS   s     r)   embed_input_idsz(ErnieMultiTokenPredictor.embed_input_idsr   s      +++r*   Nr   r,   r-   r+   spec_step_idxc                     ||                      |          } | j        t          | j        |z                      ||||          S rU   )rQ   rO   r;   rJ   )r&   rS   r,   r-   r+   rX   s         r)   r6   z ErnieMultiTokenPredictor.forwardu   sT       --i88MIt{3t7-GHHI"	
 
 	
r*   r2   lm_headc                 v    | j         t          | j        |z                       |                     ||          }|S rU   )rO   r;   rJ   rR   )r&   r2   rZ   rX   logitss        r)   compute_logitsz'ErnieMultiTokenPredictor.compute_logits   s;     	C0=@AABB&&w>>r*   )Nr   r7   )r8   r9   r:   r   r;   r   r4   r<   rW   r=   r6   r   r]   r>   r?   s   @r)   rA   rA   X   s:       AC C C Cz C3 C C C C C C2, ,%, , , , , .2
 
<
 <
 !&	

 |d*
 
 

 
 
 
* 	 |   	
 
       r*   rA   c                   D    e Zd Zdddedef fdZdej        dej        fdZ	 	 	 ddej        dej        dej        de	d	z  dej        d	z  de
dej        fdZ	 ddej        de
dej        d	z  fdZdeeeej        f                  dee         fdZdededefdZ xZS )ErnieMTPrB   rC   r   r   c                v   t                                                       |j        j        | _        t          |t          |d                    | _        t          | j        j	        | j        j
        t          |d                    | _        | j        j        r| j        j        j        | j        _        d S d S )Nmodel)r   r   rZ   rC   )r   r   r   r   r'   rA   r   ra   r   rP   r   rZ   tie_word_embeddingsrQ   weight)r&   r   r   r(   s      r)   r   zErnieMTP.__init__   s    !.8-#L,I,I
 
 

 &K"K#	22
 
 
 ;* 	A"&*"9"@DL	A 	Ar*   rS   r   c                 6    | j                             |          S rU   )ra   rW   rV   s     r)   rW   zErnieMTP.embed_input_ids   s    z)))444r*   Nr   r,   r2   intermediate_tensorsr+   rX   c                 X    |dk    s
J d            |                      |||||          }|S )Nr   z(ernie_mtp only support predict one token)ra   )r&   rS   r,   r2   re   r+   rX   s          r)   r6   zErnieMTP.forward   sD     !!!#M!!!

y-
 
 r*   c                 D    | j                             || j        |          S rU   )ra   r]   rZ   )r&   r2   rX   s      r)   r]   zErnieMTP.compute_logits   s     
 z((mTTTr*   weightsc                 H   g d}t          |                                           }t                      }|D ]j\  }}| j        j        r|                    d          r(d|v r-d|v r|                     | j        |          }|D ]\  }}}	||vrd|vrd|v r||vr|                    ||          }|                    d          s|                    d          r||vr^t          ||           ro||         }
|
j	        } ||
||	            nz|                    d          s|                    d          r||vrt          ||           rd|vr
d	|vrd
|vr+||         }
t          |
dt                    } ||
|           |                    |           l|S )N))qkv_projq_projq)rj   k_projk)rj   v_projv)gate_up_proj	gate_projr   )rq   up_projr   zlm_head.weightzrotary_emb.inv_freqmtpzmlp.experts.z.bias_biasmtp_rQ   rZ   weight_loader)dictnamed_parameterssetr'   rb   endswith_rewrite_spec_layer_namereplacer   rw   getattrr
   add)r&   rh   stacked_params_mappingparams_dictloaded_paramsnameloaded_weight
param_nameweight_nameshard_idparamrw   s               r)   load_weightszErnieMTP.load_weights   s2   "
 "
 "
 4002233"%%%#* 8	$ 8	$D-{. 4==AQ3R3R $,,}}44T[$GG5K /4 /41
Kd**$$ #d**K0G0G||K<< MM'**.2mmG.D.D+--*466 #D) % 3e]H=== MM'**.2mmG.D.D+--*466  %%"$..9D3H3H#D) '@U V Ve]333d####r*   r'   r   c           	          g d}|j         }|D ]+}||v r%|                    d| dd| d| d          }|c S ,|                    dd| d          }|S )zT
        Rewrite the weight name to match the format of the original model.
        )rQ   r   r    r#   zmodel.z.0.zmodel.layers..zmodel.mtp_block.0.z.mtp_block.)rI   r}   )r&   r'   r   spec_layer_weight_names	layer_idxr   s         r)   r|   z!ErnieMTP._rewrite_spec_layer_name  s    #
 #
 #
 ,	2 	 	Kd""||-[--->I>>>>>   # || "H)"H"H"H
 
 r*   )NNr   r7   )r8   r9   r:   r   r;   r   r4   r<   rW   r   r=   r6   r]   r   tuplerz   r   r   r|   r>   r?   s   @r)   r_   r_      s       AC A A Az A3 A A A A A A 5 5%, 5 5 5 5 <@-1 < < |	
 2D8 |d*  
   $ U U|U U 
		U U U UDHU33D-E$F D3s8 D D D DL/? s s        r*   r_   )__doc__collections.abcr   r4   torch.nnr!   transformersr   vllm.configr   $vllm.model_executor.layers.layernormr   +vllm.model_executor.layers.logits_processorr   3vllm.model_executor.layers.vocab_parallel_embeddingr   r	   -vllm.model_executor.model_loader.weight_utilsr
   vllm.sequencer   llamar   utilsr   r   Moduler   rA   r_    r*   r)   <module>r      s  0 & % $ $ $ $ $ $        ) ) ) ) ) ) " " " " " " 8 8 8 8 8 8 G G G G G G        P O O O O O - - - - - - $ $ $ $ $ $ 8 8 8 8 8 8 8 8' ' ' ' 'BI ' ' 'T6 6 6 6 6ry 6 6 6rE E E E Ery E E E E Er*   