
    -`iO                        d Z ddl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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mZmZmZ ddlmZ ddl m!Z!m"Z" ddl#m$Z$  ej%        e&          Z'de(de(fdZ) G d de          Z*dS )z&Anthropic Messages API serving handler    N)AsyncGenerator)Any)Request)EngineClient)AnthropicContentBlockAnthropicDeltaAnthropicErrorAnthropicMessagesRequestAnthropicMessagesResponseAnthropicStreamEventAnthropicUsage)ChatTemplateContentFormatOption)RequestLogger)"ChatCompletionNamedToolChoiceParamChatCompletionRequestChatCompletionResponseChatCompletionStreamResponseChatCompletionToolsParam)OpenAIServingChat)ErrorResponseStreamOptions)OpenAIServingModelsdataeventc                     d| d|  dS )Nzevent: z
data: z

 )r   r   s     v/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/entrypoints/anthropic/serving.pywrap_data_with_eventr   -   s    .U..D....    c                        e Zd ZdZddddddddededed	edz  d
edz  dede	dede	dedz  de	de	f fdZ
dedefdZ	 ddededz  deedf         ez  ez  fdZdedefdZdeedf         deedf         fdZ xZS )AnthropicServingMessagesz+Handler for Anthropic Messages API requestsF N)return_tokens_as_token_idsreasoning_parserenable_auto_toolstool_parserenable_prompt_tokens_detailsenable_force_include_usageengine_clientmodelsresponse_rolerequest_loggerchat_templatechat_template_content_formatr#   r$   r%   r&   r'   r(   c       	         x    t                                          |||||||||	|
||           dddd| _        d S )N)r)   r*   r+   r,   r-   r.   r#   r$   r%   r&   r'   r(   end_turn
max_tokenstool_use)stoplength
tool_calls)super__init__stop_reason_map)selfr)   r*   r+   r,   r-   r.   r#   r$   r%   r&   r'   r(   	__class__s                r   r7   z!AnthropicServingMessages.__init__4   sj      	'')')E'A-/#)E'A 	 	
 	
 	
 "$ 
  
r   anthropic_requestreturnc           
         g }|j         rxt          |j         t                    r|                    d|j         d           n@d}|j         D ]}|j        dk    r|j        r
||j        z  }|                    d|d           |j        D ]}d|j        i}t          |j        t                    r|j        |d<   ng }g }|j        D ]v}|j        dk    r%|j        r|                    d|j        d           3|j        dk    r;|j	        r4|                    d	d
|j	        
                    dd          id           y|j        dk    rg|j        p"dt          t          j                               d|j        pdt          j        |j        pi           dd}	|                    |	           |j        dk    r|j        dk    r=|                    d|j        pd|j        rt          |j                  ndd           >|j        rt          |j                  nd}
|                    dd|
 d           x|r||d<   |r=t%          |          dk    r$|d         d         dk    r|d         d         |d<   n
||d<   n|s|                    |           t'          |j        ||j        |j        |j        |j        |j        |j                  }|j        r(|j        |_        t7          j        ddd          |_        |j        d|_        nh|j        j        dk    rd|_        nP|j        j        d k    rd!|_        n8|j        j        dk    r(t?          j         dd"|j        j        id#          |_        g }|j!        |S |j!        D ]?}|                    tE          j         d|j        |j#        |j$        d$d#                     @|j        d|_        ||_!        |S )%z1Convert Anthropic message format to OpenAI formatsystem)rolecontentr"   textr?   r@   typerA   image	image_urlurlr   )rC   rE   r2   call_function)name	arguments)idrC   rH   tool_resultusertool)r?   tool_call_idr@   zTool result: r5      r   rC   )modelmessagesr1   max_completion_tokensr3   temperaturetop_ptop_kT)include_usagecontinuous_usage_statsNautoanyrequiredrI   )rC   rH   )rI   description
parameters)%r>   
isinstancestrappendrC   rA   rR   r?   r@   sourcegetrK   inttimerI   jsondumpsinputlenr   rQ   r1   stop_sequencesrT   rU   rV   streamr   validatestream_optionstool_choicer   model_validatetoolsr   r\   input_schema)r9   r;   openai_messagessystem_promptblockmsg
openai_msgcontent_partsr5   	tool_calltool_result_textreqro   rN   s                 r   $_convert_anthropic_to_openai_requestz=AnthropicServingMessages._convert_anthropic_to_openai_requestX   s     # 
	U+2C88 	U&&%2C2JKK    !#.5 4 4EzV++
+%3&&]'S'STTT$- B	/ B	/C*0#();J#+s++ >(+
9%% 7935
 [ * *EzV++
+%,,fej-Q-QRRRRw..5<.%,,(3.3U\5E5Efb5Q5Q-R     z11 #(("H.Hc$)++6F6F.H.H$.(-
(8b-1Z8Ir-J-J) )% %	 #)))4444}448v--+22,249HN',}0,s5=/A/A/A)+!" !"    7<m KEM 2 2 2 - *00,2,N<L,N,N!" !"    :/9J|, ! =))Q..=3CF3Kv3U3U0=a0@0H
9--0=
9--# "":....##)$(3"3">"1)5#)#)	
 	
 	
 # 	*1CJ!.!7"&$GG" "C (0"COO*/699$COO*/588(COO*/699@O&!'):)F)K L  CO "*J%+ 	 	DLL(7 *$(I+/+;*.*;% % 	 	    ?"$CO	
r   requestraw_requestc                 X  K   t                               t          j                  r-t                               d|                                           |                     |          }t                               t          j                  r-t                               d|                                           |                     ||           d{V }t          |t                    r|S t          |t                    r|                     |          S |                     |          S )z
        Messages API similar to Anthropic's API.

        See https://docs.anthropic.com/en/api/messages
        for the API specification. This API mimics the Anthropic messages API.
        zReceived messages request %szConvert to OpenAI request %sN)loggerisEnabledForloggingDEBUGdebugmodel_dump_jsonrz   create_chat_completionr^   r   r   messages_full_convertermessage_stream_converter)r9   r{   r|   chat_req	generators        r   create_messagesz(AnthropicServingMessages.create_messages   s	      w}-- 	TLL79P9P9R9RSSS<<WEEw}-- 	ULL79Q9Q9S9STTT55hLLLLLLLL	i// 	;	#9:: 	;//	:::,,Y777r   r   c           	         t          |j        g |j        t          |j        j        |j        j                            }|j        d         j        dk    rd|_	        n;|j        d         j        dk    rd|_	        n|j        d         j        dk    rd	|_	        t          d
|j        d         j        j        r|j        d         j        j        nd          g}|j        d         j        j        D ]F}t          d	|j        |j        j        t!          j        |j        j                            }||gz  }G||_        |S )Ninput_tokensoutput_tokensrK   r@   rQ   usager   r3   r0   r4   r1   r5   r2   rA   r"   rB   rC   rK   rI   rg   )r   rK   rQ   r   r   prompt_tokenscompletion_tokenschoicesfinish_reasonstop_reasonr   messager@   r5   rH   rI   re   loadsrJ   )r9   r   resultr@   rw   anthropic_tool_calls         r   r   z0AnthropicServingMessages.messages_full_converter   si    +|/ &_:'o?  	
 
 
 Q-77!+Fq!/8;;!-Fq!/<??!+F "$Q'/7Y&q)199	  0
 #*1-5@ 	- 	-I"7<',j!3!=>>	# # # +,,GG r   c                
  K   	 d}d }d}d}|2 3 d {V }|                     d          rW|dd                                                              d          }|dk    r@t          d	          }|                    dd
          }	t          |	d          W V  dW V  t          j        |          }
|r{t          dt          |
j	        g |
j
        t          |
j        r|
j        j        ndd                              }d}|                    d          }	t          |	d          W V  #t          |
j                  dk    r|r:t          |d          }|                    d          }	t          |	d          W V  | j                            |pd          }t          dt%          |          t          |
j        r|
j        j        nd|
j        r|
j        j        nd                    }|                    d          }	t          |	d          W V  |
j        d         j        |
j        d         j        }9|
j        d         j        j        |sLt          |dt/          dd                    }|                    d          }	t          |	d          W V  d}|
j        d         j        j        dk    rt          |dt%          d|
j        d         j        j                            }|                    d          }	t          |	d          W V  t          |
j        d         j        j                  dk    r-|
j        d         j        j        d         }|j	        |rAt          |d          }|                    d          }	t          |	d          W V  d}|dz  }t          |dt/          d |j	        |j        r|j        j        nd i !                    }|                    d          }	t          |	d          W V  d}n]t          |dt%          d"|j        r|j        j        nd #                    }|                    d          }	t          |	d          W V  rtt          d$t9          d%d&          '          }|                    d          }	t          |	d$          W V  dW V  6 d S # t:          $ r}t<                              d(           t          d$t9          d%tA          |                    '          }|                    d          }	t          |	d$          W V  dW V  Y d }~d S d }~ww xY w))NTr   Fzdata:   
z[DONE]message_stop)rC   )exclude_unsetexclude_nonezdata: [DONE]

message_startr   r   )rC   r   )r   content_block_stop)indexrC   r3   message_delta)r   )rC   deltar   content_block_startrA   r"   rB   )r   rC   content_blockcontent_block_delta
text_delta)r   rC   r   rP   r2   r   input_json_delta)rC   partial_jsonerrorinternal_errorzInvalid data format received)rC   r   z"Error in message stream converter.)!
startswithstriprstripr   r   r   r   model_validate_jsonr   rK   rQ   r   r   r   rh   r   r8   rb   r   r   r   r   r@   r   r5   rH   rI   rJ   r	   	Exceptionr~   	exceptionr_   )r9   r   
first_itemr   content_block_indexcontent_block_starteditemdata_strstop_messager   origin_chunkchunk
stop_chunkr   rw   error_responsees                    r   r   z1AnthropicServingMessages.message_stream_converter'  s+     k	%J M"#$)!' [- [- [- [- [- [- [-d??7++ Z-#ABBx~~//66t<<H8++';!/( ( (  ,;;*.T  <     34HHHHHH000000'C'W$( ( & %$8%4(A'3,.*6*<*8+7+=6/\5G5U5U-.67	+& +& +&	
)" 
)" 
)"% % %E */J#(#8#8t#8#L#LD"6t_"M"MMMMM$ |344994 W-A*=)=." ." ."
 (2'A'APT'A'U'U&:4AU&V&V V V V V*.*>*B*B - 7+ +K %9%4&4&M&M&M&4'3'92+1C1Q1Q)*'3'93+,2D2V2V)*'" '" '"% % %E $)#8#8t#8#L#LD"6t_"M"MMMMM$'/2@L,8,@,C,QM$ (/28@L#8 
=(<*=)>2G-3"3& 3& 3&)" )" )" (-'<'<4'<'P'P&:4AV&W&W W W W W8< 5+3A6<DJJ ($8&9%:&4)5)5)=a)@)F)N'" '" '"% % %E $)#8#8t#8#L#LD"6t=R"S"SSSSS$ !!5a!8!>!IJJQNN(4(<Q(?(E(PQR(SI(|7#8 !=1E.A-A2& 2& 2&J ,6+E+E6: ,F ,& ,&D +?(,.B+& +& %& %& %& %& =B$9$71$<$7(<*=)>2G-7+4<+4+=.2Y-?-D-D-1.03& 3& 3&)" )" )" (-'<'<4'<'P'P&:4AV&W&W W W W W8< 5 5 )=*=)>*8-?+4+=62Y5G5Q5Q-1	+& +& +&	)" 	)" 	)" (-'<'<4'<'P'P&:4AV&W&W W W W W$] O` &:$,!1$B  & & &N *999MMD.tW======,,,,,,w (iiz  	% 	% 	%ABBB1$*:CFFKKK  N "111EED&tW555555$$$$$$$$$$$	%s#   
S SR?S 
UA5UU)N)__name__
__module____qualname____doc__r   r   r_   r   r   boolr7   r
   r   rz   r   r   r   r   r   r   r   r   __classcell__)r:   s   @r   r!   r!   1   s       55 ,1 ""'"&-2+0"
 "
 "
#"
 $"
 	"
 &,"
 Tz"
 'F"
 %)"
 "
  "
 4Z"
 '+"
 %)"
 "
 "
 "
 "
 "
HI!9I	I I I I\ '+8 8)8 t^8 
T		"%>	>	N	8 8 8 84()( 
#( ( ( (To%!#t),o% 
T		"o% o% o% o% o% o% o% o%r   r!   )+r   re   r   rd   collections.abcr   typingr   fastapir   vllm.engine.protocolr   #vllm.entrypoints.anthropic.protocolr   r   r	   r
   r   r   r   vllm.entrypoints.chat_utilsr   vllm.entrypoints.loggerr   0vllm.entrypoints.openai.chat_completion.protocolr   r   r   r   r   /vllm.entrypoints.openai.chat_completion.servingr   'vllm.entrypoints.openai.engine.protocolr   r   &vllm.entrypoints.openai.models.servingr   	getLoggerr   r~   r_   r   r!   r   r   r   <module>r      s   - ,    * * * * * *             - - - - - -                  H G G G G G 1 1 1 1 1 1              N M M M M M        G F F F F F		8	$	$/s /3 / / / /e% e% e% e% e%0 e% e% e% e% e%r   