o
    
۾i                     @   s   d 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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mZ G dd dejeeZeddG dd deZeddG dd deZdS )zBInference-only Qwen2-RM model compatible with HuggingFace weights.    )IterableN)nn)
VllmConfig)ColumnParallelLinearRowParallelLinear)Pooler)pooler_for_token_classify)IntermediateTensors   )SupportsLoRA
SupportsPP)default_pooling_type)
Qwen2Model)AutoWeightsLoadermaybe_prefixc                       s   e Zd ZU dZeed< g dddgdZddd	ed
ef fddZ	de
jde
jfddZ		dde
jdB de
jdedB de
jdB de
jeB f
ddZdeeee
jf  dee fddZ  ZS )Qwen2RewardBaseModelTpooler)q_projk_projv_proj	gate_projup_proj)qkv_projgate_up_proj prefixvllm_configr   c                   s   t    |jj}|j}|| _|| _t|t|dd| _|jj	| _	t
t|j|j|| j	ddt
 t|j|j| j	|dd| _| jj| _d S )Nmodelr   r   F)quant_configparams_dtypereturn_bias)r!   r    r"   )super__init__model_config	hf_configr    configr   r   r   
head_dtyper   
Sequentialr   hidden_sizeReLUr   
num_labelsscoremake_empty_intermediate_tensors)selfr   r   r'   r    	__class__ W/home/ubuntu/.local/lib/python3.10/site-packages/vllm/model_executor/models/qwen2_rm.pyr$   +   s8   


zQwen2RewardBaseModel.__init__	input_idsreturnc                 C   s   | j |S N)r   embed_input_ids)r/   r4   r2   r2   r3   r7   M   s   z$Qwen2RewardBaseModel.embed_input_idsN	positionsintermediate_tensorsinputs_embedsc                 C   s*   |  ||||}|| j}| |}|S r6   )r   tor(   r-   )r/   r4   r8   r9   r:   hidden_stateslogitsr2   r2   r3   forwardP   s   
zQwen2RewardBaseModel.forwardweightsc                 C   s   t | dgd}||S )Nzlm_head.)ignore_unexpected_prefixes)r   load_weights)r/   r?   loaderr2   r2   r3   rA   ^   s   
z!Qwen2RewardBaseModel.load_weights)NN)__name__
__module____qualname__is_pooling_modelr   __annotations__packed_modules_mappingr   strr$   torchTensorr7   r	   r>   r   tuplesetrA   __classcell__r2   r2   r0   r3   r      s0   
 "
,r   ALL)tok_pooling_typec                       ,   e Zd Zdddedef fddZ  ZS )Qwen2ForRewardModelr   r   r   r   c                   <   d|j j_t j||d |j j}|d usJ t|| _d S )Nr
   r   r%   r&   r,   r#   r$   pooler_configr   r   r/   r   r   rU   r0   r2   r3   r$   e   
   
zQwen2ForRewardModel.__init__rC   rD   rE   r   rI   r$   rN   r2   r2   r0   r3   rR   c       $rR   STEPc                       rQ   )Qwen2ForProcessRewardModelr   r   r   r   c                   rS   )N   r   rT   rV   r0   r2   r3   r$   q   rW   z#Qwen2ForProcessRewardModel.__init__rX   r2   r2   r0   r3   r[   o   rY   r[   )__doc__collections.abcr   rJ   r   vllm.configr   !vllm.model_executor.layers.linearr   r   !vllm.model_executor.layers.poolerr   )vllm.model_executor.layers.pooler.tokwiser   vllm.sequencer	   
interfacesr   r   interfaces_baser   qwen2r   utilsr   r   Moduler   rR   r[   r2   r2   r2   r3   <module>   s$   H