o
    i                     @   s   U d dl mZmZ d dl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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 d dlmZ ee Z!ee Z"ee#d< G dd deZ$dS )    )Final	TypeAliasN)Request)EngineClient)ChatTemplateContentFormatOption)RequestLogger)ErrorResponse	UsageInfo)OpenAIServingServeContext)OpenAIServingModels)ClassificationChatRequestClassificationCompletionRequestClassificationDataClassificationRequestClassificationResponse)init_logger)ClassificationOutputClassificationServeContextc                       s   e Zd ZdZdd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B fddZdedeeB fddZdededeeB fddZ  ZS )ServingClassificationclassifyNautoF)chat_templatechat_template_content_formattrust_request_chat_templatelog_error_stackengine_clientmodelsrequest_loggerr   r   r   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/pooling/classify/serving.pyr!   #   s   
zServingClassification.__init__ctxc              
      s   zU|  |j|_t|jtr9| j|jj|jj| jd}|r!|W S | j	|j|jj
| j| jddI dH \}|_W dS t|jtrQ| j|j|jjddI dH |_W dS | dW S  tttjfyx } ztd | t|W  Y d}~S d}~ww )z|
        Process classification inputs: tokenize text, resolve adapters,
        and prepare model-specific inputs.
        )request_chat_templatechat_template_kwargsr   N)default_templatedefault_template_content_formatdefault_template_kwargs)prompt_inputprompt_embedsz#Invalid classification request typez$Error in preprocessing prompt inputs)_maybe_get_adaptersrequestlora_request
isinstancer   _validate_chat_templater   r)   r   _preprocess_chatmessagesr   engine_promptsr   _preprocess_completioninputcreate_error_response
ValueError	TypeErrorjinja2TemplateErrorlogger	exceptionstr)r"   r'   error_check_ret_er%   r%   r&   _preprocess9   s@   
z!ServingClassification._preprocessc                 C   s   t | jjdi }g }d}|j}t|D ]1\}}t|j}|j}	t	t
|	}
||
}t|||	t|	d}|| |j}|t|7 }qt||d}t|j|j|j||dS )zu
        Convert model outputs to a formatted classification response
        with probabilities and labels.
        id2labelr   )indexlabelprobsnum_classes)prompt_tokenstotal_tokens)idcreatedmodeldatausage)getattrmodel_config	hf_configfinal_res_batch	enumerater   	from_baseoutputsrH   intnpargmaxgetr   lenappendprompt_token_idsr	   r   
request_idcreated_time
model_name)r"   r'   rE   itemsnum_prompt_tokensfinal_res_batch_checkedidx	final_resclassify_resrH   predicted_indexrG   itemr^   rP   r%   r%   r&   _build_responsec   s:   

z%ServingClassification._build_responser0   raw_requestc                    sB   | j  }| j d| | }t||||d}| |I d H S )N-)r0   rk   ra   r_   )r   ra   request_id_prefix_base_request_idr   handle)r"   r0   rk   ra   r_   r'   r%   r%   r&   create_classify   s   
z%ServingClassification.create_classify)__name__
__module____qualname__rm   r   r   r   r@   r   boolr!   r   r   rD   r   rj   r   r   rp   __classcell__r%   r%   r#   r&   r       sP    	

*
.r   )%typingr   r   r<   numpyrY   fastapir   vllm.engine.protocolr   vllm.entrypoints.chat_utilsr   vllm.entrypoints.loggerr   'vllm.entrypoints.openai.engine.protocolr   r	   &vllm.entrypoints.openai.engine.servingr
   r   &vllm.entrypoints.openai.models.servingr   *vllm.entrypoints.pooling.classify.protocolr   r   r   r   r   vllm.loggerr   vllm.outputsr   rq   r>   r   __annotations__r   r%   r%   r%   r&   <module>   s    