Ë
    ÛÓ^ju  ã                   ó¶  — d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
  e
«       rJddlmZ dd	lmZ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$ ddl%m&Z& ddl'm(Z(m)Z)m*Z* ddlm+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 erddl4m5Z5m6Z6m7Z7m8Z8  ejr                  e:«      Z; G d„ de&d¬«      Z<h d£Z= G d„ d«      Z> G d„ de,«      Z?de@de@de*fd„ZAy)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Ú_StreamErrorÚget_reasoning_configÚget_tool_call_configÚparse_reasoningÚparse_tool_calls)ÚGenerationConfigÚPreTrainedModelÚPreTrainedTokenizerFastÚProcessorMixinc                   ó"   — e Zd ZU eed<   eed<   y)Ú)TransformersResponseCreateParamsStreamingÚgeneration_configÚseedN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Úint© ó    úl/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/cli/serving/response.pyr2   r2   N   s   … ØÓØ
„Ir<   r2   F)Útotal>   ÚtextÚuserÚstoreÚpromptÚincludeÚ
backgroundÚ
truncationÚtool_choiceÚservice_tierÚtop_logprobsÚmax_tool_callsÚprevious_response_idc            	       ó  — e Zd ZdZdedefd„Zdefd„Zdeddfd	„Zde	e   fd
„Z
de	e   fd„Zdede	e   fd„Zde	e   fd„Zde	e   fd„Zdede	e   fd„Zde	e   fd„Zdededede	e   fd„Zdede	e   fd„Zde	e   fd„Zy)Ú_ResponseStreamBuilderz=Builds SSE events for one streaming Responses API generation.Ú
request_idÚresponse_defaultsc                óÌ   — || _         d|› �| _        d|› �| _        d|› �| _        d| _        d| _        d| _        d| _        d| _        d| _	        d | _
        d | _        g | _        y )NÚresp_Úmsg_Úrs_r   Ú F)Ú_response_defaultsÚresp_idÚmsg_idÚreasoning_idÚseqÚoutput_indexÚ	full_textÚfull_reasoningÚreasoning_openÚmessage_openÚreasoning_itemÚmessage_itemÚ
tool_calls)ÚselfrM   rN   s      r=   Ú__init__z_ResponseStreamBuilder.__init__f   sz   € Ø"3ˆÔØ˜z˜lÐ+ˆŒØ˜Z˜LÐ)ˆŒØ! * Ð.ˆÔØˆŒØˆÔØˆŒØ ˆÔØ#ˆÔØ!ˆÔØ<@ˆÔØ:>ˆÔØ:<ˆ�r<   Úreturnc                 óZ   — t        j                  |«      }| xj                  dz  c_        |S )Nr#   )r%   Úchunk_to_sserX   )ra   ÚeventÚsses      r=   Ú_emitz_ResponseStreamBuilder._emitu   s$   € Ü×&Ñ& uÓ-ˆØ�Š�A‰�Øˆ
r<   Ústatusr   c                 ó8   — t        di | j                  ¤d|i¤|¤ŽS )Nri   r;   )r   rT   )ra   ri   Úextras      r=   Ú	_responsez _ResponseStreamBuilder._responsez   s    € ÜÑJ˜$×1Ñ1ÑJ¸&ÑJÀEÑJÐJr<   c                 óâ   — | j                  t        d| j                  | j                  dg ¬«      ¬«      «      | j                  t	        d| j                  | j                  dg ¬«      ¬«      «      gS )Nzresponse.createdÚqueued)Úoutput©ÚtypeÚsequence_numberÚresponsezresponse.in_progressÚin_progress)rh   r   rX   rl   r   ©ra   s    r=   Ústart_responsez%_ResponseStreamBuilder.start_response}   sj   € à�J‰JÜ$Ø+Ø$(§H¡HØ!Ÿ^™^¨H¸R˜^Ó@ôóð �J‰JÜ'Ø/Ø$(§H¡HØ!Ÿ^™^¨MÀ"˜^ÓEôóð
ð 	
r<   c                 ó¦   — d| _         | j                  t        d| j                  | j                  t        | j                  dg g d¬«      ¬«      «      gS )NTúresponse.output_item.addedÚ	reasoningrt   ©Úidrq   ÚsummaryÚcontentri   ©rq   rr   rY   Úitem)r\   rh   r   rX   rY   r   rW   ru   s    r=   Ústart_reasoningz&_ResponseStreamBuilder.start_reasoning�   sV   € Ø"ˆÔà�J‰JÜ,Ø5Ø$(§H¡HØ!%×!2Ñ!2Ü.Ø×,Ñ,°;ÈÐTVÐ_lôô	ó	ð
ð 	
r<   r?   c           
      óª   — | xj                   |z  c_         | j                  t        d| j                  | j                  | j
                  d|¬«      «      gS )Nzresponse.reasoning_text.deltar   )rq   Úitem_idrr   rY   Úcontent_indexÚdelta)r[   rh   r   rW   rX   rY   ©ra   r?   s     r=   Úreasoning_deltaz&_ResponseStreamBuilder.reasoning_deltaž   sS   € Ø×Ò˜tÑ#Õà�J‰JÜ/Ø8Ø ×-Ñ-Ø$(§H¡HØ!%×!2Ñ!2Ø"#Øôó	ð
ð 	
r<   c           
      ó   — t        | j                  dg d| j                  dœgd¬«      | _        | j	                  t        d| j                  | j                  | j                  d| j                  ¬«      «      | j	                  t        d	| j                  | j                  | j                  ¬
«      «      g}d| _	        | xj                  dz  c_        |S )Nry   Úreasoning_text©rq   r?   Ú	completedrz   zresponse.reasoning_text.doner   )rq   r‚   rr   rY   rƒ   r?   úresponse.output_item.doner~   Fr#   )
r   rW   r[   r^   rh   r   rX   rY   r   r\   )ra   Úpartss     r=   Úfinish_reasoningz'_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                 ó8  — d| _         | j                  t        d| j                  | j                  t        | j                  dddg ¬«      ¬«      «      | j                  t        d| j                  | j                  | j                  d	t        d
dg ¬«      ¬«      «      gS )NTrx   Úmessagert   Ú	assistant)r{   rq   ri   Úroler}   r~   zresponse.content_part.addedr   Úoutput_textrS   ©rq   r?   Úannotations©rq   r‚   rr   rY   rƒ   Úpart)	r]   rh   r   rX   rY   r   rV   r   r   ru   s    r=   Ústart_messagez$_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                 ó¬   — | xj                   |z  c_         | j                  t        d| j                  | j                  | j
                  d|g ¬«      «      gS )Nzresponse.output_text.deltar   )rq   r‚   rr   rY   rƒ   r„   Úlogprobs)rZ   rh   r   rV   rX   rY   r…   s     r=   Ú
text_deltaz!_ResponseStreamBuilder.text_deltaæ   sQ   € Ø�Š˜$Ñ�à�J‰JÜ&Ø5Ø ŸK™KØ$(§H¡HØ!%×!2Ñ!2Ø"#ØØôó
ð
ð 	
r<   c                 ó
  — t        d| j                  g ¬«      }t        | j                  ddd|gg ¬«      | _        | j                  t        d| j                  | j                  | j                  d| j                  g ¬	«      «      | j                  t        d
| j                  | j                  | j                  d|¬«      «      | j                  t        d| j                  | j                  | j                  ¬«      «      g}d| _        |S )Nr’   r“   r�   rŠ   r�   ©r{   rq   ri   r‘   r}   r”   zresponse.output_text.doner   )rq   r‚   rr   rY   rƒ   r?   r™   zresponse.content_part.doner•   r‹   r~   F)r   rZ   r   rV   r_   rh   r   rX   rY   r   r   r]   )ra   Úoutput_text_partrŒ   s      r=   Úfinish_messagez%_ResponseStreamBuilder.finish_messageö   s÷   € Ü-°=ÀtÇ~Á~ÐceÔfÐÜ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                 ó²  — | xj                   dz  c_         t        ||d||d¬«      }| j                  j                  |«       | j	                  t        d| j                  | j                   |¬«      «      | j	                  t        d| j                  || j                   ||¬«      «      | j	                  t        d	| j                  | j                   |¬«      «      gS )
Nr#   Úfunction_callrŠ   ©r{   Úcall_idrq   r    r¡   ri   rx   r~   z%response.function_call_arguments.done)rq   rr   r‚   rY   r¡   r    r‹   )	rY   r   r`   Úappendrh   r   rX   r   r   )ra   rŸ   r    r¡   r   s        r=   Ú	tool_callz _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                 óØ   — | j                  t        d| j                  |¬«      «      | j                  t        d| j                  | j	                  dg t        d|¬«      ¬«      ¬«      «      gS )	NÚerror)rq   rr   r�   zresponse.failedÚfailedÚserver_error)Úcoder�   )ro   rª   rp   )rh   r   rX   r   rl   r   )ra   r¨   s     r=   rª   z_ResponseStreamBuilder.errorJ  se   € à�J‰JÔ)¨wÈÏÉÐZ]Ô^Ó_Ø�J‰JÜ#Ø*Ø$(§H¡HØ!Ÿ^™^Ø ¨´=ÀnÐ^aÔ3bð ,ó ôóð
ð 	
r<   c                 ó4  — g }| j                   �|j                  | j                   «       |j                  | j                  «       |j                  | j                  «       | j                  t        d| j                  | j                  d||¬«      ¬«      «      gS )Nzresponse.completedrŠ   )ro   Úusagerp   )	r^   r¦   r_   Úextendr`   rh   r   rX   rl   )ra   r¯   Ú
all_outputs      r=   rŠ   z _ResponseStreamBuilder.completedX  sˆ   € Øˆ
Ø×ÑÐ*Ø×Ñ˜d×1Ñ1Ô2Ø×Ñ˜$×+Ñ+Ô,Ø×Ñ˜$Ÿ/™/Ô*à�J‰JÜ&Ø-Ø$(§H¡HØ!Ÿ^™^¨KÀ
ÐRW˜^ÓXôóð
ð 	
r<   N)r5   r6   r7   Ú__doc__r8   Údictrb   rh   rl   Úlistrv   r€   r†   r�   r—   rš   rž   r§   rª   rŠ   r;   r<   r=   rL   rL   c   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<   rL   c                   óX  ‡ — e Zd ZdZeZeZdede	de
ez  fd„Zedee   dz  dee   dz  fd„«       Zededee   fd	„«       Zed
ee   dee   fd„«       Z	 	 dde	ddddde	dededddededz  dedz  de
fd„Z	 	 dde	ddddde	dededddededz  dedz  defd„Zddedddefˆ fd„Zˆ xZS )ÚResponseHandlerz+Handler for the ``/v1/responses`` endpoint.ÚbodyrM   rc   c              ƒ   ó|  K  — | j                  |«       | j                  |«      \  }}}| j                  j                  ||¬«      }| j                  j                  ||«      }t        j                  d|› d|› �«       | j                  j                  ||¬«      }| j                  |«      }	| j                  |	|«      }
t        d„ |
D «       «      }i }|rd|d<   |j                  | j                  «       |j                  |j                  d«      xs i «       | j                  |j                  d	«      «      } |j                   |
fd
||rdndd
d
|t"        j$                  k(  xr |dœ|¤Ž}|s|j'                  |j(                  «      }| j+                  ||j,                  |¬«      }|r|j/                  ||«       |j                  d	«      rt1        ||«      nd}t3        |||d   «      }|j                  dd
«      }|r| j5                  ||||||||||¬«
      S | j7                  ||||||||||¬«
      ƒ d{  –—† S 7 Œ­w)az  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   ó²   K  — | ]O  }t        |j                  d «      t        «      r|j                  d «      ng D ]  }|j                  d«      dk(  –— Œ ŒQ y­w)r}   rq   ÚvideoN)Ú
isinstanceÚgetr´   )Ú.0r¨   Úcs      r=   ú	<genexpr>z1ResponseHandler.handle_request.<locals>.<genexpr>‡  sX   è ø€ ò 
àÜ,6°s·w±w¸yÓ7IÌ4Ô,P�c—g‘g˜iÔ(ÐVXò
ð ð �E‰E�&‹M˜WÕ$ð
Ø$ñ
ùs   ‚AAé    Ú
num_framesÚchat_template_kwargsÚtoolsTNÚpt)Úadd_generation_promptrÆ   Úreturn_tensorsÚreturn_dictÚtokenizeÚload_audio_from_videoÚ	input_idsÚstream)Úgen_managerÚtool_configÚreasoning_config)Ú_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_cbr*   r)   Ú
_streamingÚ_non_streaming)ra   r·   rM   Úmodel_idÚmodelr¹   Úmodalityr»   rÏ   ÚmessagesÚprocessor_inputsÚ	has_videorÅ   rÆ   ÚinputsÚ
gen_configrÐ   rÑ   Ú	streamings                      r=   Úhandle_requestzResponseHandler.handle_requesto  s{  è ø€ ð 	×Ñ˜tÔ$à%)×%8Ñ%8¸Ó%>Ñ"ˆ�%˜Ø×%Ñ%×8Ñ8¸È)Ð8ÓTˆØ×&Ñ&×>Ñ>¸uÀhÓOˆÜ�‰Ð3°H°:¸VÀFÀ8ÐLÔMØ×+Ñ+×7Ñ7¸ÈÐ7ÓPˆð
 ×(Ñ(¨Ó.ˆØ×BÑBÀ8ÈXÓ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Ó`ˆ
áØ×Ñ  zÔ2Ø@DÇÁÈÔ@QÔ*¨9°eÔ<ÐW[ˆÜ/°	¸5À&ÈÑBUÓVÐà—H‘H˜X tÓ,ˆ	ÙØ—?‘?ØØØØØØØØ'Ø'Ø!1ð #ó ð ð ×,Ñ,ØØØØØØØØ'Ø'Ø!1ð -ó ÷ ð ð ús   ‚H3H<È5H:È6H<rÆ   Nc                 ó®   — | s| S | D ���cg c]5  }d|vr-d|j                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ c}}dœn|‘Œ7 c}}}S c c}}w c c}}}w )a€  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.
        Úfunctionrq   )rq   ró   )Úitems)rÆ   ÚtÚkÚvs       r=   rß   z ResponseHandler._normalize_toolsÈ  sk   € ñ ØˆLð ÷
ð 
àð ^hÐopÑ]p�Z¸q¿w¹w»y×-X±t°q¸!ÈAÐQWËK¨a°©dÓ-XÒYÐvwÑwô
ð 	
ùÛ-Xùô
s   ‹A¨A
¶A
»
AÁ
Ac                 óB  — | d   }| j                  d«      }t        |t        «      rd|dœg}nCt        |t        «      r&|rd|d   vrd|dœg}n#t        j                  |«      }nt        dd¬	«      ‚|r,|r|d   d   d
k(  r
||d   d<   |S |j                  dd
|dœ«       |S )uQ  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Úinstructionsr@   ©r‘   r}   r‘   r   é¦  z 'input' must be a string or list©Ústatus_codeÚdetailÚsystemr}   )r¿   r¾   r8   r´   r¶   Ú_normalize_response_itemsr   Úinsert)r·   Úinprú   rë   s       r=   rÛ   z 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                 ó>  — g }d}| D �]  }|j                  d«      }|dk(  r,dj                  d„ |j                  d«      xs g D «       «      }ŒFd|v r;|d   |j                  dd«      dœ}|�|d   d	k(  r||d
<   d}|j                  |«       Œ…|dk(  rY|d   |d   |d   dœdœ}|r0|d   d   d	k(  r%|d   j                  dg «      j                  |«       ŒÍ|j                  d	|gdœ«       Œã|dk(  r|j                  d|d   |d   dœ«       �Œt	        dd|›�¬«      ‚ |S )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.
        Nrq   ry   rS   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r?   Nr;   )rÀ   rÁ   s     r=   rÂ   z<ResponseHandler._normalize_response_items.<locals>.<genexpr>  s   è ø€ Ò+Y¸!¨A¨f­IÑ+Yùs   ‚r}   r‘   rû   r�   Úreasoning_contentr£   r¥   r    r¡   )r    r¡   )r{   ró   éÿÿÿÿr`   )r‘   r`   Úfunction_call_outputÚtoolro   )r‘   Útool_call_idr}   rü   zUnsupported input item type: rý   )r¿   Újoinr¦   Ú
setdefaultr   )rô   rë   Úpending_reasoningr   Ú	item_typer¨   Útcs          r=   r  z)ResponseHandler._normalize_response_items  sf  € ð ˆØ(,Ðàó "	kˆDØŸ™ Ó(ˆIà˜KÒ'Ø$&§G¡GÑ+Y¸t¿x¹xÈ	Ó?RÒ?XÐVXÔ+YÓ$YÐ!Øà˜‰~Ø# F™|¸¿¹ÀÈBÓ8OÑP�Ø$Ð0°T¸&±\À[Ò5PØ/@�CÐ+Ñ,Ø(,Ð%Ø—‘ Õ$à˜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"	kðH ˆr<   ré   r.   r¹   z(ProcessorMixin | PreTrainedTokenizerFastrè   rî   rï   r-   rÏ   rÐ   rÑ   c           	      ó\  ‡‡‡	‡‡‡‡— |j                  |‰||‰‰	|
¬«      \  ŠŠ|d   }t        |t        «      rt        |«      n|j                  d   Šd‰› �t        j
                  «       |dg |j                  dd«      dd	œŠd
t        t        df   fˆˆˆˆˆˆˆ	fd„}t         |«       d¬«      S )zDGenerate a streaming Responses API reply (SSE) using DirectStreamer.)rM   rÐ   rÑ   rÍ   r  rP   rs   Úparallel_tool_callsFÚauto)r{   Ú
created_atré   ÚobjectrÆ   r  rF   rc   Nc            	     ó�  •K  — t        ‰‰¬«      } 	 dj                  | j                  «       «      ­–— d}|s;‰
j                  «       ƒ d {  –—† g}	 	 |j	                  ‰
j                  «       «       Œ | j                  r"dj                  | j%                  «       «      ­–— | j&                  s"dj                  | j)                  «       «      ­–— dj                  | j-                  «       «      ­–— ‰r_t/        ‰	‰j0                  ‰d   «      }|rCt3        |«      D ]5  \  }}dj                  | j5                  ‰› d|› �|d   |d	   «      «      ­–— Œ7 dj                  | j7                  t9        ‰‰j:                  «      «      «      ­–— y 7 �Œ?# t        j                  $ r Y nw xY wg }|D �]N  }|€d} �nGt        |t        «      rbt        j                  d|j                  › �«       |j                  | j                  |j                  «      «       dj                  |«      ­–—  y t        |t        «      rL| j                  s|j                  | j!                  «       «       |j                  | j#                  |«      «       ŒÙ| j                  r|j                  | j%                  «       «       | j&                  s|j                  | j)                  «       «       |j                  | j+                  |«      «       �ŒQ |rdj                  |«      ­–— |s�ŒÞ�Œ¥# t<        t        j>                  f$ r ‰jA                  «        ‚ w xY w­w)
N)rM   rN   rS   FTz"Exception in response generation: ÚschemaÚ_tool_call_r    r¡   )!rL   r  rv   r¿   r¦   Ú
get_nowaitÚasyncioÚ
QueueEmptyr¾   r(   rØ   rª   r¨   r°   r'   r\   r€   r†   r�   r]   r—   rš   rž   r,   Úgenerated_token_idsÚ	enumerater§   rŠ   Úcompute_usageÚtotal_tokensÚGeneratorExitÚCancelledErrorÚcancel)ÚbuilderÚdoneÚbatchrŒ   r?   ÚparsedÚir  Ú	input_lenr¹   ÚqueuerM   rN   ÚstreamerrÐ   s           €€€€€€€r=   Úevent_streamz0ResponseHandler._streaming.<locals>.event_stream`  sÐ  øè ø€ Ü,¸
ÐVgÔhˆGð<Ø—g‘g˜g×4Ñ4Ó6Ó7Ó7ð �ÙØ#(§9¡9£;×.Ð/�EðØ"Ø!ŸL™L¨×)9Ñ)9Ó);Ô<ð #ð< ×)Ò)ØŸ'™' '×":Ñ":Ó"<Ó=Ó=Ø×+Ò+ØŸ'™' '×"7Ñ"7Ó"9Ó:Ó:Ø—g‘g˜g×4Ñ4Ó6Ó7Ó7ñ Ü-¨i¸×9UÑ9UÐWbÐckÑWlÓm�FÙÜ%.¨vÓ%6ò ™E˜A˜rØ"$§'¡'Ø '× 1Ñ 1°Z°LÀÈAÈ3Ð2OÐQSÐTZÑQ[Ð]_Ð`kÑ]lÓ mó#ô ðð
 —g‘g˜g×/Ñ/´¸iÈ×I^ÑI^Ó0_Ó`ÓaÔaða /úô #×-Ñ-ò Ùðúð (*�EØ %ó C˜Ø˜<Ø#'˜DÚ!Ü% d¬LÔ9Ü"ŸL™LÐ+MÈdÏhÉhÈZÐ)XÔYØ!ŸL™L¨¯©°t·x±xÓ)@ÔAØ"$§'¡'¨%£.Ó0Ù"Ü% d¬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ð%Cñ( Ø Ÿg™g e›nÓ,ó= úôd "¤7×#9Ñ#9Ð:ò ð —‘Ô!Øð	üsa   ƒM’9L ÁF
ÁL Á!F Á3DL Æ	MÆ
L ÆF#Æ L Æ"F#Æ#BL È&MÈ'C-L Ì+MÍMztext/event-stream)Ú
media_type)
Úgenerate_streamingr¾   r´   ÚlenÚshapeÚtimer¿   r   r8   r
   )ra   rM   ré   r¹   rè   r·   rî   rï   rÏ   rÐ   rÑ   rÍ   r*  r'  r(  rN   r)  s    ` `     `   @@@@r=   ræ   zResponseHandler._streaming:  sÂ   þ€ ð &×8Ñ8ØØØØØ!Ø#Ø-ð 9ó 
‰ˆˆxð ˜;Ñ'ˆ	ä&0°¼DÔ&A”C˜	”NÀyÇÁÐWYÑGZˆ	ð ˜*˜Ð&ÜŸ)™)›+ØØ àØ#'§8¡8Ð,AÀ5Ó#IØ!ñ	
Ðð>	¤N´3¸°9Ñ$=÷ >	ó >	ô@ !¡£Ð<OÔPÐPr<   c              ƒ   óª  K  — |j                  |||||¬«      ƒ d{  –—† \  }}}g }|
�9t        ||||
«      \  }}|�&|j                  t        d|› �dg d|dœgd¬«      «       |j                  t	        d	|› �d
ddt        d|g ¬«      gg ¬«      «       |	�Rt        |||	d   «      }|r@t        |«      D ]2  \  }}|› d|› �}|j                  t        ||d|d   |d   d¬«      «       Œ4 t        |t        |«      «      }t        d|› �t        j                  «       d||d|g |j                  dd«      d¬«
      }t        |j                  d¬«      «      S 7 �Œ4­w)z;Generate a non-streaming Responses API reply (single JSON).)rM   NrR   ry   rˆ   r‰   rŠ   rz   rQ   r�   r�   r’   r“   rœ   r  r  r£   r    r¡   r¤   rP   rs   r  Fr  )
r{   r  ri   ré   ro   r  r¯   rÆ   r  rF   T)Úexclude_none)Úgenerate_non_streamingr+   r¦   r   r   r   r,   r  r   r  r-  r   r/  r¿   r	   Ú
model_dump)ra   rM   ré   r¹   rè   r·   rî   rï   rÏ   rÐ   rÑ   rZ   r'  Úgenerated_idsÚoutput_itemsr  r%  r&  r  rŸ   r¯   rs   s                         r=   rç   zResponseHandler._non_streaming¤  s¿  è ø€ ð 5@×4VÑ4VØ�9˜f j¸Zð 5Wó 5
÷ /
Ñ+ˆ	�9˜mð ˆØÐ'Ü+:¸9ÀmÐU^Ð`pÓ+qÑ(ˆIÐ(Ø Ð,Ø×#Ñ#Ü)Ø   Ð-Ø(Ø "Ø*:ÐDUÑ!VÐ WØ*ôôð 	×ÑÜ!Ø˜*˜Ð&ØØ"Ø Ü+°ÀYÐ\^Ô_Ð`Øôô		
ð Ð"Ü% i°ÀÈHÑ@UÓVˆFÙÜ& vÓ.ò ‘E�A�rØ)˜l¨+°a°SÐ9�EØ ×'Ñ'Ü0Ø$Ø$)Ø!0Ø!# F¡Ø&(¨¡oØ#.ôõ	ðô ˜i¬¨]Ó);Ó<ˆÜØ�z�lÐ#Ü—y‘y“{ØØØØØàØ $§¡Ð)>ÀÓ FØô
ˆô ˜H×/Ñ/¸TÐ/ÓBÓCÐCðw/
ûs   ‚EœE�D4EÚmodel_generation_configr»   c                 ót   •— t         ‰| �  |||¬«      }|j                  d«      �t        |d   «      |_        |S )zXApply Responses API params (``max_output_tokens``) on top of the base generation config.rº   Úmax_output_tokens)Úsuperrä   r¿   r:   Úmax_new_tokens)ra   r·   r6  r»   r3   Ú	__class__s        €r=   rä   z(ResponseHandler._build_generation_configñ  sF   ø€ ä!™GÑ<¸TÐCZÐciÐ<ÓjÐà�8‰8Ð'Ó(Ð4Ü/2°4Ð8KÑ3LÓ/MÐÔ,à Ð r<   )NN)F)r5   r6   r7   r²   r2   Ú_valid_params_classÚUNUSED_RESPONSE_FIELDSÚ_unused_fieldsr³   r8   r
   r	   rñ   Ústaticmethodr´   rß   rÛ   r  r$   ræ   rç   Úboolrä   Ú__classcell__)r;  s   @r=   r¶   r¶   i  s  ø„ Ù5àCÐØ+€NðU¨ð U¸3ð UÐCTÐWcÑCcó Uðr ð
  T¡
¨TÑ 1ð 
°d¸4±jÀ4Ñ6Gò 
ó ð
ð ð*˜tð *¨¨T©
ò *ó ð*ðX ð0¨¨d©ð 0¸¸T¹
ò 0ó ð0ð| $(Ø(,ñfQàðfQð !ðfQð >ð	fQð
 ðfQð ðfQð ðfQð 'ðfQð )ðfQð ˜D‘[ðfQð  ™+ðfQð 
ófQðh $(Ø(,ñIDàðIDð !ðIDð >ð	IDð
 ðIDð ðIDð ðIDð 'ðIDð )ðIDð ˜D‘[ðIDð  ™+ðIDð 
óIDñZ!¨Tð !ÐL^ð !Ðhl÷ !ñ !r<   r¶   Úinput_tokensÚoutput_tokensrc   c                 ó~   — t        | || |z   t        dddidt        j                  v rddini ¤Žt        d¬«      ¬«      S )a  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)rB  rC  r  Úinput_tokens_detailsÚoutput_tokens_detailsr;   )r"   r    Úmodel_fieldsr!   )rB  rC  s     r=   r  r  û  sX   € ô Ø!Ø#Ø! MÑ1Ü/ñ 
Øð
à+?ÔCU×CbÑCbÑ+bÐ# QÑ'Ðhjñ
ô 2À1ÔEô	ð 	r<   )Br²   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+   r,   Útransformersr-   r.   r/   r0   Ú
get_loggerr5   rØ   r2   r=  rL   r¶   r:   r  r;   r<   r=   ú<module>rV     sÒ   ðñó Û Ý *Ý  å Ý 4ñ ÔÝ%ßA÷÷ ÷ ÷ ÷ ó õ, \ßlÑl÷
÷ 
õ 
ñ ßgÓgð 
ˆ×	Ñ	˜HÓ	%€ôÐ0MÐUZõ ò
Ð ÷ C
ñ C
ôLO!�kô O!ðd ð °Cð ¸Mô r<   