o
    پiI                     @   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G dd deZeegZdS )    )IterableOptionalTupleN)nn)LlamaConfig)EmbeddingPoolerOutputPoolerPoolingType)QuantizationConfig)ForwardBatch)LlamaForCausalLM
LlamaModel)
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 )LlamaForSequenceClassificationN configquant_configprefixreturnc                    sf   t    || _|| _|j| _t||td|d| _tj	|j
| jdd| _ttjdd| _|j| _d S )Nmodel)r   r   F)bias)pooling_type	normalize)super__init__r   r   
num_labelsr   r   r   r   Linearhidden_sizescorer   r	   LASTpoolereos_token_idselfr   r   r   	__class__ R/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/models/llama_reward.pyr      s   
z'LlamaForSequenceClassification.__init__T	input_ids	positionsforward_batchinput_embedsget_embeddingc           	      C   s<   |sJ d|  ||||}| ||j}| |}t|S )N9LlamaForSequenceClassification is only used for embedding)r   r    
embeddingsr   r   )	r#   r(   r)   r*   r+   r,   hidden_stateslast_token_hiddenscoresr&   r&   r'   forward/   s   

z&LlamaForSequenceClassification.forwardweightsc                 C   s   t | |S N)r   load_weightsr#   r3   r&   r&   r'   r5   B      z+LlamaForSequenceClassification.load_weightsNr   NT)__name__
__module____qualname__r   r   r
   strr   torchno_gradTensorr   boolr   r2   r   r   r5   __classcell__r&   r&   r$   r'   r      s:    $r   c                       s   e Zd ZG dd dejj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 fddZ  ZS )0LlamaForSequenceClassificationWithNormal_Weightsc                       s$   e Zd Z fddZdd Z  ZS )z8LlamaForSequenceClassificationWithNormal_Weights.Weightsc                    sd   t    tjtjj||tjdtj tjj||tjdtj tjj||d tjd| _d S )N)dtype   )	r   r   r>   r   
Sequentialr   float16SELUfc)r#   r   	num_labelr$   r&   r'   r   H   s   

zALlamaForSequenceClassificationWithNormal_Weights.Weights.__init__c                 C   s   |  |tjS r4   )rI   tor>   rG   )r#   xr&   r&   r'   r2   R   s   z@LlamaForSequenceClassificationWithNormal_Weights.Weights.forward)r:   r;   r<   r   r2   rB   r&   r&   r$   r'   WeightsG   s    
rM   Nr   r   r   r   r   c                    s(   t  j|||d | |j| j| _d S )N)r   )r   r   rM   r   r   r3   r"   r$   r&   r'   r   U   s   z9LlamaForSequenceClassificationWithNormal_Weights.__init__Tr(   r)   r*   r+   r,   c                 C   s   |sJ d|  ||||}| |}| |}| ||j}	| ||j}
|	d| jd dd d d d df d| jd }||
 jdddd}t|S )Nr-   rE   r   )dim   )	r   r   r3   r    r.   viewr   sumr   )r#   r(   r)   r*   r+   r,   r/   logitsr3   pooled_logitspooled_weightsrewsr1   r&   r&   r'   r2   ^   s   


&
z8LlamaForSequenceClassificationWithNormal_Weights.forwardr3   c                    s   t  |S r4   )r   r5   r6   r$   r&   r'   r5   w   r7   z=LlamaForSequenceClassificationWithNormal_Weights.load_weightsr8   r9   )r:   r;   r<   r>   r   ModulerM   r   r   r
   r=   r   r?   r@   r   rA   r   r2   r   r   r5   rB   r&   r&   r$   r'   rC   F   s<    	(rC   )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.llamar   r   sglang.srt.utilsr   rW   r   rC   
EntryClassr&   r&   r&   r'   <module>   s   *6