§
    ‚Štj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j9        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„ZAdS )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<   dS )Ú)TransformersResponseCreateParamsStreamingÚgeneration_configÚseedN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Úint© ó    ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/cli/serving/response.pyr2   r2   N   s%   € € € € € € ØÐÐÑØ
€I€I�I€I€Ir<   r2   F)Útotal>   ÚtextÚuserÚstoreÚpromptÚincludeÚ
backgroundÚ
truncationÚtool_choiceÚservice_tierÚtop_logprobsÚmax_tool_callsÚprevious_response_idc            	       óF  — 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dS )Ú_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 | _        d S )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   s�   € Ø"3ˆÔØ+˜zÐ+Ð+ˆŒØ)˜ZÐ)Ð)ˆŒØ. *Ð.Ð.ˆÔØˆŒØˆÔØˆŒØ ˆÔØ#ˆÔØ!ˆÔØ<@ˆÔØ:>ˆÔØ:<ˆŒˆˆr<   Úreturnc                 óN   — 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                 ó0   — t          di | j        ¤d|i¤|¤ŽS )Nri   r;   )r   rT   )ra   ri   Úextras      r=   Ú	_responsez _ResponseStreamBuilder._responsez   s)   € ÝÐJÐJ˜$Ô1ÐJÐJ¸&ÐJÐJÀEÐJÐJÐJr<   c                 óþ   — |                       t          d| j        |                      dg ¬¦  «        ¬¦  «        ¦  «        |                       t	          d| 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}   sŠ   € à�JŠJÝ$Ø+Ø$(¤HØ!Ÿ^š^¨H¸R˜^Ñ@Ô@ðñ ô ñô ð �JŠJÝ'Ø/Ø$(¤HØ!Ÿ^š^¨MÀ"˜^ÑEÔEðñ ô ñô ð
ð 	
r<   c                 ó    — d| _         |                      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�   sg   € Ø"ˆÔà�JŠJÝ,Ø5Ø$(¤HØ!%Ô!2Ý.ØÔ,°;ÈÐTVÐ_lðñ ô ð	ñ ô ñ	ô 	ð
ð 	
r<   r?   c           
      ó’   — | xj         |z  c_         |                      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ž   s]   € ØÐÔ˜tÑ#ÐÔà�JŠJÝ/Ø8Ø Ô-Ø$(¤HØ!%Ô!2Ø"#Øðñ ô ñ	ô 	ð
ð 	
r<   c           
      ód  — t          | j        dg d| j        dœgd¬¦  «        | _        |                      t          d| j        | j        | j        d| 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ÐLÐLÐMØð
ñ 
ô 
ˆÔð �JŠJÝ.Ø7Ø Ô-Ø$(¤HØ!%Ô!2Ø"#ØÔ,ðñ ô ñ	ô 	ð �JŠJÝ+Ø4Ø$(¤HØ!%Ô!2ØÔ,ð	ñ ô ñô ð
ˆð( $ˆÔØÐÔ˜QÑÐÔØˆr<   c                 ó,  — d| _         |                      t          d| j        | j        t          | j        dddg ¬¦  «        ¬¦  «        ¦  «        |                      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Ø!%Ô!2Ý.Øœ;¨Y¸}ÐS^Ðhjðñ ô ð	ñ ô ñ	ô 	ð �JŠJÝ-Ø6Ø œKØ$(¤HØ!%Ô!2Ø"#Ý+°ÀRÐUWÐXÑXÔXðñ ô ñ	ô 	ð
ð 	
r<   c                 ó”   — | xj         |z  c_         |                      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æ   s[   € ØˆŒ˜$ÑˆŒà�JŠJÝ&Ø5Ø œKØ$(¤HØ!%Ô!2Ø"#ØØðñ ô ñ
ô 
ð
ð 	
r<   c                 óÒ  — t          d| j        g ¬¦  «        }t          | j        ddd|gg ¬¦  «        | _        |                      t          d| j        | j        | j        d| j        g ¬	¦  «        ¦  «        |                      t          d
| j        | j        | j        d|¬¦  «        ¦  «        |                      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ÑfÔfÐÝ1ØŒ{ØØØØ%Ð&Øð
ñ 
ô 
ˆÔð �JŠJÝ%Ø4Ø œKØ$(¤HØ!%Ô!2Ø"#ØœØðñ ô ñ
ô 
ð �JŠJÝ,Ø5Ø œKØ$(¤HØ!%Ô!2Ø"#Ø)ðñ ô ñ	ô 	ð �JŠJÝ+Ø4Ø$(¤HØ!%Ô!2ØÔ*ð	ñ ô ñô ð-
ˆð> "ˆÔØˆr<   Útc_idÚnameÚ	argumentsc                 ó¢  — | xj         dz  c_         t          ||d||d¬¦  «        }| j                             |¦  «         |                      t          d| j        | j         |¬¦  «        ¦  «        |                      t          d| 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Ø!%Ô!2Øð	ñ ô ñô ð �JŠJÝ6Ø@Ø$(¤HØ!Ø!%Ô!2Ø'Øðñ ô ñ	ô 	ð �JŠJÝ+Ø4Ø$(¤HØ!%Ô!2Øð	ñ ô ñô ð'
ð 	
r<   Úmsgc                 óô   — |                       t          d| j        |¬¦  «        ¦  «        |                       t          d| 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  s„   € à�JŠJÕ)¨wÈÌÐZ]Ð^Ñ^Ô^Ñ_Ô_Ø�JŠJÝ#Ø*Ø$(¤HØ!Ÿ^š^Ø ¨µ=ÀnÐ^aÐ3bÑ3bÔ3bð ,ñ ô ðñ ô ñô ð
ð 	
r<   c                 ó2  — g }| j         �|                     | j         ¦  «         |                     | j        ¦  «         |                     | j        ¦  «         |                      t          d| 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Ñ2Ô2Ð2Ø×Ò˜$Ô+Ñ,Ô,Ð,Ø×Ò˜$œ/Ñ*Ô*Ð*à�JŠJÝ&Ø-Ø$(¤HØ!Ÿ^š^¨KÀ
ÐRW˜^ÑXÔ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ÐGð= cð =¸dð =ð =ð =ð =ð˜cð ð ð ð ð
K ð K°ð Kð 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                   óˆ  ‡ — 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                             ||¦  «        }t                               d|› d|› �¦  «         | j                             ||¬¦  «        }|  	                    |¦  «        }	|  
                    |	|¦  «        }
t          d„ |
D ¦   «         ¦  «        }i }|rd|d<   |                     | j        ¦  «         |                     |                     d¦  «        pi ¦  «         |                      |                     d	¦  «        ¦  «        } |j        |
fd
||rdndd
d
|t"          j        k    o|dœ|¤Ž}|s|                     |j        ¦  «        }|                      ||j        |¬¦  «        }|r|                     ||¦  «         |                     d	¦  «        rt1          ||¦  «        nd}t3          |||d         ¦  «        }|                     dd
¦  «        }|r|                      ||||||||||¬¦
  «
        S |                      ||||||||||¬¦
  «
        ƒ d{V —†S )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  — | ]_}t          |                     d ¦  «        t          ¦  «        r|                     d ¦  «        ng D ]}|                     d¦  «        dk    V — ŒŒ`dS )r}   rq   ÚvideoN)Ú
isinstanceÚgetr´   )Ú.0r¨   Úcs      r=   ú	<genexpr>z1ResponseHandler.handle_request.<locals>.<genexpr>‡  s‰   è è € ð 
ð 
àÝ,6°s·w²w¸yÑ7IÔ7IÍ4Ñ,PÔ,PÐX�c—g’g˜iÑ(Ô(Ð(ÐVXð
ð 
ð ð �EŠE�&‰MŒM˜WÒ$ð
ð 
ð 
ð 
ð 
ð 
ð 
r<   é    Ú
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ÔTˆØÔ&×>Ò>¸uÀhÑOÔOˆÝ�ŠÐL°HÐLÐLÀFÐLÐLÑMÔMÐMØÔ+×7Ò7¸ÈÐ7ÑPÔPˆð
 ×(Ò(¨Ñ.Ô.ˆØ×BÒBÀ8ÈXÑVÔVÐåð 
ð 
à'ð
ñ 
ô 
ñ 
ô 
ˆ	ð &(ÐØð 	4Ø13Ð  Ñ.Ø×#Ò# DÔ$=Ñ>Ô>Ð>Ø×#Ò# D§H¢HÐ-CÑ$DÔ$DÐ$JÈÑKÔKÐKà×%Ò% d§h¢h¨wÑ&7Ô&7Ñ8Ô8ˆØ.�Ô.Øð	
à"&ØØ#)Ð3˜4˜4¨tØØØ"*­hÔ.AÒ"AÐ"OÀið	
ð 	
ð #ð	
ð 	
ˆð ð 	-Ø—Y’Y˜uœ|Ñ,Ô,ˆFà×2Ò2°4¸Ô9PÐY_Ð2Ñ`Ô`ˆ
àð 	3Ø×Ò  zÑ2Ô2Ð2Ø@DÇÂÈÑ@QÔ@QÐ[Õ*¨9°eÑ<Ô<Ð<ÐW[ˆÝ/°	¸5À&ÈÔBUÑVÔVÐà—H’H˜X tÑ,Ô,ˆ	Øð 	Ø—?’?ØØØØØØØØ'Ø'Ø!1ð #ñ ô ð ð ×,Ò,ØØØØØØØØ'Ø'Ø!1ð -ñ ô ð ð ð ð ð ð ð r<   rÆ   Nc                 ó"   — | s| S d„ | D ¦   «         S )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.
        c                 ó\   — g | ])}d |vr!d d„ |                      ¦   «         D ¦   «         dœn|‘Œ*S )Úfunctionc                 ó&   — i | ]\  }}|d k    ¯||“ŒS )rq   r;   )rÀ   ÚkÚvs      r=   ú
<dictcomp>z?ResponseHandler._normalize_tools.<locals>.<listcomp>.<dictcomp>Ô  s$   € Ð-XÐ-XÐ-X±t°q¸!ÈAÐQWÊKÈK¨a°ÈKÈKÈKr<   )rq   rô   )Úitems)rÀ   Úts     r=   ú
<listcomp>z4ResponseHandler._normalize_tools.<locals>.<listcomp>Ó  sZ   € ð 
ð 
ð 
àð ^hÐopÐ]pÐ]p�ZÐ-XÐ-X¸q¿wºw¹y¼yÐ-XÑ-XÔ-XÐYÐYÐYÐvwð
ð 
ð 
r<   r;   )rÆ   s    r=   rß   z ResponseHandler._normalize_toolsÈ  s2   € ð ð 	ØˆLð
ð 
àð
ñ 
ô 
ð 	
r<   c                 ó–  — | d         }|                       d¦  «        }t          |t          ¦  «        rd|dœg}nTt          |t          ¦  «        r.|rd|d         vrd|dœg}n,t                               |¦  «        }nt          dd¬	¦  «        ‚|r9|r|d         d         d
k    r||d         d<   n|                     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Ð8Ð9ˆHˆHÝ˜�TÑ"Ô"ð 	\Øð J�v S¨¤VÐ+Ð+à%+¸Ð<Ð<Ð=��å*×DÒDÀSÑIÔI��å¨CÐ8ZÐ[Ñ[Ô[Ð[ð ð 	PØð P˜H QœK¨Ô/°8Ò;Ð;Ø)5�˜”˜IÑ&Ð&à—’ ¨HÀÐ#NÐ#NÑOÔOÐOàˆr<   rù   c                 óÖ  — g }d}| D �]`}|                      d¦  «        }|dk    r5d                     d„ |                      d¦  «        pg D ¦   «         ¦  «        }ŒSd|v rJ|d         |                      dd¦  «        dœ}|�|d         d	k    r||d
<   d}|                     |¦  «         Œ¡|dk    rz|d         |d         |d         dœdœ}|rC|d         d         d	k    r1|d                              dg ¦  «                             |¦  «         �Œ|                     d	|gdœ¦  «         �Œ!|dk    r'|                     d|d         |d         dœ¦  «         �ŒNt	          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          V — ŒdS )r?   Nr;   )rÀ   rÁ   s     r=   rÂ   z<ResponseHandler._normalize_response_items.<locals>.<genexpr>  s&   è è € Ð+YÐ+Y¸!¨A¨f¬IÐ+YÐ+YÐ+YÐ+YÐ+YÐ+Yr<   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  sÔ  € ð ˆØ(,Ðàð "	kñ "	kˆDØŸš Ñ(Ô(ˆIà˜KÒ'Ð'Ø$&§G¢GÐ+YÐ+Y¸t¿xºxÈ	Ñ?RÔ?RÐ?XÐVXÐ+YÑ+YÔ+YÑ$YÔ$YÐ!Øà˜ˆ~ˆ~Ø# Fœ|¸¿ºÀÈBÑ8OÔ8OÐPÐP�Ø$Ð0°T¸&´\À[Ò5PÐ5PØ/@�CÐ+Ñ,Ø(,Ð%Ø—’ Ñ$Ô$Ð$Ð$à˜oÒ-Ð-à˜yœ/Ø)-¨f¬ÀDÈÔDUÐ VÐ Vðð �ð ð O ¨¤¨VÔ 4¸Ò CÐ CØ˜R”L×+Ò+¨L¸"Ñ=Ô=×DÒDÀRÑHÔHÐHÑHà—O’O¨[ÈÈÐ$MÐ$MÑNÔNÐNÑNàÐ4Ò4Ð4Ø—’à &Ø(,¨Y¬Ø#'¨¤>ðð ñô ð ñ õ $°Ð<iÐ\eÐ<iÐ<iÐjÑjÔjÐjàˆr<   ré   r.   r¹   z(ProcessorMixin | PreTrainedTokenizerFastrè   rî   rï   r-   rÏ   rÐ   rÑ   c           	      ó–  ‡‡‡	‡‡‡‡— |                      |‰||‰‰	|
¬¦  «        \  ŠŠ|d         }t          |t          ¦  «        rt          |¦  «        n|j        d         Šd‰› �t          j        ¦   «         |dg |                     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            	     óR  •K  — t          ‰‰¬¦  «        } 	 d                     |                      ¦   «         ¦  «        W V — d}|�sö‰
                     ¦   «         ƒ d {V —†g}	 	 |                     ‰
                     ¦   «         ¦  «         Œ(# t          j        $ r Y nw xY wg }|D �]y}|€d} �nqt          |t          ¦  «        rjt                               d|j        › �¦  «         |                     |                      |j        ¦  «        ¦  «         d                     |¦  «        W V —  d S t          |t          ¦  «        rW| j        s'|                     |                      ¦   «         ¦  «         |                     |                      |¦  «        ¦  «         Œõ| j        r'|                     |                      ¦   «         ¦  «         | j        s'|                     |                      ¦   «         ¦  «         |                     |                      |¦  «        ¦  «         �Œ{|rd                     |¦  «        W V — |�¯ö| j        r*d                     |                      ¦   «         ¦  «        W V — | j        s*d                     |                      ¦   «         ¦  «        W V — d                     |                      ¦   «         ¦  «        W V — ‰rqt/          ‰	‰j        ‰d         ¦  «        }|rSt3          |¦  «        D ]C\  }}d                     |                      ‰› d|› �|d         |d	         ¦  «        ¦  «        W V — ŒDd                     |                      t9          ‰‰j        ¦  «        ¦  «        ¦  «        W V — d S # t<          t          j        f$ r ‰                      ¦   «          ‚ w xY 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ÑhÔhˆGð<Ø—g’g˜g×4Ò4Ñ6Ô6Ñ7Ô7Ð7Ð7Ð7Ð7ð �Øñ -Ø#(§9¢9¡;¤;Ð.Ð.Ð.Ð.Ð.Ð.Ð/�Eðð=Ø!ŸLšL¨×)9Ò)9Ñ);Ô);Ñ<Ô<Ð<ð=øå"Ô-ð ð ð Ø˜ðøøøð (*�EØ %ð Cñ C˜Ø˜<Ø#'˜DØ!™EÝ% d­LÑ9Ô9ð #Ý"ŸLšLÐ)XÈdÌhÐ)XÐ)XÑYÔYÐYØ!ŸLšL¨¯ª°t´xÑ)@Ô)@ÑAÔAÐAØ"$§'¢'¨%¡.¤.Ð0Ð0Ð0Ð0Ø"˜F˜FÝ% d­MÑ:Ô:ð 	CØ#*Ô#9ð HØ %§¢¨W×-DÒ-DÑ-FÔ-FÑ GÔ GÐ GØ!ŸLšL¨×)@Ò)@ÀÑ)FÔ)FÑGÔGÐGÐGà&Ô5ð IØ %§¢¨W×-EÒ-EÑ-GÔ-GÑ HÔ HÐ HØ#*Ô#7ð FØ %§¢¨W×-BÒ-BÑ-DÔ-DÑ EÔ EÐ EØ!ŸLšL¨×);Ò);¸DÑ)AÔ)AÑBÔBÐBÑBàð -Ø Ÿgšg e™nœnÐ,Ð,Ð,Ð,ð= ñ -ðB Ô)ð >ØŸ'š' '×":Ò":Ñ"<Ô"<Ñ=Ô=Ð=Ð=Ð=Ð=ØÔ+ð ;ØŸ'š' '×"7Ò"7Ñ"9Ô"9Ñ:Ô:Ð:Ð:Ð:Ð:Ø—g’g˜g×4Ò4Ñ6Ô6Ñ7Ô7Ð7Ð7Ð7Ð7ð ð Ý-¨i¸Ô9UÐWbÐckÔWlÑmÔm�FØð Ý%.¨vÑ%6Ô%6ð ð ™E˜A˜rØ"$§'¢'Ø '× 1Ò 1°ZÐ2OÐ2OÈAÐ2OÐ2OÐQSÐTZÔQ[Ð]_Ð`kÔ]lÑ mÔ mñ#ô #ð ð ð ð ð ð —g’g˜g×/Ò/µ¸iÈÔI^Ñ0_Ô0_Ñ`Ô`ÑaÔaÐaÐaÐaÐaÐaÐaøÝ!¥7Ô#9Ð:ð ð ð ð —’Ñ!Ô!Ð!Øð	øøøs2   –A
M: Á!)B
 Â
BÂM: ÂBÂBM: Ä,IM: Í:,N&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Ô&AÐZ•C˜	‘N”N�NÀyÄÐWYÔGZˆ	ð '˜*Ð&Ð&Ýœ)™+œ+ØØ àØ#'§8¢8Ð,AÀ5Ñ#IÔ#IØ!ð	
ð 	
Ðð>	¥Nµ3¸°9Ô$=ð >	ð >	ð >	ð >	ð >	ð >	ð >	ð >	ð >	ð >	ð >	ð >	õ@ !  ¡¤Ð<OÐPÑPÔPÐPr<   c              ƒ   ó0  K  — |                      |||||¬¦  «        ƒ d{V —†\  }}}g }|
�Et          ||||
¦  «        \  }}|�.|                     t          d|› �dg d|dœgd¬¦  «        ¦  «         |                     t	          d	|› �d
ddt          d|g ¬¦  «        gg ¬¦  «        ¦  «         |	�it          |||	d         ¦  «        }|rPt          |¦  «        D ]@\  }}|› d|› �}|                     t          ||d|d         |d         d¬¦  «        ¦  «         ŒAt          |t          |¦  «        ¦  «        }t          d|› �t          j        ¦   «         d||d|g |                     dd¦  «        d¬¦
  «
        }t          |                     d¬¦  «        ¦  «        S )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!  r1  r   r3  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¤  sN  è è € ð 5@×4VÒ4VØ�9˜f j¸Zð 5Wñ 5
ô 5
ð /
ð /
ð /
ð /
ð /
ð /
Ñ+ˆ	�9˜mð ˆØÐ'Ý+:¸9ÀmÐU^Ð`pÑ+qÔ+qÑ(ˆIÐ(Ø Ð,Ø×#Ò#Ý)Ø- Ð-Ð-Ø(Ø "Ø*:ÐDUÐ!VÐ!VÐ WØ*ðñ ô ñô ð ð 	×ÒÝ!Ø&˜*Ð&Ð&ØØ"Ø Ý+°ÀYÐ\^Ð_Ñ_Ô_Ð`Øðñ ô ñ		
ô 		
ð 		
ð Ð"Ý% i°ÀÈHÔ@UÑVÔVˆFØð Ý& vÑ.Ô.ð ð ‘E�A�rØ)Ð9Ð9°aÐ9Ð9�EØ ×'Ò'Ý0Ø$Ø$)Ø!0Ø!# F¤Ø&(¨¤oØ#.ðñ ô ñ	ô 	ð 	ð 	õ ˜i­¨]Ñ);Ô);Ñ<Ô<ˆÝØ#�zÐ#Ð#Ý”y‘{”{ØØØØØàØ $§¢Ð)>ÀÑ FÔ FØð
ñ 
ô 
ˆõ ˜H×/Ò/¸TÐ/ÑBÔBÑCÔCÐCr<   FÚmodel_generation_configr»   c                 ó®   •— t          ¦   «                              |||¬¦  «        }|                     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·   r:  r»   r3   Ú	__class__s        €r=   rä   z(ResponseHandler._build_generation_configñ  sT   ø€ å!™GœG×<Ò<¸TÐCZÐciÐ<ÑjÔjÐà�8Š8Ð'Ñ(Ô(Ð4Ý/2°4Ð8KÔ3LÑ/MÔ/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Ð5àCÐØ+€NðU¨ð U¸3ð UÐCTÐWcÑCcð Uð Uð Uð Uðr ð
  T¤
¨TÑ 1ð 
°d¸4´jÀ4Ñ6Gð 
ð 
ð 
ñ „\ð
ð ð*˜tð *¨¨T¬
ð *ð *ð *ñ „\ð*ðX ð0¨¨d¬ð 0¸¸T¼
ð 0ð 0ð 0ñ „\ð0ð| $(Ø(,ðfQð 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ð 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ð )ðIDð ˜D‘[ðIDð  ™+ðIDð 
ðI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)rF  rG  r"  Úinput_tokens_detailsÚoutput_tokens_detailsr;   )r"   r    Úmodel_fieldsr!   )rF  rG  s     r=   r!  r!  û  su   € õ Ø!Ø#Ø! MÑ1Ý/ð 
ð 
Øð
à+?ÕCUÔCbÐ+bÐ+bÐ# QÐ'Ð'Ðhjð
ð 
õ 2À1ÐEÑEÔEð	ñ 	ô 	ð 	r<   )Br²   r  r3  Ú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   rA  rL   r¶   r:   r!  r;   r<   r=   ú<module>rZ     sE  ððð ð €€€Ø €€€Ø *Ð *Ð *Ð *Ð *Ð *Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ð ÐÑÔð mØ%Ð%Ð%Ð%Ð%Ð%ØAÐAÐAÐAÐAÐAÐAÐAðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð, \Ð[Ð[Ð[Ð[Ð[ØlÐlÐlÐlÐlÐlÐlÐlÐlÐlð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð ð hØgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgð 
ˆÔ	˜HÑ	%Ô	%€ðð ð ð ð Ð0MÐUZð ñ ô ð ð
ð ð Ð ð C
ð C
ð C
ð C
ð C
ñ C
ô C
ð C
ðLO!ð O!ð O!ð O!ð O!�kñ O!ô O!ð O!ðd ð °Cð ¸Mð ð ð ð ð ð r<   