o
    پi                     @   s   d Z ddlZddlmZmZmZmZmZ ddl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 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! e"e#Z$G dd de
j%Z&e&Z'dS )zDInference-only GLM-ASR-HF model compatible with HuggingFace weights.    N)AnyIterableListOptionalTuple)GlmAsrConfigGlmAsrEncoderConfig)GlmAsrEncoderGlmAsrMultiModalProjector)QuantizationConfig)/MultiModalityDataPaddingPatternMultimodalTokensgeneral_mm_embed_routine)ModalityMultimodalDataItemMultimodalInputs)ForwardBatch)default_weight_loader)LlamaForCausalLM)
add_prefixc                
       s   e Zd Zg dZddddddZ			dd
edee deddf fddZ	de
e defddZde
e dejfddZdejdejdededejf
ddZdeeeejf  fddZ  ZS ) GlmAsrForConditionalGeneration)z.gate_proj.z.down_proj.z	.up_proj.z.q_proj.z.k_proj.z.v_proj.z.o_proj.)qkv_projr   )r      )r      )gate_up_projr   )r   r   )q_projk_projv_proj	gate_projup_projN configquant_configprefixreturnc                    sl   t    || _t| jdd d u rt| jj| j_t|j| _t	|| _
t|j|td|d| _t | _d S )Naudio_configmodel)r"   )super__init__r    getattrr   _name_or_pathr$   r	   audio_towerr
   multi_modal_projectorr   text_configr   language_modelr   pattern)selfr    r!   r"   	__class__ L/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/models/glmasr.pyr'   E   s   

z'GlmAsrForConditionalGeneration.__init__	input_ids	mm_inputsc                 C   s   | j ||S )N)r.   pad_input_tokens)r/   r4   r5   r2   r2   r3   pad_input_ids[   s   z,GlmAsrForConditionalGeneration.pad_input_idsitemsc                 C   sN   t jdd |D dd| jj}| |j}|d| jjj	}| 
|}|S )Nc                 S   s   g | ]}|j qS r2   )feature).0itemr2   r2   r3   
<listcomp>`   s    zDGlmAsrForConditionalGeneration.get_audio_feature.<locals>.<listcomp>r   )dim)torchcattyper*   dtypelast_hidden_statereshaper    r$   intermediate_sizer+   )r/   r8   input_featuresaudio_embedsr2   r2   r3   get_audio_feature^   s   

z0GlmAsrForConditionalGeneration.get_audio_feature	positionsforward_batchkwargsc                 K   s    t ||| jtj| ji|d}|S )N)r4   rJ   r-   data_embedding_funcsrI   )r   r-   r   AUDIOrH   )r/   r4   rI   rJ   rK   hidden_statesr2   r2   r3   forwardl   s   
z&GlmAsrForConditionalGeneration.forwardweightsc              	   C   s   g d}t | jdd}|D ]m\}}d|v rq| jjjr!d|v r!q|D ],\}}}||vs0d|v r1q#|||}	|	drA|	|vrAq#||	 }
|
j}||
||  n+z|dr\||vr\W q|| }
W n tyo   t	|
   w t|
dt}||
| qd S )	N))r   r   q)r   r   k)r   r   v)r   r   r   )r   r   r   F)remove_duplicatezrotary_emb.inv_freqzlm_head.weightr*   z.biasweight_loader)dictnamed_parametersr    r,   tie_word_embeddingsreplaceendswithrU   KeyErrorprintkeysr(   r   )r/   rP   stacked_params_mappingparams_dictnameloaded_weight
param_nameweight_nameshard_idname_tmpparamrU   r2   r2   r3   load_weights   s:   
z+GlmAsrForConditionalGeneration.load_weights)Nr   )__name__
__module____qualname__#default_bitsandbytes_target_modules#bitsandbytes_stacked_params_mappingr   r   r   strr'   r   intr   r7   r   r?   TensorrH   r   r   rO   r   r   rg   __classcell__r2   r2   r0   r3   r   1   sB    
$r   )(__doc__loggingtypingr   r   r   r   r   r?   torch.nnnntransformersr   r   *transformers.models.glmasr.modeling_glmasrr	   r
   *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   sglang.srt.models.llamar   sglang.srt.utilsr   	getLoggerrh   loggerModuler   
EntryClassr2   r2   r2   r3   <module>   s"   
z