+
    œ°³j¡r  ã                   óÄ  € R t ^ RIt^ RIt^ RIHt ^ RIHt ^RIHt ^RI	H
t
 ]
! 4       '       dK   ^ RIHt ^ RIHtHt ^ RIHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtH t H!t!H"t"H#t#H$t$ ^ R	I%H&t& ^ R
I'H(t(H)t)H*t* ^RIH+t+H,t,H-t-H.t.H/t/H0t0H1t1H2t2 ]'       d   ^ RI3H4t4H5t5H6t6H7t7 ]Pp                  ! ]94      t: ! R R]&RR7      t;0 Rmt< ! R R4      t= ! R R],4      t>R R lt?R# )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                   ó,   a € ] tR t^Mt o V 3R ltRtV tR# )Ú)TransformersResponseCreateParamsStreamingc                ó2   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   # )é   Úgeneration_configÚseed)ÚstrÚint)ÚformatÚ__classdict__s   "€Úb/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/cli/serving/response.pyÚ__annotate__Ú6TransformersResponseCreateParamsStreaming.__annotate__M   s   ø‡ ‚ ÙÑñ á
�Iò ó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r6   s   @r7   r.   r.   M   s   ø‡ ‡ „ r:   r.   F)Útotalc                   ó  a € ] tR t^bt o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )Ú_ResponseStreamBuilderz=Builds SSE events for one streaming Responses API generation.c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r0   Ú
request_idÚresponse_defaults)r3   Údict)r5   r6   s   "€r7   r8   Ú#_ResponseStreamBuilder.__annotate__e   s   ø€ ÷ =ñ =¡cð =¹dñ =r:   c               óÌ   € W n         R V 2V n        RV 2V n        RV 2V n        ^ V n        ^ V n        RV n        RV n        RV n        RV n	        RV n
        RV n        . V n        R# )Úresp_Úmsg_Úrs_Ú FN)Ú_response_defaultsÚresp_idÚmsg_idÚreasoning_idÚseqÚoutput_indexÚcontentÚfull_reasoningÚreasoning_openÚmessage_openÚreasoning_itemÚmessage_itemÚ
tool_calls)ÚselfrH   rI   s   &$$r7   Ú__init__Ú_ResponseStreamBuilder.__init__e   sx   € Ø"3ÔØ˜z˜lÐ+ˆŒØ˜Z˜LÐ)ˆŒØ! * Ð.ˆÔØˆŒØˆÔØˆŒØ ˆÔØ#ˆÔØ!ˆÔØ<@ˆÔØ:>ˆÔØ:<ˆŽr:   c                ó    <€ V ^8„  d   QhRS[ /# ©r0   Úreturn©r3   )r5   r6   s   "€r7   r8   rK   t   s   ø€ ÷ ñ ™cñ r:   c                ód   € \         P                  ! V4      pV ;P                  ^,          un        V# )é   )r"   Úchunk_to_sserU   )r^   ÚeventÚsses   && r7   Ú_emitÚ_ResponseStreamBuilder._emitt   s$   € Ü×&Ò& uÓ-ˆØ�Š�A��Øˆ
r:   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r0   Ústatusrc   r	   rd   )r5   r6   s   "€r7   r8   rK   y   s   ø€ ÷ Kñ K¡ð K°ñ Kr:   c                ó8   € \        R/ V P                  BR V/BVB # )rm   r;   )r	   rQ   )r^   rm   Úextras   &&,r7   Ú	_responseÚ _ResponseStreamBuilder._responsey   s    € ÜÑJ˜$×1Ñ1ÑJ¸&ÑJÀEÑJÐJr:   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rb   ©Úlistr3   )r5   r6   s   "€r7   r8   rK   |   s   ø€ ÷ 
ñ 
¡¡S¥	ñ 
r:   c                óâ   € V P                  \        R V P                  V P                  R. R7      R7      4      V P                  \	        RV P                  V P                  R. R7      R7      4      .# )zresponse.createdÚqueued)Úoutput©ÚtypeÚsequence_numberÚresponsezresponse.in_progressÚin_progress)rj   r   rU   rp   r   ©r^   s   &r7   Ústart_responseÚ%_ResponseStreamBuilder.start_response|   sj   € à�J‰JÜ$Ø+Ø$(§H¡HØ!Ÿ^™^¨H¸R˜^Ó@ôóð �J‰JÜ'Ø/Ø$(§H¡HØ!Ÿ^™^¨MÀ"˜^ÓEôóð
ð 	
r:   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rb   rs   )r5   r6   s   "€r7   r8   rK   Ž   s   ø€ ÷ 
ñ 
¡¡c¥ñ 
r:   c                ó¦   € R V n         V P                  \        RV P                  V P                  \        V P                  R. . RR7      R7      4      .# )Túresponse.output_item.addedÚ	reasoningr|   ©Úidry   ÚsummaryrW   rm   ©ry   rz   rV   Úitem)rY   rj   r   rU   rV   r   rT   r}   s   &r7   Ústart_reasoningÚ&_ResponseStreamBuilder.start_reasoningŽ   sV   € Ø"ˆÔà�J‰JÜ,Ø5Ø$(§H¡HØ!%×!2Ñ!2Ü.Ø×,Ñ,°;ÈÐTVÐ_lôô	ó	ð
ð 	
r:   c                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# ©r0   Útextrc   ©r3   rt   )r5   r6   s   "€r7   r8   rK   �   s   ø€ ÷ 
ñ 
¡Cð 
©D±­Iñ 
r:   c                ó²   € V ;P                   V,          un         V P                  \        R V P                  V P                  V P
                  ^ VR7      4      .# )zresponse.reasoning_text.delta)ry   Úitem_idrz   rV   Úcontent_indexÚdelta)rX   rj   r   rT   rU   rV   ©r^   r�   s   &&r7   Úreasoning_deltaÚ&_ResponseStreamBuilder.reasoning_delta�   sS   € Ø×Ò˜tÕ#Õà�J‰JÜ/Ø8Ø ×-Ñ-Ø$(§H¡HØ!%×!2Ñ!2Ø"#Øôó	ð
ð 	
r:   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rb   rs   )r5   r6   s   "€r7   r8   rK   ¬   s   ø€ ÷ ñ ¡$¡s¥)ñ r:   c                óª  € \        V P                  R . RRRV P                  /.RR7      V n        V P	                  \        RV P                  V P                  V P                  ^ V P                  R7      4      V P	                  \        RV P                  V P                  V P                  R	7      4      .pR
V n	        V ;P                  ^,          un        V# )rƒ   ry   Úreasoning_textr�   Ú	completedr„   zresponse.reasoning_text.done)ry   r�   rz   rV   r‘   r�   úresponse.output_item.doner‡   F)
r   rT   rX   r[   rj   r   rU   rV   r   rY   )r^   Úpartss   & r7   Ú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                ó0   <€ V ^8„  d   QhRS[ S[,          /# rb   rs   )r5   r6   s   "€r7   r8   rK   Ì   s   ø€ ÷ 
ñ 
™t¡C�yñ 
r:   c                ó8  € R V n         V P                  \        RV P                  V P                  \        V P                  RRR. R7      R7      4      V P                  \        RV P                  V P                  V P                  ^ \        RR	. R
7      R7      4      .# )Tr‚   Úmessager|   Ú	assistant)r…   ry   rm   ÚrolerW   r‡   zresponse.content_part.addedÚoutput_textrP   ©ry   r�   Úannotations©ry   r�   rz   rV   r‘   Úpart)	rZ   rj   r   rU   rV   r   rS   r   r   r}   s   &r7   Ú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                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# rŒ   rŽ   )r5   r6   s   "€r7   r8   rK   å   s   ø€ ÷ 
ñ 
™sð 
¡t©C¥yñ 
r:   c                ó´   € V ;P                   V,          un         V P                  \        R V P                  V P                  V P
                  ^ V. R7      4      .# )zresponse.output_text.delta)ry   r�   rz   rV   r‘   r’   Úlogprobs)rW   rj   r   rS   rU   rV   r“   s   &&r7   Ú
text_deltaÚ!_ResponseStreamBuilder.text_deltaå   sQ   € Ø�Š˜Õ�à�J‰JÜ&Ø5Ø ŸK™KØ$(§H¡HØ!%×!2Ñ!2Ø"#ØØôó
ð
ð 	
r:   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rb   rs   )r5   r6   s   "€r7   r8   rK   õ   s   ø€ ÷ *ñ *¡¡S¥	ñ *r:   c                ó
  € \        R V P                  . R7      p\        V P                  RRRV.. R7      V n        V P                  \        RV P                  V P                  V P                  ^ V P                  . R7      4      V P                  \        RV P                  V P                  V P                  ^ VR	7      4      V P                  \        R
V P                  V P                  V P                  R7      4      .pRV n        V# )r£   r¤   r    r™   r¡   ©r…   ry   rm   r¢   rW   r¥   zresponse.output_text.done)ry   r�   rz   rV   r‘   r�   r¬   zresponse.content_part.doner¦   rš   r‡   F)r   rW   r   rS   r\   rj   r   rU   rV   r   r   rZ   )r^   Úoutput_text_partr›   s   &  r7   Ú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:   c          	      óB   <€ V ^8„  d   QhRS[ RS[ RS[ RS[S[ ,          /# )r0   Útc_idÚnameÚ	argumentsrc   rŽ   )r5   r6   s   "€r7   r8   rK   !  s-   ø€ ÷ &
ñ &
™sð &
©#ð &
¹#ð &
Á$ÁsÅ)ñ &
r:   c                óº  € V ;P                   ^,          un         \        VVRVVRR7      pV P                  P                  V4       V P	                  \        RV P                  V P                   VR7      4      V P	                  \        RV P                  VV P                   VVR7      4      V P	                  \        RV P                  V P                   VR7      4      .# )	rf   Úfunction_callr™   ©r…   Úcall_idry   r·   r¸   rm   r‚   r‡   z%response.function_call_arguments.done)ry   rz   r�   rV   r¸   r·   rš   )	rV   r   r]   Úappendrj   r   rU   r   r   )r^   r¶   r·   r¸   rˆ   s   &&&& r7   Ú	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:   c                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# )r0   Úmsgrc   rŽ   )r5   r6   s   "€r7   r8   rK   I  s   ø€ ÷ 
ñ 
™ð 
¡¡c¥ñ 
r:   c                óØ   € V P                  \        R V P                  VR7      4      V P                  \        RV P                  V P	                  R. \        RVR7      R7      R7      4      .# )Úerror)ry   rz   r    zresponse.failedÚfailedÚserver_error)Úcoder    )rw   rÃ   rx   )rj   r   rU   r   rp   r   )r^   rÁ   s   &&r7   rÃ   Ú_ResponseStreamBuilder.errorI  se   € à�J‰JÔ)¨wÈÏÉÐZ]Ô^Ó_Ø�J‰JÜ#Ø*Ø$(§H¡HØ!Ÿ^™^Ø ¨´=ÀnÐ^aÔ3bð ,ó ôóð
ð 	
r:   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rb   rs   )r5   r6   s   "€r7   r8   rK   W  s   ø€ ÷ 
ñ 
¡$¡s¥)ñ 
r:   c                ó6  € . pV P                   e   VP                  V P                   4       VP                  V P                  4       VP                  V P                  4       V P                  \        RV P                  V P                  RW!R7      R7      4      .# )Nzresponse.completedr™   )rw   Úusagerx   )	r[   r½   r\   Úextendr]   rj   r
   rU   rp   )r^   rÊ   Ú
all_outputs   && r7   r™   Ú _ResponseStreamBuilder.completedW  s…   € Øˆ
Ø×ÑÒ*Ø×Ñ˜d×1Ñ1Ô2Ø×Ñ˜$×+Ñ+Ô,Ø×Ñ˜$Ÿ/™/Ô*à�J‰JÜ&Ø-Ø$(§H¡HØ!Ÿ^™^¨KÀ
˜^ÓXôóð
ð 	
r:   )rQ   rW   rX   r\   rZ   rS   rV   rT   r[   rY   rR   rU   r]   N)r<   r=   r>   r?   Ú__doc__r_   rj   rp   r~   r‰   r”   rœ   r¨   r­   r³   r¾   rÃ   r™   rA   rB   rC   s   @r7   rF   rF   b   s�   ø‡ € ÙG÷=ð =÷ð ÷
Kð K÷
ð 
÷$
ð 
÷
ð 
÷ð ÷@
ð 
÷2
ð 
÷ *ð *÷X&
ð &
÷P
ð 
÷
ö 
r:   rF   c                   óØ   a a€ ] tR tRt oRt]t]tV3R lR lt	]
V3R lR l4       t]
V3R lR l4       t]
V3R	 lR
 l4       tV3R lR ltV3R lR ltRV3R lV 3R llltRtVtV ;t# )ÚResponseHandlerih  z+Handler for the ``/v1/responses`` endpoint.c                ó<   <€ V ^8„  d   QhRS[ RS[RS[S[,          /# )r0   ÚbodyrH   rc   )rJ   r3   r   r   )r5   r6   s   "€r7   r8   ÚResponseHandler.__annotate__n  s.   ø€ ÷ Nñ N©ð N¹3ð NÑCTÑWcÕCcñ Nr:   c              ƒ  óª  "  € V P                  V4       V P                  V4      w  r4pV P                  P                  WER7      pV P                  P                  WF4      p\        P                  RV RV 24       V P                  P                  W7R7      pV P                  V4      p	V P                  W–4      p
\        ;QJ d    R V
 4       F  '       g   K   RM	  RM! R V
 4       4      p/ pV'       d   ^ VR&   VP                  V P                  4       TP                  VP                  R	4      ;'       g    / 4       V P                  VP                  R
4      4      pVP                   ! V
3RRR
TRV'       d   RMRRRRRRV\"        P$                  8H  ;'       d    T/VB pV'       g   VP'                  VP(                  4      pV P+                  WP,                  VR7      pV'       d   VP/                  WO4       VP                  RR4      pV'       d   V P1                  VVVVVVVVR7      # V P3                  VVVVVVVVR7      G Rj  x€L
 #  L5i)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   óÈ   "  € T FX  p\        VP                  R 4      \        4      '       d   VP                  R 4      M.  F  pVP                  R4      R8H  x € K  	  KZ  	  R# 5i)rW   ry   ÚvideoN)Ú
isinstanceÚgetrt   )Ú.0rÁ   Úcs   &  r7   Ú	<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"TFÚ
num_framesÚchat_template_kwargsÚtoolsÚadd_generation_promptÚreturn_tensorsNÚptÚ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_configr1   Úinit_cbÚ
_streamingÚ_non_streaming)r^   rÒ   rH   Úmodel_idÚmodelrÕ   Úmodalityr×   rê   ÚmessagesÚprocessor_inputsÚ	has_videorá   râ   ÚinputsÚ
gen_configÚ	streamings   &&&              r7   Úhandle_requestÚResponseHandler.handle_requestn  sm  é € ð 	×Ñ˜tÔ$à%)×%8Ñ%8¸Ó%>Ñ"ˆ˜Ø×%Ñ%×8Ñ8¸Ð8ÓTˆØ×&Ñ&×>Ñ>¸uÓOˆÜ�‰Ð3°H°:¸VÀFÀ8ÐLÔMØ×+Ñ+×7Ñ7¸Ð7ÓPˆð
 ×(Ñ(¨Ó.ˆØ×BÑBÀ8ÓVÐç“Cñ 
á'ó
—C—C’Cñ 
á'ó
ó 
ˆ	ð &(ÐßØ13Ð  Ñ.Ø×#Ñ# D×$=Ñ$=Ô>Ø×#Ñ# D§H¡HÐ-CÓ$D×$JÐ$JÈÔKà×%Ñ% d§h¡h¨wÓ&7Ó8ˆØ×.Ò.Øñ	
à"&ð	
ð ð	
÷ $*™4¨tð		
ð
 ð	
ð ð	
ð #+¬h×.AÑ.AÑ"A×"OÐ"OÀið	
ð #ñ	
ˆ÷ Ø—Y‘Y˜uŸ|™|Ó,ˆFà×2Ñ2°4×9PÑ9PÐY_Ð2Ó`ˆ
çØ×Ñ Ô2Ø—H‘H˜X tÓ,ˆ	ßØ—?‘?ØØØØØØØØ'ð #ó 	ð 	ð ×,Ñ,ØØØØØØØØ'ð -ó 	÷ 	ð 	ñ 	ùs?   ‚CIÃIÃ6AIÄ9AIÅ;!IÆIÆ,A*IÈ5IÉIÉIc                ób   <€ V ^8„  d   QhRS[ S[,          R,          RS[ S[,          R,          /# )r0   râ   Nrc   ©rt   rJ   )r5   r6   s   "€r7   r8   rÓ   Á  s-   ø€ ÷ 
ñ 
¡¡T¥
¨TÕ 1ð 
±d¹4µjÀ4Õ6Gñ 
r:   c                óÌ   € V '       g   V # V  UUUu. uF=  pRV9  d2   RRRVP                  4        UUu/ uF  w  r#VR8w  g   K  W#bK  	  upp/MTNK?  	  uppp# u uppi u upppi )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.
Úfunctionry   )Úitems)râ   ÚtÚkÚvs   &   r7   rø   Ú ResponseHandler._normalize_toolsÀ  sq   € ÷ ØˆLñ õ
á�ð ^hÐopÔ]pˆV�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                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# )r0   rÒ   rc   )rJ   rt   )r5   r6   s   "€r7   r8   rÓ   Ñ  s   ø€ ÷ *ñ *™tð *©©T­
ñ *r:   c                ó´  € V R,          pV P                  R4      p\        V\        4      '       d	   RRRV/.pMW\        V\        4      '       d5   V'       d   RV^ ,          9  d	   RRRV/.pM#\        P                  V4      pM\        RRR7      hV'       dA   V'       d#   V^ ,          R,          R	8X  d   W#^ ,          R&   V# VP                  ^ RR	RV/4       V# )
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Úinstructionsr¢   ÚuserrW   é¦  z 'input' must be a string or list©Ústatus_codeÚdetailÚsystem)rÛ   rÚ   r3   rt   rÐ   Ú_normalize_response_itemsr   Úinsert)rÒ   Úinpr  r  s   &   r7   rô   Ú ResponseHandler._normalize_inputÐ  sÌ   € ð, �7�mˆØ—x‘x Ó/ˆä�cœ3×ÒØ ¨°CÐ8Ð9‰HÜ˜œT×"Ò"ß�v S¨¥VÔ+à# V¨Y¸Ð<Ð=‘ä*×DÑDÀSÓI‘ä¨CÐ8ZÔ[Ð[÷ ß˜H Q�K¨Õ/°8Ô;Ø)5˜•˜IÑ&ð ˆð —‘  F¨H°iÀÐ#NÔOàˆr:   c                óF   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          /# )r0   r  rc   r  )r5   r6   s   "€r7   r8   rÓ   þ  s#   ø€ ÷ 0ñ 0©©d­ð 0¹¹T½
ñ 0r:   c           
     óà  € . pRpV  EFb  pVP                  R4      pVR8X  d4   RP                  R VP                  R4      ;'       g    .  4       4      pKO  RV9   dI   RVR,          RVP                  RR4      /pVe   VR,          R8X  d   W%R	&   RpVP                  V4       Kž  VR
8X  d�   RVR,          RRVR,          RVR,          //pV'       dA   VR,          R,          R8X  d,   VR,          P                  R. 4      P                  V4       EK  VP                  RRRV./4       EK%  VR8X  d)   VP                  RRRVR,          RVR,          /4       EKT  \	        RRV: 2R7      h	  V# )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.
Nry   rƒ   rP   c              3   ó2   "  € T F  qR ,          x € K  	  R# 5i)r�   Nr;   )rÜ   rÝ   s   & r7   rÞ   Ú<ResponseHandler._normalize_response_items.<locals>.<genexpr>  s   é € Ð+YÑ?X¸!¨f¯IªIÓ?Xùs   ‚rW   r¢   r¡   Úreasoning_contentrº   r…   r¼   r  r·   r¸   r]   Úfunction_call_outputÚtoolÚtool_call_idrw   r  zUnsupported input item type: r  éÿÿÿÿ)rÛ   Újoinr½   Ú
setdefaultr   )r  r  Úpending_reasoningrˆ   Ú	item_typerÁ   Útcs   &      r7   r  Ú)ResponseHandler._normalize_response_itemsý  sy  € ð ˆØ(,ÐäˆDØŸ™ Ó(ˆIà˜KÔ'Ø$&§G¡GÑ+Y¸t¿x¹xÈ	Ó?R×?XÐ?XÐVXÐ?XÓ+YÓ$YÐ!Ùà˜Œ~Ø˜t F�|¨Y¸¿¹ÀÈBÓ8OÐP�Ø$Ò0°T¸&µ\À[Ô5PØ/@Ð+Ñ,Ø(,Ð%Ø—‘ Ö$à˜oÔ-à˜$˜y�/Ø ¨¨f­°{ÀDÈÕDUÐ Vð�÷  ¨¥¨VÕ 4¸Ô CØ˜R•L×+Ñ+¨L¸"Ó=×DÑDÀR×Hà—O‘O V¨[¸,ÈÈÐ$M×NàÐ4Ô4Ø—‘à Ø&¨¨Y­Ø! 4¨¥>ð÷ô $°Ð>[Ð\eÑ[hÐ<iÔjÐjñE ðH ˆr:   c                óJ   <€ V ^8„  d   QhRS[ RRRRRS[ RS[RS[R	R
RS[RS[/	# ©r0   rH   r  r*   rÕ   z(ProcessorMixin | PreTrainedTokenizerFastr  rÒ   r  r  r)   rê   rc   )r3   rJ   r!   r   )r5   r6   s   "€r7   r8   rÓ   2  s{   ø€ ÷ fQñ fQáðfQð !ðfQð >ð	fQñ
 ðfQñ ðfQñ ðfQð 'ðfQñ )ðfQñ 
ñfQr:   c	                óŠ  aaaaa€ \        W2VR,          4      p	VP                  VVVVSV	R7      w  ooVR,          p
\        V
\        4      '       d   \	        V
4      MV
P
                  R,          oRRS 2R\        P                  ! 4       RVRRR	. R
VP                  R
R4      RR/oR VVVVV3R llp\        V! 4       RR7      # )zDGenerate a streaming Responses API reply (SSE) using DirectStreamer.Ú	input_ids)rH   Úresponse_parserr…   rM   Ú
created_atr  Úobjectr{   râ   Úparallel_tool_callsFÚtool_choiceÚautoc                ó>   € V ^8„  d   QhR\         \        R3,          /# )r0   rc   N)r   r3   )r5   s   "r7   r8   Ú0ResponseHandler._streaming.<locals>.__annotate__V  s   € ÷ @	ñ @	¤N´3¸°9Õ$=ñ @	r:   c                 óÔ  <"  € \        SS	R 7      p  RP                  V P                  4       4      5x € ^ pRpV'       g=   SP                  4       G Rj  x€L
 .p  VP	                  SP                  4       4       K"  V P                  '       d#   RP                  V P!                  4       4      5x € V P"                  '       g#   RP                  V P3                  4       4      5x € RP                  V P%                  4       4      5x € RP                  V P7                  \9        SS
P:                  4      4      4      5x € R#  Lë  \        P                   d     Mi ; i. pT EF1  pTf   Rp EM)\        T\        4      '       dd   \        P                  RTP                   24       TP                  T P                  TP                  4      4       RP                  T4      5x €  R# \        T\        4      '       dª   T P                  '       d    TP                  T P!                  4       4       T P"                  '       d    TP                  T P%                  4       4       TP                  T P'                  S RT 2TP(                  TP*                  4      4       T^,          pEKE  \        T\,        4      '       dU   T P                  '       g    TP                  T P/                  4       4       TP                  T P1                  T4      4       EK¯  T P                  '       d    TP                  T P!                  4       4       T P"                  '       g    TP                  T P3                  4       4       TP                  T P5                  T4      4       EK4  	  T'       g   EKi  RP                  T4      5x € EK€    \<        \        P>                  3 d    S
PA                  4        h i ; i5i))rH   rI   rP   FNTz"Exception in response generation: Ú_tool_call_)!rF   r,  r~   rÛ   r½   Ú
get_nowaitÚasyncioÚ
QueueEmptyrÚ   r&   rñ   rÃ   rÁ   rË   r%   rY   rœ   rZ   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ÚqueuerH   rI   Ústreamers         €€€€€r7   Ú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Ó);Ö<ðT ×)×)Ð)ØŸ'™' '×":Ñ":Ó"<Ó=Ó=Ø×+×+Ð+ØŸ'™' '×"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Ð5Ø %§¡¨W×-EÑ-EÓ-GÔ HØ&×3×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Ð#9Ø %§¡¨W×-DÑ-DÓ-FÔ GØ!ŸL™L¨×)@Ñ)@ÀÓ)F×Gà&×5×5Ð5Ø %§¡¨W×-EÑ-EÓ-GÔ HØ#*×#7×#7Ð#7Ø %§¡¨W×-BÑ-BÓ-DÔ EØ!ŸL™L¨×);Ñ);¸DÓ)A×Bñ? !&÷B ’uØ Ÿg™g e›nÖ,øô "¤7×#9Ñ#9Ð:ô ð —‘Ô!Øð	üs™   ƒO(’-N8 Á N8 ÁD?ÁN8 Á"E Á<N8 Â3N8 ÃA;N8 Ä=O(Ä?N8 ÅEÅN8 ÅEÅBN8 Ç$O(Ç&'N8 È0N8 È?BN8 ËAN8 Ì!0N8 ÍA	N8 Î!N8 Î8-O%Ï%O(ztext/event-stream)Ú
media_typer+  )	r'   Úgenerate_streamingrÚ   rt   ÚlenÚshapeÚtimerÛ   r   )r^   rH   r  rÕ   r  rÒ   r  r  rê   r6  r5  rO  rL  rM  rI   rN  s   &f&&&&&&&   @@@@r7   rÿ   ÚResponseHandler._streaming2  sÓ   ü€ ô 0°	À&ÈÕBUÓVˆØ%×8Ñ8ØØØØØ!Ø+ð 9ó 
‰ˆˆxð ˜;Õ'ˆ	ä&0°¼D×&AÒ&A”C˜	”NÀyÇÁÐWYÕGZˆ	ð �E˜*˜Ð&Øœ$Ÿ)š)›+Ø�XØ�jà�RØ! 4§8¡8Ð,AÀ5Ó#IØ˜6ð	
Ð÷@	ô @	ôD !¡£Ð<OÔPÐPr:   c                óJ   <€ V ^8„  d   QhRS[ RRRRRS[ RS[RS[R	R
RS[RS[/	# r3  )r3   rJ   r!   r   )r5   r6   s   "€r7   r8   rÓ   œ  s{   ø€ ÷ GDñ GDáðGDð !ðGDð >ð	GDñ
 ðGDñ ðGDñ ðGDð 'ðGDñ )ðGDñ 
ñGDr:   c	              ƒ  óÆ  "  € VP                  W#WgVR7      G Rj  x€L
 w  ršp\        W2W¶R,          V	R7      w  rœp. pV'       d(   VP                  \        RV 2R. RRR	V/.R
R7      4       VP                  \	        RV 2RR
R\        RV	. R7      .. R7      4       V'       dQ   \        V4       FA  w  ppV RV 2pVP                  \        VVRVP                  VP                  R
R7      4       KC  	  \        V
\        V4      4      p\        RV 2\        P                  ! 4       R
VVRV. VP                  RR4      RR7
      p\        VP!                  RR7      4      #  ELD5i)z;Generate a non-streaming Responses API reply (single JSON).)rH   Nr5  )r5  Úcleaned_contentrO   rƒ   ry   r˜   r�   r™   r„   rN   r    r¡   r£   r¤   r±   r?  rº   r»   rM   r{   r9  Fr;  )
r…   r7  rm   r  rw   r8  rÊ   râ   r9  r:  T)Úexclude_none)Úgenerate_non_streamingr(   r½   r   r   r   Ú	enumerater   r·   r¸   rC  rS  r	   rU  rÛ   r   Ú
model_dump)r^   rH   r  rÕ   r  rÒ   r  r  rê   rW   rL  Úgenerated_idsr'  Úparsed_tool_callsÚoutput_itemsÚir0  r¶   rÊ   r{   s   &&&&&&&&&           r7   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!šE›EE!c                ó*   <€ V ^8„  d   QhRS[ RRRS[/# )r0   rÒ   Úmodel_generation_configr)   r×   )rJ   Úbool)r5   r6   s   "€r7   r8   rÓ   ç  s$   ø€ ÷ !ñ !©Tð !ÐL^ð !Ñhlñ !r:   c                ó~   <€ \         SV `  WVR7      pVP                  R4      e   \        VR,          4      Vn        V# )zXApply Responses API params (``max_output_tokens``) on top of the base generation config.rÖ   Úmax_output_tokens)Úsuperrý   rÛ   r4   Úmax_new_tokens)r^   rÒ   rd  r×   r1   Ú	__class__s   &&&& €r7   rý   Ú(ResponseHandler._build_generation_configç  sC   ø€ ä!™GÑ<¸TÐciÐ<ÓjÐà�8‰8Ð'Ó(Ò4Ü/2°4Ð8KÕ3LÓ/MÐÔ,à Ð r:   r;   )F)r<   r=   r>   r?   rÎ   r.   Ú_valid_params_classÚUNUSED_RESPONSE_FIELDSÚ_unused_fieldsr
  Ústaticmethodrø   rô   r  rÿ   r   rý   rA   rB   Ú__classcell__)rj  r6   s   @@r7   rÐ   rÐ   h  s‹   ù‡ € Ù5àCÐØ+€N÷Nð Nðd ÷
ó ð
ð ÷*ó ð*ðX ÷0ó ð0÷hfQð fQ÷TGDð GD÷V!÷ !õ !r:   rÐ   c                ó<   € V ^8„  d   QhR\         R\         R\        /# )r0   Úinput_tokensÚoutput_tokensrc   )r4   r    )r5   s   "r7   r8   r8   ñ  s!   € ÷ ñ ¤ð ´Cð ¼Mñ r:   c                óŠ   € \        T TW,           \        RR^ /R\        P                  9   d   R^ /M/ B \        ^ R7      R7      # )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_tokensÚcache_write_tokens)Úreasoning_tokens)rr  rs  rD  Úinput_tokens_detailsÚoutput_tokens_detailsr;   )r    r   Úmodel_fieldsr   )rr  rs  s   &&r7   rC  rC  ñ  sV   € ô Ø!Ø#Ø!Õ1Ü/ñ 
Øð
à+?ÔCU×CbÑCbÔ+bÐ# QÑ'Ðhjñ
ô 2À1ÔEô	ð 	r:   >   r�   r  ÚstoreÚpromptÚincludeÚ
backgroundÚ
truncationr:  Úservice_tierÚtop_logprobsÚmax_tool_callsÚprevious_response_id)@rÎ   rA  rU  Ú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_loggerr<   rñ   r.   rm  rF   rÐ   rC  r;   r:   r7   Ú<module>r�     s¾   ðñó Û Ý *Ý  å Ý 4ñ ×ÒÝ%ßA÷÷ ÷ ÷ ÷ ó õ, \ßlÑl÷	÷ 	ó 	÷ ßgÓgð 
×	Ò	˜HÓ	%€ôÐ0MÐUZõ ò
Ð ÷ C
ñ C
ôLF!�kô F!÷Rr:   