
    .`ib                     *   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e          Z%e G 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                        e Zd Zddddedededz  dedz  ded	ed
eddf fdZ	de
dedeez  fdZdededeez  fdZdeez  fdZde
defdZ xZS )OpenAIServingTokenizationF)trust_request_chat_templatelog_error_stackengine_clientmodelsrequest_loggerNchat_templatechat_template_content_formatr   r   returnc                |    t                                          ||||           || _        || _        || _        d S )N)r   r   r   r   )super__init__r   r   r   )	selfr   r   r   r   r   r   r   	__class__s	           {/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/entrypoints/serve/tokenize/serving.pyr#   z"OpenAIServingTokenization.__init__"   sR     	')+	 	 	
 	
 	
 +3O)+F(((    requestraw_requestc                   K   |                      |           d {V }||S d|                     |           }	 |                     |          }t          |t                    r|j        d nd |j        D             }|                     |j        |j        | j	                  }||S | 
                    || j        |j        ||j        p| j        | j        |j        |j        |j        |j        
  
         d {V \  }}nI|                                 }	|	                    |j        |                     |                     d {V }nb# t*          t,          t.          j        f$ rC}
t2                              d           |                     |
 d|
j                   cY d }
~
S d }
~
ww xY wg }|D ]O}|                     ||d |           t          |t<                    rd	|v r|                    |d	                    Pd }|j         r.| j        !                                }|"                    |          }tG          ||tI          |          | j%        
          S )N	tokenize-c                 6    g | ]}|                                 S  )
model_dump).0tools     r&   
<listcomp>z=OpenAIServingTokenization.create_tokenize.<locals>.<listcomp>J   s"    FFF$//++FFFr'   )request_chat_templatechat_template_kwargsr   )
tool_dictsr   r   add_generation_promptcontinue_final_messager3   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   r3   r   _preprocess_chatrenderermessagesr   r5   r6   r7   _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   lenrB   )r$   r(   r)   error_check_ret
request_idr=   r4   _engine_promptsrJ   e	input_idsengine_promptr@   	tokenizers                  r&   create_tokenizez)OpenAIServingTokenization.create_tokenize8   s     
 !% 1 1' : :::::::&""E!6!6{!C!CEE
%	D33G<<L'#677  }, DFFFFF 
 #'">">*1*?)0)E040P #? # #
 #.***.*?*?M$)")"7"M4;M151R*1*G+2+I)0)E'.'A +@ + + % % % % % %!>>  88::'/'='=&-n44W== (> ( ( " " " " " " Iv';< 	D 	D 	DCDDD--.B.BQ[.B.BCCCCCCCC	D  "	+ 	D 	DMM$\     -.. D3E3V3V  /A!BCCC
$ 	D3355I"88CCJ!i..,	
 
 
 	
s%   A.E *B!E F+(8F& F+&F+c                   K   |                      |           d {V }||S d|                     |           }|                     |          }| j                                        }|                     |t          |j                  d |           |                     |||j                   d {V }|d         }t          |          S )Nr+   )r>   r;   rN   )rN   )
rC   rD   rE   rJ   r\   rX   r   r?   _tokenize_prompt_input_asyncr   )	r$   r(   r)   r_   r`   r=   rf   prompt_input
input_texts	            r&   create_detokenizez+OpenAIServingTokenization.create_detokenize   s     
 !% 1 1' : :::::::&""E!6!6{!C!CEE
//88M//11	'.999%	 	 	
 	
 	
 ">>N
 
 
 
 
 
 
 

 "(+
!4444r'   c                   K   	 | j                                         }t          || j                                                  }t          di |S # t          $ r/}|                     dt          |                     cY d}~S d}~ww xY w)z(Get comprehensive tokenizer information.zFailed to get tokenizer info: Nr-   )	rJ   r\   TokenizerInfor   to_dictr   	ExceptionrV   str)r$   rf   inforc   s       r&   get_tokenizer_infoz,OpenAIServingTokenization.get_tokenizer_info   s      	Y3355I D,>??GGIID(004000 	Y 	Y 	Y--.WsSTvv.W.WXXXXXXXX	Ys   AA 
B	$B>B	B	c                 ,    t          |j                  S )N)r7   )r   r7   )r$   r(   s     r&   rO   z.OpenAIServingTokenization._build_render_config   s    w/IJJJJr'   )__name__
__module____qualname__r   r   r	   rq   r   boolr#   r   r   r   r
   rg   r   r   rl   r   rs   r   rO   __classcell__)r%   s   @r&   r   r   !   s{        -2 %G G G#G $G
 &,G TzG 'FG &*G G 
G G G G G G,E
 E
 E
 
M	)	E
 E
 E
 E
N5"5 5 
m	+	5 5 5 5<	Y		.	Y 	Y 	Y 	YKO K K K K K K K K Kr'   r   c                   h    e Zd ZU eed<   edz  ed<   deeef         fdZdeeef         fdZ	d Z
dS )rn   rf   Nr   r    c                 *    |                                  S )z#Return the tokenizer configuration.)_get_tokenizer_config)r$   s    r&   ro   zTokenizerInfo.to_dict   s    ))+++r'   c                 ,   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   )rY   getattrrf   pop_make_json_serializabletyperu   r   )r$   r9   s     r&   r|   z#TokenizerInfo._get_tokenizer_config   s    gdnmTBBHbII 	

<&&&

=$'''--f55$($8$8$A ! 	9&*&8F?#r'   c                      t          |d          r|j        S t          |t                    r  fd|                                D             S t          |t
                    r fd|D             S |S )zAConvert any non-JSON-serializable objects to serializable format.contentc                 B    i | ]\  }}|                     |          S r-   r   )r/   kvr$   s      r&   
<dictcomp>z9TokenizerInfo._make_json_serializable.<locals>.<dictcomp>   s-    OOO41aAt33A66OOOr'   c                 :    g | ]}                     |          S r-   r   )r/   itemr$   s     r&   r1   z9TokenizerInfo._make_json_serializable.<locals>.<listcomp>   s'    GGG4D0066GGGr'   )hasattrr   rF   rY   itemslist)r$   objs   ` r&   r   z%TokenizerInfo._make_json_serializable   s    3	"" 	;T"" 	OOOO399;;OOOOT"" 	GGGG3GGGGJr'   )ru   rv   rw   r   __annotations__rq   rY   r   ro   r|   r   r-   r'   r&   rn   rn      s         :,c3h , , , ,tCH~    	 	 	 	 	r'   rn   )'dataclassesr   typingr   r   rR   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   ru   rT   r   rn   r-   r'   r&   <module>r      s   " ! ! ! ! !                - - - - - - G G G G G G 1 1 1 1 1 1      A @ @ @ @ @ F F F F F F 2 2 2 2 2 2                % $ $ $ $ $ # # # # # # ) ) ) ) ) )	X		HK HK HK HK HK HK HK HKV          r'   