o
    .i
                     @   s|   d dl mZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
 e
 ZeG dd dZG dd	 d	ZeG d
d dZdS )    )	dataclassN)PoolingParams)PoolingTask)is_pin_memory_availablec                   @   sj   e Zd ZU ee ed< ejed< ejed< ejed< ejed< ejed< defdd	Z	d
d Z
dd ZdS )PoolingCursorindexfirst_token_indices_gpulast_token_indices_gpuprompt_lens_cpuseq_lens_cpunum_scheduled_tokens_cpuindicesc                 C   s8   t | j| | j| | j| | j| | j| | j| dS )Nr   r   r	   r
   r   r   )r   r   r   r	   r
   r   r   selfr    r   R/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/vllm/v1/pool/metadata.py__getitem__   s   zPoolingCursor.__getitem__c                 C   s   t | j| jk S N)torchallr
   r   r   r   r   r   is_partial_prefill"   s   z PoolingCursor.is_partial_prefillc                 C   s   | j | jkS r   )r
   r   r   r   r   r   is_finished%   s   zPoolingCursor.is_finishedN)__name__
__module____qualname__listint__annotations__r   Tensorslicer   r   r   r   r   r   r   r      s   
 





r   c                   @   s   e Zd Zdd Zdd ZdS )PoolingStatesc                 C   s
   g | _ d S r   )hidden_states_cacher   r   r   r   __init__*   s   
zPoolingStates.__init__c                 C   s   | j   d S r   )r#   clearr   r   r   r   clean.   s   zPoolingStates.cleanN)r   r   r   r$   r&   r   r   r   r   r"   )   s    r"   c                   @   s   e Zd ZU dZejed< ejdB ed< ee ed< ee	 ed< dZ
edB ed< dd	d
ZdefddZdeej fddZdefddZdejdejdejfddZdS )PoolingMetadatazTensors for pooling.prompt_lensNprompt_token_idspooling_paramspooling_statespooling_cursorreturnc                    s6   | j } fdd|D }t|t|ksJ || _d S )Nc                    s   g | ]}|j   d ur qS r   task).0pooling_paramr.   r   r   
<listcomp>?   s
    z1PoolingMetadata.__post_init__.<locals>.<listcomp>)r*   lentasks)r   r*   r4   r   r.   r   __post_init__<   s   

zPoolingMetadata.__post_init__r   c                 C   sP   t | j| | jd u rd n| j| | j| | j| | jd u r!d dS | j| dS )N)r(   r)   r*   r+   r,   )r'   r(   r)   r*   r+   r,   r   r   r   r   r   H   s   

	zPoolingMetadata.__getitem__c                    s.   | j   d usJ d fddt| jD S )Nz=Please set `requires_token_ids=True` in `get_pooling_updates`c                    s    g | ]\}} |d |f qS r   r   )r0   inumr)   r   r   r2   [   s     z8PoolingMetadata.get_prompt_token_ids.<locals>.<listcomp>)r)   	enumerater(   r   r   r8   r   get_prompt_token_idsU   s
   
z$PoolingMetadata.get_prompt_token_idsc                 C   s   | j }|d usJ d|S )Nz(Should call `build_pooling_cursor` first)r,   )r   r,   r   r   r   get_pooling_cursor]   s   z"PoolingMetadata.get_pooling_cursornum_scheduled_tokens_npr   devicec           	      C   s   t |}| j}t ||ksJ tt|}t|}tj|d tjtdd}tj	|d|dd  d |j
|dd}t||d | |dd  d |||d| _d S )	N   cpu)dtype
pin_memoryr=   r   )dimoutT)non_blockingr   )r3   r(   r   ranger   
from_numpyzerosint64rA   cumsumtor   r,   )	r   r<   r   r=   n_seqr(   r   r   rI   r   r   r   build_pooling_cursorc   s$   

z$PoolingMetadata.build_pooling_cursor)r-   N)r   r   r   __doc__r   r    r   r   r   r"   r,   r   r5   r!   r   r:   r;   npndarrayr=   rL   r   r   r   r   r'   2   s$   
 

r'   )dataclassesr   numpyrN   r   vllm.pooling_paramsr   
vllm.tasksr   vllm.utils.platform_utilsr   rA   r   r"   r'   r   r   r   r   <module>   s   	