o
    i                     @   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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)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  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__ ]/home/ubuntu/vllm_env/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| | }zM| |}t|trW|jd u r)d ndd |jD }| j|j|j| j	d}|d urC|W S | j
||j| j| jd |dI d H \}}n| j||jd 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	 d
|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>G   s    z=OpenAIServingTokenization.create_tokenize.<locals>.<listcomp>)request_chat_templatechat_template_kwargsr   )default_templatedefault_template_content_formatdefault_template_kwargs
tool_dicts)prompt_inputprompt_embedsz$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messagesr   _preprocess_completionprompt
ValueError	TypeErrorjinja2TemplateErrorlogger	exceptioncreate_error_response	__cause___log_inputsextendreturn_token_strsrendererget_tokenizerconvert_ids_to_tokensr   lenr<   )r    r%   r&   error_check_ret
request_idr7   r1   _engine_promptse	input_idsengine_promptr:   	tokenizerr#   r#   r$   create_tokenize5   sv   


	
"

z)OpenAIServingTokenization.create_tokenizec                    s   |  |I d H }|d ur|S d| | }| |}| j|t|jdd |d | jt|jd|| j	I d H }|d }t
|dS )Nr'   )r8   r5   rF   )rF   )r=   r>   r?   rO   r   r9   rR   tokenize_prompt_asyncbuild_tok_paramsmodel_configr   )r    r%   r&   rV   rW   r7   r\   prompt_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#   )	rR   rS   TokenizerInfor   to_dictr   	ExceptionrM   str)r    r]   inforZ   r#   r#   r$   get_tokenizer_info   s   
 z,OpenAIServingTokenization.get_tokenizer_info)__name__
__module____qualname__r   r   r   rg   r   boolr   r   r   r   r	   r^   r   r   rc   r   ri   __classcell__r#   r#   r!   r$   r      sJ    		

F
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 )rd   r]   Nr   r   c                 C   s   |   S )z#Return the tokenizer configuration.)_get_tokenizer_configr    r#   r#   r$   re      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   )dictgetattrr]   pop_make_json_serializabletyperj   r   )r    configr#   r#   r$   ro      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#   rx   )r)   kvrp   r#   r$   
<dictcomp>   s    z9TokenizerInfo._make_json_serializable.<locals>.<dictcomp>c                    s   g | ]}  |qS r#   r|   )r)   itemrp   r#   r$   r+      s    z9TokenizerInfo._make_json_serializable.<locals>.<listcomp>)hasattrr{   r@   ru   itemslist)r    objr#   rp   r$   rx      s   


z%TokenizerInfo._make_json_serializable)rj   rk   rl   r   __annotations__rg   ru   r   re   ro   rx   r#   r#   r#   r$   rd      s   
 rd   )%dataclassesr   typingr   r   rI   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.serve.tokenize.protocolr   r   r   r   r   r   vllm.inputsr   vllm.loggerr   vllm.tokenizersr   rj   rK   r   rd   r#   r#   r#   r$   <module>   s&     