o
    
۾iU                     @   s   d dl mZm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 d dlmZ dd	lmZmZ dd
lmZ ddlmZmZmZmZ ddlmZmZmZ G dd deZG dd deZG dd deZg dZdS )    )MappingSet)groupbyN)PoolerConfigPoolingParamsUpdate)PoolingTask)PoolingMetadata   )PoolerPoolerOutput)ClassifierFn)SequencePoolingFnSequencePoolingMethodpooler_for_classifypooler_for_embed)AllPoolpooler_for_token_classifypooler_for_token_embedc                	       s   e Zd ZdZedefddZeddddedeeB dB de	dB fd	d
Z
deeef ddf fddZdee fddZdedefddZdejdedefddZdefddZ  ZS )DispatchPoolerz;Dispatches calls to a sub-pooler based on the pooling task.pooler_configc                 C   s   | t |t|dS )N)token_embedembed)r   r   )clsr    r   ]/home/ubuntu/.local/lib/python3.10/site-packages/vllm/model_executor/layers/pooler/special.pyfor_embedding   s
   zDispatchPooler.for_embeddingNpooling
classifierr   r   c             	   C   s4   | t |t |dt|||ddt|||dddS )Nr   classify)r   r   act_fnscore)token_classifyr    r"   )r   r   r   )r   r   r   r   r   r   r   for_seq_cls$   s(   zDispatchPooler.for_seq_clspoolers_by_taskreturnc              	      sP   t    | D ]\}}|| vr"td|d|d|  q	|| _d S )Nzpooler=z does not support task=z. Supported tasks: )super__init__itemsget_supported_tasks
ValueErrorr%   )selfr%   taskpooler	__class__r   r   r(   B   s   

zDispatchPooler.__init__c                 C   s
   t | jS N)setr%   r,   r   r   r   r*   N      
z"DispatchPooler.get_supported_tasksr-   c                 C   s   | j | |S r1   )r%   get_pooling_updatesr,   r-   r   r   r   r5   Q   s   z"DispatchPooler.get_pooling_updateshidden_statespooling_metadatac                 C   s   | j }ttjd B   }d}t|jD ]1\}}|| }s)td|d|   t	t|}	||||||	  }
|
|
 ||	7 }q|S )Nr   zUnsupported task: z Supported tasks: )r%   listtorchTensorr   tasksgetr+   r*   lenextend)r,   r7   r8   r%   outputsoffsetr-   groupr.   	num_itemsgroup_outputr   r   r   forwardT   s$   

zDispatchPooler.forwardc                 C   s   d|    }|S )Nzsupported_task=)r*   )r,   sr   r   r   
extra_repro   s   zDispatchPooler.extra_repr)__name__
__module____qualname____doc__classmethodr   r   r   r   r   r$   r   r   r   r(   r   r*   r   r5   r:   r;   r	   r   rE   strrG   __classcell__r   r   r/   r   r      s2    

r   c                   @   s6   e Zd Zdee fddZdejdede	fddZ
dS )	IdentityPoolerr&   c                 C   s   ddhS )Npluginr"   r   r3   r   r   r   r*   u   s   z"IdentityPooler.get_supported_tasksr7   r8   c                 C   s   |S r1   r   )r,   r7   r8   r   r   r   rE   x   s   zIdentityPooler.forwardN)rH   rI   rJ   r   r   r*   r:   r;   r	   r   rE   r   r   r   r   rO   t   s    rO   c                	       s~   e Zd ZdZ		ddedededdf fdd	Zdee fd
dZ	dede
fddZdejeej B dedefddZ  ZS )BOSEOSFilterz3Filters the BOS and EOS token results from outputs.r.   bos_token_ideos_token_idr&   Nc                    s    t    || _|| _|| _d S r1   )r'   r(   r.   rS   rT   )r,   r.   rS   rT   r/   r   r   r(      s   

zBOSEOSFilter.__init__c                 C   s
   | j  S r1   )r.   r*   r3   r   r   r   r*      r4   z BOSEOSFilter.get_supported_tasksr-   c                 C   s
   t ddS )NT)requires_token_idsr   r6   r   r   r   r5      r4   z BOSEOSFilter.get_pooling_updatesr7   r8   c                 C   s   |  ||}t|tsJ t|jD ]A\}}|| }t|tjr'|jd |ks)J |j|d |f }|d | j	kr?|dd  }|d | j
krL|d d }|d||< q|S )Nr   r
   rR   )r.   
isinstancer9   	enumerateprompt_lensr:   r;   shapeprompt_token_idsrS   rT   squeeze)r,   r7   r8   pooled_outputsi
prompt_lenpooled_data	token_idsr   r   r   rE      s   
zBOSEOSFilter.forward)rR   rR   )rH   rI   rJ   rK   r   intr(   r   r   r*   r   r5   r:   r;   r9   r	   r   rE   rN   r   r   r/   r   rQ      s,    rQ   )rQ   r   rO   ) collections.abcr   r   	itertoolsr   r:   vllm.configr   !vllm.model_executor.layers.poolerr   
vllm.tasksr   vllm.v1.pool.metadatar	   abstractr   r   commonr   seqwiser   r   r   r   tokwiser   r   r   r   rO   rQ   __all__r   r   r   r   <module>   s   \-