o
    پi                     @   s   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mZ d dlmZ e eZG dd deZG d	d
 d
eZdS )    N)
HTTPStatus)ListUnion)Request)DetokenizeRequestDetokenizeResponseErrorResponseTokenizeRequestTokenizeResponse)OpenAIServingBasec                
   @   ^   e Zd ZdZdefddZdededeeef fddZ	d	ededede
eef fd
dZdS )OpenAIServingTokenizez!Handler for /v1/tokenize requestsreturnc                 C      dS )Nztok- selfr   r   b/home/ubuntu/.local/lib/python3.10/site-packages/sglang/srt/entrypoints/openai/serving_tokenize.py_request_id_prefix      z(OpenAIServingTokenize._request_id_prefixrequestraw_requestc                 C      ||fS Nr   r   r   r   r   r   r   _convert_to_internal_request      z2OpenAIServingTokenize._convert_to_internal_requestadapted_requestc           
   
      s   zP| j jtdd}t jtr"j j jd}|}t|}n(t jt	r= fdd jD }|}dd |D }n| 
dt j dW S t|||d	W S  tyv }	 ztjd
dd | j
d|	 dtjdW  Y d }	~	S d }	~	ww )Nmodel_max_lengthadd_special_tokensc                    s   g | ]
}j | jd qS )r    )encoder!   ).0textr   	tokenizerr   r   
<listcomp>0   s    zGOpenAIServingTokenize._handle_non_streaming_request.<locals>.<listcomp>c                 S      g | ]}t |qS r   )len)r#   idsr   r   r   r'   7       zInvalid prompt type: z. Expected str or List[str].)tokenscountmax_model_lenzError during tokenizationTexc_infoz+Internal server error during tokenization: InternalServerErrorerr_typestatus_code)tokenizer_managerr&   getattr
isinstancepromptstrr"   r!   r)   listcreate_error_responsetyper
   	Exceptionloggererrorr   INTERNAL_SERVER_ERROR)
r   r   r   r   r.   	token_idsr,   r-   token_ids_lister   r%   r   _handle_non_streaming_request   s@   
z3OpenAIServingTokenize._handle_non_streaming_requestN)__name__
__module____qualname____doc__r9   r   r	   r   tupler   r   r
   r   rD   r   r   r   r   r      &    


r   c                
   @   r   )OpenAIServingDetokenizez#Handler for /v1/detokenize requestsr   c                 C   r   )Nzdetok-r   r   r   r   r   r   L   r   z*OpenAIServingDetokenize._request_id_prefixr   r   c                 C   r   r   r   r   r   r   r   r   O   r   z4OpenAIServingDetokenize._convert_to_internal_requestr   c              
      s  z| j j}t|jtr:|jr:t|jd tr:tdd |jD s'| dW S dd |jD }|j||j	d}|}n[t|jtr||jr|t|jd tr|g }|jD ](}	tdd |	D sf| d	|	   W S |jd
d |	D |j	d}
|
|
 qP|}nt|jtr|jsd}n| dt|j dW S t|dW S  ty } z4tjddd dt| v r| jd| ddtjdW  Y d }~S | jd| dtjdW  Y d }~S d }~ww )Nr   c                 s       | ]}t |tV  qd S r   r7   intr#   tr   r   r   	<genexpr>b       zHOpenAIServingDetokenize._handle_non_streaming_request.<locals>.<genexpr>z3Invalid input: 'tokens' must be a list of integers.c                 S   r(   r   rN   rO   r   r   r   r'   f   r+   zIOpenAIServingDetokenize._handle_non_streaming_request.<locals>.<listcomp>)skip_special_tokensc                 s   rL   r   rM   rO   r   r   r   rQ   r   rR   zFInvalid input: Sublist in 'tokens' must contain only integers. Found: c                 S   r(   r   rS   rO   r   r   r   r'   w   r+    zInvalid tokens type: z(. Expected List[int] or List[List[int]].)r$   zError during detokenizationTr/   decodezError decoding tokens: z.. Input tokens might be invalid for the model.DecodeErrorr2   z-Internal server error during detokenization: r1   )r5   r&   r7   r,   r:   rN   allr;   rV   rT   appendr<   r   r=   r>   r?   r9   lowerr   BAD_REQUESTr@   )r   r   r   r   r&   tokens_to_decoder$   text_outtexts
token_listdecoded_textrC   r   r   r   rD   T   sr   




z5OpenAIServingDetokenize._handle_non_streaming_requestN)rE   rF   rG   rH   r9   r   r   r   rI   r   r   r   r   rD   r   r   r   r   rK   I   rJ   rK   )logginghttpr   typingr   r   fastapir   &sglang.srt.entrypoints.openai.protocolr   r   r   r	   r
   *sglang.srt.entrypoints.openai.serving_baser   	getLoggerrE   r>   r   rK   r   r   r   r   <module>   s    
6