
    .`i;                       d dl Z d dlZd dlZd dlZd dlmZ d dl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 d dlmZ d dlZd d	lmZ d d
lmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z<m=Z= d dl>m?Z@ d dlAmBZBmCZC d dlDmEZF d dlGmHZH d dlImJZJ d dlKmLZL d dlMmNZNmOZO d dlPmQZQ d dlRmSZS d dlTmUZUmVZVmWZW d dlXmYZYmZZZ d dl[m\Z\ d dl]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZg d dlhmiZimjZjmkZkmlZlmmZm d dlnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZz d dl{m|Z|m}Z}m~Z~mZ d dlmZ d dlmZ d dlmZ d d lm<Z d d!lmZ d d"lmZ d d#lmZ d d$lmZmZ d d%lmZ d d&lmZ  ee          Ze G d' d(                      Zd)eeC         d*eeee         dz  f         fd+Z G d, d-eZ          ZdS ).    N)deque)AsyncGeneratorAsyncIteratorCallableSequence)AsyncExitStack)copy)	dataclassreplace)
HTTPStatus)Final)Request) )ResponseCodeInterpreterCallCodeDeltaEvent(ResponseCodeInterpreterCallCodeDoneEvent)ResponseCodeInterpreterCallCompletedEvent*ResponseCodeInterpreterCallInProgressEvent,ResponseCodeInterpreterCallInterpretingEvent$ResponseCodeInterpreterToolCallParamResponseContentPartAddedEventResponseContentPartDoneEvent'ResponseFunctionCallArgumentsDeltaEvent&ResponseFunctionCallArgumentsDoneEventResponseFunctionToolCallResponseFunctionWebSearch"ResponseMcpCallArgumentsDeltaEvent!ResponseMcpCallArgumentsDoneEventResponseMcpCallCompletedEventResponseMcpCallInProgressEventResponseOutputItemResponseOutputItemAddedEventResponseOutputItemDoneEventResponseOutputMessageResponseOutputTextResponseReasoningItemResponseReasoningTextDeltaEventResponseReasoningTextDoneEventResponseStatusResponseTextDeltaEventResponseTextDoneEvent#ResponseWebSearchCallCompletedEvent$ResponseWebSearchCallInProgressEvent#ResponseWebSearchCallSearchingEventresponse_function_web_searchresponse_text_delta_event)McpCall)LogprobLogprobTopLogprob)Content)McpTool)Message)TypeAdapter)envs)EngineClient)ChatCompletionMessageParamChatTemplateContentFormatOption)RequestLogger)
ToolServer)DeltaMessageErrorResponseRequestResponseMetadata)GenerationErrorOpenAIServing)OpenAIServingModels)
)construct_harmony_previous_input_messagesget_developer_message%get_stop_tokens_for_assistant_actionsget_system_messageget_user_messagehas_custom_toolsparse_output_messageparse_remaining_stateparse_response_inputrender_for_completion)ConversationContextHarmonyContextParsableContextSimpleContextStreamingHarmonyContext)InputTokensDetailsOutputTokensDetailsResponseCompletedEventResponseCreatedEventResponseInProgressEventResponseInputOutputMessageResponseReasoningPartAddedEventResponseReasoningPartDoneEventResponsesRequestResponsesResponseResponseUsageStreamingResponsesResponse)construct_input_messagesconstruct_tool_dictsextract_tool_typesshould_continue_final_message)VLLMValidationError)TokensPrompt)init_logger)r0   )SampleLogprobs)CompletionOutput)RendererLike)SamplingParamsStructuredOutputsParams)TokenizerLike)random_uuidc                   b    e Zd ZU dZdZeed<   dZeed<   dZe	ed<   dZ
eed	<   dZeed
<   ddZdS )HarmonyStreamingStatez5Mutable state for harmony streaming event processing.current_content_indexr   current_output_index current_item_idFsent_output_item_addedis_first_function_call_deltareturnNc                 B    | xj         dz  c_         d| _        d| _        dS )z-Reset state when expecting a new output item.   FN)rp   rs   rt   selfs    }/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/entrypoints/openai/responses/serving.pyreset_for_new_itemz(HarmonyStreamingState.reset_for_new_item   s,    !!Q&!!&+#,1)))    )ru   N)__name__
__module____qualname____doc__ro   int__annotations__rp   rr   strrs   boolrt   r{    r|   rz   rm   rm      s         ??!#3### !#!!!OS#(D(((). $...2 2 2 2 2 2r|   rm   toolsru   c                     i }| D ]v}t          |t                    sd}|j        Ct          |j        t                    r|j        }n!t	          |j        d          r|j        j        }|d|v rd}|||j        <   w|S )a  
    Extract allowed_tools mapping from MCP tool requests.

    Returns a dictionary mapping server_label to allowed_tools list.
    Handles both list format and McpAllowedToolsMcpToolFilter object format.

    Special handling:
    - If allowed_tools is None, returns None (allows all tools)
    - If allowed_tools contains "*", returns None (allows all tools)
    - Otherwise, returns the list of specific tool names

    This function can be reused for both harmony and non-harmony MCP calls.
    N
tool_names*)
isinstancer3   allowed_toolslisthasattrr   server_label)r   allowed_tools_maptoolallowed_tools_vals       rz   (_extract_allowed_tools_from_mcp_requestsr      s      68 A A$$$ 	 !)$,d33 B$($6!!+\:: B$($6$A! (S4E-E-E $/@$+,,r|   c                        e Zd ZU dddddddddd	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z  dededededdf fdZ
dededz  fdZdededz  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dz  defdZdededz  fdZdeded efd!Z	 d_ded"ed#ee         ded$ed%ed&ed'edz  deez  fd(Z d)edz  defd*Z!d+d,d-d.Z"e#e$eef                  e%d/<   d0e$ee&f         d1ed%ede'e(         fd2Z)	 d_d3e*e         d0e+dz  d%ed1edz  de'e,         f
d4Z-	 d_d3e*e         d0e+dz  d%ed1edz  de'e.j,                 f
d5Z/ded6e0d%ede'e1         fd7Z2de3de'e1         fd8Z4dedz  fd9Z5ded:ed;e6e         de7fd<Z8dededz  de'e7         fd=Z9defd>Z:defd?Z;	 d_d@edAedz  deedf         fdBZ<d@edAedz  dCedz  deez  eedf         z  fdDZ=d@edeez  fdEZ>d@edefdFZ?defdGZ@ded"ed#eedz           ded$ed%ed&ed'edHeAegef         deedf         fdIZBdJeCde'e         fdKZDdJeCde'e         fdLZEdJeCde'e         fdMZFdJeCde'e         fdNZGdJeCde'e         fdOZHdPeIdJeCde'e         fdQZJdPeIdJeCde'e         fdRZKdPeIdJeCd)ede'e         fdSZLdPeIdJeCde'e         fdTZMdPeIdJeCde'e         fdUZNdPeIdJeCde'e         fdVZOdJeCde'e         fdWZPdJeCde'e         fdXZQdJeCde'e         fdYZRdJeCde'e         fdZZSdPeIdJeCde'e         fd[ZTdPeIdJeCde'e         fd\ZUded"ed#eedz           ded$ed%ed&ed'edHeAegef         deedf         fd]ZV	 d_ded"ed#eedz           ded$ed%ed&ed'edz  deedf         fd^ZW xZXS )`OpenAIServingResponsesFrq   N)	return_tokens_as_token_idsreasoning_parserenable_auto_toolstool_parsertool_serverenable_prompt_tokens_detailsenable_force_include_usageenable_log_outputslog_error_stackengine_clientmodelsrequest_loggerchat_templatechat_template_content_formatr   r   r   r   r   r   r   r   r   ru   c                    t                                          |||||           || _        || _        || _        |                     |          | _        || _        || _        | j	        
                                | _        t          j        | _        | j        rt                              d           | j	        j        j        dk    | _        | j        rYt                              d           d| j        vr
g | j        d<   | j        d                             t-                                 || _        |                     |	|          | _        i | _        t7          j                    | _        i | _        i | _        i | _         |
| _!        d S )N)r   r   r   r   r   )reasoning_parser_namezz`VLLM_ENABLE_RESPONSES_API_STORE` is enabled. This may cause a memory leak since we never remove responses from the store.gpt_osszLFor gpt-oss, we ignore --enable-auto-tool-choice and always enable tool use.stop_token_ids)tool_parser_namer   )"super__init__r   r   r   _get_reasoning_parserr   r   r   model_configget_diff_sampling_paramdefault_sampling_paramsr7   VLLM_ENABLE_RESPONSES_API_STOREenable_storeloggerwarning_once	hf_config
model_typeuse_harmonywarningextendrE   r   _get_tool_parserr   response_storeasyncioLockresponse_store_lock	msg_storeevent_storebackground_tasksr   )ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	__class__s                  rz   r   zOpenAIServingResponses.__init__   s   $ 	')'A+ 	 	
 	
 	
 +3O)"4 $ : :"2 !; !
 !
 -I)*D''+'8'P'P'R'R$ !@ 	    ,6AYN 	NN.    t'CCCAC,-=>()9:AA577   "300(<M 1 
 
 =?#*<>> 
 GI  	 :<&r|   engine_promptc                     | j         t          |d                   k    rDdt          |d                    d| j          d}|                     d|t          j        d          S dS )	z3Add validations to the input to the generator here.prompt_token_idszThe engine prompt length z exceeds the max_model_len z. Please reduce prompt.invalid_request_errorinputerr_typemessagestatus_codeparamN)max_model_lenlencreate_error_responser   BAD_REQUEST)ry   r   error_messages      rz   _validate_generator_inputz0OpenAIServingResponses._validate_generator_input  s     ]3E%F!G!GGG(&89::( (-1-?( ( (  --0%&2	 .    tr|   requestc                 T   | j         r7|                                r#|                     ddt          j        d          S |j        r1| j        s*|j        r#|                     ddt          j        d          S |j        r*|j	        r#|                     ddt          j        d          S d S )	Nr   z.logprobs are not supported with gpt-oss modelslogprobsr   zThis vLLM engine does not support `store=True` and therefore does not support the background mode. To enable these features, set the environment variable `VLLM_ENABLE_RESPONSES_API_STORE=1` when launching the vLLM server.
backgroundzLOnly one of `previous_input_messages` and `previous_response_id` can be set.previous_response_id)
r   is_include_output_logprobsr   r   r   storer   r   previous_input_messagesr   )ry   r   s     rz    _validate_create_responses_inputz7OpenAIServingResponses._validate_create_responses_input+  s      	 B B D D 	--0H&2 	 .    = 	!2 	w7I 	--0' '2" .    * 	w/K 	--05&2, .    tr|   raw_requestc                 `   K                         |           d {V }|t                              d|           |S                      |          }||S  j        j        r j        j        |j        r j        sd|_        |j	        }|c j
        4 d {V   j                            |          }d d d           d {V  n# 1 d {V swxY w Y   |                     |          S nd }	                      |          } j                            |          } j        j        }	|	                                }
 j        r                     ||          \  }}n                      |||	           d {V \  }}nd# t,          t.          t0          t2          j        t6          f$ r9}t                              d                                |          cY d }~S d }~ww xY wt=          |j                  }|r||j         _!        g }g } j"         j"        #                    d          r|$                    d            j"        #                    d          r|$                    d            j"        #                    d          r|$                    d            j"        |}ntK          |          dk    sJ g }	 |D ]} &                    |          }||c S  j'        tK          |d	                   z
  }|(                    | j)                  }|d n *                    |j+                   d {V } j        r)|j,        rt[          ||          }nWt]          ||          }nFt^          j0        r,tc          ||	 j2        | j3        | j4         j5        
          }ntm                      } j2        y 2                    |
          }to          |j8        x}tr                    rH|:                                r4tw          ||<                    |j=         j"                            |_8         >                    |j        |||||j?        |          }|$                    |           n,# t,          $ r}                     |          cY d }~S d }~ww xY wtK          |          dk    sJ |\  }|j        r| j@        |j        <   |jA        r@t          t          jC                              }t          jE        ||||g dd           } j
        4 d {V  | j        |jF        <   d d d           d {V  n# 1 d {V swxY w Y   |j,        r9t          jH         I                    ||||||
||          d|j                   }n8t          jH         J                    ||||||
||          d|jF                   }|jF        | jK        <   |L                     fd           |j,        r M                    |j                  S |S |j,        r N                    ||||||
|          S 	  O                    ||||||
|           d {V S # t          $ r} Q                    |          cY d }~S d }~wt          $ r}                     |          cY d }~S d }~ww xY w)NzError with model %sFz$Error in preprocessing prompt inputs)
request_idbrowserpython	containerr   r   )response_messagesrendererreasoning_parser_clsr   tool_parser_clsavailable_toolsr   r   )structural_tag)r   r   sampling_paramscontextlora_requestprioritytrace_headersrw   queued
model_namecreated_timeoutputstatususagecreate_)namec                 :    j                             d           S N)r   pop)_response_idry   s    rz   <lambda>z9OpenAIServingResponses.create_responses.<locals>.<lambda>"  s    $/33KFF r|   )S_check_modelr   errorr   r   errored
dead_errorr   r   r   r   r   get_make_not_found_error_maybe_get_adaptersr   r   r   get_tokenizerr   _make_request_with_harmony_make_request
ValueError	TypeErrorRuntimeErrorjinja2TemplateErrorNotImplementedError	exceptionr   r?   r   staterequest_metadatar   has_toolappendr   r   r   to_sampling_paramsr   _get_trace_headersheadersstreamrQ   rN   r7   $VLLM_USE_EXPERIMENTAL_PARSER_CONTEXTrO   r   r   r   r   rP   r   structured_outputsri   'all_non_structural_tag_constraints_noner   prepare_structured_tagr   _generate_with_builtin_toolsr   r   r   r   timer[   from_requestidr   create_task_run_background_request_stream_run_background_requestr   add_done_callback%responses_background_stream_generatorresponses_stream_generatorresponses_full_generatorr@   %_convert_generation_error_to_response	Exception) ry   r   r   error_check_retmaybe_validation_errorprev_response_idprev_responser   r   r   	tokenizermessagesengine_promptser  
generatorsbuiltin_tool_listr   r   maybe_errordefault_max_tokensr   r   r   r   
struct_out	generatorresult_generatorr   responsetaskr   s    `                              @rz   create_responsesz'OpenAIServingResponses.create_responsesL  s	      !% 1 1' : :::::::&LL.@@@""!%!F!Fw!O!O!-))
 % 	0$//= 	"!2 	" "GM #7'/ J J J J J J J J $ 3 7 78H I IJ J J J J J J J J J J J J J J J J J J J J J J J J J J$112BCCC % !M	133G<<L//==J)2H ..00I +/+J+J], ,(.. 261C1C]H2 2 , , , , , ,(.
  
 	1 	1 	1 CDDD--a00000000	1 3g>PQQQ 	B1AK. GI
')'((33 4!((333((22 3!((222((55 6!((555'/OO())Q.... OE	1!/ B- B-"<<]KK*&&&&%)%7#!"45; ; &" #*"<"<&(D# # #* D#66{7JKKKKKKKK  # 2~ L"9(O"T"T"0?"K"K@ 2 #2.6%-151F$+,0,<,;*.*<9=9Z	# 	# 	# #0//(4'+'<'<Y'G'G$"*9*LLJ3 
 'NNPP >E&+;+R+R * 94;K, ,> > >: !==&1"/$3#!-$-"/ >  	 !!),,,,EB-F  	1 	1 	1--a00000000	1 :!####(	 = 	:19DN7-. 5	ty{{++L(5%)  H / < < < < < < < <3;#HK0< < < < < < < < < < < < < < < < < < < < < < < < < < < ~ *77'("!($	 	 87#577   *00'("!($	 	 18;00   #+K15D!+.""FFFFF   ~ VAA'BTUUUO> 		22    	166            	A 	A 	A==a@@@@@@@@ 	1 	1 	1--a00000000	1s   C
CC4BF (G&-.G!G&!G&Q6 &FQ6 6
R RRR!U
UU< Y 
Z-'Z;Z-Z-Z("Z-(Z-r&  r   c                   K   t          |j        |j                  }t          |j        |j        |r| j                            |j                  nd |r|j	        nd           }t          |j                  }t          |j        d n|j        j                  }|                     ||||| j        | j        | j        | ||
  
         d {V \  }}	||	fS )N)request_instructionsrequest_inputprev_msgprev_response_output)reasoning_effort)
tool_dictsr   r   r   add_generation_promptcontinue_final_messagechat_template_kwargs)r_   r   tool_choicer^   instructionsr   r   r   r  r   ra   dict	reasoningeffort_preprocess_chatr   r   r   )
ry   r   r&  r   r;  r(  continue_finalr>  r   r)  s
             rz   r  z$OpenAIServingResponses._make_requestC  s#      *'-9LMM
+!(!5!-=JTT^''(8999PT9F!P!5!5D	
 
 
 7w}EE# ( "T") 
  
  
 #'"7"7!(,)-)J '5"4#1!5 #8 #
 #
 
 
 
 
 
 
> ''r|   c                     |j         dk    rt          d          |                     ||          }t          |          }t	          |          }|j        
|j        |d<   ||gfS )NautozAOnly 'auto' tool_choice is supported in response API with Harmony)r   
cache_salt)r?  r  &_construct_input_messages_with_harmonyrL   rc   rH  )ry   r   r&  r(  r   r   s         rz   r  z1OpenAIServingResponses._make_request_with_harmonyl  s    
 &((%S   >>wVV0::$6FGGG )*1*<M,'-((r|   r   
exit_stackc                    K   t          |j                  dk    rd S d |j        D             }|                    | j        ||j        |           d {V  d S )Nr   c                 4    i | ]}|j         d k    |j        |S )mcp)typer   ).0r   s     rz   
<dictcomp>zDOpenAIServingResponses._initialize_tool_sessions.<locals>.<dictcomp>  s0     
 
 
(,eASASDtASASASr|   )r   r   init_tool_sessionsr   r   )ry   r   r   rJ  	mcp_toolss        rz   _initialize_tool_sessionsz0OpenAIServingResponses._initialize_tool_sessions  s       w}""F
 
07
 
 
	 ((j'*<i
 
 	
 	
 	
 	
 	
 	
 	
 	
 	
r|   r   r1  r   r'  r  r   c	                   K   | t          t          j                              }t                      4 d {V }		 |                     |||	           d {V  |2 3 d {V }
6 nu# t          j        $ r* |                     d          cY cd d d           d {V  S t          $ r1}|                     |          cY d }~cd d d           d {V  S d }~ww xY w	 d d d           d {V  n# 1 d {V swxY w Y   d}d }d }| j        rt          |t                    sJ |                     |          }|j        r(|j        d |j                 }|j        |j        d          }|j        }t!          |          dk    r@|j        dk    rd}n:|j        dk    rd}n+|                     |j        |j                   n	d}nt          |t(                    rC|j                                        }|j        r|j        }|j        }d}|j        j        dk    rd}nt          |t2                    sJ |j        }|J t!          |j                  dk    sJ |j        d         }|                     |j        |j                   |j        dk    rd}|                     |||          }|j        r|j        }|j        }|j        J d}t          |t2          t          t(          f          sJ |j        }|j        }|j         }|j!        }tE          ||||z   tG          |d	 |j$        D             d
 |j$        D                       tK          ||d |j$        D             d |j$        D                                 }tM          j'        |||||||||	  	        }|j(        rm| j)        4 d {V  | j*        +                    |j,                  }||j-        dk    r|| j*        |j,        <   	 d d d           d {V  n# 1 d {V swxY w Y   |S )NzClient disconnected	completedr   length
incompleteabort	cancelledrw   c                     g | ]	}|j         
S r   )input_tokensrO  turns     rz   
<listcomp>zCOpenAIServingResponses.responses_full_generator.<locals>.<listcomp>  s(     ' ' '*.D%' ' 'r|   c                     g | ]	}|j         
S r   )cached_input_tokensr\  s     rz   r^  zCOpenAIServingResponses.responses_full_generator.<locals>.<listcomp>  s(     ( ( (15D,( ( (r|   )cached_tokensinput_tokens_per_turncached_tokens_per_turnc                     g | ]	}|j         
S r   )output_tokensr\  s     rz   r^  zCOpenAIServingResponses.responses_full_generator.<locals>.<listcomp>  s(     ( ( (+/D&( ( (r|   c                     g | ]	}|j         
S r   )tool_output_tokensr\  s     rz   r^  zCOpenAIServingResponses.responses_full_generator.<locals>.<listcomp>  s(     - - -04D+- - -r|   )reasoning_tokensrg  output_tokens_per_turntool_output_tokens_per_turn)r[  re  total_tokensinput_tokens_detailsoutput_tokens_details)input_messagesoutput_messagesr   r   r   r   r   ).r   r  r   rS  r   CancelledErrorr   r  r   r   rN   (_make_response_output_items_with_harmonyenable_response_messagesr(  num_init_messagesnum_tool_output_tokensr   finish_reason_raise_if_errorr   rO   parser0make_response_output_items_from_parsable_contextrn  ro  rP   final_outputoutputs_make_response_output_itemsr   num_prompt_tokensnum_output_tokensnum_cached_tokensnum_reasoning_tokensr\   rR   all_turn_metricsrS   r[   r  r   r   r   r   r  r   )ry   r   r   r1  r   r   r'  r  r   rJ  r   r*  r   rn  ro  r   rt  	final_resry  r|  num_generated_tokensr~  r  r   r2  stored_responses                             rz   r   z/OpenAIServingResponses.responses_full_generator  s      ty{{++L!## 	5 	5 	5 	5 	5 	5 	5z544WgzRRRRRRRRR/       !  0/) I I I112GHHHH	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5  5 5 511!4444444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	55	  0	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 "-<@=A 5	'g~66666BB7KKF/ P!(!12MG4M2M!N")"273L3N3N"O%,%C"6{{Q(H44)FF*g55(FF(()>@RSSSS%11 %	'^TTVVF/ :!(!7")"9 &'" ~+x77%g}55555,I(((y())Q....$,Q/L   !;W=OPPP )X55%55g|YWWF/ :!(!7")"9 -999%&"'M>?#STTTTT#5&8#5&;*.*-AA!3/' '292J' ' '( (9@9Q( ( (" " " #6!5#9( (3:3K( ( (- -8?8P- - -	# 	# 	#
 
 
0 %1)+!%

 

 

 = 	@/ @ @ @ @ @ @ @ @"&"5"9"9(+"F"F"*o.D.S.S7?D'4?	@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
 sj   C,A$A" A$#C,$$CC,	C%C9C:C,CC,,
C69C6-<O<<
P	P	recipientc                 6    |dS |                     d           S )z
        Determine if a tool call is an MCP tool based on recipient prefix.

        - Tools starting with "functions." are function calls
        - Everything else is an MCP tool
        NF
functions.)
startswith)ry   r  s     rz   _is_mcp_tool_by_namespacez0OpenAIServingResponses._is_mcp_tool_by_namespace  s(     5 ''5555r|   code_interpreterr   web_search_preview)r   r   r   _TOOL_NAME_TO_MCP_SERVER_LABELr   top_logprobsc                 j   g }t          |                                          D ]\  }\  }}||k    r n|j        |j        n|                    |g          }|                    t          |t          |j        d          t          |	                    dd                                         |S )z8Returns the top-k logprobs from the logprobs dictionary.N    utf-8r   errors)tokenlogprobbytes)
	enumerateitemsdecoded_tokendecoder  r1   maxr  r   encode)	ry   r   r  r'  outitoken_id_logprobtexts	            rz   _topk_logprobsz%OpenAIServingResponses._topk_logprobs,  s     '01A1A'B'B 	 	#A#(L   )5 &&%%xj11 
 JJ! 0'::t{{79{EEFF      
r|   	token_idsc                    |
J d            t          |          t          |          k    s
J d            g }t          |          D ]\  }}||         }||         }	|	j        |	j        n|                    |g          }
|                    t          |
t          |	j        d          t          |
	                    dd                    |r| 
                    |||          ng                      |S )	Nzlogprobs must be providedz:token_ids and logprobs.token_ids must have the same lengthr  r  r   r  )r  r'  )r  r  r  r  )r   r  r  r  r  r0   r  r  r   r  r  )ry   r  r   r'  r  r  r  r  r  token_logprobr  s              rz   _create_response_logprobsz0OpenAIServingResponses._create_response_logprobsE  s:    ##%@###9~~X...H /.. $Y// 	 	KAxqkG#H-M !.: ++%%xj11 
 JJ 5w??t{{79{EEFF
 ( ++#,) ,           
r|   c                 L    |                      ||||          }d |D             S )Nr  r   r'  r  c                 n    g | ]2}t          j        |j        |j        d  |j        D                       3S )c                 N    g | ]"}t          j        |j        |j                   #S ))r  r  )r.   r1   r  r  )rO  tls     rz   r^  zVOpenAIServingResponses._create_stream_response_logprobs.<locals>.<listcomp>.<listcomp>z  sE         .? h
    r|   )r  r  r  )r.   r0   r  r  r  )rO  lgs     rz   r^  zKOpenAIServingResponses._create_stream_response_logprobs.<locals>.<listcomp>v  sf     
 
 
  &-h
  !o	  	 	 	
 
 
r|   )r  )ry   r  r   r'  r  lgss         rz    _create_stream_response_logprobsz7OpenAIServingResponses._create_stream_response_logprobsi  sM     ,,%	 - 
 

 
 
 
 
 	
r|   ry  c                    | j         re	 |                      |          }n.# t          $ r!}t                              d           |d }~ww xY w|                    |j        |          \  }}n	d }|j        }| j        rG| j        r@d}|r|}n|rd| d}|r/| j                            |j	        ||j
        |j        dd           d }	d }
|r3t          dt                       g d	t          |d
          gd           }	|                     |||| j        | j                  \  }}|rst%          |g d|                                r(|                     |j
        |j        ||j                  nd           }t/          dt                       |gddd          }
g }|	r|                    |	           |
r|                    |
           |r!d |D             }|                    |           |S )Nz#Error in reasoning parser creation.)r   rq   z[reasoning: ]F)r   rz  output_token_idsru  is_streamingdeltars_rB  reasoning_textr  rN  )r  summaryrN  contentr   )r   r'  r  r   r   output_textr  )r  annotationsrN  r   msg_	assistantrU  r   )r  r  roler   rN  c           
          g | ]?}t          d t                       dt                       dd|j        |j                  @S )fc_call_function_callrU  )r  call_idrN  r   r   	arguments)r   rk   r   r  )rO  	tool_calls     rz   r^  zFOpenAIServingResponses._make_response_output_items.<locals>.<listcomp>  sh     
 
 
  ),[]],,3KMM33(&"'1  
 
 
r|   )r   r  r   r	  extract_reasoningr  r   r   log_outputsr   r  ru  r$   rk   ResponseReasoningTextContent_parse_tool_calls_from_contentr   r   r#   r   r  r   r  r"   r  r   )ry   r   ry  r'  r   r*  rB  r  r  reasoning_itemmessage_item
tool_callsrz  tool_call_itemss                 rz   r{  z2OpenAIServingResponses._make_response_output_items  s      	(#'#8#8#C#C       !FGGG "2!C!C!7 "D " "Iww I"'G " 	t': 	K :% :9Y999 #//&1'%1%;"."<!& 0     		2((( 0iFVWWW   N #AA"4 , B 
 

G  	," 99;;D22"."8!-!6"+%,%9	 3      K 1)+--))$ "  L  	+NN>*** 	)NN<((( 	,
 
 ",
 
 
O NN?+++s    
A
AA
c                     g }|j         }|j        |d          D ]$}|                    t          |                     %t	          |j                  }|r|                    |           |S r   )rs  r(  r   rI   rJ   rw  )ry   r   output_itemsrs  msg
last_itemss         rz   rq  z?OpenAIServingResponses._make_response_output_items_with_harmony  s     24#5#$5$6$67 	; 	;C 4S 9 9::::*7>::
 	,
+++r|   c                     d }t          |j        t                    sO|j        D ]G}t          |t                    r0|                    d          dk    r|                    d          } nH|S )Nr  systemr  )r   r   r   rA  r   )ry   r   
system_msgresponse_msgs       rz   $_extract_system_message_from_requestz;OpenAIServingResponses._extract_system_message_from_request  sv    
'--- 	 '  |T22$((00H<<!-!1!1)!<!<JEr|   with_custom_tools
tool_typesc           	         |                      |          }|j        r|j        j        nd }t          |j                  }d|v rO| j        H| j                            d          r.| j                            d|                    d                    nd }d|v rO| j        H| j                            d          r.| j                            d|                    d                    nd }d|v rO| j        H| j                            d          r.| j                            d|                    d                    nd }	t          |||||	|j
        |          }
|
S )Nr  r   r  r   r   )model_identityr:  browser_descriptionpython_descriptioncontainer_descriptionr@  r  )r  rB  rC  r   r   r   r  get_tool_descriptionr   rF   r@  )ry   r   r  r  r  r:  r   r  r  r  sys_msgs              rz   '_construct_harmony_system_input_messagez>OpenAIServingResponses._construct_harmony_system_input_message  s    BB7KK7>7HR7,33d EW]SS $z11 , )))44 -	 11,001EFF    	 "Z// , ))(33 -	 11+//0BCC    	 j(( , ))+66 -	 11.22;??    	 %)- 31"7 -/
 
 
 r|   c                    g }|t          |j                  }t          |          }|                     |||          }|                    |           |r0t          |j        |j                  }|                    |           |t          |          z  }n| j        |j	                 }t          |          dk    r|d         }	t          |	t                    sJ |	j        dk    rd}
t          t          |          dz
  dd          D ]0}||         }t          |t                    sJ |j        dk    r|}
 n1||
dz   d          }||
dz   d = |D ].}t          |t                    sJ |                    |           /|                    |           t          |j        t"                    r(|                    t%          |j                             n|t'          |j                  }ng }|j        D ]a}t+          ||          }|j        j        dk    r|                    |           t          |t0                    r|                    |           b|S )N)r@  r   r   rn   final   rw   r  )r`   r   rH   r  r  rD   r@  rC   r   r  r   r   OpenAIHarmonyMessagechannelranger   r   r   rG   r	   r   rK   authorr  r   )ry   r   r&  r(  r  r  r  dev_msg	prev_msgslast_msgprev_final_msg_idxr  
prev_msg_irecent_turn_msgsr  prev_outputsr  new_msgs                     rz   rI  z=OpenAIServingResponses._construct_input_messages_with_harmony6  s   
 02 +GM::J 0 < <BB*J G OOG$$$  )/!(!5W]   (((A'JJJHH }'78I 9~~!!$R=!(,@AAAAA#w..)+&"3y>>A#5r2>> " "%.q\
)*6JKKKKK%-8812.!E 9 (11Ca1G1I1I'J$!"4q"8":":;/ . .)#/CDDDDD!((----OOI&&& gmS)) 	6OO,W];;<<<<(#M$899! ' 
6 
6.|\JJ>&(22OOG,,, l,DEE 6 ''555r|   c                 H  K   t                      }t          j                    }||f| j        |j        <   d }	  | j        |g|R i |}|2 3 d {V }|                    |           |                                 16 ns# t          $ r}	| 	                    |	          }Y d }	~	nOd }	~	wt          $ r?}	t                              d|j                   |                     |	          }Y d }	~	nd }	~	ww xY w|                                 n# |                                 w xY w|t          |t                    rl|j        }
| j        4 d {V  | j                            |
          }|J |j        dvrd|_        	 d d d           d {V  d S # 1 d {V swxY w Y   d S d S d S Nz Background request failed for %s)rU  rY  failed)r   r   Eventr   r   r  r  setr@   r!  r"  r   r	  r   r   r>   r   r   r   r   )ry   r   argskwargsevent_dequenew_event_signalr2  r0  eventr*  r   r  s               rz   r  z5OpenAIServingResponses._run_background_request_stream{  s      :?"=??0;=M/N+,	#77Q$QQQ&QQI( ' ' ' ' ' ' 'e""5))) $$&&&&  )y  	E 	E 	EAA!DDHHHHHH 	5 	5 	5?ASTTT11!44HHHHHH	5   """"  """"Jx$G$G!,K/ 6 6 6 6 6 6 6 6"&"5"9"9+"F"F&222")1KKK-5O*5	6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6  s_   A> A<,A> =D >
C.B"D "C./5C)$D )C..D D
/F
FFc                    K   	  | j         |g|R i | d {V }ns# t          $ r}|                     |          }Y d }~nOd }~wt          $ r?}t                              d|j                   |                     |          }Y d }~nd }~ww xY wt          |t                    rj|j        }| j
        4 d {V  | j                            |          }|J |j        dvrd|_        	 d d d           d {V  d S # 1 d {V swxY w Y   d S d S r  )r   r@   r!  r"  r   r	  r   r   r   r>   r   r   r   r   )ry   r   r  r  r2  r*  r   r  s           rz   r  z.OpenAIServingResponses._run_background_request  s     	5:T:7TTTTTVTTTTTTTTHH 	E 	E 	EAA!DDHHHHHH 	5 	5 	5?ASTTT11!44HHHHHH	5 h.. 	6!,K/ 6 6 6 6 6 6 6 6"&"5"9"9+"F"F&222")1KKK-5O*5	6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6s2    
BA  B5BB8/C;;
DDr   starting_afterc                v  K   || j         vrt          d| d|          | j         |         \  }}|dn|dz   }|}	 |                                 |t          |          k     r<||         }|W V  t	          |dd          d	k    rd S |dz  }|t          |          k     <|                                 d {V  ~)
NzUnknown response_id: r   )	parametervaluer   rw   TrN  unknownresponse.completed)r   rb   clearr   getattrwait)ry   r   r  r  r  start_indexcurrent_indexr  s           rz   r  z<OpenAIServingResponses.responses_background_stream_generator  s     
 d...%555'!    )-(8(E%%)1aa~7I#	*""$$$  #k"2"222#M25&)448LLLF"  #k"2"222 #'')))))))))	*r|   r  c                    K   | j         4 d {V  | j                            |          }d d d           d {V  n# 1 d {V swxY w Y   ||                     |          S |r|                     ||          S |S r   )r   r   r   r   r  )ry   r   r  r  r2  s        rz   retrieve_responsesz)OpenAIServingResponses.retrieve_responses  s      + 	< 	< 	< 	< 	< 	< 	< 	<*..{;;H	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< --k::: 	==   s   =
A
Ac                 >  K   | j         4 d {V  | j                            |          }|'|                     |          cd d d           d {V  S |j        }|dvr*|                     ddd          cd d d           d {V  S d|_        d d d           d {V  n# 1 d {V swxY w Y   | j                            |          x}rN|                                 	 | d {V  n0# t          j	        $ r t                              d|           Y nw xY w|S )N)r   in_progressr   z%Cannot cancel a synchronous response.r   )r   r   r   rY  z$Background task for %s was cancelled)r   r   r   r   r   r   r   cancelr   rp  r   r	  )ry   r   r2  prev_statusr3  s        rz   cancel_responsesz'OpenAIServingResponses.cancel_responses  sC      + 	* 	* 	* 	* 	* 	* 	* 	**..{;;H11+>>	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*
 #/K";;;114C' 2  	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* *HO	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*" (,,[9994 	VKKMMMV







) V V V  !GUUUUUVs/   1B""B"	B""
B,/B,$C- -*DDc                 P    |                      dd| dt          j        d          S )Nr   zResponse with id 'z' not found.r   r   )r   r   	NOT_FOUND)ry   r   s     rz   r   z,OpenAIServingResponses._make_not_found_error  s9    )),BBBB",	 * 
 
 	
r|   c                 H    |                      ddt          j        d          S )Nr   z`store=True` (default) is not supported. Please set `store=False` in Responses API or set `VLLM_ENABLE_RESPONSES_API_STORE=1` in the env var when starting the vLLM server.r   r   )r   r   r   rx   s    rz   _make_store_not_supported_errorz6OpenAIServingResponses._make_store_not_supported_error  s2    )),,
 #. * 

 

 
	
r|   %_increment_sequence_number_and_returnc
                 
  K   d}
d}d}d }| j         r|                      |          }d}g }d}g }|2 3 d {V }t          |t                    sJ |j        &|j        j        r9|j        j        d         }|                     |j        |j                   |r6|                    |||j	        z   |j	        |||j
        z   |j
                  }nt          |j	                  }||j	        z  }||j
        z  }|s|st          t          j                              }|j        r1 |	t!          dd|t#          d|g d	
                              W V  n1 |	t!          dd|t%          |ddg d	                              W V   |	t'          dd|||
t)          ddg g                               W V  |
dz  }
d}|r*|d         j        |j        d                    d |D                       } |	t/          d|d||
|                    W V  d}
t#          dt1          |d          gd|g           } |	t3          dd||                    W V   |	t!          dd|t%          |ddg d	                              W V  |dz  }t          t          j                              } |	t'          dd|||
t)          ddg g                               W V  |
dz  }
g }|j        ' |	t5          dd|
|||j                            W V  nj|j        c |	t7          dd|
|||j        |                                r(|                     |j
        |j        ||j                   ng !                    W V  |
dz  }
|                     |           n6 |rY|d         j        d                    d" |D                       } |	t/          d|d||
|                    W V  |
dz  }
t#          dt1          |d          gd|g           } |	t3          dd||                    W V  d S |d         j        d                    d# |D                       } |	tC          d$d||
|g |%                    W V  |
dz  }
t)          |dg &          } |	tE          d'd|||
|(                    W V  |
dz  }
t%          dd|gd|g )          } |	t3          dd||                    W V  d S d S d S )*Nr   rq   F)previous_textcurrent_text
delta_textprevious_token_idscurrent_token_idsdelta_token_idsr  response.output_item.addedrn   rB  r  rN  r  r  r   rN  sequence_numberoutput_indexitemr   r  r  rN  r  r  r   response.content_part.addedr  rN  r  r  r   rN  r  r  item_idcontent_indexpartrw   Tc              3   2   K   | ]}|j         	|j         V  d S r   rB  rO  pms     rz   	<genexpr>zJOpenAIServingResponses._process_simple_streaming_events.<locals>.<genexpr>  s8       - -<3 3333- -r|   response.reasoning_text.donerN  r!  r  r  r"  r  r  r  rU  rN  r  r   r  r  response.output_item.doneresponse.reasoning_text.delta)rN  r  r"  r  r!  r  response.output_text.deltar  rN  r  r"  r  r!  r  r   c              3   2   K   | ]}|j         	|j         V  d S r   r%  r&  s     rz   r(  zJOpenAIServingResponses._process_simple_streaming_events.<locals>.<genexpr>  s8       ) )|/ L////) )r|   c              3   2   K   | ]}|j         	|j         V  d S r   r  r&  s     rz   r(  zJOpenAIServingResponses._process_simple_streaming_events.<locals>.<genexpr>  s8       ( (z- J----( (r|   response.output_text.donerN  r  r  r"  r  r   r!  )r  rN  r  response.content_part.donerN  r  r!  r  r"  r#  )rN  r  r  r   r  r  )#r   r   rP   last_outputrz  rv  ru  r   extract_reasoning_streamingr  r  r=   r   uuiduuid4rB  r    r$   r"   r   r#   r  joinr&   r  r!   r%   r(   r   r  r   r  r  r)   r   )ry   r   r   r1  r   r   r'  r  r   r  ro   rp   rr   r   r  r  first_delta_sentprevious_delta_messagesctxr   delta_messagereason_contentr  final_contentr#  r  s                             rz    _process_simple_streaming_eventsz7OpenAIServingResponses._process_simple_streaming_events  s      !"   	@#44Y??(* 68) }	> }	> }	> }	> }	> }	> }	>#c=11111&& y>03$$V%97;MNNN# $4$P$P&3%2V[%@#);+=*<v?O*O(.(8 %Q % %MM %1 &% % %M ,"f&66"$ ' /,&)$*,,&7&7O$. CC8%A02-A%:)4'6,.+8	&" &" &"	
 
 
       DC8%A02-A%:'6)2)4,.+8&" &" &"	        @?5!>,.)=$3*?!3%2%',.)+	" " "        *Q.)'+$ ,L1/3=I%-9 &(WW - -"9- - - & &N
 @?6!?$3,.)=*?!/  	 	 	 	 	 	 -.)%:(8%3%5  !  +* "& & &N @?3!<,.)=!/	        @?4!=,.)=!6#2%.%0(*'4" " "	        )A-(&)$*,,&7&7O??5!>,.)=$3*?!3%2%',.)+	" " "        *Q.).0+ *6??7!@,.*?)=$3"/"9  	 	 	 	 	 	 	 #*6??.!=,.*?)=$3"/"7 $+#E#E#G#G!( E E.4.>-3_.7181E	 !F !" !" !" &(       ( &*%'..}==={ *| # Y	&r*4@!# ) )5) ) ) " "
 <;2; /(*%9&;+  	 	 	 	 	 	 &*%!6$4!/!1   '&" " " <;/8(*%9+	          ),4@ " ( (5( ( ( ! !
 <;)8(*%9&;*!# /  
 
 
 
 
 
 &*%)&& "  
 <;09(* /%9&;!  	 	 	 	 	 	 &*%,"$ '&	 	 	 <;/8(*%9!	         eY	 Y	L A@s   Nr
  c                    |j         t          d          d         }g }|                    t          d|j        d         j        ||j        |j        d                     t          d|j        d         j        ||j        |j        ddt                       d	
          }|                    t          dd|j        |                     |S )z+Emit events when a function call completes.r  Nz%response.function_call_arguments.doner   rn   rN  r  r   r!  r  r  r  r  rU  )rN  r  r   r!  r  r  r  r   r,  r  )r  r   r  r   r  r  rr   rp   r   rk   r!   )ry   previous_itemr
  function_nameeventsfunction_call_items         rz   _emit_function_call_done_eventsz6OpenAIServingResponses._emit_function_call_done_eventsI  s     &/L0A0A0C0CD2<'/27"-"7 "  		
 		
 		
 6 #+A.3)3)+--))	
 	
 	
 	'0 ""7'	  	
 	
 	
 r|   c                    | j                             |j        |j                  }g }|                    t	          d|j        d         j        |j        |j        |j        d                     |                    t          dd|j        |j                             |                    t          dd|j        t          d|j        d         j        |j        |j        |d	
                               |S )z,Emit events when an MCP tool call completes. response.mcp_call_arguments.doner   rn   rC  response.mcp_call.completedrN  r  r  r!  r,  mcp_callrU  )rN  r  r   r  r   r   r  )r  r   r  r  r   r  r  rr   rp   r   r!   r/   )ry   rD  r
  r   rF  s        rz   _emit_mcp_call_done_eventsz1OpenAIServingResponses._emit_mcp_call_done_eventso  s*    :>>#]%<
 
 -7'/27",-"7 "  		
 		
 		
 	)2 ""7-	  	
 	
 	
 	'0 ""7#+3A6;&0,!-&  	  	
 	
 	
 r|   c                    t          |j        d         j        d          }t          d|gd|j        g           }g }|                    t          d|j        d|j        |j        |j        d         j        	                     |                    t          d
d|j        |j        |j        |                     |                    t          dd|j        |                     |S )z7Emit events when a reasoning (analysis) item completes.r   r  r  rB  rU  r+  r)  rn   r*  zresponse.reasoning_part.doner5  r,  r  )r  r  r  r$   rr   r  r&   rp   ro   rY   r!   )ry   rD  r
  r  r  rF  s         rz   _emit_reasoning_done_eventsz2OpenAIServingResponses._emit_reasoning_done_events  s-    /&q).!
 
 
 /I$
 
 
 *3- ""7#9"*1-2  		
 		
 		
 	*3 "-"7#9  		
 		
 		
 	'0 ""7#	  	
 	
 	
 r|   c                    t          d|j        d         j        g           }g }|                    t	          dd|j        |j        |j        d         j        g |j                             |                    t          dd|j        |j        |j        |                     |                    t          d	d|j        t          |j        d
d|gd                               |S )z4Emit events when a final text output item completes.r  r   )rN  r  r  r2  rn   r3  r4  r5  r,  r   r  rU  r  r  )r#   r  r  r  r)   rp   ro   rr   r   r!   r"   )ry   rD  r
  text_contentrF  s        rz   _emit_text_output_done_eventsz4OpenAIServingResponses._emit_text_output_done_events  s,    *&q).
 
 

 !0 ""7#9"*1-2-  
	
 
	
 
	
 	(1 "-"7#9!  		
 		
 		
 	'0 ""7*,"$)N&  	  	
 	
 	
 r|   c                    |j         |j                             d          r|                     ||          S |                     |j                   r7|j        0|j                            d          r|                     ||          S nB|j        dk    r|                     ||          S |j        dk    r|                     ||          S g S )zBEmit done events for the previous item when expecting a new start.Nr  mcp_analysisr  )	r  r  rH  r  rr   rN  r  rP  rS  )ry   rD  r
  s      rz   _emit_previous_item_done_eventsz6OpenAIServingResponses._emit_previous_item_done_events  s     ".&11,?? M;;M5QQQ..}/FGGM)5)44V<< 6 66}eLLL"j0033M5III"g--55mUKKK	r|   r=  c                     g }|j         sd|_         dt                       |_        |                    t	          dd|j        t          |j        ddg d          	                     |xj        d
z  c_        |                    t          dd|j        |j        |j        t          ddg g                                |                    t          dd|j        |j        |j        |j        g                      |S )z3Emit events for final channel text delta streaming.Tr  r  rn   r   r  r  r  r  rw   r  r  rq   r  r   r.  r/  )rs   rk   rr   r  r    rp   r"   ro   r   r#   r(   last_content_deltary   r=  r
  rF  s       rz    _emit_final_channel_delta_eventsz7OpenAIServingResponses._emit_final_channel_delta_events  sN    +  	+/E($:;==$:$:E!MM,5$&!&!;. 0&( ",  	     ''1,''MM-6$&!&!;!1"'"=+*$&!#	       	"1 "#9"7-,	 	 		
 	
 	
 r|   c                    g }|j         sd|_         dt                       |_        |                    t	          dd|j        t          d|j        g d                               |xj        d	z  c_        |                    t          d
d|j        |j        |j        t          dd                               |                    t          d|j        |j        |j        |j        d                     |S )z;Emit events for analysis channel reasoning delta streaming.Tr  r  rn   rB  r  r  r  rw   zresponse.reasoning_part.addedrq   r  r  r   r-  )rN  r!  r  r"  r  r  )rs   rk   rr   r  r    rp   r$   ro   rX   r  r%   rY  rZ  s       rz   #_emit_analysis_channel_delta_eventsz:OpenAIServingResponses._emit_analysis_channel_delta_eventsI  sB    + 	+/E($:;==$:$:E!MM,5$&!&!;.( 0 ",	  	
 
 
   ''1,''MM/8$&!&!;!1"'"=5-  
 
 
   	+4-"7#9, "  		
 		
 		
 r|   c                    | j                             ||          }g }|j        sd|_        dt                       |_        |                    t          dd|j        t          d|j        |d|d          	                     |                    t          d
d|j        |j                             |                    t          dd|j        |j        |j                             |S )z)Emit events for MCP tool delta streaming.TrU  r  rn   rM  rq   r  rN  r  r   r  r   r   r  response.mcp_call.in_progressrL  !response.mcp_call_arguments.deltarN  r  r  r!  r  )r  r   rs   rk   rr   r  r    rp   r/   r   r   rY  )ry   r=  r
  r  r   rF  s         rz   _emit_mcp_tool_delta_eventsz2OpenAIServingResponses._emit_mcp_tool_delta_eventsz  s(    :>>y)TT+ 	+/E($:;==$:$:E!MM,5$&!&!; ' 0&"$%1,  	     MM.8$&!&!;!1	     	.8 ""7-,  	
 	
 	
 r|   c                    g }|j         sd|_         dt                       |_        |                    t	          dd|j        t          d|j        dddd	          
                     |                    t          dd|j        |j                             |                    t          dd|j        |j        |j	                             |S )z1Emit events for code interpreter delta streaming.Ttool_r  rn   code_interpreter_callNrG  r  rN  r  codecontainer_idrz  r   r  z*response.code_interpreter_call.in_progressrL  z)response.code_interpreter_call_code.deltarb  )
rs   rk   rr   r  r    rp   r   r   r   rY  rZ  s       rz   #_emit_code_interpreter_delta_eventsz:OpenAIServingResponses._emit_code_interpreter_delta_events  s    + 	+/E($;KMM$;$;E!MM,5$&!&!;=4 0!%+ $,  	     MM:E$&!&!;!1	     	5@ ""7-,  	
 	
 	
 r|   c                    g }|j         sd|_         dt                       |_        |j        j        t          d          d         }|                    t          dd|j        t          d|j        |d|d	
                               |                    t          dd|j        |j                             |                    t          dd|j        |j        |j                             |S )z3Emit events for MCP prefix (mcp.*) delta streaming.TrU  mcp.Nr  rn   rM  rq   r  r_  r  r`  rL  ra  rb  )rs   rk   rr   rw  current_recipientr   r  r    rp   r/   r   r   rY  )ry   r=  r
  rF  mcp_names        rz   _emit_mcp_prefix_delta_eventsz4OpenAIServingResponses._emit_mcp_prefix_delta_events  s)    + 	+/E($:;==$:$:E!z3CKKMMBHMM,5$&!&!; ' 0%"$%-,  	     MM.8$&!&!;!1	     	.8 ""7-,  	
 	
 	
 r|   c                    |j         sg S |j        j        dk    r"|j        j        |                     ||          S |j        j        dk    r"|j        j        |                     ||          S |j        j        dk    s|j        j        dk    r|j        j        {|j        j        }|                    d          r|                     ||          S |                     |          }|r| 	                    |||          S | 
                    ||          S |j        j        dk    s|j        j        dk    rA|j        j        5|j        j                            d          r|                     ||          S g S )z>Emit events for content delta streaming based on channel type.r  NrV  
commentaryr  rl  )rY  rw  current_channelrm  r[  r]  r   _emit_function_call_delta_eventsr  rc  rj  ro  )ry   r=  r
  r  is_mcp_tools        rz   _emit_content_delta_eventsz1OpenAIServingResponses._emit_content_delta_events  s    % 	I J&'11
,488eDDDJ&*44
,4;;CGGG
 J&,66z)Z77j*6
4I##L11 I<<S%HHH88CCK L77UINNN??UKKK 
*l:::-;;
,8
,77?? 9 55c5AAA	r|   c                 0   |j         t          d          d         }t          j        |j        d         j                  }d}|dk    rt          j        d|d                   }n|dk    r.t          j        dd	|	                    d
d                     }nM|dk    r5t          j
        d|d         d	|	                    d
d                     }nt          d|           dt                       |_        g }|                    t          dd|j        t          j        d|j        |d                               |                    t%          dd|j        |j                             |                    t'          dd|j        |j                             |                    t)          dd|j        |j                             |                    t+          dd|j        t#          d|j        |d                               |S )z0Emit events for browser tool calls (web search).browser.Nr   searchquery)rN  ry  open	open_pagezcursor:cursorrq   )rN  urlfindpattern)rN  r  r}  zUnknown function name: re  r  rn   web_search_callr  )rN  r  actionr   r  z$response.web_search_call.in_progressrL  z"response.web_search_call.searchingz"response.web_search_call.completedr,  rU  )r  r   jsonloadsr  r  r-   ActionSearchActionOpenPager   
ActionFindr  rk   rr   r  r    rp   r   r+   r,   r*   r!   )ry   rD  r
  rE  parsed_argsr  rF  s          rz   _emit_browser_tool_eventsz0OpenAIServingResponses._emit_browser_tool_events2  s    &/J0A0ABj!6q!9!>??H$$1>!'*  FF f$$1@ =kooh;;==  FF
 f$$1<#I.=kooh;;==	  FF F}FFGGG 7 7 7(1 ""71K*,!(  	  	
 	
 	
 	0; ""7-	  	
 	
 	
 	/9 ""7-	  	
 	
 	
 	/9 ""7-	  	
 	
 	
 	'0 ""7.*,!&	  	
 
 
	
 	
 	
 r|   c                    |j         }| j                            ||          }g }|                    t	          dd|j        |j        |j        d         j        |                     |                    t          dd|j        |j                             |                    t          dd|j        t          d|j        ||j        d         j        |d	
                               |S )zDEmit events when an MCP tool completes during assistant action turn.rJ  rn   r   rN  r  r  r!  r  r   rK  rL  r,  rM  rU  r_  r  )r  r  r   r  r   rp   rr   r  r  r   r!   r/   )ry   rD  r
  r  r   rF  s         rz    _emit_mcp_tool_completion_eventsz7OpenAIServingResponses._emit_mcp_tool_completion_events  s    "+	:>>y)TT-7 ""7-'/27  		
 		
 		
 	)2 ""7-	  	
 	
 	
 	'0 ""7#,"+3A6;!-&  	  	
 	
 	
 r|   c                    g }|                     t          dd|j        |j        |j        d         j                             |                     t          dd|j        |j                             |                     t          dd|j        |j                             |                     t          dd|j        t          d	|j        |j        d         j        d
g d                               |S )z,Emit events when code interpreter completes.z(response.code_interpreter_call_code.donern   r   )rN  r  r  r!  rh  z+response.code_interpreter_call.interpretingrL  z(response.code_interpreter_call.completedr,  rf  rG  rU  rg  r  )
r  r   rp   rr   r  r  r   r   r!   r   )ry   rD  r
  rF  s       rz   (_emit_code_interpreter_completion_eventsz?OpenAIServingResponses._emit_code_interpreter_completion_events  s8    4? ""7-"*1-2  	
 	
 	
 	8B ""7-	  	
 	
 	
 	5? ""7-	  	
 	
 	
 	'0 ""790,&.q16!'&  	  	
 	
 	
 r|   c                    |j         t          d          d         }g }|                    t          dd|j        |j        |j        d         j        |                     |                    t          dd|j        |j                             |                    t          d	d|j        t          d
|j        ||j        d         j        |d                               |S )z6Emit events when an MCP prefix tool (mcp.*) completes.rl  NrJ  rn   r   r  rK  rL  r,  rM  rU  r_  r  )r  r   r  r   rp   rr   r  r  r   r!   r/   )ry   rD  r
  rn  rF  s        rz   "_emit_mcp_prefix_completion_eventsz9OpenAIServingResponses._emit_mcp_prefix_completion_events  s    !*3v;;==9-7 ""7-'/27  		
 		
 		
 	)2 ""7-	  	
 	
 	
 	'0 ""7#,!+3A6;!)&  	  	
 	
 	
 r|   c                 6   |                                 rt          |j        j                  dk    rg S g }|j        j        d         }| j        d| j                            d          rJ|j        C|j                            d          r)|                    | 	                    ||                     | j        |j        |j
        |j        r|j        }|                    d          r*|                    |                     ||                     n|                     |          o|j
                            d          }|r*|                    |                     ||                     n)|                    |                     ||                     |S )z!Emit events for tool action turn.r   rn   Nr   rw  rl  rU  )is_assistant_action_turnr   rw  r(  r   r  r  r  r   r  rr   rs   r  r  r  r  )ry   r=  r
  rF  rD  r  rt  s          rz   _emit_tool_action_eventsz/OpenAIServingResponses._emit_tool_action_events	  s    ++-- 	SZ5H1I1IQ1N1NI
+B/ ( )))44 )'3'22:>> 4 MM$88NNOOO ('3%1, 2 &/I##F++ ;;M5QQ   
 #<<  ?+66v>>   	MM==mUSS    MMEE)5    r|   c           	      &   |j         j        dk    r+|j         j        r|j         j                            d          sg S g }|j        du rd|_        |j         j        t          d          d         }dt                       |_        t          |d|j        dt                       d	d
          }|	                    t          dd|j        |                     |	                    t          |j        |j        |j        dd                     |S )z?Emit events for developer function calls on commentary channel.rq  r  FTNr  r  r  rq   r  )r   rN  r  r  r  r   r  rn   r  z&response.function_call_arguments.delta)r!  r  r  r  rN  )rw  rr  rm  r  rt   r   rk   rr   r   r  r    rp   r   rY  )ry   r=  r
  rF  fc_nametool_call_items         rz   rs  z7OpenAIServingResponses._emit_function_call_delta_eventsE	  sF    J&,66
, 7
,77EE 7 I-6615E.j23|3D3D3F3FGG$9+--$9$9E!5$(///$  N MM,5$&!&!;'	     	3-,"7 "=  	
 	
 	
 r|   c
                D  K   t                      }
|2 3 d {V }t          |t                    sJ |                     |j        |j                   |                                rjt          |j        j	                  dk    r9|j        j	        d         }| 
                    ||
          D ]} |	|          W V  |
                                 |                     ||
          D ]} |	|          W V  |                     ||
          D ]} |	|          W V  6 d S )Nr   rn   )rm   r   rQ   rv  ru  r   is_expecting_startr   rw  r(  rW  r{   ru  r  )ry   r   r   r1  r   r   r'  r  r   r  r
  r=  rD  r  s                 rz   !_process_harmony_streaming_eventsz8OpenAIServingResponses._process_harmony_streaming_eventss	  s      &'') 	C 	C 	C 	C 	C 	C 	C#c#:;;;;;   !2G4FGGG%%'' +sz*++a//$'J$7$;M!%!E!E%u" " K K DCEJJJJJJJ((*** 88eDD C C;;EBBBBBBB 66sEBB C C;;EBBBBBBBC) *))s   Dc	                  K   |pt          t          j                              }ddt          dt          ffd}	t                      4 d {V }
| j        r%|                     |||
           d {V  | j        }n| j        }t          j	        ||||g dd           
                                } |	t          dd|	                    W V   |	t          d
d|	                    W V  	  ||||||||||		  	        2 3 d {V }|W V  6 nq# t          $ rd}|                     |          } |	t          t                                        |                    W V  Y d }~d d d           d {V  d S d }~ww xY wd }|                     || |            |||||           d {V } |	t%          dd|	                    W V  d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   r  ru   c                 @    t          | d          r| _        dz  | S )Nr  rw   )r   r  )r  r  s    rz   r  z`OpenAIServingResponses.responses_stream_generator.<locals>._increment_sequence_number_and_return	  s/    
 u/00 8(7%q OLr|   r  r   zresponse.createdrn   )rN  r  r2  zresponse.in_progressc                 
   K   d S r   r   r   r|   rz   empty_async_generatorzPOpenAIServingResponses.responses_stream_generator.<locals>.empty_async_generator	  s       r|   )r   r  )r   r  r]   r   r   rS  r  rA  r[   r  
model_dumprU   rV   r@   /_convert_generation_error_to_streaming_responser6   validate_jsonr   rT   )ry   r   r   r1  r   r   r'  r  r   r  rJ  	processerinitial_response
event_datar*  
error_jsonr  final_responser  s                     @rz   r  z1OpenAIServingResponses.responses_stream_generator	  s=      $7s49;;'7'7	-	'	 	 	 	 	 	 "## L	 L	 L	 L	 L	 L	 L	z B 44WgzRRRRRRRRR B		 A	  1=%)$      jll  87$+$&-        87'/$&-       (1	#$$ 9
) 
) % % % % % % %* %$$$$$
) 
) #   !QQRSTT
;; :;;II*UU      iL	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	^   $(#@#@%%'' ) $A 	$ 	$ 	 	 	 	 	 	N 87&-$&+       ML	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	 L	sK   BG .DDDG 
E>AE9"G 9E>>AG  
G*-G*r   )Yr}   r~   r   r8   rB   r;   r   r:   r   r<   r   rc   r>   r   rZ   r   r   r   r]   r[   r4  rg   r  r  rM   r   rS  rh   r   rj   r?   r   r   r  r  r   rA  r   SampleLogprobr   r1   r  r   re   r0   r  r.   r  rf   r   r{  rN   rq  r  r  r  r  rI  r  r  r  r  r	  r   r  r   rA  rm   rH  rN  rP  rS  rW  rQ   r[  r]  rc  rj  ro  ru  r  r  r  r  r  rs  r  r  __classcell__)r   s   @rz   r   r      s+         ,1 ""'"&)--2+0#( %!Y' Y' Y'#Y' $Y'
 &,Y' TzY' 'FY' %)Y' Y'  Y' 4ZY'  $&Y' '+Y' %)Y' !Y'  !Y'" 
#Y' Y' Y' Y' Y' Y'v)		   &'		   H '+u1 u1!u1 t^u1
 	1478
	
	u1 u1 u1 u1n'(!'( )4/'( 	'( '( '( '(R)!) )4/) ) ) )(
!
 %
 #	
 
 
 
2 $(F F!F (F ((;<	F
 %F F !F 2F DjF 
*	*F F F FP63: 6$ 6 6 6 6 % '= ="E$sCx.$9   sM)*  !	
 
	    < $(" "C=" !4'" !	"
 Dj" 
g" " " "R $(
 
C=
 !4'
 !	

 Dj
 
'/	0
 
 
 
6c!c 'c !	c
 
 	!c c c cJ 
 	!   
sTz 
 
 
 
1'1<@1NQRUh1	1 1 1 1fC!C )4/C 
"	#	C C C CJ6!6 6 6 6@6!6 6 6 64 &** ** d
* 
2D8	9	* * * *: d
 t	 	
	
3T9
:	;   . 
*	*   :
 
 
 
 
 

 
 
 
 
o!o (o ((;d(BC	o
 %o o !o 2o o 08'(*DD0
o 
2D8	9o o o ob	$ %$ 
(	)	$ $ $ $L+ %+ 
(	)	+ + + +Z. %. 
(	)	. . . .`/ %/ 
(	)	/ / / /b % 
(	)	   ,4$4 %4 
(	)	4 4 4 4l/$/ %/ 
(	)	/ / / /b,$, %, 	,
 
(	), , , ,\*$* %* 
(	)	* * * *X-$- %- 
(	)	- - - -^-$- %- 
(	)	- - - -^U %U 
(	)	U U U Un* %* 
(	)	* * * *X/ %/ 
(	)	/ / / /b) %) 
(	)	) ) ) )V2$2 %2 
(	)	2 2 2 2h,$, %, 
(	)	, , , ,\%C!%C (%C ((;d(BC	%C
 %%C %C !%C 2%C %C 08'(*DD0
%C 
2D8	9%C %C %C %C` $(h h!h (h ((;d(BC	h
 %h h !h 2h Djh 
2D8	9h h h h h h h hr|   r   )r   r  r  r8  collectionsr   collections.abcr   r   r   r   
contextlibr   r	   dataclassesr
   r   httpr   typingr   r  fastapir   openai.types.responsesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   +openai.types.responses.response_output_itemr/   +openai.types.responses.response_output_textr0   r1   .openai.types.responses.response_reasoning_itemr2   r  openai.types.responses.toolr3   r4   openai_harmonyr5   r  pydanticr6   vllmr7   vllm.engine.protocolr8   vllm.entrypoints.chat_utilsr9   r:   vllm.entrypoints.loggerr;    vllm.entrypoints.mcp.tool_serverr<   'vllm.entrypoints.openai.engine.protocolr=   r>   r?   &vllm.entrypoints.openai.engine.servingr@   rA   &vllm.entrypoints.openai.models.servingrB   ,vllm.entrypoints.openai.parser.harmony_utilsrC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   )vllm.entrypoints.openai.responses.contextrM   rN   rO   rP   rQ   *vllm.entrypoints.openai.responses.protocolrR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   'vllm.entrypoints.openai.responses.utilsr^   r_   r`   ra   vllm.exceptionsrb   vllm.inputs.datarc   vllm.loggerrd   vllm.logprobsr  re   vllm.outputsrf   vllm.renderersrg   vllm.sampling_paramsrh   ri   vllm.tokenizersrj   
vllm.utilsrk   r}   r   rm   r   rA  r   r   r   r   r|   rz   <module>r     s             M M M M M M M M M M M M % % % % % %       * * * * * * * *                   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !D @ ? ? ? ? ? R R R R R R R R      2 1 1 1 1 1 1 1 : : : : : :                   - - - - - -        2 1 1 1 1 1 7 7 7 7 7 7         
        G F F F F F                                                                           0 / / / / / ) ) ) ) ) ) # # # # # # 2 2 2 2 2 2 ( ( ( ( ( ( ) ) ) ) ) ) ' ' ' ' ' ' H H H H H H H H ) ) ) ) ) ) " " " " " "	X		 2 2 2 2 2 2 2 2 $:$	#tCy4
 $ $ $ $NF% F% F% F% F%] F% F% F% F% F%r|   