o
    پi                     @   s   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mZ d d	lmZ G d
d dejZegZdS )    )IterableOptionalTupleN)nn)Qwen2Config)EmbeddingPoolerOutputPoolerPoolingType)QuantizationConfig)ForwardBatch)Qwen2ForCausalLM
Qwen2Model)
add_prefixc                       s   e 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j
dedefddZdeeeej
f  fddZ  ZS )Qwen2ForRewardModelN configquant_configprefixreturnc                    sz   t    || _|| _d| _t||td|d| _t	t
|j|jt t
|j| j| _ttjdd| _|j| _d S )N   model)r   r   F)pooling_type	normalize)super__init__r   r   
num_labelsr   r   r   r   
SequentialLinearhidden_sizeReLUscorer   r	   LASTpoolereos_token_id)selfr   r   r   	__class__ N/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/models/qwen2_rm.pyr      s   
zQwen2ForRewardModel.__init__T	input_ids	positionsforward_batchinput_embedsget_embeddingc           	      C   s<   |sJ d|  ||||}| |}| ||j}t|S )Nz.Qwen2ForRewardModel is only used for embedding)r   r    r"   
embeddingsr   )	r$   r)   r*   r+   r,   r-   hidden_stateslogitspooled_logitsr'   r'   r(   forward3   s
   	
zQwen2ForRewardModel.forwardweightsc                 C   s   dd |D }t | |S )Nc                 S   s"   g | ]\}}| d s||fqS )lm_head)
startswith).0namewr'   r'   r(   
<listcomp>F   s
    z4Qwen2ForRewardModel.load_weights.<locals>.<listcomp>)r   load_weights)r$   r3   filtered_weightsr'   r'   r(   r:   D   s   z Qwen2ForRewardModel.load_weights)Nr   )NT)__name__
__module____qualname__r   r   r
   strr   torchno_gradTensorr   boolr   r2   r   r   r:   __classcell__r'   r'   r%   r(   r      s:    $r   )typingr   r   r   r@   r   transformersr   sglang.srt.layers.poolerr   r   r	   *sglang.srt.layers.quantization.base_configr
   ,sglang.srt.model_executor.forward_batch_infor   sglang.srt.models.qwen2r   r   sglang.srt.utilsr   Moduler   
EntryClassr'   r'   r'   r(   <module>   s   1