o
    پiO2                     @   sp  d dl Z d dlZd dlmZ d dlmZmZmZ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 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  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+ e,e-Z.eG dd dZ/G dd de
j0Z1G dd de
j0Z2dede3dee4 fddZ5e2gZ6dS )    N)	dataclass)IterableListOptionalTuple)nn)GELUActivation)KimiVLConfig)DeepseekV2Config)MoonViTConfig)	QuickGELU)FusedMoE)QuantizationConfig)/MultiModalityDataPaddingPatternMultimodalTokensgeneral_mm_embed_routine)ModalityMultimodalDataItemMultimodalInputs)ForwardBatch)default_weight_loadermaybe_remap_kv_scale_name)DeepseekV2ForCausalLM)MoonVitPretrainedModel)
add_prefixc                   @   s&   e Zd ZU dZeed< dZeed< dS )MaxImageTokenMetai   widthheightN)__name__
__module____qualname__r   int__annotations__r    r"   r"   M/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/models/kimi_vl.pyr   R   s   
 r   c                       s8   e Zd Zdef fddZdejdejfddZ  ZS )KimiVLMultiModalProjectorconfigc                    s   t    |jj|jjd  |jjd  | _tjj|jjdd| _tj	| j| jdd| _
t | _t | _tj	| j|jjdd| _d S )Nr      gh㈵>)epsT)bias)super__init__vision_confighidden_sizemerge_kernel_sizetorchr   	LayerNormpre_normLinearlinear_1r   actr   text_configlinear_2)selfr%   	__class__r"   r#   r*   Z   s   


z"KimiVLMultiModalProjector.__init__image_featuresreturnc                 C   s6   |  |d| j}| |}| |}| |}|S )N)r0   viewr,   r2   r3   r5   )r6   r9   hidden_statesr"   r"   r#   forwardk   s
   


z!KimiVLMultiModalProjector.forward)	r   r   r   r	   r*   r.   Tensorr>   __classcell__r"   r"   r7   r#   r$   X   s    r$   c                	       s   e Zd Z		ddedee deddf fddZd	ee	 de
jfd
dZdee defddZ	dde
jde
jdedefddZdeeee
jf  fddZ  ZS )KimiVLForConditionalGenerationN r%   quant_configprefixr:   c                    sl   t    || _t|jtsJ t|j| _t|d| _	|| _
t|j}dg|_t||td|d| _d S )N)r%   r   language_model)r%   rC   rD   )r)   r*   r%   
isinstancer+   r   r   vision_towerr$   multi_modal_projectorrC   copydeepcopyr4   architecturesr   r   rE   )r6   r%   rC   rD   kwargsr4   r7   r"   r#   r*   t   s   
z'KimiVLForConditionalGeneration.__init__itemsc                 C   s   t jdd |D dd| jj| jj}| dkr(|jd | j	j
jkr(|S t jdd |D dd| jj}| ||}t|tsFJ | t |}|S )Nc                 S      g | ]}|j qS r"   )feature.0itemr"   r"   r#   
<listcomp>       zDKimiVLForConditionalGeneration.get_image_feature.<locals>.<listcomp>r   )dim   r;   c                 S   rN   r"   )image_grid_hwsrP   r"   r"   r#   rS      rT   )r.   cattyperG   dtypetodevicerU   shaper%   r4   r,   rF   listrH   )r6   rM   pixel_valuesrW   r9   resr"   r"   r#   get_image_feature   s   

z0KimiVLForConditionalGeneration.get_image_feature	input_ids	mm_inputsc                 C   s   t  }|||S )N)r   pad_input_tokens)r6   rb   rc   patternr"   r"   r#   pad_input_ids   s   z,KimiVLForConditionalGeneration.pad_input_idsF	positionsforward_batchget_embeddingc                 C   s    t ||| jtj| ji|d}|S )N)rb   rh   rE   data_embedding_funcsrg   )r   rE   r   IMAGEra   )r6   rb   rg   rh   ri   r=   r"   r"   r#   r>      s   
z&KimiVLForConditionalGeneration.forwardweightsc                 C   s,  | j j}i }ddg}|js|g d7 }t|dd r$tjddd|jd}ng }t|  }|D ]}|d d	 \}}	t	|d	krB|d	 ni }
d
|v rIq.t
||}|d urSq.d|v s[d|v r\q.| D ]\}}||v rn|||}q`d}d|v r}| jd ur|d}ng|D ]5\}}}||vrqd|v r||vrq|||}|dr||vrq|| }|j}|||	|fi |
  n/t|D ](\}\}}}}||vrq|||}|| }|j}|||	|f||d|
  nd}|r|dr||vrq.t||}|d u rq.|| }t|dt}|||	fi |
 q.| j  d S )N).gate_up_projz
.gate_projr   )rm   z.up_projr&   ))	.qkv_projz.q_projq)rn   z.k_projk)rn   z.v_projvn_routed_experts	gate_proj	down_projup_proj)ckpt_gate_proj_nameckpt_down_proj_nameckpt_up_proj_namenum_expertsrV   zrotary_emb.inv_freqzrotary_emb.cos_cachedzrotary_emb.sin_cachedFvisionTzmlp.experts.z.bias)	expert_idshard_idweight_loader)r%   r4   use_mlagetattrr   make_expert_params_mappingrr   dictnamed_parameterslen#get_spec_layer_idx_from_weight_namerM   replacerG   endswithr}   	enumerater   r   rE   post_load_weights)r6   rl   r%   _KEYS_TO_MODIFY_MAPPINGstacked_params_mappingexpert_params_mappingparams_dictargsnameloaded_weightrL   
spec_layerkey_to_modifynew_keyuse_default_weight_loading
param_nameweight_namer|   paramr}   idxr{   r"   r"   r#   load_weights   s   



z+KimiVLForConditionalGeneration.load_weights)NrB   )F)r   r   r   r	   r   r   strr*   r   r   r.   r?   ra   r    r   rf   r   boolr>   r   r   r   r@   r"   r"   r7   r#   rA   s   s2    	
$rA   r%   r   r:   c                 C   sP   t | dr&| jdkr&| j}t| jD ]}|d||  dr%||   S qd S )Nnum_nextn_predict_layersr   zmodel.layers..)hasattrr   num_hidden_layersrange
startswith)r%   r   	layer_idxir"   r"   r#   r   -  s   

r   )7rI   loggingdataclassesr   typingr   r   r   r   r.   r   transformers.activationsr   sglang.srt.configsr	   sglang.srt.configs.deepseekvl2r
   sglang.srt.configs.kimi_vl"sglang.srt.configs.kimi_vl_moonvitr   sglang.srt.layers.activationr   &sglang.srt.layers.moe.fused_moe_tritonr   *sglang.srt.layers.quantization.base_configr   sglang.srt.managers.mm_utilsr   r   "sglang.srt.managers.schedule_batchr   r   r   ,sglang.srt.model_executor.forward_batch_infor   $sglang.srt.model_loader.weight_utilsr   r   sglang.srt.models.deepseek_v2r   !sglang.srt.models.kimi_vl_moonvitr   sglang.srt.utilsr   	getLoggerr   loggerr   Moduler$   rA   r   r    r   
EntryClassr"   r"   r"   r#   <module>   sF   +
 ;

