o
    
۾i                     @   sF  d dl mZmZ d dlmZ d dlmZ d dlZd dlm	Z	 d dl
m	  mZ d dlmZ d dlmZmZ d dlmZ d dlmZ eeZd	ed
dfddZd	ed
dfddZ		d#dededdfddZedejeej ZG dd de	jeZ G dd de Z!G dd de Z"G dd de Z#G dd  d e Z$G d!d" d"e Z%dS )$    )ABCabstractmethod)Callable)TypeVarN)PretrainedConfig)ModelConfigget_current_vllm_config)init_logger)resolve_obj_by_qualnameconfigreturnPoolerActivationc                 C   s<   t | dd}|dkrt S |dkrt S |dkrt S t S )Nproblem_type 
regressionsingle_label_classificationmulti_label_classification)getattrPoolerIdentityPoolerClassifyPoolerMultiLabelClassify)r   r    r   a/home/ubuntu/.local/lib/python3.10/site-packages/vllm/model_executor/layers/pooler/activations.pyget_classification_act_fn   s   r   c                 C   sr   d }t | drd| jv r| jd }nt | dr| jd ur| j}|d ur6|ds,J dt| }t|S t S )Nsentence_transformersactivation_fn$sbert_ce_default_activation_functionztorch.nn.modules.zVLoading of activation functions is restricted to torch.nn.modules for security reasons)hasattrr   r   
startswithr
   r   wrapsr   )r   function_namefnr   r   r   get_cross_encoder_act_fn#   s    



r"   Tmodel_configstatic_num_labelsact_fnzPoolerActivation | str | Nonec                 C   s`   t |tr|dkrt| jS |dkrt| jS td|d|d u r(t|dS t|s.J |S )Nclassifyscorezact_fn [act_fn=z] not supported.r$   )
isinstancestrr   	hf_configr"   
ValueErrorr   callable)r#   r$   r%   r   r   r   resolve_classifier_act_fn=   s   



r.   _Tc                   @   sL   e Zd ZedejfddZedej	dej	fddZ
dedefdd	Zd
S )r   modulec                 C   s2   t | tjr	t S t | tjtjfrt S t| S N)r)   nnIdentityr   SigmoidSoftmaxr   LambdaPoolerActivation)r0   r   r   r   r   U   s
   zPoolerActivation.wrapspooled_datar   c                 C   s   t r1   )NotImplementedErrorselfr7   r   r   r   forward_chunk^   s   zPoolerActivation.forward_chunkc                    s&   t |tr fdd|D S  |S )Nc                    s   g | ]}  |qS r   )r;   ).0datar:   r   r   
<listcomp>h   s    z,PoolerActivation.forward.<locals>.<listcomp>)r)   listr;   r9   r   r>   r   forwardb   s   

zPoolerActivation.forwardN)__name__
__module____qualname__staticmethodr2   Moduler   r   torchTensorr;   r/   rA   r   r   r   r   r   T   s    c                   @   "   e Zd ZdejdejfddZdS )r   r7   r   c                 C   s   |S r1   r   r9   r   r   r   r;   n   s   zPoolerIdentity.forward_chunkNrB   rC   rD   rG   rH   r;   r   r   r   r   r   m       r   c                   @   rI   )PoolerNormalizer7   r   c                 C   s   t j|dddS )N   )pdim)F	normalizer9   r   r   r   r;   s   s   zPoolerNormalize.forward_chunkNrJ   r   r   r   r   rL   r   rK   rL   c                   @   rI   )r   r7   r   c                 C   s
   t |S r1   )rQ   sigmoidr9   r   r   r   r;   x      
z&PoolerMultiLabelClassify.forward_chunkNrJ   r   r   r   r   r   w   rK   r   c                       sB   e Zd Zdddeddf fddZdejdejfd	d
Z  ZS )r   Tr(   r$   r   Nc                   sJ   t    |rt }|j}t|jdd}nd }|dkr td || _d S )N
num_labelsr   zznum_labels should be > 0 for classification models, falling back to softmax. Please check if the configuration is correct.)	super__init__r   r#   r   r+   loggerwarningrU   )r:   r$   vllm_configr#   rU   	__class__r   r   rW   }   s   

zPoolerClassify.__init__r7   c                 C   s8   | j }|d u r|jd }|dk rt|S tj|ddS )NrN   rM   )rP   )rU   shaperQ   rS   softmax)r:   r7   rU   r   r   r   r;      s   

zPoolerClassify.forward_chunk)	rB   rC   rD   boolrW   rG   rH   r;   __classcell__r   r   r[   r   r   |   s    r   c                       sF   e Zd Zdeejgejf f fddZdejdejfddZ  ZS )r6   r!   c                    s   t    || _d S r1   )rV   rW   r!   )r:   r!   r[   r   r   rW      s   

zLambdaPoolerActivation.__init__r7   r   c                 C   s
   |  |S r1   )r!   r9   r   r   r   r;      rT   z$LambdaPoolerActivation.forward_chunk)	rB   rC   rD   r   rG   rH   rW   r;   r`   r   r   r[   r   r6      s     r6   )TN)&abcr   r   collections.abcr   typingr   rG   torch.nnr2   torch.nn.functional
functionalrQ   transformersr   vllm.configr   r   vllm.loggerr	   vllm.utils.import_utilsr
   rB   rX   r   r"   r_   r.   rH   r@   r/   rF   r   r   rL   r   r   r6   r   r   r   r   <module>   sJ   


