o
    پi                     @   s   d dl Z d dl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
mZ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 e eZG dd dejZG dd deZegZdS )    N)IterableOptionalTuple)nn)Qwen2Config)EmbeddingPoolerOutputPoolerPoolingType)QuantizationConfig)ForwardBatch)default_weight_loader)
Qwen3Model)
add_prefixc                       s   e Zd ZdZ		ddedee deddf fdd	Ze	
 		
dde	jde	jdedee	j dedefddZdeeee	jf  fddZ  ZS )Qwen3ForPooledOutputzBase class for Qwen3 models that produce pooled output (classification, reward).

    Subclasses should set self.score and self.pooler in their __init__.
    N configquant_configprefixreturnc                    s8   t    || _|| _t||td|d| _|j| _d S )Nmodel)r   r   )super__init__r   r   r   r   r   eos_token_id)selfr   r   r   	__class__ Z/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/models/qwen3_classification.pyr   &   s   
zQwen3ForPooledOutput.__init__T	input_ids	positionsforward_batchinput_embedsget_embeddingc           	      C   sF   |sJ | j j d| ||||}| |}| ||j}t|S )Nz is only used for embedding)r   __name__r   scorepooler
embeddingsr   )	r   r   r   r    r!   r"   hidden_stateslogitspooled_logitsr   r   r   forward5   s
   	
zQwen3ForPooledOutput.forwardweightsc                 C   s  g d}t |  }|D ]s\}}|drqd|v sd|v rqd|v s'd|v r(q|D ]-\}}}||vr4q*|||}|drD||vrDq*||vrIq*|| }	|	j}
|
|	||  n'|drb||vrbq||v rv|| }	t|	dt}
|
|	| qt	d	| d
 qd S )N))qkv_projq_projq)r,   k_projk)r,   v_projv)gate_up_proj	gate_projr   )r3   up_proj   lm_headzrotary_emb.inv_freq	projectorzrotary_emb.cos_cachedzrotary_emb.sin_cachedz.biasweight_loaderz
Parameter z not found in params_dict)
dictnamed_parameters
startswithreplaceendswithr9   getattrr   loggerwarning)r   r+   stacked_params_mappingparams_dictnameloaded_weight
param_nameweight_nameshard_idparamr9   r   r   r   load_weightsF   s@   	
z!Qwen3ForPooledOutput.load_weightsNr   )NT)r#   
__module____qualname____doc__r   r   r
   strr   torchno_gradTensorr   boolr   r*   r   r   rJ   __classcell__r   r   r   r   r       s<    $r   c                	       s8   e Zd Z		d	dedee deddf fddZ  ZS )
Qwen3ForSequenceClassificationNr   r   r   r   r   c                    sR   t  ||| t|j|j| _d}|jd us|jd urd}t	t
j|d| _d S )NTF)pooling_type	normalize)r   r   r   Linearhidden_size
num_labelsr$   id2labellabel2idr   r	   LASTr%   )r   r   r   r   rW   r   r   r   r   z   s   z'Qwen3ForSequenceClassification.__init__rK   )	r#   rL   rM   r   r   r
   rO   r   rT   r   r   r   r   rU   y   s    rU   )loggingtypingr   r   r   rP   r   transformersr   sglang.srt.layers.poolerr   r   r	   *sglang.srt.layers.quantization.base_configr
   ,sglang.srt.model_executor.forward_batch_infor   $sglang.srt.model_loader.weight_utilsr   sglang.srt.models.qwen3r   sglang.srt.utilsr   	getLoggerr#   r@   Moduler   rU   
EntryClassr   r   r   r   <module>   s    
Y