
    .`i4                        d Z ddlm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mZ dd	lmZmZ dd
lmZ ddlmZ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 ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+  G d dej,                  Z- G d dej,                  Z. G d dej,                  Z/ G d dej,                  Z0 G d dej,        e%          Z1dS )zmInference-only StableLM (https://github.com/Stability-AI/StableLM)
model compatible with HuggingFace weights.    )Iterable)isliceN)nn)StableLmConfig)	Attention)CacheConfig
VllmConfig)get_pp_group$get_tensor_model_parallel_world_size)
SiluAndMul)MergedColumnParallelLinearQKVParallelLinearRowParallelLinear)LogitsProcessor)QuantizationConfig)get_rope)ParallelLMHeadVocabParallelEmbedding)default_weight_loader)IntermediateTensors   )
SupportsPP)AutoWeightsLoaderis_pp_missing_parameter'make_empty_intermediate_tensors_factorymake_layersmaybe_prefixc            	       `     e Zd Z	 	 d
dededz  deddf fdZdej        dej        fd	Z	 xZ
S )StablelmMLPN configquant_configprefixreturnc                 L   t                                                       || _        |j        | _        |j        | _        t          |j        |j        gdz  d|| d          | _        t          |j        |j        d|| d          | _        t                      | _
        d S )N   Fz.gate_up_projbiasr"   r#   z
.down_proj)super__init__r!   hidden_sizeintermediate_sizer   gate_up_projr   	down_projr   act_fn)selfr!   r"   r#   	__class__s       w/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/model_executor/models/stablelm.pyr*   zStablelmMLP.__init__>   s     	!-!'!96%&*%+++
 
 
 +$%(((
 
 
 !ll    xc                     |                      |          \  }}|                     |          }|                     |          \  }}|S N)r-   r/   r.   )r0   r4   gate_up_s       r2   forwardzStablelmMLP.forwardX   sD    &&q))
KK  ~~a  1r3   )Nr    )__name__
__module____qualname__r   r   strr*   torchTensorr9   __classcell__r1   s   @r2   r   r   =   s         37	# ## )4/# 	#
 
# # # # # #4 %,        r3   r   c                   z     e Zd Z	 	 	 ddededz  dedz  deddf
 fdZd	ej	        d
ej	        dej	        fdZ
 xZS )StablelmAttentionNr    r!   cache_configr"   r#   r$   c           
      H   t                                                       || _        |j        | _        t	                      }|j        | _        | j        |z  | _        |j        | _	        | j	        |k    r| j	        |z  dk    sJ n|| j	        z  dk    sJ t          d| j	        |z            | _        | j        | j        z  | _        |j        | _        | j        dz  | _        | j        | j        z  | _        | j        | j        z  | _        t!          |dd          | _        | j        | j        z  |z  | j        k    r t%          d| j         d| j         d          t'          | j        | j        | j        | j	        | j        || d	
          | _        t+          | j        | j        z  | j        d|| d          | _        t/          | j        | j        j        | j        j                  | _        t5          | j        | j        | j        | j        ||| d          | _        d S )Nr   r   g      use_qkv_biasFz?hidden_size must be divisible by num_heads (got `hidden_size`: z and `num_heads`: z).z	.qkv_projr"   r#   z.o_projr'   )max_positionrope_parametersz.attn)num_kv_headsrD   r"   r#   )r)   r*   r!   r+   r   num_attention_headstotal_num_heads	num_headsnum_key_value_headstotal_num_key_value_headsmaxhead_dimmax_position_embeddingsscalingq_sizekv_sizegetattrqkv_bias
ValueErrorr   qkv_projr   o_projr   rI   
rotary_embr   attn)r0   r!   rD   r"   r#   tp_sizer1   s         r2   r*   zStablelmAttention.__init__`   sd    	!-688%9-8)/)C&)W44 1G;q@@@@@ T;;q@@@@#&q$*HG*S#T#T (D,@@'-'E$}d*nt}4/$-?>>MDN*W49III8'+'78 8%)^8 8 8   *M *M%'''
 
 
 ( 4=0%%%%
 
 
 #M< K7
 
 

 NML1%%###
 
 
			r3   	positionshidden_statesc                 "   |                      |          \  }}|                    | j        | j        | j        gd          \  }}}|                     |||          \  }}|                     |||          }|                     |          \  }	}|	S )N)dim)rY   splitrT   rU   r[   r\   rZ   )
r0   r^   r_   qkvr8   qkvattn_outputoutputs
             r2   r9   zStablelmAttention.forward   s    
 }--Q))T[$,E2)NN1ay!Q//1ii1a((KK,,	r3   NNr    )r:   r;   r<   r   r   r   r=   r*   r>   r?   r9   r@   rA   s   @r2   rC   rC   _   s         ,026B
 B
B
 "D(B
 )4/	B

 B
 
B
 B
 B
 B
 B
 B
H
<
 |
 
	
 
 
 
 
 
 
 
r3   rC   c                        e Zd Z	 	 	 ddededz  dedz  deddf
 fdZd	ej	        d
ej	        de
ej	        ej	        f         fdZ xZS )StablelmDecoderLayerNr    r!   rD   r"   r#   r$   c           	      r   t                                                       t          |||| d          | _        t	          ||| d          | _        t          |dt          |dd                    }t          j        |j	        |          | _
        t          j        |j	        |          | _        d S )Nz
.self_attnr#   z.mlpnorm_epslayer_norm_epsh㈵>eps)r)   r*   rC   	self_attnr   mlprV   r   	LayerNormr+   input_layernormpost_attention_layernorm)r0   r!   rD   r"   r#   ro   r1   s         r2   r*   zStablelmDecoderLayer.__init__   s     	*L,&7L7L7L
 
 
 v|vOOOLLL6:wv?OQV/W/WXX!|F,>HMMM(*V5GX(V(V(V%%%r3   r^   r_   c                     |}|                      |          }|                     ||          }||z   }|}|                     |          }|                     |          }||z   }||fS )N)r^   r_   )rw   rt   rx   ru   )r0   r^   r_   residuals       r2   r9   zStablelmDecoderLayer.forward   s     !,,];;' ' 
 
 !=0 !55mDD// =0h&&r3   rj   )r:   r;   r<   r   r   r   r=   r*   r>   r?   tupler9   r@   rA   s   @r2   rl   rl      s         ,026W WW "D(W )4/	W
 W 
W W W W W W '<' |' 
u|U\)	*	' ' ' ' ' ' ' 'r3   rl   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	d	z  dej        d	z  dej        e	z  f
dZ
deeeej        f                  dee         fdZ xZS )StableLMEpochModelr    rn   vllm_configr#   c          	         t                                                       |j        j        |j        |j        t          j        j        | d          | _	        t          j        fd| d          \  | _        | _        | _        t          dt          dd                    }t!          j        j        |	          | _        t'          d
gj                  | _        d S )Nz.embed_tokensrG   c                 *    t          |           S )Nrn   )rl   )r#   rD   r!   r"   s    r2   <lambda>z-StableLMEpochModel.__init__.<locals>.<lambda>   s     /l6   r3   z.layersrn   ro   rp   rq   rr   r_   )r)   r*   model_config	hf_configrD   r"   r   
vocab_sizer+   embed_tokensr   num_hidden_layersstart_layer	end_layerlayersrV   r   rv   normr   make_empty_intermediate_tensors)r0   r~   r#   ro   rD   r!   r"   r1   s       @@@r2   r*   zStableLMEpochModel.__init__   s   )3"/"/2%+++	
 
 
 9D$      %%%9
 9
 9
5$.$+ 6:wv?OQV/W/WXXL!3BBB	/Vv10
 0
,,,r3   	input_idsr$   c                 ,    |                      |          S r6   )r   r0   r   s     r2   embed_input_idsz"StableLMEpochModel.embed_input_ids   s      +++r3   Nr^   intermediate_tensorsinputs_embedsc                 P   t                      j        r||}n"|                     |          }n|J |d         }t          | j        | j        | j                  D ]} |||          \  }}t                      j        st          d|i          S | 	                    |          }|S )Nr_   )
r
   is_first_rankr   r   r   r   r   is_last_rankr   r   )r0   r   r^   r   r   r_   layerrz   s           r2   r9   zStableLMEpochModel.forward   s     >>' 	B( - $ 4 4Y ? ?'3330AMDK)94>JJ 	F 	FE&+eI}&E&E#M88~~* 	I&'GHHH		-00r3   weightsc                 (   g d}t          |                                           }t                      }|D ]\  }}|D ]i\  }}}	||vr|                    ||          }|                    d          r||vr;t          ||           rL||         }
|
j        } ||
||	            nU|                    d          r||vrt          ||           r||         }
t          |
dt                    } ||
|           |	                    |           |S )N))rY   q_projre   )rY   k_projrf   )rY   v_projrg   )r-   	gate_projr   )r-   up_projr   z.biasweight_loader)
dictnamed_parameterssetreplaceendswithr   r   rV   r   add)r0   r   stacked_params_mappingparams_dictloaded_paramsnameloaded_weight
param_nameweight_nameshard_idparamr   s               r2   load_weightszStableLMEpochModel.load_weights  sg   "
 "
 "
 4002233"%%%#* 	$ 	$D-5K 4 41
Kd**||K<<==)) d+.E.E*466 #D) % 3e]H=== ==)) d+.E.E*466 #D) '@U V Ve]333d####r3   r6   )r:   r;   r<   r	   r=   r*   r>   r?   r   r   r9   r   r{   r   r   r@   rA   s   @r2   r}   r}      s       AC 
 
 
z 
3 
 
 
 
 
 
4, ,%, , , , , .2 < < 2D8	
 |d* 
+	+   ,#HU33D-E$F #3s8 # # # # # # # #r3   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	d	z  dej        d	z  dej        e	z  f
dZ
dej        dej        d	z  fdZdeeeej        f                  dee         fdZ xZS )StablelmForCausalLMr    rn   r~   r#   c                   t                                                       |j        j        }|j        }|| _        || _        t          |t          |d                    | _        t          |j
        |j        || d          | _        | j        j        r| j        j        j        | j        _        t!          |j
                  | _        | j        j        | _        d S )Nmodel)r~   r#   z.lm_headrG   )r)   r*   r   r   r"   r!   r}   r   r   r   r   r+   lm_headtie_word_embeddingsr   weightr   logits_processorr   )r0   r~   r#   r!   r"   r1   s        r2   r*   zStablelmForCausalLM.__init__4  s    )3"/('#L,I,I
 
 

 &%&&&	
 
 
 ;* 	A"&*"9"@DL /0A B BJ6 	,,,r3   r   r$   c                 6    | j                             |          S r6   )r   r   r   s     r2   r   z#StablelmForCausalLM.embed_input_idsJ  s    z)))444r3   Nr^   r   r   c                 6    |                      ||||          }|S r6   )r   )r0   r   r^   r   r   r_   s         r2   r9   zStablelmForCausalLM.forwardM  s)     

y"6
 
 r3   r_   c                 <    |                      | j        |          }|S r6   )r   r   )r0   r_   logitss      r2   compute_logitsz"StablelmForCausalLM.compute_logitsY  s      &&t|]CCr3   r   c                 J    t          |           }|                    |          S r6   )r   r   )r0   r   loaders      r2   r   z StablelmForCausalLM.load_weights`  s#    "4((""7+++r3   )NN)r:   r;   r<   r	   r=   r*   r>   r?   r   r   r9   r   r   r{   r   r   r@   rA   s   @r2   r   r   3  sN       AC 
 
 
z 
3 
 
 
 
 
 
,5 5%, 5 5 5 5 <@-1
 
<
 <
 2D8	

 |d*
 
+	+
 
 
 
| 
	   ,HU33D-E$F ,3s8 , , , , , , , ,r3   r   )2__doc__collections.abcr   	itertoolsr   r>   r   transformersr   vllm.attention.layerr   vllm.configr   r	   vllm.distributedr
   r   %vllm.model_executor.layers.activationr   !vllm.model_executor.layers.linearr   r   r   +vllm.model_executor.layers.logits_processorr   'vllm.model_executor.layers.quantizationr   +vllm.model_executor.layers.rotary_embeddingr   3vllm.model_executor.layers.vocab_parallel_embeddingr   r   -vllm.model_executor.model_loader.weight_utilsr   vllm.sequencer   
interfacesr   utilsr   r   r   r   r   Moduler   rC   rl   r}   r    r3   r2   <module>r      s  ,. . % $ $ $ $ $              ' ' ' ' ' ' * * * * * * / / / / / / / / O O O O O O O O < < < < < <         
 H G G G G G F F F F F F @ @ @ @ @ @        P O O O O O - - - - - - " " " " " "                 ")   DO O O O O	 O O Od%' %' %' %' %'29 %' %' %'PW W W W W W W Wt/, /, /, /, /,")Z /, /, /, /, /,r3   