+
    œ°³j B  ã                   óx  € 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       '       d5   ^ RIHtHt ^ RIHtHtHt ^ RIHt ^ R	IHtHtHt ^ RIHt ^ R
IHt ^ RIHt ^RIHtHtHtH t H!t!H"t"H#t#H$t$ ]'       d   ^ RI%H&t&H't'H(t(H)t)  ! R R]RR7      t*0 Rmt+]PX                  ! ]-4      t. ! R R]4      t/R# )z�
Handler for the /v1/chat/completions endpoint.

Supports streaming (SSE via DirectStreamer) and non-streaming (JSON) responses.
N)ÚAsyncGenerator)ÚTYPE_CHECKING)Úlogging)Úis_serve_available)ÚJSONResponseÚStreamingResponse)ÚChatCompletionÚChatCompletionMessageÚChatCompletionMessageToolCall)ÚChoice)ÚChatCompletionChunkÚChoiceDeltaÚChoiceDeltaToolCall)ÚCompletionCreateParamsStreaming)ÚCompletionUsage)ÚBaseGenerateManagerÚBaseHandlerÚModalityÚReasoningTextÚToolCallÚ_StreamErrorÚbuild_response_parserÚparse_assistant_message)ÚGenerationConfigÚPreTrainedModelÚPreTrainedTokenizerFastÚProcessorMixinc                   ó,   a € ] tR t^?t o V 3R ltRtV tR# )Ú+TransformersCompletionCreateParamsStreamingc                ó>   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[;R&   # )é   Úgeneration_configÚseedÚchat_template_kwargs)ÚstrÚintÚdict)ÚformatÚ__classdict__s   "€Úi/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/cli/serving/chat_completion.pyÚ__annotate__Ú8TransformersCompletionCreateParamsStreaming.__annotate__?   s'   ø‡ ‚ ÙÑñ á
�Iñ ñ Ñò ó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r(   s   @r)   r   r   ?   s   ø‡ ‡ „ r,   r   F)Útotalc                   ó°   a a€ ] tR t^ct oRt]t]tV3R lR l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V3R
 lR lltRV3R lR lltRtVtV ;t# )ÚChatCompletionHandlerztHandler for the `/v1/chat/completions` endpoint.

Supports both streaming (SSE) and non-streaming (JSON) responses.
c                ó<   <€ V ^8„  d   QhRS[ RS[RS[S[,          /# )r    ÚbodyÚ
request_idÚreturn)r&   r$   r   r   )r'   r(   s   "€r)   r*   Ú"ChatCompletionHandler.__annotate__l   s.   ø€ ÷ Eñ E©ð E¹3ð EÑCTÑWcÕCcñ E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R,          V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       VP                  VP                  R
/ 4      4       VP                  ! V	3RRRVP                  R4      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+                  WM4       VP                  R4      pV'       d   V P-                  VVVVVVVR7      # V P/                  VVVVVVVR7      G Rj  x€L
 #  L5i)a`  Validate the request, load the model, and dispatch to streaming or non-streaming.

Args:
    body (`dict`): The raw JSON request body (OpenAI chat completion 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_cbÚmessagesc              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)ÚcontentÚtypeÚvideoN)Ú
isinstanceÚgetÚlist)Ú.0ÚmsgÚcs   &  r)   Ú	<genexpr>Ú7ChatCompletionHandler.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_framesr#   Úadd_generation_promptÚtoolsÚ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Ú"get_processor_inputs_from_messagesÚanyÚupdater#   rG   Úapply_chat_templater   Ú
MULTIMODALÚtoÚdeviceÚ_build_generation_configr!   Úinit_cbÚ
_streamingÚ_non_streaming)Úselfr9   r:   Úmodel_idÚmodelr>   Úmodalityr@   rW   Úprocessor_inputsÚ	has_videor#   ÚinputsÚ
gen_configÚ	streamings   &&&            r)   Úhandle_requestÚ$ChatCompletionHandler.handle_requestl   sE  é € ð 	×Ñ˜tÔ$à%)×%8Ñ%8¸Ó%>Ñ"ˆ˜Ø×%Ñ%×8Ñ8¸Ð8ÓTˆØ×&Ñ&×>Ñ>¸uÓOˆÜ�‰Ð3°H°:¸VÀFÀ8ÐLÔMØ×+Ñ+×7Ñ7¸Ð7ÓPˆØ×BÑBÀ4È
ÕCSÐU]Ó^Ðç“Cñ 
á'ó
—C—C’Cñ 
á'ó
ó 
ˆ	ð &(ÐßØ13Ð  Ñ.Ø×#Ñ# D×$=Ñ$=Ô>Ø×#Ñ# D§H¡HÐ-CÀRÓ$HÔIØ×.Ò.Øñ	
à"&ð	
ð —(‘(˜7Ó#ð	
÷ $*™4¨tð		
ð
 ð	
ð ð	
ð #+¬h×.AÑ.AÑ"A×"OÐ"OÀið	
ð #ñ	
ˆ÷ Ø—Y‘Y˜uŸ|™|Ó,ˆFà×2Ñ2°4×9PÑ9PÐY_Ð2Ó`ˆ
çØ×Ñ Ô2à—H‘H˜XÓ&ˆ	ßØ—?‘?ØØØØØØØ'ð #ó ð ð ×,Ñ,ØØØØØØØ'ð -ó ÷ ð ñ ùs8   ‚C	H-ÃH-Ã-A*H-Å!H-Å:H-Æ	A)H-Ç33H-È&H+È'H-c                óD   <€ V ^8„  d   QhRS[ RRRRRS[ RS[RR	R
S[RS[/# ©r    r:   rn   r   r>   z(ProcessorMixin | PreTrainedTokenizerFastrm   rr   rs   r   rW   r;   )r$   r&   r   r   )r'   r(   s   "€r)   r*   r<   µ   so   ø€ ÷ bLñ bLáðbLð !ðbLð >ð	bLñ
 ðbLñ ðbLð 'ðbLñ )ðbLñ 
ñbLr,   c           	     ó&  a aaaaaa€ \        W2VR,          4      pVP                  VVVSSVR7      w  ooVR,          p	\        V	\        4      '       d   \	        V	4      MV	P
                  R,          oR VVVVVV V3R llp
\        V
! 4       RR7      # )z(Stream tokens as SSE via DirectStreamer.Ú	input_ids)r:   Úresponse_parserc                ó>   € V ^8„  d   QhR\         \        R3,          /# )r    r;   N)r   r$   )r'   s   "r)   r*   Ú6ChatCompletionHandler._streaming.<locals>.__annotate__Í   s   € ÷ H	ñ H	œ~¬c°4¨iÕ8ñ H	r,   c                 ó*  <"  €  SP                  SR SR7      5x € ^ p RpRpV'       g?   SP                  4       G Rj  x€L
 pV.p  VP                  SP                  4       4       K"  S	P                  RJ;'       d    SP                   S	P                  8¬  pV'       d   RpMV'       d   RpMRp\#        S
SP                   S
SP                   ,           R7      pSP                  SVSVR7      5x € R#  L´  \        P
                   d     Mi ; i. pT EF)  pTf   Rp EM!\        T\        4      '       d7   TP                  RTP                   R24       RP                  T4      5x €  R# \        T\        4      '       d\   RpTP                  SP                  SS\        T RS R	T  2R
TP                  RTP                  /R7      .R7      4       T ^,          p KÊ  \        T\        4      '       d'   TP                  SP                  SSTR7      4       EK  TP                  SP                  SSTR7      4       EK,  	  T'       g   EK*  RP                  T4      5x € EKA    \$        \        P&                  3 d    SP)                  4        h i ; i5i)Ú	assistant)Úrolern   FNTzdata: {"error": "z"}

Ú ÚfunctionÚ_tool_call_ÚnameÚ	arguments)ÚindexrD   Úidr‚   )rn   Ú
tool_calls)rn   Úreasoning_content)rn   rC   rˆ   ÚlengthÚstop©Úprompt_tokensÚcompletion_tokensÚtotal_tokens)Úfinish_reasonrn   Úusage)Ú_build_chunk_sserG   ÚappendÚ
get_nowaitÚasyncioÚ
QueueEmptyrF   r   rJ   Újoinr   r   r„   r…   r   Úmax_new_tokensr�   r   ÚGeneratorExitÚCancelledErrorÚcancel)Útool_call_indexÚhas_tool_callsÚdoneÚitemÚbatchÚ	sse_partsÚhit_maxr�   r‘   rs   Ú	input_lenrm   Úqueuer:   rl   Ústreamers            €€€€€€€r)   Ússe_genÚ1ChatCompletionHandler._streaming.<locals>.sse_genÍ   s}  øé € ðGØ×+Ñ+¨J¸[ÐPXÐ+ÓYÓYà"#�Ø!&�Ø�ßØ!&§¡£×,�DØ!˜F�EðØ"Ø!ŸL™L¨×)9Ñ)9Ó);Ö<ðL %×3Ñ3¸4Ð?×vÐvÀH×DYÑDYÐ]g×]vÑ]vÑDv�ß!Ø$0‘MßØ$,‘Mà$*�MÜ'Ø"+Ø&.×&;Ñ&;Ø!*¨X×-BÑ-BÕ!Bô�ð
 ×+Ñ+ØØ"/Ø"Øð	 ,ó õ ñm -øô
 #×-Ñ-ô Ùðúð ,.�IÜ %˜Øš<Ø#'˜DÚ!Ü% d¬L×9Ò9Ø%×,Ñ,Ð/AÀ$Ç(Á(ÀÈ7Ð-SÔTØ"$§'¡'¨)Ó"4Ó4Ú"Ü% d¬H×5Ò5Ø-1˜NØ%×,Ñ,Ø $× 5Ñ 5Ø$.Ø*2ä(;Ø2AØ1;Ø2<°¸[ÈÐHYÐ/ZØ6<¸d¿i¹iÈÐVZ×VdÑVdÐ5eô	)*ð0&ð !6ó !"ôð ,¨qÕ0šOÜ'¨¬m×<Ò<Ø%×,Ñ,¨T×-BÑ-BÀ:ÐU]ÐquÐ-BÓ-v×wà%×,Ñ,¨T×-BÑ-BÀ:ÐU]ÐgkÐ-BÓ-l×mñ9 !&÷< !’yØ Ÿg™g iÓ0Ö0øô( "¤7×#9Ñ#9Ð:ô ð —‘Ô!Øð	üs|   ƒJ…$I# ªI# ½C2¾I# Á"C4 Á(I# Á=!I# Â
I# Â*AI# Ã0JÃ2I# Ã4DÄ	I# ÄDÄAI# Å*JÅ,CI# ÉI# É#-JÊJztext/event-stream©Ú
media_typeéÿÿÿÿ)r   Úgenerate_streamingrF   rH   ÚlenÚshaper   )rl   r:   rn   r>   rm   rr   rs   rW   r{   rz   r¦   r£   r¤   r¥   s   ff&&f&f&   @@@r)   rj   Ú ChatCompletionHandler._streamingµ   s�   þ€ ô 0°	À&ÈÕBUÓVˆØ%×8Ñ8ØØØØØ!Ø+ð 9ó 
‰ˆˆxð ˜;Õ'ˆ	ä&0°¼D×&AÒ&A”C˜	”NÀyÇÁÐWYÕGZˆ	÷H	ö H	ôT !¡£Ð7JÔKÐKr,   c                óD   <€ V ^8„  d   QhRS[ RRRRRS[ RS[RR	R
S[RS[/# rx   )r$   r&   r   r   )r'   r(   s   "€r)   r*   r<     s[   ø€ ÷ 7
ñ 7
áð7
ð !ð7
ð >ð	7
ñ
 ð7
ñ ð7
ð 'ð7
ñ )ð7
ñ 
ñ7
r,   c              ƒ  ó4  "  € VP                  W#WVVR7      G Rj  x€L
 w  r‰p
VP                  RJ;'       d    \        V
4      VP                  8¬  p\        V
4      p\        V	VWœ,           R7      p\	        W2W¥R,          VR7      w  rŽpRpV'       dI   \        V4       UUu. uF1  w  pp\        V RV 2RRVP                  R	VP                  /R
7      NK3  	  pppVe   RpMV'       d   RpMRp\        V P                  VVVVVVVR7      RR7      #  Lõu uppi 5i)z)Run generation and return a JSONResponse.)r:   NrŒ   rz   )rz   Úcleaned_contentrƒ   r‚   r„   r…   )r‡   rD   r‚   rˆ   rŠ   r‹   )r�   r‘   rˆ   r‰   zapplication/jsonr¨   )Úgenerate_non_streamingr˜   r¬   r   r   Ú	enumerater
   r„   r…   r   Ú_build_completion)rl   r:   rn   r>   rm   rr   rs   rW   rC   r£   Úgenerated_idsr¢   rŽ   r‘   r‰   Úparsed_tool_callsrˆ   ÚiÚtcr�   s   &&&&&&&&            r)   rk   Ú$ChatCompletionHandler._non_streaming  s]  é € ð 3>×2TÑ2TØ˜f¸Zð 3Uó 3
÷ -
Ñ)ˆ˜Mð ×+Ñ+°4Ð7×kÐk¼CÀÓ<NÐR\×RkÑRkÑ<kˆÜ Ó.ÐÜØ#Ø/Ø"Õ6ô
ˆô 9PØ˜m¸kÕ7JÐ\cô9
Ñ5ˆÐ$5ð ˆ
ßô 'Ð'8Ô9ôñ :‘E�A�rô .Ø$˜ [°°Ð4Ø#Ø$ b§g¡g¨{¸B¿L¹LÐI÷ñ
 :ð ñ ð Ò!Ø(‰MßØ$‰Mà"ˆMäØ×"Ñ"ØØØØ+ØØ%Ø"3ð #ó ð *ô
ð 	
ñC-
ùó"ùs-   ‚DšD›D·A(DÂ7DÃDÃ()DÄDc                ó*   <€ V ^8„  d   QhRS[ RRRS[/# )r    r9   Úmodel_generation_configr   r@   )r&   Úbool)r'   r(   s   "€r)   r*   r<   V  s$   ø€ ÷ !ñ !©Tð !ÐL^ð !Ñhlñ !r,   c                óÊ  <€ \         SV `  WVR7      pVP                  R4      e   \        VR,          4      Vn        VP                  R4      e   R\        VR,          4      ,           Vn        VP                  R4      e<   VR,          P                  4        UUu/ uF  w  rV\        V4      3VbK  	  uppVn        VP                  R4      e   VR,          Vn	        V# u uppi )z…Apply Chat Completions params (``max_tokens``, ``frequency_penalty``, ``logit_bias``,
``stop``) on top of the base generation config.r?   Ú
max_tokensÚfrequency_penaltyg      ð?Ú
logit_biasr‹   )
Úsuperrh   rG   r%   r˜   ÚfloatÚrepetition_penaltyÚitemsÚsequence_biasÚstop_strings)rl   r9   r»   r@   r!   ÚkÚvÚ	__class__s   &&&&   €r)   rh   Ú.ChatCompletionHandler._build_generation_configV  sÑ   ø€ ô "™GÑ<¸TÐciÐ<ÓjÐà�8‰8�LÓ!Ò-Ü/2°4¸Õ3EÓ/FÐÔ,Ø�8‰8Ð'Ó(Ò4Ø36¼¸tÐDWÕ?XÓ9YÕ3YÐÔ0Ø�8‰8�LÓ!Ò-ØHLÈ\ÕHZ×H`ÑH`ÔHbÔ.cÑHbÁÀ´°A³¨y¸!ª|ÑHbÒ.cÐÔ+Ø�8‰8�FÓÒ'Ø-1°&­\ÐÔ*à Ð ùó	 /ds   ÂCc                ó„   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ RS[R,          RS[S[,          R,          RS[ R,          R	S[/# )
r    r:   rC   rm   r�   r‘   Nrˆ   r‰   r;   )r$   r   rH   r&   )r'   r(   s   "€r)   r*   r<   h  sm   ø€ ÷ %4ñ %4áð%4ñ ð%4ñ ð	%4ñ
 ð%4ñ  Õ%ð%4ñ ™•J Õ%ð%4ñ  �:ð%4ñ 
ñ%4r,   c                óÔ   € \         P                  ! RVRRRVRV/4      p\        V\        \        P                  ! 4       4      RV\        ^ W„R7      .VR7      p	V	P                  R	R
7      # )ai  Build a non-streaming ChatCompletion response dict.

Args:
    request_id (`str`): Unique request identifier.
    content (`str`): The generated text.
    model_id (`str`): Model ID to include in the response.
    finish_reason (`str`): Why generation stopped (``"stop"``, ``"length"``, ``"tool_calls"``).
    usage (`CompletionUsage`, *optional*): Token usage statistics.
    tool_calls (`list[dict]`, *optional*): Parsed tool calls, if any.
    reasoning_content (`str`, *optional*): Chain-of-thought content extracted from the response.

Returns:
    `dict`: Serialized ``ChatCompletion`` ready for JSON response.
rC   r€   r   rˆ   r‰   zchat.completion)r†   Úmessager�   )r‡   ÚcreatedÚobjectrn   Úchoicesr‘   T)Úexclude_none)r	   Úmodel_validater   r%   Útimer   Ú
model_dump)
rl   r:   rC   rm   r�   r‘   rˆ   r‰   rÍ   Úresults
   &&&&&&&&  r)   r´   Ú'ChatCompletionHandler._build_completionh  ss   € ô4 (×6Ò6Ø˜ ¨°lÀJÐPcÐevÐwó
ˆô  ØÜœŸ	š	›Ó$Ø$ØÜ !¨WÔRÐSØô
ˆð × Ñ ¨dÐ Ó3Ð3r,   c                ó²   <€ V ^8„  d   QhRS[ RS[ R,          RS[ R,          RS[ R,          RS[ R,          RS[R,          RS[R,          R	S[ R,          R
S[ /	# )r    r:   rC   Nrn   r€   r�   rˆ   r‘   r‰   r;   )r$   rH   r   )r'   r(   s   "€r)   r*   r<   �  s‚   ø€ ÷ ((ñ ((áð((ñ �t•ð((ñ �T�zð	((ñ
 �D�jð((ñ ˜T•zð((ñ ˜4•Kð((ñ  Õ%ð((ñ  �:ð((ñ 
ñ((r,   c	                óÖ   € \         P                  ! RVRVRVRV/4      p	\        V\        \        P                  ! 4       4      V\        V	^ VR7      .VRRR7      p
V P                  V
4      # )	a�  Build a streaming ``ChatCompletionChunk`` and format it as an SSE ``data:`` line.

Args:
    request_id (`str`): Unique request identifier.
    content (`str`, *optional*): Text content delta.
    model (`str`, *optional*): Model ID.
    role (`str`, *optional*): Role (only sent in the first chunk).
    finish_reason (`str`, *optional*): Set on the final chunk.
    tool_calls (`list`, *optional*): Tool call deltas.
    usage (`CompletionUsage`, *optional*): Token usage (sent with the final chunk).
    reasoning_content (`str`, *optional*): Reasoning/thinking delta (OpenAI-compatible extension).

Returns:
    `str`: A formatted SSE event string.
rC   r€   rˆ   r‰   )Údeltar†   r�   r�   zchat.completion.chunk)r‡   rÎ   rn   rÐ   r‘   Úsystem_fingerprintrÏ   )r   rÒ   r   r%   rÓ   ÚChoiceChunkÚchunk_to_sse)rl   r:   rC   rn   r€   r�   rˆ   r‘   r‰   rÙ   Úchunks   &&&&&&&&&  r)   r’   Ú&ChatCompletionHandler._build_chunk_sse�  su   € ô8 ×*Ò*Ø˜ ¨¨|¸ZÐI\Ð^oÐpó
ˆô $ØÜœŸ	š	›Ó$ØÜ  u°AÀ]ÔSÐTØØ!Ø*ô
ˆð × Ñ  Ó'Ð'r,   r-   )F)NNN)r�   NNNNNNN)r.   r/   r0   r1   Ú__doc__r   Ú_valid_params_classÚUNUSED_CHAT_COMPLETION_FIELDSÚ_unused_fieldsru   rj   rk   rh   r´   r’   r3   r4   Ú__classcell__)rÉ   r(   s   @@r)   r7   r7   c   sc   ù‡ € ñð
 FÐØ2€N÷Eð E÷RbLð bL÷L7
ð 7
÷v!õ !÷$%4ò %4÷N((÷ ((ò ((r,   r7   >   ÚnÚuserÚaudioÚstoreÚlogprobsÚmetadataÚ	functionsÚ
modalitiesÚ
predictionÚtool_choiceÚservice_tierÚtop_logprobsÚfunction_callÚstream_optionsÚresponse_formatÚpresence_penaltyÚreasoning_effortÚweb_search_optionsÚparallel_tool_callsÚmax_completion_tokens)0rß   r•   rÓ   Úcollections.abcr   Útypingr   Úutilsr   Úutils.import_utilsr   Úfastapi.responsesr   r   Úopenai.types.chatr   r	   r
   Ú!openai.types.chat.chat_completionr   Ú'openai.types.chat.chat_completion_chunkr   r   r   rÛ   Ú*openai.types.chat.completion_create_paramsr   Úopenai.types.completion_usager   r   r   r   r   r   r   r   r   Útransformersr   r   r   r   r   rá   Ú
get_loggerr.   r^   r7   r-   r,   r)   Ú<module>r     s£   ðñó Û Ý *Ý  å Ý 4ñ ×ÒßA÷ñ õ
 9÷ñ õ
 NÝZÝ=÷	÷ 	ó 	÷ ßgÓgôÐ2QÐY^õ ò!Ð ð0 
×	Ò	˜HÓ	%€ôT(˜Kö T(r,   