
    .`if!                        U 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
 e G d d                      Zee         Zeed<   d	ed
ededefdZdedededefdZdedededefdZ	 d#dedej        dedededee         ez  dz  deedz  edz  f         fdZdej        dedej        fdZdede
de
fd Zdee         d!e
dee
         fd"ZdS )$    )	dataclass)	TypeAliasN)ParallelConfig)CommonAttentionMetadatac                   L    e Zd ZU eed<   eed<   defdZedefd            Z	dS )UBatchSlicerequest_slicetoken_slicereturnc                 j    | j         j        | j         j        k    p| j        j        | j        j        k    S N)r	   startstopr
   selfs    o/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/v1/worker/ubatch_utils.pyis_emptyzUBatchSlice.is_empty   s4    $(:(?? ?%)9)>>	
    c                 4    | j         j        | j         j        z
  S r   )r
   r   r   r   s    r   
num_tokenszUBatchSlice.num_tokens   s    $t'7'===r   N)
__name__
__module____qualname__slice__annotations__boolr   propertyintr    r   r   r   r      sp         
$ 
 
 
 
 >C > > > X> > >r   r   UBatchSlicesorig_num_tokenspadded_num_tokensnum_ubatchesr   c                      ||z  |dz
  z  | k    S )N   r   )r!   r"   r#   s      r   is_last_ubatch_emptyr&       s     -,2BCVVr   configr   uniform_decodec                 D    | j         sdS |r|| j        k    S || j        k    S )NF)use_ubatchingdbo_decode_token_thresholddbo_prefill_token_threshold)r'   r   r(   s      r   check_ubatch_thresholdsr-   &   s9      u @V>>>V???r   ubatch_slicesnum_total_tokensnum_reqs_paddedc                     | d         }t          |j        j        |          }t          |j        j        |          }| d d         t	          ||          gz   S )N)r   r	   r   r
   r   )r.   r/   r0   
last_slicepadded_last_request_slicepadded_last_token_slices         r   _pad_out_ubatch_slicesr6   3   se     r"J %j&>&Do V V#J$:$@BRSS"-/FGG!  r   should_ubatchnum_scheduled_tokensnum_tokens_paddedsplit_pointc                    | sdS t          |          |z  fdt          d|          D             }t          j        t	          |          dz   t          j                  }t          j        |t          j        |dd                     g }d}	||d         gz   }
|
D ]}t          |	|          }t          t          j        ||	d	          dz
            }t          t          j        ||d
	                    }t          ||          }|	                    t          ||                     |}	t          |||          }t          d |D                       |k    sJ ||fS )N)NNc                     g | ]}|z  S r   r   ).0ir:   s     r   
<listcomp>z.maybe_create_ubatch_slices.<locals>.<listcomp>M   s    JJJa+/JJJr   r%   )dtype)r@   outr   r2   right)sideleftc              3   $   K   | ]}|j         V  d S r   )r   )r=   ss     r   	<genexpr>z-maybe_create_ubatch_slices.<locals>.<genexpr>p   s$      ::q|::::::r   )r   rangenpzeroslenint32cumsumr   searchsortedappendr   r6   sum)r7   r8   r9   r0   r#   r:   token_split_pointscu_num_tokensr.   start_token
all_points	end_tokenr
   	req_startreq_stop	req_sliceubatch_slices_paddeds        `           r   maybe_create_ubatch_slicesrZ   ?   s     z+,,<JJJJ5L3I3IJJJ HS!566:"(KKKMI""(abb8IJJJJMK $}R'8&99J    	K33 {QQQTUUVV	 r}ifMMMNN)X..	[K@@AAA1(/  ::%9:::::>OOOOO...r   query_start_locr	   c                 L    | |j         |j        dz            | |j                  z
  S )z
    Creates a new query_start_loc that corresponds to the requests in
    request_slice.

    Note: This function creates a new tensor to hold the new query_start_locs.
    This will break cudagraph compatibility.
    r%   )r   r   )r[   r	   s     r   slice_query_start_locsr]   u   s1     	+m.@1.DDE
--
.	/r   ubatch_sliceattn_metadatac                 >   |                                  rJ d|  d            | j        }| j        }|j        }|j        }|j        }|j        dz
  }|j        dz
  }||         |cxk    r||dz            k     sn J d            |||         k    }	|||dz            dz
  k     }
t          ||          }t          |j        |          }t          |          dk    sJ dt          |                       |	r/|||         z
  }|ddxx         |z  cc<   |ddxx         |z  cc<   |j	        |         }|j
        |         }|
r{||dz            |j        z
  }|dxx         |z  cc<   |dxx         |z  cc<   |                                }|                                }|dxx         |z  cc<   |dxx         |z  cc<   t          |                                          }|j        |         }|j        |j        z
  }|j        |j        z
  }t          t          j        t          j        |dd         |dd         z
                                                                }|d	k    r|j        }|j        |         }|j        |         }t+          |||||||||||
          S )z{
    This function creates a new CommonAttentionMetadata that corresponds to
    the requests included in ubatch_slice
    zUbatch slice z	 is emptyr%   z*Token slice start outside of first request   z3query_start_loc must have at least 2 elements, got Nr2   r   )r[   query_start_loc_cpuseq_lensnum_reqsnum_actual_tokensmax_query_lenmax_seq_lenblock_table_tensorslot_mapping_seq_lens_cpu_num_computed_tokens_cpu)r   r	   r
   rb   r   r   r]   r[   rK   rc   seq_lens_cpucloner   maxnum_computed_tokens_cputorchabsitemrf   rh   ri   r   )r^   r_   r	   r
   
start_locs	first_req	first_toklast_reqlast_toksplits_first_requestsplits_last_requestrb   r[   tokens_skippedrc   rl   rg   ro   num_requestsre   rf   rh   ri   s                          r   _make_metadata_with_slicer|      sS    $$&&OO(O(O(O(OOO& .M*K2J#I!I!A%H!#Hi IIIII
9q=0IIIIII4 JII %z)'<<"Z1%=%AA0]KK,%} O 1$$$Tc/>R>RTT %$$  2"Z	%::~-ABB>1%m4H -m<L + $HqL1K4DD~-B>1 >>###))++&RN*l&&(())K+CMR %(;;L#(;+<<	%)/36I#2#6NNOOPPUUWW M %3&9-H -k:L"'/+#-!"!8   r   common_attn_metadatac                 Z    g }| D ]%}|                     t          ||                     &|S )z
    Creates a new CommonAttentionMetadata instance that corresponds to the
    requests for each UBatchSlice in ubatch_slices.

    Note: This function does not modify common_attn_metadata
    )rO   r|   )r.   r}   resultsr^   s       r   split_attn_metadatar      s@     G% V V0?STTUUUUNr   r   )dataclassesr   typingr   numpyrI   rp   vllm.configr   vllm.v1.attention.backendr   r   listr    r   r   r   r&   r-   r6   ndarraytuplerZ   Tensorr   r]   r|   r   r   r   r   <module>r      s   " ! ! ! ! ! !            & & & & & & = = = = = = > > > > > > > > {+i + + +WW-0W@CW	W W W W@@(+@=A@	@ @ @ @		36	IL		 	 	 	$ +/3/ 3/3/*3/ 3/ 	3/
 3/ cS4'3/ <$t 3343/ 3/ 3/ 3/l\ \   "\\.E\\ \ \ \~$1 

!"     r   