
    .`i"                         d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
 erd dlmZ  G d d          Z G d d	          Zd
S )    )Iterator)chain)TYPE_CHECKING)AddedRequestBatchUpdateMovedRequestRemovedRequest)LogitsProcessorc            	       H   e Zd ZU dZee         ed<   eed<   ee         ed<   ee	         ed<   	 	 	 ddee         dz  dee         dz  dee	         dz  ddfd	Z
dd
Zedee         fd            ZdeddfdZdefdZdedz  fdZdedz  fdZdefdZdededz  fdZdS )BatchUpdateBuildera  Helps track persistent batch state changes and build
    a batch update data structure for logitsprocs
    Assumptions:
    * All information about requests removed from persistent batch
      during a step is aggregated in self._removed through calls to
      self.removed_append() at the beginning of a step. This must happen
      before the first time that self.removed, self.pop_removed()
      or self.peek_removed() are invoked in a given step
    * After the first time that self.removed, self.pop_removed()
      or self.peek_removed() are read in a step, no new removals
      are registered using self.removed_append()
    * Elements of self._removed are never directly modified, added or
      removed (i.e. modification is only via self.removed_append() and
      self.pop_removed())
    Guarantees under above assumptions:
    * self.removed is always sorted in descending order
    * self.pop_removed() and self.peek_removed() both return
      the lowest removed request index in the current step
    _removed_is_removed_sortedaddedmovedNremovedreturnc                 X    |pg | _         |pg | _        |pg | _        d| _        d| _        d S )NF)r   r   r   r   batch_changed)selfr   r   r   s       y/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/v1/sample/logits_processor/state.py__init__zBatchUpdateBuilder.__init__,   s=      2[b
[b
"' #    c                 \    | j         s$| j                            d           d| _         dS dS )zSort removed request indices in
        descending order.
        Idempotent after first call in a
        given step, until reset.
        T)reverseN)r   r   sortr   s    r   _ensure_removed_sortedz)BatchUpdateBuilder._ensure_removed_sorted;   s@     & 	+Mt,,,&*D###	+ 	+r   c                 8    |                                   | j        S )z:Removed request indices sorted in
        descending order)r   r   r   s    r   r   zBatchUpdateBuilder.removedE   s     	##%%%}r   indexc                 t    | j         rt          d          | j                            |           d| _        dS )zRegister the removal of a request from the persistent batch.

        Must not be called after the first time self.removed,
        self.pop_removed() or self.peek_removed() are invoked.

        Args:
          index: request index
        zECannot register new removed request after self.removed has been read.TN)r   RuntimeErrorr   appendr   )r   r   s     r   removed_appendz!BatchUpdateBuilder.removed_appendL   sJ     " 	W   	U###!r   c                 *    t          | j                  S N)boolr   r   s    r   has_removedzBatchUpdateBuilder.has_removed\   s    DM"""r   c                 p    |                                  r!|                                  | j        d         S dS )z#Return lowest removed request indexN)r'   r   r   r   s    r   peek_removedzBatchUpdateBuilder.peek_removed_   s:     	%'')))=$$tr   c                     |                                  r-|                                  | j                                        S dS )z Pop lowest removed request indexN)r'   r   r   popr   s    r   pop_removedzBatchUpdateBuilder.pop_removedf   sA     	''')))=$$&&&tr   c                     d| _         | j                                         | j                                         | j                                         | j        }d| _        |S )z4Returns True if there were any changes to the batch.F)r   r   clearr   r   r   )r   r   s     r   resetzBatchUpdateBuilder.resetm   s\    "'

*"r   
batch_sizec                     d| _         d| _        t          | j        | j        | j        f          sdS t          || j        | j        | j                  }g | _        g | _        g | _        |S )a  Generate a logitsprocs batch update data structure and reset
        internal batch update builder state.

        Args:
          batch_size: current persistent batch size

        Returns:
          Frozen logitsprocs batch update instance; `None` if no updates
        FN)r1   r   r   r   )r   r   anyr   r   r   r   )r   r1   batch_updates      r   get_and_resetz BatchUpdateBuilder.get_and_resetw   sy     #("DM4:tz:;; 	4"!M**	
 
 
 

r   )NNN)r   N)__name__
__module____qualname____doc__listr	   __annotations__r&   r   r   r   r   propertyr   intr#   r'   r*   r-   r0   r   r5    r   r   r   r      s         ( >"""" 04+/+/	# #n%,# L!D(# L!D(	#
 
# # # #+ + + + n-    X"C "D " " " " #T # # # #cDj    S4Z    t     d0B      r   r   c                   ^    e Zd ZdZdded         dz  ddfdZeded         fd            ZdS )	LogitsProcessorsz,Encapsulates initialized logitsproc objects.Nlogitsprocsr
   r   c                     g | _         g | _        |r:|D ]9}|                                r| j         n| j                            |           8d S d S r%   )argmax_invariantnon_argmax_invariantis_argmax_invariantr"   )r   rA   	logitprocs      r   r   zLogitsProcessors.__init__   st    79;=! 	$( $ $	 !44663D))2&####	$ 	$$ $r   c                 6    t          | j        | j                  S )z$Iterator over all logits processors.)r   rC   rD   r   s    r   allzLogitsProcessors.all   s     T*D,EFFFr   r%   )r6   r7   r8   r9   r   r   r<   rH   r>   r   r   r@   r@      s        66	$ 	$H->$?$$F 	$RV 	$ 	$ 	$ 	$ GX/0 G G G XG G Gr   r@   N)collections.abcr   	itertoolsr   typingr   )vllm.v1.sample.logits_processor.interfacer   r   r   r	   r
   r   r@   r>   r   r   <module>rM      s   % $ $ $ $ $                               JIIIIII       DG G G G G G G G G Gr   