ó
    ‡Ž¡j¡r  ã                   óÂ  • S r SSKrSSKrSSKJr  SSKJr  SSKJr  SSK	J
r
  \
" 5       (       aJ  SSKJr  SS	KJrJr  SS
KJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$  SSK%J&r&  SSK'J(r(J)r)J*r*  SSKJ+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2  \(       a  SSK3J4r4J5r5J6r6J7r7  \Rp                  " \95      r: " S S\&SS9r;1 Skr< " S S5      r= " S S\,5      r>S\?S\?S\*4S jr@g)z~
Handler for the /v1/responses endpoint (OpenAI Responses API).

Supports streaming (SSE) and non-streaming (JSON) responses.
é    N)ÚAsyncGenerator)ÚTYPE_CHECKINGé   )Úlogging)Úis_serve_available)ÚHTTPException)ÚJSONResponseÚStreamingResponse)ÚResponseÚResponseCompletedEventÚResponseContentPartAddedEventÚResponseContentPartDoneEventÚResponseCreatedEventÚResponseErrorÚResponseErrorEventÚResponseFailedEventÚ&ResponseFunctionCallArgumentsDoneEventÚResponseFunctionToolCallÚResponseInProgressEventÚResponseOutputItemAddedEventÚResponseOutputItemDoneEventÚResponseOutputMessageÚResponseOutputTextÚResponseReasoningItemÚResponseReasoningTextDeltaEventÚResponseReasoningTextDoneEventÚResponseTextDeltaEventÚResponseTextDoneEvent)ÚResponseCreateParamsStreaming)ÚInputTokensDetailsÚOutputTokensDetailsÚResponseUsageé   )ÚBaseGenerateManagerÚBaseHandlerÚModalityÚReasoningTextÚToolCallÚ_StreamErrorÚbuild_response_parserÚparse_assistant_message)ÚGenerationConfigÚPreTrainedModelÚPreTrainedTokenizerFastÚProcessorMixinc                   ó*   • \ rS rSr% \\S'   \\S'   Srg)Ú)TransformersResponseCreateParamsStreamingéM   Úgeneration_configÚseed© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚstrÚ__annotations__ÚintÚ__static_attributes__r5   ó    Ú¯C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/cli/serving/response.pyr1   r1   M   s   ‡ ØÓØ
†Ir>   r1   F)Útotal>   ÚtextÚuserÚstoreÚpromptÚincludeÚ
backgroundÚ
truncationÚtool_choiceÚservice_tierÚtop_logprobsÚmax_tool_callsÚprevious_response_idc            	       ó*  • \ rS rSrSrS\S\4S jrS\4S jrS\SS	4S
 jr	S\
\   4S jrS\
\   4S jrS\S\
\   4S jrS\
\   4S jrS\
\   4S jrS\S\
\   4S jrS\
\   4S jrS\S\S\S\
\   4S jrS\S\
\   4S jrS\
\   4S jrSrg)Ú_ResponseStreamBuilderéb   z=Builds SSE events for one streaming Responses API generation.Ú
request_idÚresponse_defaultsc                óÊ   • X l         SU 3U l        SU 3U l        SU 3U l        SU l        SU l        SU l        SU l        SU l        SU l	        S U l
        S U l        / U l        g )NÚresp_Úmsg_Úrs_r   Ú F)Ú_response_defaultsÚresp_idÚmsg_idÚreasoning_idÚseqÚoutput_indexÚcontentÚfull_reasoningÚreasoning_openÚmessage_openÚreasoning_itemÚmessage_itemÚ
tool_calls)ÚselfrP   rQ   s      r?   Ú__init__Ú_ResponseStreamBuilder.__init__e   sx   € Ø"3ÔØ˜z˜lÐ+ˆŒØ˜Z˜LÐ)ˆŒØ! * Ð.ˆÔØˆŒØˆÔØˆŒØ ˆÔØ#ˆÔØ!ˆÔØ<@ˆÔØ:>ˆÔØ:<ˆ�r>   Úreturnc                 ó\   • [         R                  " U5      nU =R                  S-  sl        U$ )Nr#   )r%   Úchunk_to_sser[   )rd   ÚeventÚsses      r?   Ú_emitÚ_ResponseStreamBuilder._emitt   s$   € Ü×&Ò& uÓ-ˆØ�Š�A‰�Øˆ
r>   Ústatusr   c                 ó8   • [        S0 U R                  DSU0DUD6$ )Nrn   r5   )r   rW   )rd   rn   Úextras      r?   Ú	_responseÚ _ResponseStreamBuilder._responsey   s    € ÜÑJ˜$×1Ñ1ÑJ¸&ÑJÀEÑJÐJr>   c                 óÊ   • U R                  [        SU R                  U R                  S/ S9S95      U R                  [	        SU R                  U R                  S/ S9S95      /$ )Nzresponse.createdÚqueued)Úoutput©ÚtypeÚsequence_numberÚresponsezresponse.in_progressÚin_progress)rl   r   r[   rq   r   ©rd   s    r?   Ústart_responseÚ%_ResponseStreamBuilder.start_response|   sj   € à�J‰JÜ$Ø+Ø$(§H¡HØ!Ÿ^™^¨H¸R˜^Ð@ñóð �J‰JÜ'Ø/Ø$(§H¡HØ!Ÿ^™^¨MÀ"˜^ÐEñóð
ð 	
r>   c                 óš   • SU l         U R                  [        SU R                  U R                  [        U R                  S/ / SS9S95      /$ )NTúresponse.output_item.addedÚ	reasoningrz   ©Úidrw   Úsummaryr]   rn   ©rw   rx   r\   Úitem)r_   rl   r   r[   r\   r   rZ   r{   s    r?   Ústart_reasoningÚ&_ResponseStreamBuilder.start_reasoningŽ   sV   € Ø"ˆÔà�J‰JÜ,Ø5Ø$(§H¡HØ!%×!2Ñ!2Ü.Ø×,Ñ,°;ÈÐTVÐ_lññ	ó	ð
ð 	
r>   rA   c                 ó¤   • U =R                   U-  sl         U R                  [        SU R                  U R                  U R
                  SUS95      /$ )Nzresponse.reasoning_text.deltar   )rw   Úitem_idrx   r\   Úcontent_indexÚdelta)r^   rl   r   rZ   r[   r\   ©rd   rA   s     r?   Úreasoning_deltaÚ&_ResponseStreamBuilder.reasoning_delta�   sS   € Ø×Ò˜tÑ#Õà�J‰JÜ/Ø8Ø ×-Ñ-Ø$(§H¡HØ!%×!2Ñ!2Ø"#Øñó	ð
ð 	
r>   c                 óŽ  • [        U R                  S/ SU R                  S./SS9U l        U R	                  [        SU R                  U R                  U R                  SU R                  S95      U R	                  [        S	U R                  U R                  U R                  S
95      /nSU l	        U =R                  S-  sl        U$ )Nr€   Úreasoning_text©rw   rA   Ú	completedr�   zresponse.reasoning_text.doner   )rw   r‰   rx   r\   rŠ   rA   úresponse.output_item.doner„   Fr#   )
r   rZ   r^   ra   rl   r   r[   r\   r   r_   )rd   Úpartss     r?   Úfinish_reasoningÚ'_ResponseStreamBuilder.finish_reasoning¬   sÉ   € Ü3Ø× Ñ ØØØ.¸×8KÑ8KÑLÐMØñ
ˆÔð �J‰JÜ.Ø7Ø ×-Ñ-Ø$(§H¡HØ!%×!2Ñ!2Ø"#Ø×,Ñ,ñó	ð �J‰JÜ+Ø4Ø$(§H¡HØ!%×!2Ñ!2Ø×,Ñ,ñ	óð
ˆð( $ˆÔØ×Ò˜QÑÕØˆr>   c                 ó   • SU l         U R                  [        SU R                  U R                  [        U R                  SSS/ S9S95      U R                  [        SU R                  U R                  U R                  S	[        S
S/ S9S95      /$ )NTr   Úmessagerz   Ú	assistant)r‚   rw   rn   Úroler]   r„   zresponse.content_part.addedr   Úoutput_textrV   ©rw   rA   Úannotations©rw   r‰   rx   r\   rŠ   Úpart)	r`   rl   r   r[   r\   r   rY   r   r   r{   s    r?   Ústart_messageÚ$_ResponseStreamBuilder.start_messageÌ   s”   € Ø ˆÔà�J‰JÜ,Ø5Ø$(§H¡HØ!%×!2Ñ!2Ü.ØŸ;™;¨Y¸}ÐS^Ðhjññ	ó	ð �J‰JÜ-Ø6Ø ŸK™KØ$(§H¡HØ!%×!2Ñ!2Ø"#Ü+°ÀRÐUWÑXñó	ð
ð 	
r>   c                 ó¦   • U =R                   U-  sl         U R                  [        SU R                  U R                  U R
                  SU/ S95      /$ )Nzresponse.output_text.deltar   )rw   r‰   rx   r\   rŠ   r‹   Úlogprobs)r]   rl   r   rY   r[   r\   rŒ   s     r?   Ú
text_deltaÚ!_ResponseStreamBuilder.text_deltaå   sQ   € Ø�Š˜Ñ�à�J‰JÜ&Ø5Ø ŸK™KØ$(§H¡HØ!%×!2Ñ!2Ø"#ØØñó
ð
ð 	
r>   c                 óì  • [        SU R                  / S9n[        U R                  SSSU// S9U l        U R                  [        SU R                  U R                  U R                  SU R                  / S	95      U R                  [        S
U R                  U R                  U R                  SUS95      U R                  [        SU R                  U R                  U R                  S95      /nSU l        U$ )Nr›   rœ   r˜   r’   r™   ©r‚   rw   rn   rš   r]   r�   zresponse.output_text.doner   )rw   r‰   rx   r\   rŠ   rA   r£   zresponse.content_part.donerž   r“   r„   F)r   r]   r   rY   rb   rl   r   r[   r\   r   r   r`   )rd   Úoutput_text_partr”   s      r?   Úfinish_messageÚ%_ResponseStreamBuilder.finish_messageõ   s÷   € Ü-°=ÀtÇ|Á|ÐacÑdÐÜ1Ø�{‰{ØØØØ%Ð&Øñ
ˆÔð �J‰JÜ%Ø4Ø ŸK™KØ$(§H¡HØ!%×!2Ñ!2Ø"#ØŸ™Øñó
ð �J‰JÜ,Ø5Ø ŸK™KØ$(§H¡HØ!%×!2Ñ!2Ø"#Ø)ñó	ð �J‰JÜ+Ø4Ø$(§H¡HØ!%×!2Ñ!2Ø×*Ñ*ñ	óð-
ˆð> "ˆÔØˆr>   Útc_idÚnameÚ	argumentsc                 óš  • U =R                   S-  sl         [        UUSUUSS9nU R                  R                  U5        U R	                  [        SU R                  U R                   US95      U R	                  [        SU R                  UU R                   UUS95      U R	                  [        S	U R                  U R                   US95      /$ )
Nr#   Úfunction_callr’   ©r‚   Úcall_idrw   r¬   r­   rn   r   r„   z%response.function_call_arguments.done)rw   rx   r‰   r\   r­   r¬   r“   )	r\   r   rc   Úappendrl   r   r[   r   r   )rd   r«   r¬   r­   r…   s        r?   Ú	tool_callÚ _ResponseStreamBuilder.tool_call!  sÕ   € Ø×Ò˜QÑÕÜ'ØØØ ØØØñ
ˆð 	�‰×Ñ˜tÔ$à�J‰JÜ,Ø5Ø$(§H¡HØ!%×!2Ñ!2Øñ	óð �J‰JÜ6Ø@Ø$(§H¡HØ!Ø!%×!2Ñ!2Ø'Øñó	ð �J‰JÜ+Ø4Ø$(§H¡HØ!%×!2Ñ!2Øñ	óð'
ð 	
r>   Úmsgc                 óÀ   • U R                  [        SU R                  US95      U R                  [        SU R                  U R	                  S/ [        SUS9S9S95      /$ )	NÚerror)rw   rx   r˜   zresponse.failedÚfailedÚserver_error)Úcoder˜   )ru   r·   rv   )rl   r   r[   r   rq   r   )rd   rµ   s     r?   r·   Ú_ResponseStreamBuilder.errorI  se   € à�J‰JÔ)¨wÈÏÉÐZ]Ñ^Ó_Ø�J‰JÜ#Ø*Ø$(§H¡HØ!Ÿ^™^Ø ¨´=ÀnÐ^aÑ3bð ,ð ñóð
ð 	
r>   c                 ó(  • / nU R                   b  UR                  U R                   5        UR                  U R                  5        UR                  U R                  5        U R                  [        SU R                  U R                  SX!S9S95      /$ )Nzresponse.completedr’   )ru   Úusagerv   )	ra   r²   rb   Úextendrc   rl   r   r[   rq   )rd   r½   Ú
all_outputs      r?   r’   Ú _ResponseStreamBuilder.completedW  s…   € Øˆ
Ø×ÑÑ*Ø×Ñ˜d×1Ñ1Ô2Ø×Ñ˜$×+Ñ+Ô,Ø×Ñ˜$Ÿ/™/Ô*à�J‰JÜ&Ø-Ø$(§H¡HØ!Ÿ^™^¨KÀ
˜^ÐXñóð
ð 	
r>   )rW   r]   r^   rb   r`   rY   r\   rZ   ra   r_   rX   r[   rc   N)r6   r7   r8   r9   Ú__doc__r:   Údictre   rl   rq   Úlistr|   r†   r�   r•   r    r¤   r©   r³   r·   r’   r=   r5   r>   r?   rN   rN   b   s  † ÙGð= cð =¸dô =ð˜cô ð
K ð K°ô Kð
  S¡	ô 
ð$
  c¡ô 
ð
 Cð 
¨D°©Iô 
ð $ s¡)ô ð@
˜t C™yô 
ð2
˜sð 
 t¨C¡yô 
ð *  S¡	ô *ðX&
˜sð &
¨#ð &
¸#ð &
À$ÀsÁ)ô &
ðP
˜ð 
  c¡ô 
ð
 $ s¡)÷ 
r>   rN   c                   ó>  ^ • \ rS rSrSr\r\rS\	S\
S\\-  4S jr\S\\	   S-  S\\	   S-  4S	 j5       r\S\	S\\	   4S
 j5       r\S\\	   S\\	   4S j5       rS\
SSSSS\
S\	S\	SSS\S\4S jrS\
SSSSS\
S\	S\	SSS\S\4S jrSS\	SSS\4U 4S jjjrSrU =r$ )ÚResponseHandlerih  z+Handler for the ``/v1/responses`` endpoint.ÚbodyrP   rg   c              ƒ   ó0  #   • U R                  U5        U R                  U5      u  p4nU R                  R                  XES9nU R                  R                  XF5      n[        R                  SU SU 35        U R                  R                  X7S9nU R                  U5      n	U R                  X–5      n
[        S U
 5       5      n0 nU(       a  SUS'   UR                  U R                  5        UR                  UR                  S5      =(       d    0 5        U R                  UR                  S	5      5      nUR                   " U
4S
UU(       a  SOSS
S
U["        R$                  :H  =(       a    US.UD6nU(       d  UR'                  UR(                  5      nU R+                  XR,                  US9nU(       a  UR/                  XO5        UR                  SS
5      nU(       a  U R1                  UUUUUUUUS9$ U R3                  UUUUUUUUS9I Sh  v•N $  N7f)aJ  Validate, load model, dispatch to streaming or non-streaming.

Args:
    body (`dict`): The raw JSON request body (OpenAI Responses API format).
    request_id (`str`): Unique request identifier (from header or auto-generated).

Returns:
    `StreamingResponse | JSONResponse`: SSE stream or JSON depending on ``body["stream"]``.
)Ú	processorz[Request received] Model: z, CB: ©Úuse_cbc              3   óÈ   #   • U  HX  n[        UR                  S 5      [        5      (       a  UR                  S 5      O/   H  nUR                  S5      S:H  v •  M     MZ     g7f)r]   rw   ÚvideoN)Ú
isinstanceÚgetrÃ   )Ú.0rµ   Úcs      r?   Ú	<genexpr>Ú1ResponseHandler.handle_request.<locals>.<genexpr>†  sU   é € ð 
â'�Ü,6°s·w±w¸yÓ7IÌ4×,PÑ,P�c—g‘g˜iÔ(ÐVXÓX�ð �E‰E�&‹M˜WÖ$áXñ %Ú'ùs   ‚A A"é    Ú
num_framesÚchat_template_kwargsÚtoolsTNÚpt)Úadd_generation_promptrÖ   Úreturn_tensorsÚreturn_dictÚtokenizeÚload_audio_from_videoÚstream)Úgen_manager)Ú_validate_requestÚ_resolve_modelÚmodel_managerÚget_model_modalityÚgeneration_stateÚuse_continuous_batchingÚloggerÚwarningÚget_managerÚ_normalize_inputÚ"get_processor_inputs_from_messagesÚanyÚupdaterÕ   rÎ   Ú_normalize_toolsÚapply_chat_templater&   Ú
MULTIMODALÚtoÚdeviceÚ_build_generation_configr3   Úinit_cbÚ
_streamingÚ_non_streaming)rd   rÆ   rP   Úmodel_idÚmodelrÈ   ÚmodalityrÊ   rÞ   ÚmessagesÚprocessor_inputsÚ	has_videorÕ   rÖ   ÚinputsÚ
gen_configÚ	streamings                    r?   Úhandle_requestÚResponseHandler.handle_requestn  s/  é € ð 	×Ñ˜tÔ$à%)×%8Ñ%8¸Ó%>Ñ"ˆ˜Ø×%Ñ%×8Ñ8¸Ð8ÐTˆØ×&Ñ&×>Ñ>¸uÓOˆÜ�‰Ð3°H°:¸VÀFÀ8ÐLÔMØ×+Ñ+×7Ñ7¸Ð7ÐPˆð
 ×(Ñ(¨Ó.ˆØ×BÑBÀ8ÓVÐäñ 
á'ó
ó 
ˆ	ð &(ÐÞØ13Ð  Ñ.Ø×#Ñ# D×$=Ñ$=Ô>Ø×#Ñ# D§H¡HÐ-CÓ$D×$JÈÔKà×%Ñ% d§h¡h¨wÓ&7Ó8ˆØ×.Ò.Øð	
à"&ØÞ#)™4¨tØØØ"*¬h×.AÑ.AÑ"A×"OÀiñ	
ð #ñ	
ˆö Ø—Y‘Y˜uŸ|™|Ó,ˆFà×2Ñ2°4×9PÑ9PÐY_Ð2Ð`ˆ
æØ×Ñ Ô2Ø—H‘H˜X tÓ,ˆ	ÞØ—?‘?ØØØØØØØØ'ð #ð 	ð 	ð ×,Ñ,ØØØØØØØØ'ð -ð 	÷ 	ð 	ñ 	ùs   ‚HHÈHÈHrÖ   Nc                 óÈ   • U (       d  U $ U  VVVs/ s H;  nSU;  a0  SUR                  5        VVs0 s H  u  p#US:w  d  M  X#_M     snnS.OUPM=     snnn$ s  snnf s  snnnf )aX  Normalize Responses API tool definitions for ``apply_chat_template``.

The Responses API uses a flat format: ``{"type": "function", "name": ..., "parameters": ...}``
while ``apply_chat_template`` expects a nested format:
``{"type": "function", "function": {"name": ..., "parameters": ...}}``.
Already-nested tools are passed through unchanged.
Úfunctionrw   )rw   r  )Úitems)rÖ   ÚtÚkÚvs       r?   rì   Ú ResponseHandler._normalize_toolsÀ  sm   € ö ØˆLñ õ
â�ð ^hÐopÓ]p�Z¸q¿w¹w¼yÔ-Xºy±t°qÈAÐQWÉK«d¨aªd¹yÒ-XÒYÐvwÒwÙó
ð 	
ùÛ-Xùô
s   � A°AÁ AÁAÁAc                 ór  • U S   nU R                  S5      n[        U[        5      (       a  SUS./nOL[        U[        5      (       a-  U(       a  SUS   ;  a  SUS./nO [        R                  U5      nO
[        SSS	9eU(       a1  U(       a  US   S   S
:X  a	  X#S   S'   U$ UR                  SS
US.5        U$ )uÙ  Normalize the Responses API ``input`` field into chat messages.

The Responses API accepts multiple input formats. This method converts them
into a structure close to what ``apply_chat_template`` expects (messages with
``role``, ``content``, ``tool_calls``, ``tool_call_id``). Further processing
is done by ``get_processor_inputs_from_messages``.

NOTE: if this conversion logic grows too complex, consider having separate
``get_processor_inputs_from_messages`` implementations for chat completions
and the Responses API instead of funneling both through the same path.

Formats handled:
    - **String** â†’ single user message.
    - **Flat content list** (``input_text``, ``input_image``, no ``role``) â†’ user message.
    - **Multi-turn list** â€” messages and tool call items (``function_call``,
      ``function_call_output``) from a previous response, converted via
      :meth:`_normalize_response_items`.

If ``instructions`` is present, it is prepended as a system message.
ÚinputÚinstructionsrB   ©rš   r]   rš   r   é¦  z 'input' must be a string or list©Ústatus_codeÚdetailÚsystemr]   )rÎ   rÍ   r:   rÃ   rÅ   Ú_normalize_response_itemsr   Úinsert)rÆ   Úinpr	  rø   s       r?   rè   Ú ResponseHandler._normalize_inputÐ  sÀ   € ð, �7‰mˆØ—x‘x Ó/ˆä�cœ3×ÑØ!'°CÑ8Ð9‰HÜ˜œT×"Ñ"Þ�v S¨¡VÓ+à%+¸Ñ<Ð=‘ä*×DÑDÀSÓI‘ä¨CÐ8ZÑ[Ð[ö Þ˜H Q™K¨Ñ/°8Ó;Ø)5˜‘˜IÑ&ð ˆð —‘ ¨HÀÑ#NÔOàˆr>   r  c                 óh  • / nSnU  GH&  nUR                  S5      nUS:X  a2  SR                  S UR                  S5      =(       d    /  5       5      nMM  SU;   a=  US   UR                  SS5      S.nUb  US   S	:X  a  X%S
'   SnUR                  U5        M�  US:X  aa  US   US   US   S.S.nU(       a2  US   S   S	:X  a&  US   R                  S/ 5      R                  U5        Mà  UR                  S	U/S.5        M÷  US:X  a  UR                  SUS   US   S.5        GM  [	        SSU< 3S9e   U$ )u¶  Convert a list of Responses API items into chat messages.

Input items may be a mix of:
    - Messages (``EasyInputMessageParam`` with ``role``, or ``type: "message"``).
    - ``reasoning`` â€” buffered and attached as ``reasoning_content`` to the next assistant message.
    - ``function_call`` â€” merged as ``tool_calls`` onto the preceding assistant message.
    - ``function_call_output`` â€” converted to ``role: "tool"`` messages.
Nrw   r€   rV   c              3   ó*   #   • U  H	  oS    v •  M     g7f)rA   Nr5   )rÏ   rÐ   s     r?   rÑ   Ú<ResponseHandler._normalize_response_items.<locals>.<genexpr>  s   é € Ð+YÒ?X¸!¨f®IÒ?Xùs   ‚r]   rš   r
  r™   Úreasoning_contentr¯   r±   r¬   r­   )r¬   r­   )r‚   r  éÿÿÿÿrc   )rš   rc   Úfunction_call_outputÚtoolru   )rš   Útool_call_idr]   r  zUnsupported input item type: r  )rÎ   Újoinr²   Ú
setdefaultr   )r  rø   Úpending_reasoningr…   Ú	item_typerµ   Útcs          r?   r  Ú)ResponseHandler._normalize_response_itemsý  s`  € ð ˆØ(,ÐäˆDØŸ™ Ó(ˆIà˜KÓ'Ø$&§G¡GÑ+Y¸t¿x¹xÈ	Ó?R×?XÐVXÐ?XÓ+YÓ$YÐ!Ùà˜‹~Ø# F™|¸¿¹ÀÈBÓ8OÑP�Ø$Ñ0°T¸&±\À[Ó5PØ/@Ð+Ñ,Ø(,Ð%Ø—‘ Ö$à˜oÓ-à˜y™/Ø)-¨f©ÀDÈÑDUÑ Vñ�ö  ¨¡¨VÑ 4¸Ó CØ˜R‘L×+Ñ+¨L¸"Ó=×DÑDÀRÖHà—O‘O¨[ÈÈÑ$MÖNàÐ4Ó4Ø—‘à &Ø(,¨Y©Ø#'¨¡>ñ÷ô $°Ð>[Ð\eÑ[hÐ<iÑjÐjñE ðH ˆr>   rö   r-   rÈ   z(ProcessorMixin | PreTrainedTokenizerFastrõ   rû   rü   r,   rÞ   c	           	      ót  ^^^^^• [        X2US   5      n	UR                  UUUUTU	S9u  mmUS   n
[        U
[        5      (       a  [	        U
5      OU
R
                  S   mST 3[        R                  " 5       US/ UR                  SS5      SS	.mS
[        [        S4   4UUUUU4S jjn[        U" 5       SS9$ )zDGenerate a streaming Responses API reply (SSE) using DirectStreamer.Ú	input_ids)rP   Úresponse_parserr  rS   ry   Úparallel_tool_callsFÚauto)r‚   Ú
created_atrö   ÚobjectrÖ   r%  rH   rg   Nc                 ó°  >#   • [        TT	S9n  SR                  U R                  5       5      7v •  SnSnU(       d<  TR                  5       I S h  v•N /n  UR	                  TR                  5       5        M!  U R                  (       a"  SR                  U R!                  5       5      7v •  U R"                  (       d"  SR                  U R3                  5       5      7v •  SR                  U R%                  5       5      7v •  SR                  U R7                  [9        TT
R:                  5      5      5      7v •  g  Nè! [        R                   a     Of = f/ nU GH#  nUc  Sn  GO[        U[        5      (       ab  [        R                  SUR                   35        UR                  U R                  UR                  5      5        SR                  U5      7v •    g [        U[        5      (       a£  U R                  (       a  UR                  U R!                  5       5        U R"                  (       a  UR                  U R%                  5       5        UR                  U R'                  T SU 3UR(                  UR*                  5      5        US-  nGM;  [        U[,        5      (       aS  U R                  (       d  UR                  U R/                  5       5        UR                  U R1                  U5      5        GM£  U R                  (       a  UR                  U R!                  5       5        U R"                  (       d  UR                  U R3                  5       5        UR                  U R5                  U5      5        GM&     U(       a  SR                  U5      7v •  U(       d  GMi  GN/! [<        [        R>                  4 a    T
RA                  5         e f = f7f)	N)rP   rQ   rV   r   FTz"Exception in response generation: Ú_tool_call_r#   )!rN   r  r|   rÎ   r²   Ú
get_nowaitÚasyncioÚ
QueueEmptyrÍ   r)   rå   r·   rµ   r¾   r(   r_   r•   r`   r©   r³   r¬   r­   r'   r†   r�   r    r¤   r’   Úcompute_usageÚtotal_tokensÚGeneratorExitÚCancelledErrorÚcancel)ÚbuilderÚtool_call_indexÚdoneÚbatchr”   r…   Ú	input_lenÚqueuerP   rQ   Ústreamers         €€€€€r?   Úevent_streamÚ0ResponseHandler._streaming.<locals>.event_streamV  sï  øé € Ü,¸
ÐVgÑhˆGð>Ø—g‘g˜g×4Ñ4Ó6Ó7Ó7à"#�Ø�ÞØ#(§9¡9£;×.Ð/�EðØ"Ø!ŸL™L¨×)9Ñ)9Ó);Ô<ñ #ðV ×)×)ØŸ'™' '×":Ñ":Ó"<Ó=Ó=Ø×+×+ØŸ'™' '×"7Ñ"7Ó"9Ó:Ó:Ø—g‘g˜g×4Ñ4Ó6Ó7Ó7à—g‘g˜g×/Ñ/´¸iÈ×I^ÑI^Ó0_Ó`ÓaÔañg /øô #×-Ñ-ó Ùðúð (*�EÜ %˜Ø™<Ø#'˜DÚ!Ü% d¬L×9Ñ9Ü"ŸL™LÐ+MÈdÏhÉhÈZÐ)XÔYØ!ŸL™L¨¯©°t·x±xÓ)@ÔAØ"$§'¡'¨%£.Ó0Ù"Ü% d¬H×5Ñ5ð  '×5×5Ø %§¡¨W×-EÑ-EÓ-GÔ HØ&×3×3Ø %§¡¨W×-CÑ-CÓ-EÔ FØ!ŸL™LØ '× 1Ñ 1Ø'1 l°+¸oÐ=NÐ$OÐQU×QZÑQZÐ\`×\jÑ\jó!"ôð
 ,¨qÑ0›OÜ'¨¬m×<Ñ<Ø#*×#9×#9Ø %§¡¨W×-DÑ-DÓ-FÔ GØ!ŸL™L¨×)@Ñ)@ÀÓ)F×Gà&×5×5Ø %§¡¨W×-EÑ-EÓ-GÔ HØ#*×#7×#7Ø %§¡¨W×-BÑ-BÓ-DÔ EØ!ŸL™L¨×);Ñ);¸DÓ)A×Bñ? !&öB Ø Ÿg™g e›nÓ,÷W ›$øôj "¤7×#9Ñ#9Ð:ó ð —‘Ô!Øð	üsb   ƒO�A N' ÁD8ÁN' Á"D: Á8B?N' Ä7OÄ8N' Ä:EÅN' ÅEÅB	N' ÇOÇGN' Î',OÏOztext/event-stream)Ú
media_type)r*   Úgenerate_streamingrÍ   rÃ   ÚlenÚshapeÚtimerÎ   r   r:   r
   )rd   rP   rö   rÈ   rõ   rÆ   rû   rü   rÞ   r$  r#  r:  r7  r8  rQ   r9  s    `          @@@@r?   ró   ÚResponseHandler._streaming2  sÖ   ü€ ô 0°	À&ÈÑBUÓVˆØ%×8Ñ8ØØØØØ!Ø+ð 9ð 
‰ˆˆxð ˜;Ñ'ˆ	ä&0°¼D×&AÑ&A”C˜	”NÀyÇÁÐWYÑGZˆ	ð ˜*˜Ð&ÜŸ)š)›+ØØ àØ#'§8¡8Ð,AÀ5Ó#IØ!ñ	
Ðð@	¤N´3¸°9Ñ$=÷ @	ó @	ôD !¡£Ð<OÑPÐPr>   c	              ƒ   óˆ  #   • UR                  X#XgUS9I Sh  v•N u  pšn[        X2X¶S   U	S9u  pœn/ nU(       a#  UR                  [        SU 3S/ SUS./S	S
95        UR                  [	        SU 3SS	S[        SU	/ S9// S95        U(       aM  [        U5       H>  u  nnU SU 3nUR                  [        UUSUR                  UR                  S	S95        M@     [        U
[        U5      5      n[        SU 3[        R                  " 5       S	UUSU/ UR                  SS5      SS9
n[        UR!                  SS95      $  GN(7f)z;Generate a non-streaming Responses API reply (single JSON).)rP   Nr#  )r#  Úcleaned_contentrU   r€   r�   r‘   r’   r�   rT   r˜   r™   r›   rœ   r§   r*  r¯   r°   rS   ry   r%  Fr&  )
r‚   r'  rn   rö   ru   r(  r½   rÖ   r%  rH   T)Úexclude_none)Úgenerate_non_streamingr+   r²   r   r   r   Ú	enumerater   r¬   r­   r.  r>  r   r@  rÎ   r	   Ú
model_dump)rd   rP   rö   rÈ   rõ   rÆ   rû   rü   rÞ   r]   r7  Úgenerated_idsr  Úparsed_tool_callsÚoutput_itemsÚir   r«   r½   ry   s                       r?   rô   ÚResponseHandler._non_streamingœ  s™  é € ð 3>×2TÑ2TØ˜f¸Zð 3Uð 3
÷ -
Ñ)ˆ˜Mô 9PØ˜m¸kÑ7JÐ\cñ9
Ñ5ˆÐ$5ð ˆÞØ×ÑÜ%Ø˜Z˜LÐ)Ø$ØØ&6Ð@QÑRÐSØ&ñôð 	×ÑÜ!Ø˜*˜Ð&ØØ"Ø Ü+°ÀWÐZ\Ñ]Ð^Øñô		
ö Ü"Ð#4Ö5‘��2Ø%˜, k°!°Ð5�Ø×#Ñ#Ü,Ø Ø %Ø,ØŸW™WØ"$§,¡,Ø*ñö	ñ 6ô ˜i¬¨]Ó);Ó<ˆÜØ�z�lÐ#Ü—y’y“{ØØØØØàØ $§¡Ð)>ÀÓ FØñ
ˆô ˜H×/Ñ/¸TÐ/ÐBÓCÐCòw-
ùs   ‚E—D?˜D(EÚmodel_generation_configrÊ   c                 ón   >• [         TU ]  XUS9nUR                  S5      b  [        US   5      Ul        U$ )zXApply Responses API params (``max_output_tokens``) on top of the base generation config.rÉ   Úmax_output_tokens)Úsuperrñ   rÎ   r<   Úmax_new_tokens)rd   rÆ   rM  rÊ   r3   Ú	__class__s        €r?   rñ   Ú(ResponseHandler._build_generation_configç  sC   ø€ ä!™GÑ<¸TÐciÐ<ÐjÐà�8‰8Ð'Ó(Ñ4Ü/2°4Ð8KÑ3LÓ/MÐÔ,à Ð r>   r5   )F)r6   r7   r8   r9   rÁ   r1   Ú_valid_params_classÚUNUSED_RESPONSE_FIELDSÚ_unused_fieldsrÂ   r:   r
   r	   rþ   ÚstaticmethodrÃ   rì   rè   r  r$   ró   rô   Úboolrñ   r=   Ú__classcell__)rR  s   @r?   rÅ   rÅ   h  sÂ  ø† Ù5àCÐØ+€NðN¨ð N¸3ð NÐCTÐWcÑCcô Nðd ð
  T¡
¨TÑ 1ð 
°d¸4±jÀ4Ñ6Gó 
ó ð
ð ð*˜tð *¨¨T©
ó *ó ð*ðX ð0¨¨d©ð 0¸¸T¹
ó 0ó ð0ðhfQàðfQð !ðfQð >ð	fQð
 ðfQð ðfQð ðfQð 'ðfQð )ðfQð 
ôfQðTGDàðGDð !ðGDð >ð	GDð
 ðGDð ðGDð ðGDð 'ðGDð )ðGDð 
ôGDñV!¨Tð !ÐL^ð !Ðhl÷ !ö !r>   rÅ   Úinput_tokensÚoutput_tokensrg   c                 ót   • [        U UX-   [        SSS0S[        R                  ;   a  SS0O0 D6[        SS9S9$ )zýBuild a ``ResponseUsage`` object for a Responses API reply.

Args:
    input_tokens (`int`): Number of prompt tokens.
    output_tokens (`int`): Number of generated tokens.

Returns:
    `ResponseUsage`: Usage statistics with zero-filled detail fields.
Úcached_tokensr   Úcache_write_tokens)Úreasoning_tokens)rZ  r[  r/  Úinput_tokens_detailsÚoutput_tokens_detailsr5   )r"   r    Úmodel_fieldsr!   )rZ  r[  s     r?   r.  r.  ñ  sV   € ô Ø!Ø#Ø!Ñ1Ü/ñ 
Øð
à+?ÔCU×CbÑCbÓ+bÐ# QÑ'Ðhjñ
ô 2À1ÑEñ	ð 	r>   )ArÁ   r,  r@  Úcollections.abcr   Útypingr   Úutilsr   Úutils.import_utilsr   Úfastapir   Úfastapi.responsesr	   r
   Úopenai.types.responsesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú-openai.types.responses.response_create_paramsr   Ú%openai.types.responses.response_usager    r!   r"   r$   r%   r&   r'   r(   r)   r*   r+   Útransformersr,   r-   r.   r/   Ú
get_loggerr6   rå   r1   rU  rN   rÅ   r<   r.  r5   r>   r?   Ú<module>rn     sÓ   ðñó Û Ý *Ý  å Ý 4ñ ×ÑÝ%ßA÷÷ ÷ ÷ ÷ ó õ, \ßlÑl÷	÷ 	ó 	ö ßgÓgð 
×	Ò	˜HÓ	%€ôÐ0MÐUZò ò
Ð ÷ C
ñ C
ôLF!�kô F!ðR ð °Cð ¸Mõ r>   