o
    
۾iN                     @   sB  d dl Z d dlmZ d dlmZ d dlZd dlZd dlmZ d dl	m
Z
mZmZmZmZ eG dd dZded	ed
eedf dedee f
ddZdedee fddZdeded	edefddZdeded	edefddZdee ded	edeee eeeef  eeef f fddZdee dedeej fddZdS )    N)	dataclass)Any)PoolingRequestOutput)EMBED_DTYPES
EmbedDType
Endiannessbinary2tensortensor2binaryc                   @   sF   e Zd ZU eed< eed< eed< eed< eed< eedf ed< dS )	MetadataItemindexembed_dtype
endiannessstartend.shapeN)__name__
__module____qualname__int__annotations__r   r   tuple r   r   R/home/ubuntu/.local/lib/python3.10/site-packages/vllm/entrypoints/pooling/utils.pyr
      s   
 r
   r   r   r   .	n_requestreturnc                    s2   t   jt fddt|D S )Nc              
      s4   g | ]}t | |  |d    dqS )   r   r   r   r   r   r   )r
   ).0ir   r   n_bytesr   sizer   r   
<listcomp>'   s    	
z(build_metadata_items.<locals>.<listcomp>)r   nbytesmathprodrange)r   r   r   r   r   r   r   build_metadata_items   s
   

	r'   outputc                 C   s   | j j S N)outputsdatatolist)r(   r   r   r   encode_pooling_output_float4   s   r-   c                 C   s   t | jj||S r)   )r	   r*   r+   )r(   r   r   r   r   r   encode_pooling_output_binary8   s   r.   c                 C   s    t | jj||}t|dS )Nzutf-8)r	   r*   r+   pybase64	b64encodedecode)r(   r   r   embedding_bytesr   r   r   encode_pooling_output_base64@   s   r3   pooling_outputsc              	   C   s   d}g }g }d}t | D ]7\}}t|jj||d}	t|	}
t||||||
 |jjjd}||	 || |j}|t|7 }||
7 }qt||d}|||fS )Nr   )tensorr   r   r   )prompt_tokenstotal_tokens)		enumerater	   r*   r+   lendictr   appendprompt_token_ids)r4   r   r   num_prompt_tokensitemsbodyoffsetidxr(   binaryr!   itemr<   usager   r   r   encode_pooling_bytesI   s:   
	


rE   r>   r?   c                    s    fddt | dd dD S )Nc                    s,   g | ]}t  |j|j |j|j|jqS r   )r   r   r   r   r   r   )r   rC   r?   r   r   r"   t   s    z)decode_pooling_output.<locals>.<listcomp>c                 S   s   | j S r)   )r   )xr   r   r   <lambda>{   s    z'decode_pooling_output.<locals>.<lambda>)key)sorted)r>   r?   r   rF   r   decode_pooling_outputs   s   
rK   )r$   dataclassesr   typingr   r/   torchvllm.outputsr   vllm.utils.serial_utilsr   r   r   r   r	   r
   r   r   listr'   floatr-   bytesr.   strr3   r:   rE   TensorrK   r   r   r   r   <module>   sb   		



	$
$*