
    .`i!                         d dl Z 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mZ d dlmZmZ d dlmZmZ d dlmZmZ  ee          Z e j        d          Ze G d	 d
                      ZdS )    N)Iterable)	dataclass)init_logger)PromptLogprobsSampleLogprobs!append_logprobs_for_next_positioncreate_prompt_logprobscreate_sample_logprobs)TokenizerLikeconvert_ids_list_to_tokens)EngineCoreOutputEngineCoreRequest)LogprobsListsLogprobsTensorsc                   4   e Zd ZU edz  ed<   edz  ed<   edz  ed<   edz  ed<   edz  ed<   edz  ed<   e	dedz  de
d	d fd
            Zded	dfdZded	dfdZd	edz  fdZdedee         d	efdZdee         dee         d	ee         fdZded	dfdZdS )LogprobsProcessorN	tokenizerlogprobsprompt_logprobscumulative_logprobnum_logprobsnum_prompt_logprobsrequestreturnc                     |j         }|J |j        }|j        } | ||d nd|d nt          |j                  |d nt          |j                  ||          S )Ng        )r   r   r   r   r   r   )sampling_paramsr   r   r
   flat_logprobsr	   )clsr   r   r   r   r   s         k/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/v1/engine/logprobs.pyfrom_new_requestz"LogprobsProcessor.from_new_request)   s     "1***&/-=s(4(<#  ' +O,IJJ '. +O,IJJ 3%
 
 
 	
    logprobs_listsc           	         | j         J | j        J | j        J |\  }}}}t          |||          D ]\  }}}|                                }	|                                }
|                                }| j        t          }n,t          | j        |          }|                     ||          }|
d         }| xj        |z  c_        t          | j        ||
||	| j                    dS )a  Update with sample logprobs from EngineCore.

        Outer lists are only of len > 1 if EngineCore made
        >1 tokens in prior step (e.g. in spec decoding).

        Args:
          logprobs_lists: the lists of logprob tokens, logprobs, and ranks.

        Ndecoded_tokens_listtokensr   )
r   r   r   ziptolistr   NONESr   _verify_tokensr   )selfr"   token_ids_lstlogprobs_lst	ranks_lst_rank_nplogprobs_nptoken_ids_nprankr   	token_idsdecoded_tokensr%   sampled_token_logprobs                  r   _update_sample_logprobsz)LogprobsProcessor._update_sample_logprobsD   s<     ,,,}(((&2224B1|Y25|]3
 3
 	 	.G[, >>##D"))++H$++--I ~%!&&@NI' '# "&!4!4(;I "5 " "
 %-QK!##'<<## .!   /	 	r!   prompt_logprobs_tensorsc           	      @   | j         J | j        J |\  }}}|j        \  }}| j        dn8t	          | j        |                                                                          }|                                }|                                }	|                                }
t          |          D ]m}||z  }||z   }|t          }n'|||         }| 	                    ||
|                   }t          | j        |
|         |	|         |||         | j                    ndS )zUpdate with prompt logprobs from EngineCore.

        Args:
          prompt_logprobs_tensors: tuple containing the prompt logprobs
                                   tensors.

        Nr$   )r   r   shaper   r   flattenr(   ranger)   r*   r   )r+   r8   r4   r   ranksnum_prompt_tokensr   all_decoded_tokensprompt_token_ranksr   token_ids_listposoffset
offset_enddecoded_tokens_for_posdecoded_tokens_slices                   r   _update_prompt_logprobsz)LogprobsProcessor._update_prompt_logprobsu   sp    '333#///%<"	8U +3.'< ~% D+	 1 1 3 3 : : < <  	 #\\^^"//++"))++ *++ 	 	C<'F,.J ")).&& (:&:K'L$)-)<)<(<^TWEX *= * *&
 .$s#$&"3'(   #	 	r!   c                 &    | j         }|rg | _         |S )a  Pop and return all request prompt logprobs

        The logprobs processor aggregates prompt chunk logprobs
        over one or more prefill chunks. This method returns
        all prompt logprobs at once and then forgets them.
        Ensures correct RequestOutputKind.DELTA semantics
        wherein all prompt logprobs are returned at once at
        the end of prefill.

        Returns:
          None if prompt logprobs are disabled for this request.
          List of all prompt logprobs, otherwise.
        )r   )r+   plps     r   pop_prompt_logprobsz%LogprobsProcessor.pop_prompt_logprobs   s!     " 	&#%D 
r!   idxr&   c                 
   | j         
J d            |dk    r?| j                             ||dz
  |dz                      }|                    d          s|S | j        rt	          t          | j        d                             }|g}|dk    r$|                    ||dz
  |dz                       n |                    |||dz                       | j                             |          }|                    d          s|S dS )Nz!self.tokenizer should not be Noner         � )r   decodeendswithr   nextiterextend)r+   rK   r&   possible_decoded_tokenlatest_token_id
decode_idss         r   _correct_decoded_tokenz(LogprobsProcessor._correct_decoded_token   s#   ~))+N))) 77%)^%:%:6#'CRSGBS;T%U%U")22599 .--= 	."4b(9#:#:;;O)*JQww!!&q37):";<<<<!!&sQw"7888%)^%:%::%F%F")22599 .-- rr!   r%   c                     t                      }t          |          D ]3\  }}|                    d          r|                     ||          ||<   4|                                D ]
\  }}|||<   |S )NrN   )dict	enumeraterR   rY   items)r+   r%   r&   corrected_decoded_token_maprK   texts         r   r*   z LogprobsProcessor._verify_tokens   s     '+ff#"#677 	 	IC}}U##  483N3N4 4+C0 5::<< 	, 	,IC'+$$""r!   outputc                     |j         |                     |j                    |j        |                     |j                   d S d S )N)new_logprobsr7   new_prompt_logprobs_tensorsrG   )r+   r`   s     r   update_from_outputz$LogprobsProcessor.update_from_output   sP    *(()<===-9(()KLLLLL :9r!   )__name__
__module____qualname__r   __annotations__r   r   floatintclassmethodr   r    r   r7   r   rG   rJ   liststrrY   r*   r   rd    r!   r   r   r      s         t#### t#####d****$$$*t###
 4'
 #
 
	
 
 
 [
4/m / / / / /b=!0= 
= = = =~^d%:    &# tCy S    2##'9#6:3i#	c# # # #"M)9 Md M M M M M Mr!   r   )	itertoolscollections.abcr   dataclassesr   vllm.loggerr   vllm.logprobsr   r   r   r	   r
   !vllm.tokenizers.detokenizer_utilsr   r   vllm.v1.enginer   r   vllm.v1.outputsr   r   re   loggerrepeatr)   r   rn   r!   r   <module>ry      s\       $ $ $ $ $ $ ! ! ! ! ! ! # # # # # #                     ? > > > > > > > : : : : : : : :	X			 XM XM XM XM XM XM XM XM XM XMr!   