Ë
    Gêñi™c  ã                   óŠ  — 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
«       rDd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! 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,m-Z- erddl.m/Z/m0Z0m1Z1m2Z2  ejf                  e4«      Z5 G d„ de#d¬«      Z6h d£Z7 G d„ de)«      Z8de9de9de'fd„Z:y)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ÚResponseTextDeltaEventÚResponseTextDoneEvent)ÚResponseCreateParamsStreaming)ÚInputTokensDetailsÚOutputTokensDetailsÚResponseUsageé   )ÚBaseGenerateManagerÚBaseHandlerÚModalityÚ_StreamErrorÚget_tool_call_configÚ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© ó    úc/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/transformers/cli/serving/response.pyr,   r,   H   s   … ØÓØ
„Ir6   r,   F)Útotal>   ÚtextÚuserÚstoreÚpromptÚincludeÚ	reasoningÚ
backgroundÚ
truncationÚtool_choiceÚservice_tierÚtop_logprobsÚmax_tool_callsÚprevious_response_idc                   ó@  ‡ — 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
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fd„Zddedddefˆ fd„Zˆ xZS )ÚResponseHandlerz+Handler for the ``/v1/responses`` endpoint.ÚbodyÚ
request_idÚreturnc              ƒ   óÚ  K  — | j                  |«       | j                  |«      \  }}}| j                  j                  ||¬«      }| j                  j                  ||«      }t        j                  d|› d|› �«       | j                  j                  ||¬«      }| j                  |«      }	| j                  |	|«      }
t        d„ |
D «       «      }i }|rd|d<   | 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t-        ||«      nd
}|j                  dd	«      }|r| j/                  |||||||||¬«	      S | j1                  |||||||||¬«	      ƒ 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)ÚcontentÚtypeÚvideoN)Ú
isinstanceÚgetÚlist)Ú.0ÚmsgÚcs      r7   ú	<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ÚtoolsTNÚpt)Úadd_generation_promptr\   Úreturn_tensorsÚreturn_dictÚtokenizeÚload_audio_from_videoÚstream)Úgen_managerÚtool_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Ú_normalize_toolsrT   Úapply_chat_templater#   Ú
MULTIMODALÚtoÚdeviceÚ_build_generation_configr-   Úinit_cbr%   Ú
_streamingÚ_non_streaming)ÚselfrH   rI   Úmodel_idÚmodelrL   ÚmodalityrN   rd   ÚmessagesÚprocessor_inputsÚ	has_videoÚchat_template_kwargsr\   ÚinputsÚ
gen_configre   Ú	streamings                     r7   Úhandle_requestzResponseHandler.handle_requestd   s0  è ø€ ð 	×Ñ˜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§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[ˆà—H‘H˜X tÓ,ˆ	ÙØ—?‘?ØØØØØØØØ'Ø'ð #ó 
ð 
ð ×,Ñ,ØØØØØØØØ'Ø'ð -ó 
÷ 
ð 
ð 
ús   ‚G"G+Ç$G)Ç%G+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       r7   rr   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:   ©ÚrolerP   r‘   r   é¦  z 'input' must be a string or list©Ústatus_codeÚdetailÚsystemrP   )rT   rS   r2   rU   rG   Ú_normalize_response_itemsr   Úinsert)rH   Úinpr�   r   s       r7   ro   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àˆr6   r‰   c                 ó®  — g }| D ]Í  }|j                  d«      }d|v r(|j                  |d   |j                  dd«      dœ«       Œ@|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 )ux  Convert a list of Responses API items into chat messages.

        Input items may be a mix of:
            - Messages (``EasyInputMessageParam`` with ``role``, or ``type: "message"``).
            - ``function_call`` â€” merged as ``tool_calls`` onto the preceding assistant message.
            - ``function_call_output`` â€” converted to ``role: "tool"`` messages.
        rQ   r‘   rP   Ú r�   Úfunction_callÚcall_idÚnameÚ	arguments)rž   rŸ   )Úidrˆ   éÿÿÿÿÚ	assistantÚ
tool_calls)r‘   r£   Úfunction_call_outputÚtoolÚoutput)r‘   Útool_call_idrP   r’   zUnsupported input item type: r“   )rT   ÚappendÚ
setdefaultr   )r‰   r   ÚitemÚ	item_typeÚtcs        r7   r—   z)ResponseHandler._normalize_response_itemsô   s	  € ð ˆàò 	kˆDØŸ™ Ó(ˆIà˜‰~Ø—‘¨¨f©À$Ç(Á(È9ÐVXÓBYÑ ZÕ[à˜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ð5	kð8 ˆr6   r}   r(   rL   z(ProcessorMixin | PreTrainedTokenizerFastr|   rƒ   r„   r'   rd   re   c
                 ó„  ‡ ‡‡‡	‡‡‡‡‡‡‡— |j                  |‰||‰‰	¬«      \  ŠŠ|d   }
t        |
t        «      rt        |
«      n|
j                  d   ŠdŠdŠt        j
                  «       }d‰› �}d‰› �Š|||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.)rI   re   Ú	input_idsr¡   r   Úresp_Úmsg_ÚresponseÚparallel_tool_callsFÚauto)r    Ú
created_atr}   Úobjectr\   r²   rA   rJ   Nc                 óÞ  •K  — 	 ‰j                  t        d‰t        d/i ‰¤dg dœ¤Ž¬«      «      ­–— ‰dz  Š‰j                  t        d‰t        d/i ‰¤dg dœ¤Ž¬«      «      ­–— ‰dz  Š‰j                  t	        d‰‰t        ‰d	dd
g ¬«      ¬«      «      ­–— ‰dz  Š‰j                  t        d‰‰‰dt        ddg ¬«      ¬«      «      ­–— ‰dz  Šd} g }d}|s=‰j                  «       ƒ d {  –—† }|g}	 	 |j                  ‰j                  «       «       Œ ‰rÝt/        ‰‰j0                  ‰d   «      }|rÁt3        |«      D ]³  \  }}‰› d |› �}	t5        |	|	d!|d"   |d#   d$¬%«      }
|j                  |
«       ‰dz  Š‰j                  t	        d‰‰|
¬«      «      ­–— ‰dz  Š‰j                  t7        d&‰|	‰|d#   |d"   ¬'«      «      ­–— ‰dz  Š‰j                  t9        d(‰‰|
¬«      «      ­–— ‰dz  ŠŒµ t        d| g ¬«      }‰j                  t;        d)‰‰dd| g ¬*«      «      ­–— ‰dz  Š‰j                  t=        d+‰‰dd|¬«      «      ­–— ‰dz  Št        ‰d	d$d
|gg ¬,«      }‰j                  t9        d(‰d|¬«      «      ­–— ‰dz  Š|gt?        |«      z   }tA        ‰‰jB                  «      }‰j                  tE        d-‰t        d/i ‰¤d$||d.œ¤Ž¬«      «      ­–— ‰dz  Šy 7 �Œú# t        j                  $ r Y nw xY wg }|D �]  }|€d} �nt        |t        «      rÃt        j!                  d|j"                  › �«       |j                  ‰j                  t%        d‰|j"                  ¬«      «      «       ‰dz  Š|j                  ‰j                  t'        d‰t        d/i ‰¤dg t)        d|j"                  ¬«      dœ¤Ž¬«      «      «       dj+                  |«      ­–—  y | |z  } |j                  ‰j                  t-        d‰‰dd|g ¬«      «      «       ‰dz  Š�Œ |rdj+                  |«      ­–— |s�Œb�Œ'# tF        t        jH                  f$ r ‰jK                  «        ‚ w xY w­w)0Nzresponse.createdÚqueued)Ústatusr¦   )rQ   Úsequence_numberr±   r    zresponse.in_progressÚin_progresszresponse.output_item.addedÚmessager¢   )r    rQ   r¸   r‘   rP   )rQ   r¹   Úoutput_indexrª   zresponse.content_part.addedr   Úoutput_textr›   ©rQ   r9   Úannotations)rQ   Úitem_idr¹   r¼   Úcontent_indexÚpartFTz"Exception in response generation: Úerror)rQ   r¹   r»   zresponse.failedÚfailedÚserver_error)Úcoder»   )r¸   r¦   rÃ   zresponse.output_text.delta)rQ   rÀ   r¹   r¼   rÁ   ÚdeltaÚlogprobsÚschemaÚ_tool_call_rœ   rž   rŸ   Ú	completed©r    r�   rQ   rž   rŸ   r¸   z%response.function_call_arguments.done)rQ   r¹   rÀ   r¼   rŸ   rž   zresponse.output_item.donezresponse.output_text.done)rQ   rÀ   r¹   r¼   rÁ   r9   rÈ   zresponse.content_part.done©r    rQ   r¸   r‘   rP   r¿   zresponse.completed)r¸   r¦   Úusager5   )&Úchunk_to_sser   r   r   r   r   r   r   rT   r¨   Ú
get_nowaitÚasyncioÚ
QueueEmptyrS   r$   rl   rÃ   rW   r   r   r   Újoinr   r&   Úgenerated_token_idsÚ	enumerater   r   r   r   r   rU   Úcompute_usageÚtotal_tokensr   ÚGeneratorExitÚCancelledErrorÚcancel)Ú	full_textr£   Údoner9   ÚbatchÚ	sse_partsÚparsedÚir¬   Útc_idÚtc_itemÚoutput_text_partÚmsg_itemÚ
all_outputrÎ   Ú	input_lenÚmsg_idr¼   rL   ÚqueuerI   Úresponse_baser{   ÚseqÚstreamerre   s                  €€€€€€€€€€€r7   Úevent_streamz0ResponseHandler._streaming.<locals>.event_streamI  sp  øè ø€ ð[à×'Ñ'Ü(Ø/Ø(+Ü!)Ñ!V¨MÐ!VÀ(ÐSUÓ!Vôóó ð �q‘�Ø×'Ñ'Ü+Ø3Ø(+Ü!)Ñ![¨MÐ![À-ÐXZÓ![ôóó ð �q‘�ð ×'Ñ'Ü0Ø9Ø(+Ø%1Ü2Ø%Ø!*Ø#0Ø!,Ø$&ôô	óó ð �q‘�ð ×'Ñ'Ü1Ø:Ø &Ø(+Ø%1Ø&'Ü/°]ÈÐY[Ô\ôó	ó 	ð �q‘�ð �	Ø�
Ø�áØ!&§¡£×,�Dà!˜F�EðØ"Ø!ŸL™L¨×)9Ñ)9Ó);Ô<ð #ñp Ü-¨i¸×9UÑ9UÐWbÐckÑWlÓm�FÙÜ%.¨vÓ%6ò (%™E˜A˜rØ'1 l°+¸a¸SÐ$A˜EÜ&>Ø#(Ø(-Ø%4Ø%'¨¡ZØ*,¨[©/Ø'2ô'˜Gð '×-Ñ-¨gÔ6Ø(¨AÑ-˜LØ"&×"3Ñ"3Ü <Ø)EØ47Ø1=Ø)0ô	!"ó#ó ð   1™H˜CØ"&×"3Ñ"3Ü FØ)PØ47Ø,1Ø1=Ø.0°©oØ)+¨F©ô!"ó	#ó 	ð   1™H˜CØ"&×"3Ñ"3Ü ;Ø)DØ47Ø1=Ø)0ô	!"ó#ó ð   1™H™CðQ(%ôV $6¸=ÈyÐfhÔ#iÐ Ø×'Ñ'Ü)Ø8Ø &Ø(+Ø%&Ø&'Ø&Ø!#ôó
ó 
ð �q‘�Ø×'Ñ'Ü0Ø9Ø &Ø(+Ø%&Ø&'Ø-ôó	ó 	ð �q‘�ä0ØØ"Ø&Ø$Ø-Ð.Ø "ô�ð ×'Ñ'Ü/Ø8Ø(+Ø%&Ø%ô	óó ð �q‘�ð '˜Z¬$¨zÓ*:Ñ:�
Ü% i°×1FÑ1FÓG�Ø×'Ñ'Ü*Ø1Ø(+Ü!)Ñ!n¨MÐ!nÀ+ÐV`ÐhmÓ!nôóó ð �q‘‘ð -úô #×-Ñ-ò Ùðúð ,.�IØ %ó +!˜Ø˜<Ø#'˜DÚ!Ü% d¬LÔ9Ü"ŸL™LÐ+MÈdÏhÉhÈZÐ)XÔYØ%×,Ñ,Ø $× 1Ñ 1Ü$6¸GÐUXÐbf×bjÑbjÔ$kó!"ôð
   1™H˜CØ%×,Ñ,Ø $× 1Ñ 1Ü$7Ø->Ø8;Ü19ñ 2*Ø.;ð2*à3;Ø35Ü2?À^Ð]a×]eÑ]eÔ2fó	2*ô	%&ó!"ôð #%§'¡'¨)Ó"4Ó4Ù"à! TÑ)˜	Ø!×(Ñ(Ø ×-Ñ-Ü 6Ø)EØ,2Ø47Ø12Ø23Ø*.Ø-/ô!"ó
ôð ˜q™šðW+!ñZ !Ø Ÿg™g iÓ0Ó0ós úôB "¤7×#9Ñ#9Ð:ò ð —‘Ô!Øð	üsb   ƒQ-…C)P? Ã.K(Ã/P? Ã7!K+ ÄGP? Ë'Q-Ë(P? Ë+LË>P? Ì LÌC$P? Ï%Q-Ï&AP? Ð?+Q*Ñ*Q-ztext/event-stream)Ú
media_type)
Úgenerate_streamingrS   rU   ÚlenÚshapeÚtimerT   r   r2   r
   )r{   rI   r}   rL   r|   rH   rƒ   r„   rd   re   r®   r´   Úresp_idrì   ræ   rç   r¼   rè   ré   rê   rë   s   `` `     `    @@@@@@@r7   ry   zResponseHandler._streaming  sâ   ÿú€ ð &×8Ñ8ØØØØØ!Ø#ð 9ó 
‰ˆˆxð ˜;Ñ'ˆ	ä&0°¼DÔ&A”C˜	”NÀyÇÁÐWYÑGZˆ	àˆØˆÜ—Y‘Y“[ˆ
Ø˜*˜Ð&ˆØ˜
�|Ð$ˆð Ø$ØØ àØ#'§8¡8Ð,AÀ5Ó#IØ!ñ	
ˆð^	¤N´3¸°9Ñ$=÷ ^	÷ ^	ô@ !¡£Ð<OÔPÐPr6   c
              ƒ   ó  K  — |j                  |||||¬«      ƒ d{  –—† \  }
}}t        d|› �dddt        d|
g ¬«      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 Œè­w)z;Generate a non-streaming Responses API reply (single JSON).)rI   Nr°   r»   rË   r¢   r½   r¾   rÍ   rÉ   rÊ   rœ   rž   rŸ   rÌ   r¯   r±   r²   Fr³   )
r    r´   r¸   r}   r¦   rµ   rÎ   r\   r²   rA   T)Úexclude_none)Úgenerate_non_streamingr   r   r&   rÕ   r¨   r   rÖ   rï   r   rñ   rT   r	   Ú
model_dump)r{   rI   r}   rL   r|   rH   rƒ   r„   rd   re   rÛ   ræ   Úgenerated_idsÚoutput_itemsrß   rà   r¬   rá   rÎ   r±   s                       r7   rz   zResponseHandler._non_streaming-  sX  è ø€ ð 5@×4VÑ4VØ�9˜f j¸Zð 5Wó 5
÷ /
Ñ+ˆ	�9˜mô
 "Ø˜*˜Ð&ØØ"Ø Ü+°À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ð[/
ús   ‚DœD�C)DÚmodel_generation_configrN   c                 ót   •— t         ‰| �  |||¬«      }|j                  d«      �t        |d   «      |_        |S )zXApply Responses API params (``max_output_tokens``) on top of the base generation config.rM   Úmax_output_tokens)Úsuperrw   rT   r4   Úmax_new_tokens)r{   rH   rù   rN   r-   Ú	__class__s        €r7   rw   z(ResponseHandler._build_generation_configk  sF   ø€ ä!™GÑ<¸TÐCZÐciÐ<ÓjÐà�8‰8Ð'Ó(Ð4Ü/2°4Ð8KÑ3LÓ/MÐÔ,à Ð r6   )N)F)r/   r0   r1   Ú__doc__r,   Ú_valid_params_classÚUNUSED_RESPONSE_FIELDSÚ_unused_fieldsÚdictr2   r
   r	   r†   ÚstaticmethodrU   rr   ro   r—   r!   ry   rz   Úboolrw   Ú__classcell__)rþ   s   @r7   rG   rG   ^   sá  ø„ Ù5àCÐØ+€NðO¨ð O¸3ð OÐCTÐWcÑCcó Oðf ð
  T¡
¨TÑ 1ð 
°d¸4±jÀ4Ñ6Gò 
ó ð
ð ð*˜tð *¨¨T©
ò *ó ð*ðX ð&¨¨d©ð &¸¸T¹
ò &ó ð&ðh $(ñJQàðJQð !ðJQð >ð	JQð
 ðJQð ðJQð ðJQð 'ðJQð )ðJQð ˜D‘[ðJQð 
óJQðp $(ñ:Dàð:Dð !ð:Dð >ð	:Dð
 ð:Dð ð:Dð ð:Dð 'ð:Dð )ð:Dð ˜D‘[ð:Dð 
ó:Dñ|!¨Tð !ÐL^ð !Ðhl÷ !ñ !r6   rG   Úinput_tokensÚoutput_tokensrJ   c           	      óP   — t        | || |z   t        d¬«      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.
    r   )Úcached_tokens)Úreasoning_tokens)r  r  r×   Úinput_tokens_detailsÚoutput_tokens_details)r   r   r   )r  r  s     r7   rÖ   rÖ   u  s/   € ô Ø!Ø#Ø! MÑ1Ü/¸aÔ@Ü1À1ÔEôð r6   );rÿ   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   Ú-openai.types.responses.response_create_paramsr   Ú%openai.types.responses.response_usager   r   r   r!   r"   r#   r$   r%   r&   Útransformersr'   r(   r)   r*   Ú
get_loggerr/   rl   r,   r  rG   r4   rÖ   r5   r6   r7   ú<module>r     s»   ðñó Û Ý *Ý  å Ý 4ñ ÔÝ%ßA÷÷ ÷ ÷ õ õ& \ßlÑl÷÷ ñ ßgÓgð 
ˆ×	Ñ	˜HÓ	%€ôÐ0MÐUZõ ò
Ð ô"T!�kô T!ðn ð °Cð ¸Mô r6   