o
    iY7                     @   s$  d dl mZmZ d dlmZmZmZ d dlmZ d dl	m
Z
 d dlmZmZmZ d dlmZ d dlmZ d dlmZ erAd d	lZned
e d
ZeeZedee dZdddeeef d	B deeef d	B deedf deeef fddZ eddG dd dZ!eddG dd dZ"d	S )    )	dataclassfield)TYPE_CHECKINGAnyTypeVar)ChatTemplateContentFormatOption)VLLMValidationError)EmbedsPrompt
TextPromptTokensPrompt)init_logger)TokenizerLike)
LazyLoaderNtorch_Sztorch.Tensor)Nautounset_valuesdefaults	overridesr   .returnc                  s2   | d u ri } |d u ri }|  fdd|  D B S )Nc                    s   i | ]\}}| vr||qS  r   ).0kvr   r   K/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/renderers/params.py
<dictcomp>$   s    z merge_kwargs.<locals>.<dictcomp>)items)r   r   r   r   r   r   merge_kwargs   s
   r   T)frozenc                   @   s~   e Zd ZU dZdZedB ed< 	 dZeed< 	 e	e
dZe
eef ed< 	 de
eef dB fd	d
Zde
eef fddZdS )
ChatParamsz4Configuration to control how to parse chat messages.Nchat_templater   chat_template_content_format)default_factorychat_template_kwargsdefault_chat_template_kwargsc                 C   s"   |s| S t | j| jt|| jdS )N)r!   r"   r$   )r    r!   r"   r   r$   )selfr%   r   r   r   with_defaults4   s   zChatParams.with_defaultsr   c                 C   s   t | jt| jddS )z9The arguments to pass to `tokenizer.apply_chat_template`.F)r!   return_dict)r   r$   dictr!   r&   r   r   r   get_apply_chat_template_kwargsA   s   z)ChatParams.get_apply_chat_template_kwargs)__name__
__module____qualname____doc__r!   str__annotations__r"   r   r   r)   r$   r   r'   r+   r   r   r   r   r    '   s   
 r    c                   @   s  e Zd ZU 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d	< 	 d
Ze
ed< 	 dZe
ed< 	 dZeed< 	 dZeed< 	 dZeed< 	 ededB fddZd0ddZdeeef dB fddZdeeef fddZdedB dedefddZdedB dedefddZdedB dedefd d!ZdedB d"edefd#d$ZdedB d%edefd&d'ZdedB d%edefd(d)Z dedB d%edefd*d+Z!dedB d%edefd,d-Z"dedB d"e#e$B de#e$B fd.d/Z%dS )1TokenizeParamsz3Configuration to control how prompts are tokenized.Nmax_total_tokensr   max_output_tokenspad_prompt_tokenstruncate_prompt_tokensFdo_lower_caseTadd_special_tokensneeds_detokenizationmax_total_tokens_parammax_output_tokens_paramtruncate_prompt_tokens_paramr   c                 C   s   | j du rdS | j | j S )z'Maximum allowed number of input tokens.N)r3   r4   r*   r   r   r   max_input_tokens|   s   
zTokenizeParams.max_input_tokensc                 C   s   | j }| j}| j}| j}|d ur.|d ur.||kr.t| j d| d| j d|d| j|d|d urT|d urV||krXt| j d| d| j d| j d| d	
| j|dd S d S d S )
N=zcannot be greater than z=max_total_tokens=z%. Please request fewer output tokens.	parametervaluez cannot be greater than z - z = z+. Please request a smaller truncation size.)r3   r4   r=   r6   r   r;   r:   r<   )r&   r3   r4   r=   r6   r   r   r   __post_init__   sB   
zTokenizeParams.__post_init__tokenization_kwargsc              	   C   s  |d u ri }| d| j}| d| j}| d| j}| d| j}| d| j}| d| j}| dd  }rJ|dkr?|}n|dv rFd }n||d< | d	d  }	rd|	d
v rY|}n|	dv r`d }n|	|d	< |rltd| | j	}
t
|
|
d u sy|d u r{dn|
| |||||dS )N
max_lengthr5   r6   r7   r8   r9   padding)F
do_not_pad
truncation)Tlongest_first)Fdo_not_truncatez_The following tokenization arguments are not supported by vLLM Renderer and will be ignored: %sr   )r3   r4   r5   r6   r7   r8   r9   )popr=   r5   r6   r7   r8   r9   loggerwarningr3   r2   )r&   rC   rD   r5   r6   r7   r8   r9   rE   rG   r3   r   r   r   with_kwargs   sZ   zTokenizeParams.with_kwargsc                 C   sN   | j }|dur|dk r| j}n|du r| jdur| jd }t|du|| jdS )z,The arguments to pass to `tokenizer.encode`.Nr      )rG   rD   r8   )r6   r=   r)   r8   )r&   rD   r   r   r   get_encode_kwargs   s   
z TokenizeParams.get_encode_kwargs	tokenizertextc                 C   sx   | j }|du r	|S | jdu r:|dur:||j }t||kr:tdt| d| j d| j d| d| ddt|d	|S )
z0Apply length checks to prompt text if necessary.NYou passed z  input characters and requested < output tokens. However, the model's context length is only 0 tokens, resulting in a maximum input length of z tokens (at most z; characters). Please reduce the length of the input prompt.
input_textr?   )r=   r6   max_chars_per_tokenlenr   r4   r3   )r&   rP   rQ   r=   max_input_charsr   r   r   _text_len_check   s(   
zTokenizeParams._text_len_checkc                 C   s   | j r| S |S )z,Apply lowercase to prompt text if necessary.)r7   lower)r&   rP   rQ   r   r   r   _text_lowercase  s   zTokenizeParams._text_lowercasec                 C   s    | j | jfD ]}|||}q|S )z$Apply all validators to prompt text.)rY   r[   )r&   rP   rQ   	validatorr   r   r   _validate_text  s
   zTokenizeParams._validate_textpromptc                 C   s   |  ||d |d< |S )z
        Ensure that the prompt meets the requirements set out by this config.
        If that is not possible, raise a `VLLMValidationError`.

        This method is run before tokenization occurs.
        r^   )r]   r&   rP   r^   r   r   r   apply_pre_tokenization  s   z%TokenizeParams.apply_pre_tokenizationtokensc                 C   sn   | j }|dur|dk r| j}|du s|t|kr|S |du r"tdt|ts+td||jg|t|   S )z,Apply padding to prompt tokens if necessary.Nr   z1Cannot pad tokens when `skip_tokenizer_init=True`z&Cannot pad tokens for embedding inputs)r5   r=   rW   
ValueError
isinstancelistpad_token_id)r&   rP   ra   
pad_lengthr   r   r   _token_padding*  s   
zTokenizeParams._token_paddingc                 C   sr   | j }|dur|dk r| j}|du s|t|kr|S |dkr$|dd S t|dddkr3|| d S |d| S )z/Apply truncation to prompt tokens if necessary.Nr   truncation_sideleft)r6   r=   rW   getattr)r&   rP   ra   rD   r   r   r   _token_truncation:  s   z TokenizeParams._token_truncationc              
   C   sV   | j }|du r	|S t||kr)tdt| d| j d| j d| d	dt|d|S )	z2Apply length checks to prompt tokens if necessary.NrR   z input tokens and requested rS   rT   z6 tokens. Please reduce the length of the input prompt.input_tokensr?   )r=   rW   r   r4   r3   )r&   rP   ra   r=   r   r   r   _token_len_checkJ  s    zTokenizeParams._token_len_checkc                 C   s$   | j | j| jfD ]}|||}q|S )z)Apply all validators to a token sequence.)rg   rk   rm   )r&   rP   ra   r\   r   r   r   _validate_tokens^  s   zTokenizeParams._validate_tokensc                 C   s<   d|v r|  ||d |d< d|v r|  ||d |d< |S )z
        Ensure that the prompt meets the requirements set out by this config.
        If that is not possible, raise a `VLLMValidationError`.

        This method is run after tokenization occurs.
        prompt_token_idsprompt_embeds)rn   r_   r   r   r   apply_post_tokenizationi  s   z&TokenizeParams.apply_post_tokenization)r   N)&r,   r-   r.   r/   intr1   r4   r5   r6   r7   boolr8   r9   r:   r0   r;   r<   propertyr=   rB   r)   r   rM   rO   r   rY   r[   r]   r
   r`   r   rg   rk   rm   rn   r   r	   rq   r   r   r   r   r2   I   s`   
 
"=

r2   )#dataclassesr   r   typingr   r   r   vllm.entrypoints.chat_utilsr   vllm.exceptionsr   vllm.inputsr	   r
   r   vllm.loggerr   vllm.tokenizersr   vllm.utils.import_utilsr   r   globalsr,   rK   rd   rr   r   r)   r0   tupleobjectr   r    r2   r   r   r   r   <module>   s6   



!