
    .`iP!                         d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZ  G d d          Zej        d	ej        fd
            Zej        dej        dej        fd            Zej        d             ZdS )    )IterableN)tltriton)cdiv)PAD_SLOT_ID)StagedWriteTensorUvaBackedTensorc            
       d   e Zd Zdee         dedededej        f
dZdeej	                 dej	        fd	Z
d
edeee         df         deddfdZddZdej	        deej	        df         fdZdedeej	        df         fdZdej	        dej	        dej	        dej	        fdZdedej	        fdZdS )BlockTablesblock_sizesmax_num_reqsmax_num_batched_tokensmax_model_lendevicec                    || _         || _        || _        || _        || _        t          | j                   | _        g | _        t          | j                  D ]a}| j         |         }t          | j        |          }t          | j        |ft          j        |          }	| j                            |	           b|                     d | j        D                       | _        t          j        d | j        D             t          j        | j                  | _        t          j        | j         t          j        | j                  | _        t)          | j        | j        ft          j                  | _        d | j        D             | _        |                     | j                  | _        t          j        | j        | j        t          j        | j                  | _        d S )Ndtyper   c                     g | ]	}|j         
S  )gpu.0bs     r/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/v1/worker/gpu/block_table.py
<listcomp>z(BlockTables.__init__.<locals>.<listcomp>)   s    ...qQU...    c                 B    g | ]}|j                             d           S )r   )r   strider   s     r   r   z(BlockTables.__init__.<locals>.<listcomp>,   s$    888QU\\!__888r   )r   c                 @    g | ]}t          j        |j                  S r   )torch
zeros_liker   r   s     r   r   z(BlockTables.__init__.<locals>.<listcomp>;   s2     7
 7
 7
()EQU##7
 7
 7
r   )r   r   r   r   r   lennum_kv_cache_groupsblock_tablesranger   r   r    int32append_make_ptr_tensorblock_table_ptrstensorint64block_table_stridesblock_sizes_tensorr	   
num_blocksinput_block_tablesinput_block_table_ptrszerosslot_mappings)
selfr   r   r   r   r   i
block_sizemax_num_blocksblock_tables
             r   __init__zBlockTables.__init__   s    '(&<#*#&t'7#8#8 57t/00 	2 	2A)!,J!$"4jAAN+"N3k  K
 $$[1111 $ 5 5..D-...!
 !
 $)<88d&7888+;$
 $
 $
  #(,EK#
 #
 #
 *%t'89+
 
 
7
 7
-1->7
 7
 7
 '+&;&;D<S&T&T#"[$'+;	
 
 
r   xreturnc                 b    t          j        d |D             t           j        | j                  S )Nc                 6    g | ]}|                                 S r   )data_ptr)r   ts     r   r   z0BlockTables._make_ptr_tensor.<locals>.<listcomp>J   s     %%%aQZZ\\%%%r   r   )r    r*   uint64r   )r3   r9   s     r   r(   zBlockTables._make_ptr_tensorG   s6    |%%1%%%,;
 
 
 	
r   	req_indexnew_block_ids.	overwriteNc                     t          | j                  D ]e}|s| j        j        ||f         nd}||         }| j        |                             |||           |t          |          z   | j        j        ||f<   fd S )Nr   )r%   r#   r.   npr$   stage_writer"   )r3   r@   rA   rB   r4   start	block_idss          r   append_block_idszBlockTables.append_block_idsO   s     t/00 	F 	FA<ELDO&q)|441E%a(Ia ,,YyIII/4s9~~/EDOq)|,,		F 	Fr   c                 t    | j         D ]}|                                 | j                                         d S N)r$   apply_writer.   copy_to_uva)r3   r7   s     r   apply_staged_writeszBlockTables.apply_staged_writes[   sE      , 	& 	&K##%%%%##%%%%%r   idx_mappingc           
         |j         d         t          | j        f         || j        | j        | j        | j        j        | j        j                            d          d           t          fd| j
        D                       S )Nr      )
BLOCK_SIZEc              3   ,   K   | ]}|d          V  d S rJ   r   r   r7   num_reqss     r   	<genexpr>z2BlockTables.gather_block_tables.<locals>.<genexpr>p   ,      WW[(+WWWWWWr   )shape_gather_block_tables_kernelr#   r)   r0   r,   r.   r   r   tupler/   )r3   rN   rT   s     @r   gather_block_tableszBlockTables.gather_block_tablesb   s     $Q'#T%=x$HI!'$OO&&q))	
 	
 	
 	
 WWWWt?VWWWWWWr   rT   c                 D    t          fd| j        D                       S )Nc              3   ,   K   | ]}|d          V  d S rJ   r   rS   s     r   rU   z5BlockTables.get_dummy_block_tables.<locals>.<genexpr>s   rV   r   )rY   r/   )r3   rT   s    `r   get_dummy_block_tablesz"BlockTables.get_dummy_block_tablesr   s)    WWWWt?VWWWWWWr   query_start_loc	positionsc                 "   |j         d         }|j         d         }| j        }t          ||dz   f         || j        |||| j        | j        | j        | j        | j                            d          t          d           | j        d d d |f         S )Nr      rP   )PAD_IDTRITON_BLOCK_SIZE)
rW   r#   _compute_slot_mappings_kernelr   r)   r,   r-   r2   r   r   )r3   rN   r^   r_   rT   
num_tokens
num_groupss          r   compute_slot_mappingsz!BlockTables.compute_slot_mappingsu   s     $Q'_Q'
-
%z8a<&@A'!$#%%a(("	
 	
 	
 	
 !!!![j[.11r   re   c                 f    | j                             t                     | j         d d d |f         S rJ   )r2   fill_r   )r3   re   s     r   get_dummy_slot_mappingsz#BlockTables.get_dummy_slot_mappings   s3      ---!!!![j[.11r   )r:   N)__name__
__module____qualname__listintr    r   r8   r   Tensorr(   rY   boolrH   rM   rZ   r]   rg   rj   r   r   r   r   r      s       7
#Y7
 7
 !$	7

 7
 7
 7
 7
 7
r
(5<"8 
U\ 
 
 
 

F
F T#Y^,
F 	
F
 

F 
F 
F 
F& & & &X\X 
u|S 	!X X X X Xs XuU\3=N7O X X X X2\2 2 <	2
 
2 2 2 222# 2%, 2 2 2 2 2 2r   r   rQ   c                 \   t          j        d          }t          j        d          }t          j        | |z             }	|||z  z   }
t          j        |
|	z             }t          j        ||z             }t          ||z   t           j                  }||	|z  z   }t          ||z   t           j                  }|||z  z   }t          j        d||          D ]U}|t          j        d|          z   }t          j        ||z   ||k               }t          j        ||z   |||k                Vd S )Nr   ra   mask)r   
program_idload	_load_ptrr&   r%   arangestore)batch_idx_to_req_idxsrc_block_table_ptrsdst_block_table_ptrsr,   num_blocks_ptrnum_blocks_striderQ   group_id	batch_idxreq_idxgroup_num_blocks_ptrr.   r   src_block_table_ptrsrc_row_ptrdst_block_table_ptrdst_row_ptrr4   offsetrG   s                       r   rX   rX      sC    }QHa  Ig*Y677G)H7H,HH-788JW(8344F#$88$CRXNN%&(88K#$88$CRXNN%	F(::KXaZ00 L LRYq*---GK&0v
7JKKK	
v%yv
7JKKKKKL Lr   rb   rc   c                    t          j        d          }t          j        d          }|||	z  z   }|t          j        d          dz
  k    rLt          | ||          D ]8}|t          j        d|          z   }t          j        ||z   |
||k                9d S t          ||z   t           j                  }t          j        ||z             }t          j        ||z             }t          j        ||z             }t          j        ||z             }t          j        ||z   dz             }t          |||          D ]}|t          j        d|          z   }t          j        ||z   ||k     d          }||z  }t          j        |||z  z   |z             }||z  ||z  z   }t          j        ||z   |||k                d S )Nr   ra   rs   )rt   other)	r   ru   num_programsr%   rx   ry   rw   r&   rv   )re   max_num_tokensrN   r^   posr)   r,   r   slot_mappings_ptrslot_mappings_striderb   rc   r   r   slot_mapping_ptrr4   r   block_table_ptrblock_table_strider5   req_state_idx	start_idxend_idxr_   block_indicesblock_numbersslot_idss                              r   rd   rd      s     }QHa  I(86J+JJBOA&&***z>3DEE 	V 	VA1&7888FH%.Vn=TUUUUU 08 ;RXFFO!4x!?@@x/00JGK)344M)344Igo	1A566G9g'899 M MRYq"3444GC&Lv/?qIII	!Z/m.@@@=P
 
 !:-	J0FF
!F*H6G;KLLLLLM Mr   c                     t          j        |           }t          j        |t          j        |                    }t          j        |d          S )N   )r   rv   castpointer_typemultiple_of)
ptr_to_ptr
elem_dtypeptrs      r   rw   rw      s>    
'*

C
'#rz22
3
3C>#r"""r   )collections.abcr   r    vllm.triton_utilsr   r   vllm.utils.math_utilsr    vllm.v1.attention.backends.utilsr   vllm.v1.worker.gpu.buffer_utilsr   r	   r   jit	constexprrX   rd   rw   r   r   r   <module>r      sB   % $ $ $ $ $  ( ( ( ( ( ( ( ( & & & & & & 8 8 8 8 8 8 N N N N N N N NC2 C2 C2 C2 C2 C2 C2 C2L L L L L L: )M L)M |)M )M )M )MX # # # # #r   