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 )Qwen2ForSequenceClassificationN configquant_configprefixreturnc                    sZ   t    || _|| _t||td|d| _t|j	|j
| _ttjdd| _|j| _d S )Nmodel)r   r   F)pooling_type	normalize)super__init__r   r   r   r   r   r   Linearhidden_size
num_labelsscorer   r	   LASTpoolereos_token_id)selfr   r   r   	__class__ Z/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/models/qwen2_classification.pyr      s   
z'Qwen2ForSequenceClassification.__init__T	input_ids	positionsforward_batchinput_embedsget_embeddingc           	      C   s<   |sJ d|  ||||}| |}| ||j}t|S )Nz9Qwen2ForSequenceClassification is only used for embedding)r   r   r   
embeddingsr   )	r!   r&   r'   r(   r)   r*   hidden_stateslogitspooled_logitsr$   r$   r%   forward.   s   

z&Qwen2ForSequenceClassification.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>C   s
    z?Qwen2ForSequenceClassification.load_weights.<locals>.<listcomp>)r   load_weights)r!   r0   filtered_weightsr$   r$   r%   r7   A   s   z+Qwen2ForSequenceClassification.load_weights)Nr   )NT)__name__
__module____qualname__r   r   r
   strr   torchno_gradTensorr   boolr   r/   r   r   r7   __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   .