o
    )i5b                     @   s   d Z ddlZddlmZ ddlmZmZ ddlmZ ddl	m
Z
mZmZmZ ddlZddlmZ ddlmZ dd	lmZ dd
lmZ eeZdZdZG dd deZeG dd dZG dd deZG dd dejdddZG dd dejdddZ dS )z(Sampling parameters for text generation.    N)	dataclass)EnumIntEnum)cached_property)	AnnotatedAnyOptionalUnion)	BaseModel)init_logger)LogitsProcessor)AnyTokenizergh㈵>g{Gz?c                   @      e Zd ZdZdZdZdS )SamplingTyper         N)__name__
__module____qualname__GREEDYRANDOMRANDOM_SEED r   r   `/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/vllm/sampling_params.pyr      s    r   c                   @   sN  e Zd ZU dZdZeeeef  e	d< dZ
ee e	d< dZeee  e	d< dZee e	d< dZee e	d< 	 dZe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 e	d< dZee e	d< e								ddeeeeef  dee deee  dee dee dee dee dee ded  fddZdd ZdS )GuidedDecodingParamsz<One of these fields will be used to build a logit processor.Njsonregexchoicegrammarjson_objectbackendFbackend_was_autodisable_fallbackdisable_any_whitespacedisable_additional_propertieswhitespace_patternstructural_tagreturnc              
   C   sT   t dd | |||||fD rd S t| tttfr|  } t| |||||||dS )Nc                 s   s    | ]}|d u V  qd S Nr   ).0argr   r   r   	<genexpr>:       z5GuidedDecodingParams.from_optional.<locals>.<genexpr>r   r   r   r   r   r    r%   r&   )all
isinstancer
   typeZmodel_json_schemar   r-   r   r   r   from_optional/   s    
z"GuidedDecodingParams.from_optionalc                 C   sL   t | jdu| jdu| jdu| jdu| jdug}|dkr$td| j dS )z1Validate that some fields are mutually exclusive.Nr   zIYou can only use one kind of guided decoding but multiple are specified: )sumr   r   r   r   r   
ValueError__dict__)selfZguide_countr   r   r   __post_init__K   s   z"GuidedDecodingParams.__post_init__)NNNNNNNN)r   r   r   __doc__r   r   r	   strdict__annotations__r   r   listr   r   boolr    r!   r"   r#   r$   r%   r&   staticmethodr
   r1   r6   r   r   r   r   r      sX   
 
	r   c                   @   r   )RequestOutputKindr   r   r   N)r   r   r   
CUMULATIVEDELTAZ
FINAL_ONLYr   r   r   r   r>   W   s    r>   c                ?   @   sx  e Zd ZU dZdZeed< 	 dZee ed< 	 dZ	e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< 	 dZeed< 	 dZeed< 	 dZee ed< 	 dZeeeee f  ed< 	 dZeee  ed< 	 dZeed< 	 dZee ed< 	 dZeed< 	 dZee ed< 	 dZee ed< 	 dZeed< 	 dZeed< 	 dZ eed< 	 dZ!ee" ed< 	 dZ#eed < 	 dZ$ee%ee&j'dd!f  ed"< 	 e(j)Z*e(ed#< dZ+eed$< e&j,e-d%Z.e-e ed&< dZ/ee0 ed'< 	 dZ1ee2eef  ed(< 	 dZ3eee  ed)< 	 dZ4ee2ee"f  ed*< 	 dZ5eee  ed+< 	 dZ6eeee   ed,< e7ddddd
d
d
ddddddddddddddddde(j)ddddfdee dee dee d	ee dee dee dee dededee deeeee f  deee  d+eee  d ededee dedee dee dedededeee8  d"ee%ee&j'dd!f  d#e(d'ee0 d(eee2eef e2eef f  d)eee  d*ee2ee"f  d-d f<d.d/Z9dGd0d1Z:dGd2d3Z;dGd4d5Z<	dHd6e2ee"f d7ee d-dfd8d9Z=d:e>d-dfd;d<Z?e@d-eAfd=d>ZBeCd-e-e fd?d@ZDeCd-eeee   fdAdBZEdIdCdDZFd-efdEdFZGdS )JSamplingParamsa  Sampling parameters for text generation.

    Overall, we follow the sampling parameters from the OpenAI text completion
    API (https://platform.openai.com/docs/api-reference/completions/create).
    In addition, we support beam search, which is not supported by OpenAI.
    r   nNbest_of_real_n        presence_penaltyfrequency_penalty      ?repetition_penaltytemperaturetop_pr   top_kmin_pseedstopstop_token_idsF
ignore_eos   
max_tokens
min_tokenslogprobsprompt_logprobsT
detokenizeskip_special_tokensspaces_between_special_tokenslogits_processorsinclude_stop_str_in_output)getruncate_prompt_tokensoutput_kindoutput_text_buffer_length)default_factory_all_stop_token_idsguided_decoding
logit_biasallowed_token_ids
extra_args	bad_words_bad_words_token_idsr'   c                 C   s  |d urdd |  D }td#i d| d u rdn| d|d|d u r#dn|d|d u r,dn|d	|d u r5d
n|d|d u r>d
n|d|d u rGd
nF|d|d|d|	d|
d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d |d!|d"|S d|d|d|	d|
d|d|d|d|d|d|d|d|d|d|d|d|d|d|d|d |d!|d"|S )$Nc                 S   s&   i | ]\}}t |td td|qS )g      Y@g      Y)intminmax)r)   tokenZbiasr   r   r   
<dictcomp>   s    z0SamplingParams.from_optional.<locals>.<dictcomp>rB   r   rC   rF   rE   rG   rI   rH   rJ   rK   rL   rM   rN   rO   rP   rf   r[   rQ   rS   rT   rU   rV   rW   rX   rY   rZ   r]   r^   rb   rc   rd   re   r   )itemsrA   )rB   rC   rF   rG   rI   rJ   rK   rL   rM   rN   rO   rP   rf   r[   rQ   rS   rT   rU   rV   rW   rX   rY   rZ   r]   r^   rb   rc   rd   re   r   r   r   r1      s   !	
 
 zSamplingParams.from_optionalc                 C   sX  | j r!| j | jk rtd| j d| j  d| js!| j| _| j | _d| j  k r,tk r>n ntd| jtt t| jt| _| j	dkrFd | _	| j
d u rOg | _
nt| j
trZ| j
g| _
| jd u rbg | _| jd u rjg | _| jdu rrd| _| jdu rzd| _| j
r| jstd	d
 | j
D d | _|   | jtk rd| _d| _d| _|   | j| j d S )N2best_of must be greater than or equal to n, got n= and best_of=.r   zstemperature %s is less than %s, which may cause numerical errors nan or inf in tensors. We have maxed it out to %s.Tr   c                 s   s    | ]}t |V  qd S r(   )len)r)   sr   r   r   r+   T  r,   z/SamplingParams.__post_init__.<locals>.<genexpr>rH   rE   )rC   rB   r3   rD   rJ   	_MAX_TEMPloggerwarningrj   rN   rO   r/   r8   rP   rf   rU   rV   r[   r_   _verify_args_SAMPLING_EPSrK   rL   rM   _verify_greedy_samplingra   updater5   r   r   r   r6   &  sR   







zSamplingParams.__post_init__c                 C   sr  t | jtstdt| j | jdk rtd| j d| jd urSt | jts3tdt| j | jdk r@td| j | j| jk rStd| j d| j dd	| j  kr^d
kshn td| j dd	| j  krsd
ks}n td| j d| jdkrtd| j d| j	dk rtd| j	 dd| j
  k rdksn td| j
 d| jdk rtd| j dt | jtstdt| jj d| j  krdksn td| j d| jd ur| jdk rtd| j d| jdk rtd| j d| jd ur| j| jkrtd| j d| j d| jd ur9| jdkr9| jdk r9td| j d| jd urN| jdk rNtd| j d| jd urb| jdk rbtd| j t | jtskJ tdd | jD std | j dt | jtsJ td!d | jD rtd"| jr| jstd#| j| jkr| jtjkrtd$d S d S )%Nz!n must be an int, but is of type r   zn must be at least 1, got rp   z best_of must be an integer, got z best_of must be at least 1, got rn   ro   g       g       @z)presence_penalty must be in [-2, 2], got z*frequency_penalty must be in [-2, 2], got rE   z2repetition_penalty must be greater than zero, got z&temperature must be non-negative, got rH   ztop_p must be in (0, 1], got rq   z.top_k must be 0 (disable), or at least 1, got ztop_k must be an integer, got zmin_p must be in [0, 1], got z#max_tokens must be at least 1, got r   z3min_tokens must be greater than or equal to 0, got z4min_tokens must be less than or equal to max_tokens=z, got z)logprobs must be non-negative or -1, got z*prompt_logprobs must be non-negative, got z)truncate_prompt_tokens must be >= 1, got c                 s   s    | ]}t |tV  qd S r(   )r/   rh   )r)   Zst_idr   r   r   r+     s    z.SamplingParams._verify_args.<locals>.<genexpr>z/stop_token_ids must contain only integers, got c                 s   s    | ]}| V  qd S r(   r   )r)   Zstop_strr   r   r   r+     s    z$stop cannot contain an empty string.zYstop strings are only supported when detokenize is True. Set detokenize=True to use stop.z-best_of must equal n to use output_kind=DELTA)r/   rB   rh   r3   r0   rC   rF   rG   rI   rJ   rK   rL   	TypeErrorr   rM   rS   rT   rU   rV   r]   rP   r;   r.   rO   anyrW   rD   r^   r>   r@   r{   r   r   r   rw   b  s   













zSamplingParams._verify_argsc                 C   s    | j dkrtd| j  dd S )Nr   z,n must be 1 when using greedy sampling, got rp   )rB   r3   r{   r   r   r   ry     s
   

z&SamplingParams._verify_greedy_samplinggeneration_configmodel_eos_token_idc                 C   s   |dur
| j | |d }dur@t|tr|hnt|}|dur(|| |rB| j | | jsD|| j	 t
|| _	dS dS dS dS )z=Update if there are non-default values from generation_configNZeos_token_id)ra   addgetr/   rh   setdiscardrz   rQ   rP   r;   )r5   r~   r   Zeos_idsr   r   r   update_from_generation_config  s   
z,SamplingParams.update_from_generation_config	tokenizerc                    s   | j sd S g | _| j D ]:}dD ]5}|rdnd}||  } j|dd}|r>|rD|d | jd d krDt|t| jd krD| j| qq fdd	| jD }t|dkrhtd
 jd  d| d j dd S )N)FT  F)textZadd_special_tokensr   rq   c                    s,   g | ]}|D ]}|d k s| j kr|qqS )r   )max_token_id)r)   bad_words_token_idsZtoken_idr   r   r   
<listcomp>  s    z8SamplingParams.update_from_tokenizer.<locals>.<listcomp>zThe model vocabulary size is r   z2, but the following tokens were specified as bad: zF. All token id values should be integers satisfying: 0 <= token_id <= rp   )rf   rg   lstripencoderr   appendr3   r   )r5   r   Zbad_wordZadd_prefix_spaceprefixpromptZprompt_token_idsZinvalid_token_idsr   r   r   update_from_tokenizer  sD   

z$SamplingParams.update_from_tokenizerc                 C   s&   | j tk rtjS | jd urtjS tjS r(   )rJ   rx   r   r   rN   r   r   r{   r   r   r   sampling_type  s
   

zSamplingParams.sampling_typec                 C      | j S r(   )ra   r{   r   r   r   all_stop_token_ids  s   z!SamplingParams.all_stop_token_idsc                 C   r   r(   )rg   r{   r   r   r   r     s   z"SamplingParams.bad_words_token_idsc                 C   s,   | j du rdndd | j D }tj| |dS )a[  Deep copy, but maybe not the LogitsProcessor objects.

        LogitsProcessor objects may contain an arbitrary, nontrivial amount of
        data that is expensive to copy. However, if not copied, the processor
        needs to support parallel decoding for multiple sequences
        See https://github.com/vllm-project/vllm/issues/3087
        Nc                 S   s(   i | ]}t |t|d r| n|qS )clone)idhasattrr   )r)   Zlpr   r   r   rl     s    z(SamplingParams.clone.<locals>.<dictcomp>)memo)rZ   copydeepcopy)r5   Zlogit_processor_refsr   r   r   r     s   	zSamplingParams.clonec                 C   s"  d g d| j d| j d| j d| j d| j d| j d| j d	| j d
| j	 d| j
 d| j d| j d| j d| j d| j d| j d| j d| j d| j d| j d| j d| j d| j dS )Nr   zSamplingParams(n=z, presence_penalty=z, frequency_penalty=z, repetition_penalty=z, temperature=z, top_p=z, top_k=z, min_p=z, seed=z, stop=z, stop_token_ids=z, bad_words=z, include_stop_str_in_output=z, ignore_eos=z, max_tokens=z, min_tokens=z, logprobs=z, prompt_logprobs=z, skip_special_tokens=z , spaces_between_special_tokens=z, truncate_prompt_tokens=z, guided_decoding=z, extra_args=))joinrB   rF   rG   rI   rJ   rK   rL   rM   rN   rO   rP   rf   r[   rQ   rS   rT   rU   rV   rX   rY   r]   rb   re   r{   r   r   r   __repr__  s\   	

zSamplingParams.__repr__)r'   Nr(   )r'   rA   )Hr   r   r   r7   rB   rh   r:   rC   r   rD   rF   floatrG   rI   rJ   rK   rL   rM   rN   rO   r	   r8   r;   rP   rQ   r<   rS   rT   rU   rV   rW   rX   rY   rZ   r   r[   r]   r   msgspecZMetar>   r?   r^   r_   fieldr   ra   rb   r   rc   r9   rd   re   rf   rg   r=   r   r1   r6   rw   ry   r   r   r   r   r   r   propertyr   r   r   r   r   r   r   r   rA   `   s`  
  	






K
<
N

$
rA   T)Zomit_defaultsr9   c                   @   sR   e Zd ZU dZeed< eed< dZeed< dZe	ed< dZ
e	ed	< dZeed
< dS )BeamSearchParamsz+Beam search parameters for text generation.Z
beam_widthrS   FrQ   rE   rJ   rH   length_penaltyr[   N)r   r   r   r7   rh   r:   rQ   r<   rJ   r   r   r[   r   r   r   r   r   /  s   
 r   )!r7   r   dataclassesr   enumr   r   	functoolsr   typingr   r   r   r	   r   Zpydanticr
   Zvllm.loggerr   Zvllm.logits_processr   Z!vllm.transformers_utils.tokenizerr   r   ru   rx   rt   r   r   r>   StructrA   r   r   r   r   r   <module>   s>   8
	   
R
