
    .`iM                      8   d dl mZ d dl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 d d	lmZmZ d d
lmZ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# d dl$m%Z%m&Z& d dl'm(Z(  e#e)          Z* G d de          Z+ G d de+          Z,dS )    )
HTTPStatus)castN)Request)EngineClient)ChatTemplateContentFormatOption)RequestLogger)ChatCompletionRequest)ErrorResponse	UsageInfo)ClassificationServeContextOpenAIServingServeContext)OpenAIServingModels)ClassificationChatRequestClassificationCompletionRequestClassificationDataClassificationRequestClassificationResponse)RenderConfig)init_logger)ClassificationOutputPoolingRequestOutput)PoolingParamsc                   p    e Zd ZU edz  ed<   eed<   eed<   dededz  fdZ	dede
ez  fdZd	edefd
ZdS )ClassificationMixinNchat_templatechat_template_content_formattrust_request_chat_templatectxreturnc                   K   t          t          |          }	 |j        }t          |t                    r|}|j        }t          | dd          }|                     |j        |j	        |          }|r|S | 
                    t          t          |          | j        ||j        pt          | dd          t          t          t          | dd                    |j        |j        |j                   d{V \  }}||_        nt          |t$                    r|}	|	j        }
|
d	v r!|                     d
t*          j                  S t          |
t.                    r|
s	g |_        dS |                                 }t          t2          t.          t2                   z  |
          }|                    ||                     |	                     d{V |_        n!|                     dt*          j                  S dS # t8          t:          t<          j        f$ rF}t@          !                    d           |                     t3          |                    cY d}~S d}~ww xY w)z|
        Process classification inputs: tokenize text, resolve adapters,
        and prepare model-specific inputs.
        r   F)request_chat_templatechat_template_kwargsr   r   Nr   auto)r   r   add_generation_promptcontinue_final_messageadd_special_tokens)N z"Input or messages must be provided)status_code)prompt_or_promptsconfigz#Invalid classification request typez$Error in preprocessing prompt inputs)"r   r   request
isinstancer   messagesgetattr_validate_chat_templater   r#   _preprocess_chatr	   rendererr   r%   r&   r'   engine_promptsr   inputcreate_error_responser   BAD_REQUESTlist_get_completion_rendererstrrender_prompt_build_render_config
ValueError	TypeErrorjinja2TemplateErrorlogger	exception)selfr   request_objchat_requestr.   r   ret_r3   completion_request
input_datar2   prompt_inputes                 }/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/entrypoints/pooling/classify/serving.py_preprocesszClassificationMixin._preprocess/   s      -s33A	6+K+'@AA 8*'0.51/ /+
 22*6*D)5)J0K 3  
  J*.*?*?.==M$2 @"4$??157&DfMM2 2 +7*L+7+N'3'F +@ + + % % % % % %!>  &4""K)HII %0"/5
++55<$.$: 6    j$//  
  )+C&488::#C$s)OZ@@+3+A+A&2445GHH ,B , , & & & & & &""
 119 * 6 2   
 4Iv';< 	6 	6 	6CDDD--c!ff55555555	6s2   AG: 5CG: G: %BG: :I;IIIc           	         t          t          |          }g }d}t          t          t                   |j                  }t          |          D ]\  }}t          j        |j                  }|j	        }t          t          j        |                    }	t          | j        j        di                               |	          }
t#          ||
|t%          |                    }|                    |           |j        }|t%          |          z  }t+          ||          }t-          |j        |j        |j        ||          S )zu
        Convert model outputs to a formatted classification response
        with probabilities and labels.
        r   id2label)indexlabelprobsnum_classes)prompt_tokenstotal_tokens)idcreatedmodeldatausage)r   r   r7   r   final_res_batch	enumerater   	from_baseoutputsrQ   intnpargmaxr/   model_config	hf_configgetr   lenappendprompt_token_idsr   r   
request_idcreated_time
model_name)rB   r   itemsnum_prompt_tokensfinal_res_batch_checkedidx	final_resclassify_resrQ   predicted_indexrP   itemrf   rY   s                 rK   _build_responsez#ClassificationMixin._build_response{   sU    -s33*,"&t,@'A3CV"W"W'(?@@ 	7 	7NC/9):KLLL &E!")E"2"233OD-7RHHLL E &JJ	  D LL(9%5!6!66+*
 
 

 &~$.
 
 
 	
    r,   c                 D    t          | j        |j        |j                  S )N)
max_lengthtruncate_prompt_tokensr'   )r   max_model_lenrv   r'   )rB   r,   s     rK   r;   z(ClassificationMixin._build_render_config   s+    )#*#A&9
 
 
 	
rs   )__name__
__module____qualname__r9   __annotations__r   boolr   r
   rL   r   rr   r   r   r;    rs   rK   r   r   *   s         :"AAAA!%%%%J6J6 
	J6 J6 J6 J6X-
-
 
 -	/-
 -
 -
 -
^
,A 
l 
 
 
 
 
 
rs   r   c                        e Zd ZdZdd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 fdZdee         deez  f fdZ xZS )ServingClassificationclassifyNr$   F)r   r   r   log_error_stackengine_clientmodelsrequest_loggerr   r   r   r   r    c                |    t                                          ||||           || _        || _        || _        d S )N)r   r   r   r   )super__init__r   r   r   )	rB   r   r   r   r   r   r   r   	__class__s	           rK   r   zServingClassification.__init__   sR     	')+	 	 	
 	
 	
 +,H)+F(((rs   r,   raw_requestc                    K   | j                                         }| j         d|                     |           }t	          ||||          }t                                          |           d {V S )N-)r,   r   ri   rg   )r   ri   request_id_prefix_base_request_idr   r   handle)rB   r,   r   ri   rg   r   r   s         rK   create_classifyz%ServingClassification.create_classify   s      
 [++--
.UU1F1F{1S1SUU
(#!!	
 
 
 WW^^C(((((((((rs   r   c                 $   t                                          |          }t          |t                    r|S 	 |                    d| j                   n9# t          $ r,}|                     t          |                    cY d }~S d }~ww xY w|S )Nr   )	r   _create_pooling_paramsr-   r
   verifyra   r<   r5   r9   )rB   r   pooling_paramsrJ   r   s       rK   r   z,ServingClassification._create_pooling_params   s     77<<nm44 	"!!	6!!*d.?@@@@ 	6 	6 	6--c!ff55555555	6 s   A 
B!!BBB)rx   ry   rz   r   r   r   r   r9   r   r|   r   r   r   r   r
   r   r   r   r   __classcell__)r   s   @rK   r   r      s=       " %)HN,1 %G G G#G $G
 &,G TzG 'FG &*G G 
G G G G G G,)&) ) 
 -	/	) ) ) ) ) )"/0 
	&         rs   r   )-httpr   typingr   r>   numpyr_   fastapir   vllm.engine.protocolr   vllm.entrypoints.chat_utilsr   vllm.entrypoints.loggerr   0vllm.entrypoints.openai.chat_completion.protocolr	   'vllm.entrypoints.openai.engine.protocolr
   r   &vllm.entrypoints.openai.engine.servingr   r   r   &vllm.entrypoints.openai.models.servingr   *vllm.entrypoints.pooling.classify.protocolr   r   r   r   r   vllm.entrypoints.rendererr   vllm.loggerr   vllm.outputsr   r   vllm.pooling_paramsr   rx   r@   r   r   r}   rs   rK   <module>r      s"                          - - - - - - G G G G G G 1 1 1 1 1 1                     
 G F F F F F              3 2 2 2 2 2 # # # # # # C C C C C C C C - - - - - -	X		E
 E
 E
 E
 E
- E
 E
 E
P7 7 7 7 7/ 7 7 7 7 7rs   