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 d d	lmZmZ d d
lmZ G dd dejZeZdS )    )IterableOptionalTupleN)nn)LlamaConfig)EmbeddingPoolerOutputPoolerPoolingType)QuantizationConfig)ForwardBatch)default_weight_loader)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 )LlamaForClassificationN configquant_configprefixreturnc                    sV   t    || _|| _t||td|d| _tj|j	|j
dd| _ttjdd| _d S )Nmodel)r   r   F)bias)pooling_type	normalize)super__init__r   r   r   r   r   r   Linearhidden_sizeclassification_out_sizeclassification_headr   r	   LASTpooler)selfr   r   r   	__class__ Z/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/models/llama_classification.pyr      s   

zLlamaForClassification.__init__T	input_ids	positionsforward_batchinput_embedsget_embeddingc           	      C   s<   |sJ d|  ||||}| ||j}| |}t|S )NzhLlamaForClassification is only used for embedding. Please add --is-embedding when you launch the server.)r   r!   
embeddingsr   r   )	r"   r'   r(   r)   r*   r+   hidden_stateslast_token_hiddenscoresr%   r%   r&   forward0   s   

zLlamaForClassification.forwardweightsc                 C   sb   t |  }|D ]&\}}d|v r || }t|dt}||| qd|v r%qt| ||fg qd S )Nr   weight_loaderlm_head)dictnamed_parametersgetattrr   r   load_weights)r"   r1   params_dictnameloaded_weightparamr2   r%   r%   r&   r7   C   s   z#LlamaForClassification.load_weights)Nr   )NT)__name__
__module____qualname__r   r   r
   strr   torchno_gradTensorr   boolr   r0   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.model_loader.weight_utilsr   sglang.srt.models.llamar   r   sglang.srt.utilsr   Moduler   
EntryClassr%   r%   r%   r&   <module>   s   4