
    .`iS(              
       0   d dl mZmZ d dlmZmZ d dlZd dlmZ d dl	m
Z
mZmZ erd dlmZ  ed          Z G d d	e          Z G d
 de          Z G d de          Zdeeef         de
dz  deeee         dz  ee         gedz  f         defdZdS )    )CallableSequence)TYPE_CHECKINGTypeVarN)SamplingParams)BatchUpdateLogitsProcessorMoveDirectionality)
VllmConfigTc                   ~    e Zd Zdddej        defdZdefdZdede	fd	Z
d
edz  fdZdej        dej        fdZdS )MinPLogitsProcessorvllm_configr   deviceis_pin_memoryc                    |j         j        }d| _        t          j        |ft          j        d|          | _        | j                                        | _        t          j	        |          j
        dk    | _        | j        r(t          j        |ft          j        |          | _        n| j        | _        | j        d d         | _        d S )Nr   cpu)dtyper   
pin_memoryr   r   )scheduler_configmax_num_seqsmin_p_counttorchzerosfloat32min_p_cpu_tensornumpy	min_p_cpur   typeuse_double_tensoremptymin_p_devicemin_p)selfr   r   r   max_num_reqss        {/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/v1/sample/logits_processor/builtin.py__init__zMinPLogitsProcessor.__init__   s     #3@ ! %O5==!
 !
 !
 .4466!&f!5!5!:e!C! 	6.3ku}V/ / /D !% 5D#'#4RaR#8


    returnc                     dS )z#Min-p never impacts greedy samplingT r%   s    r'   is_argmax_invariantz'MinPLogitsProcessor.is_argmax_invariant-   s    tr)   indexc                 6    t          | j        |                   S N)floatr   )r%   r/   s     r'   get_min_p_by_indexz&MinPLogitsProcessor.get_min_p_by_index1   s    T^E*+++r)   batch_updateNc                 d   |sd S d}|j         D ]V\  }}}}|j        }| j        |         }||k    r5d}|| j        |<   |r|s| xj        dz  c_        B|s|r| xj        dz  c_        W| j        r|j        r3d}|j        D ])}| j        |         rd| j        |<   | xj        dz  c_        *|j        D ]z\  }}	}
| j        |         | j        |	         }}||k    r&d}|| j        |	<   |
t          j        k    r
|| j        |<   |
t          j        k    r|r
d| j        |<   |r| xj        dz  c_        {|j	        }| j        rx|s| j        j
        d         |k    rb| j        d |         | _        | j        r)| j                            | j        d |         d           | j                            d           d S d S d S )NFT   r   )non_blocking)addedr$   r   r   removedmovedr
   SWAPUNIDIRECTIONAL
batch_sizeshaper#   r!   copy_r   
unsqueeze_)r%   r4   needs_updater/   params_r$   min_p_beforeadxbdxdirectmin_p_amin_p_bsizes                 r'   update_statez MinPLogitsProcessor.update_state4   sP    	F#/#5 		* 		*E61aLE>%0Lu$$#(-u% * *$$)$$$ *< *$$)$$ 	.# .#)1 . .E~e, .01u-((A-(( %1$6 . . S&#'>##6s8Kg%%#'L*1DN3'!3!888.5s+/>>> 0./s+ .((A-(( & 	% 	%1A!1D1L1L*5D51DJ% R
  !6uu!=D QQQJ!!!$$$$$		% 	%1L1Lr)   logitsc                    | j         s|S t          j        j                            |d          }t          j        |dd          }|                    | j                  }||k     }|                    |t          d                      |S )N)dimT)rO   keepdiminf)
r   r   nn
functionalsoftmaxamaxmul_r$   masked_fill_r2   )r%   rL   probability_valuesmax_probabilitiesadjusted_min_pinvalid_token_masks         r'   applyzMinPLogitsProcessor.applyd   s     	M #X088R8HH!J'9r4PPP*//
;;/.@.u>>>r)   )__name__
__module____qualname__r   r   boolr(   r.   intr2   r3   r   rK   Tensorr\   r,   r)   r'   r   r      s        9'9169NR9 9 9 9.T    , , , , , ,.%t); .% .% .% .%`EL U\      r)   r   c                       e Zd Zdej        defdZdefdZdedz  fdZ	d	e
d
ej        dej        fdZdej        dej        fdZdS )LogitBiasLogitsProcessorr   r   c                     || _         || _        i | _        t          j        d          | _        |                     g t          j                  |                     g t          j                  f| _        d S )Nr,   )	r   r   biasesr   tensorbias_tensor_device_tensorint32logits_slice)r%   rC   r   r   s       r'   r(   z!LogitBiasLogitsProcessor.__init__v   sc    '35).b)9)9EK00EK00
r)   r*   c                     dS )ziLogit bias can rebalance token probabilities and change the
        outcome of argmax in greedy sampling.Fr,   r-   s    r'   r.   z,LogitBiasLogitsProcessor.is_argmax_invariant   	     ur)   r4   Nc                 D   t          | j        |d           }|rg }g }g }| j                                        D ]y\  }}|                    |gt	          |          z             |                    |                                           |                    |                                           z|                     |t          j	                  | _
        |                     |t          j                  |                     |t          j                  f| _        d S d S )Nc                     | j         pd S r1   )
logit_bias)rB   rC   __s      r'   <lambda>z7LogitBiasLogitsProcessor.update_state.<locals>.<lambda>   s    V=N=VRV r)   )process_dict_updatesrf   itemsextendlenkeysvaluesri   r   r   rh   rj   rk   )r%   r4   rA   reqstok_idsrf   reqlbs           r'   rK   z%LogitBiasLogitsProcessor.update_state   s   +K'V'V
 

  	 D!#G"$F;,,.. + +RSECGGO,,,rwwyy)))biikk****#2265=IID##D%+66##GU[99!D	 	r)   datar   c                 p    t          j        |d|| j                                      | j        d          S Nr   )r   r   r   T)r   r7   r   rg   r   tor   r%   r}   r   s      r'   ri   z'LogitBiasLogitsProcessor._device_tensor   9    |e
 
 

"DKd"
3
3	4r)   rL   c                 H    | j         r|| j        xx         | j        z  cc<   |S r1   )rf   rk   rh   r%   rL   s     r'   r\   zLogitBiasLogitsProcessor.apply   s3    ; 	:4$%%%)99%%%r)   )r]   r^   r_   r   r   r`   r(   r.   r   rK   listr   rb   ri   r\   r,   r)   r'   rd   rd   u   s        	
%, 	
t 	
 	
 	
 	
T    
t);    *44 4 4 4 4 4 4
EL U\      r)   rd   c                      e Zd Zdddej        defdZdefdZede	d	e
e         d
z  de
e         deeee         ee         f         d
z  fd            Zded
z  fdZde
dej        dej        fdZdej        dej        fdZd
S )MinTokensLogitsProcessorr   r   r   r   c                 ,   || _         || _        i | _        |                     g t          j                  |                     g t          j                  f| _        t	          j        t          d           t          j	        | j                   | _
        d S )NrQ   r   )r   r   min_toksri   r   rj   rk   rg   r2   r   neg_inf_tensor)r%   r   r   r   s       r'   r(   z!MinTokensLogitsProcessor.__init__   s     'HJ EK00EK00@

 $l5\\Mt{
 
 
r)   r*   c                     dS )zoBy censoring stop tokens, min-tokens can change the outcome
        of the argmax operation in greedy sampling.Fr,   r-   s    r'   r.   z,MinTokensLogitsProcessor.is_argmax_invariant   rm   r)   rB   rC   Noutput_tok_idsc                 R    | j         }|rt          |          |k    rd S ||| j        fS r1   )
min_tokensrv   all_stop_token_ids)rB   rC   r   r   s       r'   add_requestz$MinTokensLogitsProcessor.add_request   s;     &
 	S00J>>4>6+DDDr)   r4   c                 "   t          | j        || j                  }| j        rAt          d | j                                        D                       }|rd}|D ]
}| j        |= |rg }g }| j                                        D ]D\  }\  }}}	|                    |gt          |	          z             |                    |	           E|                     |t          j	                  |                     |t          j	                  f| _
        d S d S )Nc              3   N   K   | ] \  }\  }}}t          |          |k    |V  !d S r1   )rv   ).0r/   r   out_tok_idsrC   s        r'   	<genexpr>z8MinTokensLogitsProcessor.update_state.<locals>.<genexpr>   sL        5E5Hk1{##x// //// r)   T)rs   r   r   tuplert   ru   rv   ri   r   rj   rk   )
r%   r4   rA   	to_remover/   ry   rz   r{   rC   stop_tok_idss
             r'   rK   z%MinTokensLogitsProcessor.update_state   sF   +M<)9
 
 = 
	-  9=9L9L9N9N    I
  -#& - -Ee,,  
	 D!#G-1]-@-@-B-B - -))aLSEC$5$55666|,,,, ##D%+66##GU[99!D
	 
	r)   r}   r   c                 p    t          j        |d|| j                                      | j        d          S r   r   r   s      r'   ri   z'MinTokensLogitsProcessor._device_tensor   r   r)   rL   c                 T    | j         r |                    | j        | j                   |S r1   )r   
index_put_rk   r   r   s     r'   r\   zMinTokensLogitsProcessor.apply   s.    = 	Fd/1DEEEr)   )r]   r^   r_   r   r   r`   r(   r.   staticmethodr   r   ra   r   r   setr   r   rK   r   rb   ri   r\   r,   r)   r'   r   r      s>       
'
16
NR
 
 
 
$T    
 EE#'9t#3EEI#YE	sHSM3s8+	,t	3E E E \Et);    :44 4 4 4 4 4 4
EL U\      r)   r   req_entriesr4   	new_stater*   c                    |sdS d}|j         D ]6\  }}}} ||||          x}|| |<   d}|                     |d          d}7| r~|j        D ]}|                     |d          rd}|j        D ]T\  }	}
}|                     |	d          }|                     |
d          }||| |
<   d}|d}|t          j        k    r|| |	<   U|S )zBUtility function to update dict state for sparse LogitsProcessors.FNT)r8   popr9   r:   r
   r;   )r   r4   r   updatedr/   rB   prompt_tok_idsr   statea_indexb_indexrG   a_entryb_entrys                 r'   rs   rs      s+     uG9E9K  5v~~Yv~~FFFES!&KGG__UD))5G 3!) 	 	Eud++  )5(: 		3 		3$GWf!oogt44G!oogt44G"'.G$"/444+2K(Nr)   )collections.abcr   r   typingr   r   r   vllmr   )vllm.v1.sample.logits_processor.interfacer   r	   r
   vllm.configr   r   r   rd   r   dictra   r   r`   rs   r,   r)   r'   <module>r      s   / . . . . . . . ) ) ) ) ) ) ) )                  '&&&&&&GCLL] ] ] ] ]/ ] ] ]@. . . . . . . .bG G G G G G G GT&c1f&$& cT)949Eq4xOP& 
	& & & & & &r)   