o
    ˜à·i
  ã                   @   s²   d dl mZ d dlmZmZ d dlmZ d dlmZ er"d dl	m
Z
 eG dd„ dƒƒZeG dd	„ d	ƒƒZG d
d„ dƒZ	ddee dedededef
dd„Zdedefdd„ZdS )é    )Ú	dataclass)ÚTYPE_CHECKINGÚAny)ÚLogprob)ÚLoRARequest)ÚMultiModalDataDictc                   @   s¦   e Zd ZU dZee ed< eeeef  ed< dZ	e
dB ed< dZeed< dZedB ed< dZedB ed	< dZeeB dB ed
< dZded< dZeeef dB ed< dS )ÚBeamSearchSequencezÜA sequence for beam search.
    It keeps track of the tokens and the log probability of the sequence.
    The text field is optional and will only be filled when the sequence is
    about to be returned to the user.
    ÚtokensÚlogprobsNÚlora_requestg        Úcum_logprobÚtextÚfinish_reasonÚstop_reasonzMultiModalDataDict | NoneÚmulti_modal_dataÚmm_processor_kwargs)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚlistÚintÚ__annotations__Údictr   r   r   r   Úfloatr   Ústrr   r   r   r   r   © r   r   úF/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/beam_search.pyr      s   
 r   c                   @   s   e Zd ZU dZee ed< dS )ÚBeamSearchOutputz’The output of beam search.
    It contains the list of the best beam search sequences.
    The length of the list is equal to the beam width.
    Ú	sequencesN)r   r   r   r   r   r   r   r   r   r   r   r   "   s   
 r   c                
   @   s@   e Zd Z		ddee dedB deeeef  dB fdd„ZdS )ÚBeamSearchInstanceNÚprompt_tokensr   r
   c                 K   s4   t d||d u r	g nt|ƒ|dœ|¤Žg| _g | _d S )N)r	   r
   r   r   )r   r   ÚbeamsÚ	completed)Úselfr!   r   r
   Úkwargsr   r   r   Ú__init__-   s   ýüÿ
zBeamSearchInstance.__init__)NN)	r   r   r   r   r   r   r   r   r&   r   r   r   r   r    ,   s    üþýür    ç      ð?r	   Úcumulative_logprobÚeos_token_idÚlength_penaltyÚreturnc                 C   s(   t | ƒ}| d |kr|d8 }|||  S )zÚCalculate the beam search score with length penalty.

    Adapted from

    https://github.com/huggingface/transformers/blob/ccb92be23def445f2afdea94c31286f84b89eb5b/src/transformers/generation/beam_search.py#L938
    éÿÿÿÿé   )Úlen)r	   r(   r)   r*   Úseq_lenr   r   r   Úget_beam_search_score?   s   r0   c                    s   dt dtf‡ ‡fdd„}|S )NÚxr+   c                    s   t | j| jˆ ˆƒS )N)r0   r	   r   )r1   ©r)   r*   r   r   Úsort_beams_keyS   s   ÿz6create_sort_beams_key_function.<locals>.sort_beams_key)r   r   )r)   r*   r3   r   r2   r   Úcreate_sort_beams_key_functionR   s   r4   N)r'   )Údataclassesr   Útypingr   r   Úvllm.logprobsr   Úvllm.lora.requestr   Úvllm.multimodalr   r   r   r    r   r   r   r0   r4   r   r   r   r   Ú<module>   s0   	üÿþýü
û