o
    -ib                     @   s   d dl mZ d dl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 d dlm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mZ d dlmZ d dlm Z  d dl!m"Z" e e#Z$G dd deZ%eG dd dZ&dS )    )	dataclass)AnyFinalN)Request)EngineClient)ChatTemplateContentFormatOption)RequestLogger)ErrorResponse)OpenAIServing)OpenAIServingModels)RenderConfig)DetokenizeRequestDetokenizeResponseTokenizeChatRequestTokenizeRequestTokenizeResponseTokenizerInfoResponse)TokensPrompt)init_logger)TokenizerLikec                       s   e Zd ZddddedededB dedB ded	ed
eddf fddZ	de
dedeeB fddZdededeeB fddZdeeB fddZde
defddZ  ZS )OpenAIServingTokenizationF)trust_request_chat_templatelog_error_stackengine_clientmodelsrequest_loggerNchat_templatechat_template_content_formatr   r   returnc                   s*   t  j||||d || _|| _|| _d S )N)r   r   r   r   )super__init__r   r   r   )selfr   r   r   r   r   r   r   	__class__ d/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/vllm/entrypoints/serve/tokenize/serving.pyr    "   s   
z"OpenAIServingTokenization.__init__requestraw_requestc                    s  |  |I d H }|d ur|S d| | }z_| |}t|trc|jd u r)d ndd |jD }| j|j|j| j	d}|d urC|W S | j
|| j|j||jpP| j| j|j|j|j|jd
I d H \}}n|  }	|	j|j| |dI d H }W n& tttjfy }
 ztd | |
 d|
j W  Y d }
~
S d }
~
ww g }|D ]}| j||d |d	 t|trd
|v r||d
  qd }|j r| j! }|"|}t#||t$|| j%dS )N	tokenize-c                 S   s   g | ]}|  qS r$   )
model_dump).0toolr$   r$   r%   
<listcomp>J   s    z=OpenAIServingTokenization.create_tokenize.<locals>.<listcomp>)request_chat_templatechat_template_kwargsr   )
tool_dictsr   r   add_generation_promptcontinue_final_messager.   add_special_tokens)prompt_or_promptsconfigz$Error in preprocessing prompt inputs paramslora_requestprompt_token_ids)tokens
token_strscountmax_model_len)&_check_model_base_request_id_maybe_get_adapters
isinstancer   tools_validate_chat_templater   r.   r   _preprocess_chatrenderermessagesr   r0   r1   r2   _get_completion_rendererrender_promptprompt_build_render_config
ValueError	TypeErrorjinja2TemplateErrorlogger	exceptioncreate_error_response	__cause___log_inputsdictextendreturn_token_strsget_tokenizerconvert_ids_to_tokensr   lenr=   )r!   r&   r'   error_check_ret
request_idr8   r/   _engine_promptsrE   e	input_idsengine_promptr;   	tokenizerr$   r$   r%   create_tokenize8   sx   




"

z)OpenAIServingTokenization.create_tokenizec           	         s   |  |I d H }|d ur|S d| | }| |}| j }| j|t|jdd |d | |||jI d H }|d }t	|dS )Nr(   )r9   r6   rI   )rI   )
r>   r?   r@   rE   rW   rS   r   r:   _tokenize_prompt_input_asyncr   )	r!   r&   r'   rZ   r[   r8   ra   prompt_input
input_textr$   r$   r%   create_detokenize   s(   




z+OpenAIServingTokenization.create_detokenizec              
      sf   z| j  }t|| j }tdi |W S  ty2 } z| dt| W  Y d}~S d}~ww )z(Get comprehensive tokenizer information.zFailed to get tokenizer info: Nr$   )	rE   rW   TokenizerInfor   to_dictr   	ExceptionrQ   str)r!   ra   infor^   r$   r$   r%   get_tokenizer_info   s   
 z,OpenAIServingTokenization.get_tokenizer_infoc                 C   s   t |jdS )N)r2   )r   r2   )r!   r&   r$   r$   r%   rJ      s   z.OpenAIServingTokenization._build_render_config)__name__
__module____qualname__r   r   r   rj   r   boolr    r   r   r   r	   rb   r   r   rf   r   rl   r   rJ   __classcell__r$   r$   r"   r%   r   !   sL    		

G

r   c                   @   sV   e Zd ZU eed< edB ed< deeef fddZdeeef fddZ	d	d
 Z
dS )rg   ra   Nr   r   c                 C   s   |   S )z#Return the tokenizer configuration.)_get_tokenizer_configr!   r$   r$   r%   rh      s   zTokenizerInfo.to_dictc                 C   s\   t t| jddp	i }|dd |dd | |}t| jj|d< | jr,| j|d< |S )z?Get tokenizer configuration directly from the tokenizer object.init_kwargsN
vocab_filemerges_filetokenizer_classr   )rT   getattrra   pop_make_json_serializabletyperm   r   )r!   r4   r$   r$   r%   rr      s   

z#TokenizerInfo._get_tokenizer_configc                    sP   t |dr|jS t|tr fdd| D S t|tr& fdd|D S |S )zAConvert any non-JSON-serializable objects to serializable format.contentc                    s   i | ]
\}}|  |qS r$   rz   )r*   kvrs   r$   r%   
<dictcomp>   s    z9TokenizerInfo._make_json_serializable.<locals>.<dictcomp>c                    s   g | ]}  |qS r$   r}   )r*   itemrs   r$   r%   r,      s    z9TokenizerInfo._make_json_serializable.<locals>.<listcomp>)hasattrr|   rA   rT   itemslist)r!   objr$   rs   r%   rz      s   


z%TokenizerInfo._make_json_serializable)rm   rn   ro   r   __annotations__rj   rT   r   rh   rr   rz   r$   r$   r$   r%   rg      s   
 rg   )'dataclassesr   typingr   r   rM   fastapir   vllm.engine.protocolr   vllm.entrypoints.chat_utilsr   vllm.entrypoints.loggerr   'vllm.entrypoints.openai.engine.protocolr	   &vllm.entrypoints.openai.engine.servingr
   &vllm.entrypoints.openai.models.servingr   vllm.entrypoints.rendererr   (vllm.entrypoints.serve.tokenize.protocolr   r   r   r   r   r   vllm.inputsr   vllm.loggerr   vllm.tokenizersr   rm   rO   r   rg   r$   r$   r$   r%   <module>   s(     