+
    QV-j5  ã                   ó   € R t ^ RIt^ RIHt ^RIHt ^RIHt ]! 4       '       d   ^ RIH	t	H
t
 ^ RIHt ^ RIHtHt ^RIHt ^R	IHt ^R
IHt ^RIHt ^RIHt ^RIHtHtHt ]P:                  ! ]4      tRR R llt R# )z
FastAPI app factory.
N)Úasynccontextmanager)Úlogging)Úis_serve_available)ÚFastAPIÚRequest)ÚCORSMiddleware)ÚJSONResponseÚStreamingResponse)ÚChatCompletionHandler)ÚCompletionHandler)ÚModelManager)ÚResponseHandler)ÚTranscriptionHandler)ÚX_REQUEST_IDÚCBWorkerDeadErrorÚGenerationStatec                óx   € V ^8„  d   QhR\         R\        R\        R\        R\        R\
        R\        R\        /# )	é   Úmodel_managerÚchat_handlerÚcompletion_handlerÚresponse_handlerÚtranscription_handlerÚgeneration_stateÚenable_corsÚreturn)r   r
   r   r   r   r   Úboolr   )Úformats   "Úp/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/transformers/cli/serving/server.pyÚ__annotate__r   )   sb   € ÷ gñ gÜðgä'ðgô *ðgô &ð	gô
 0ðgô &ðgô ðgô ñgó    c                ó  a aaaaa€ \         R V 3R ll4       p\        VR7      pVP                  \        4      R R l4       p	V'       d3   VP	                  \
        R.RR.R.R7       \        P                  R	4       VP                  R
4      R R l4       p
VP                  R4      R V3R ll4       pVP                  R4      R V3R ll4       pVP                  R4      R V3R ll4       pVP                  R4      R V3R ll4       pVP                  R4      R V 3R ll4       pVP                  R4      V 3R l4       pVP                  R4      VP                  R4      V 3R l4       4       pVP                  R 4      V3R! l4       pV# )"aO  Build and return a configured FastAPI application.

Args:
    model_manager: Handles model loading, caching, and cleanup.
    chat_handler: Handles `/v1/chat/completions` requests.
    response_handler: Handles `/v1/responses` requests.
    generation_state: Owns the per-model generation managers (regular and CB). Passed
        in here so `/health` can check whether the CB worker has died and respond with
        503 instead of a misleading 200.
    enable_cors: If `True`, adds permissive CORS middleware (allow all origins).

Returns:
    A FastAPI app ready to be passed to uvicorn.
c                ó$   € V ^8„  d   QhR\         /# )r   Úapp)r   )r   s   "r   r   Ú"build_server.<locals>.__annotate__B   s   € ÷ !ñ !œGñ !r    c                ó:   <"  € R 5x € SP                  4        R # 5i©N)Úshutdown)r#   r   s   &€r   ÚlifespanÚbuild_server.<locals>.lifespanA   s   øé € äØ×ÑÖ ùs   ƒ)r(   c                ó0   € V ^8„  d   QhR\         R\        /# )r   Ú_requestÚexc)r   r   )r   s   "r   r   r$   I   s   € ÷ Bñ B¬ð BÔ7Hñ Br    c              “   ó:   "  € \        R \        V4      /RR7      # 5i)Úerroré÷  ©Ústatus_code)r   Ústr)r+   r,   s   &&r   Ú_cb_dead_handlerÚ&build_server.<locals>._cb_dead_handlerH   s   é € ô ˜W¤c¨#£hÐ/¸SÔAÐAùs   ‚Ú*T)Úallow_originsÚallow_credentialsÚallow_methodsÚallow_headersz@CORS allow origin is set to `*`. Not recommended for production.Úhttpc                ó$   € V ^8„  d   QhR\         /# ©r   Úrequest©r   )r   s   "r   r   r$   Z   s   € ÷ ñ ¬Wñ r    c              “  ó   "  € V P                   P                  \        4      ;'       g    \        \        P
                  ! 4       4      pW P                  n        V! V 4      G Rj  x€L
 pW#P                   \        &   V#  L5i)z(Get or set the request ID in the header.N)ÚheadersÚgetr   r2   ÚuuidÚuuid4ÚstateÚ
request_id)r=   Ú	call_nextrE   Úresponses   &&  r   Úrequest_id_middlewareÚ+build_server.<locals>.request_id_middlewareY   s]   é € ð —_‘_×(Ñ(¬Ó6×KÐK¼#¼d¿jºj»lÓ:Kˆ
Ø#-�‰Ô Ù" 7Ó+×+ˆØ)3×ÑœÑ&Øˆñ ,ùs   ‚A!A>Á#A<Á$A>z/v1/chat/completionsc                ó0   € V ^8„  d   QhR\         R\        /# ©r   r=   Úbody©r   Údict)r   s   "r   r   r$   e   s   € ÷ Qñ Q¬ð Q´tñ Qr    c              “   ój   <"  € SP                  WP                  P                  4      G R j  x€L
 #  L5ir&   ©Úhandle_requestrD   rE   )r=   rL   r   s   &&€r   Úchat_completionsÚ&build_server.<locals>.chat_completionsd   s'   øé € à!×0Ñ0°·}±}×7OÑ7OÓP×PÐPÑPùó   ƒ)3¬1­3z/v1/completionsc                ó0   € V ^8„  d   QhR\         R\        /# rK   rM   )r   s   "r   r   r$   i   s   € ÷ Wñ W¤7ð W´$ñ Wr    c              “   ój   <"  € SP                  WP                  P                  4      G R j  x€L
 #  L5ir&   rP   )r=   rL   r   s   &&€r   ÚcompletionsÚ!build_server.<locals>.completionsh   s'   øé € à'×6Ñ6°t¿]¹]×=UÑ=UÓV×VÐVÑVùrT   z/v1/responsesc                ó0   € V ^8„  d   QhR\         R\        /# rK   rM   )r   s   "r   r   r$   m   s   € ÷ Uñ U¤ð U´ñ Ur    c              “   ój   <"  € SP                  WP                  P                  4      G R j  x€L
 #  L5ir&   rP   )r=   rL   r   s   &&€r   Ú	responsesÚbuild_server.<locals>.responsesl   s'   øé € à%×4Ñ4°T¿=¹=×;SÑ;SÓT×TÐTÑTùrT   z/v1/audio/transcriptionsc                ó$   € V ^8„  d   QhR\         /# r<   r>   )r   s   "r   r   r$   q   s   € ÷ Cñ C¬Gñ Cr    c              “   óB   <"  € SP                  V 4      G R j  x€L
 #  L5ir&   )rQ   )r=   r   s   &€r   Úaudio_transcriptionsÚ*build_server.<locals>.audio_transcriptionsp   s   øé € à*×9Ñ9¸'ÓB×BÐBÑBùs   ƒ˜™z/load_modelc                ó$   € V ^8„  d   QhR\         /# )r   rL   )rN   )r   s   "r   r   r$   u   s   € ÷ 	
ñ 	
œtñ 	
r    c              “   ó°   <"  € ^ RI Hp V P                  R4      pVf   V! RRR7      hSP                  V4      p\	        SP                  V4      RR7      # 5i)é    )ÚHTTPExceptionÚmodeli¦  z*Missing `model` field in the request body.)r1   Údetailztext/event-stream)Ú
media_type)Úfastapird   rA   Úprocess_model_namer	   Úload_model_streaming)rL   rd   re   Úmodel_id_and_revisionr   s   &   €r   Ú
load_modelÚ build_server.<locals>.load_modelt   sZ   øé € å)à—‘˜Ó!ˆØŠ=Ù¨CÐ8dÔeÐeØ -× @Ñ @ÀÓ GÐÜ Ø×.Ñ.Ð/DÓEÐReô
ð 	
ùs   ƒAAz/resetc                  ó>   <€ S P                  4        \        R R/4      # )ÚstatusÚok)r'   r   ©r   s   €r   ÚresetÚbuild_server.<locals>.reset€   s   ø€ à×ÑÔ Ü˜X tÐ,Ó-Ð-r    z
/v1/modelsc                  ó>   <€ \        R RRS P                  4       /4      # )ÚobjectÚlistÚdata)r   Úget_gen_modelsrq   s   €r   Úlist_modelsÚ!build_server.<locals>.list_models…   s"   ø€ ô ˜X v¨v°}×7SÑ7SÓ7UÐVÓWÐWr    z/healthc                  ól   <€ S P                  4       '       g   \        R RRR/RR7      # \        R R/4      # )ro   Ú	unhealthyÚreasonÚcb_worker_deadr/   r0   rp   )Úis_cb_aliver   )r   s   €r   ÚhealthÚbuild_server.<locals>.healthŠ   s:   ø€ à×+Ñ+×-Ò-Ü ¨;¸ÐBRÐ SÐadÔeÐeÜ˜X tÐ,Ó-Ð-r    )r   r   Úexception_handlerr   Úadd_middlewarer   ÚloggerÚwarning_onceÚ
middlewareÚpostrA   Úoptions)r   r   r   r   r   r   r   r(   r#   r3   rH   rR   rW   r[   r_   rl   rr   ry   r€   s   ffffff&            r   Úbuild_serverr‰   )   s«  ý€ ô0 ÷!ó ð!ô ˜8Ô
$€Cà×ÑÔ,Ó-ôBó .ðB÷ Ø×ÑÜØ˜%Ø"Ø˜%Ø˜%ð 	ô 	
ô 	×ÑÐ^Ô_ð 	‡^�^�FÓôó ðð 	‡X�XÐ$Ó%÷Qó &ðQð 	‡X�XÐÓ ÷Wó !ðWð 	‡X�XˆoÓ÷Uó ðUð 	‡X�XÐ(Ó)÷Có *ðCð 	‡X�XˆmÓ÷	
ó ð	
ð 	‡X�XˆhÓô.ó ð.ð 	‡W�Wˆ\ÓØ‡[�[�ÓôXó ó ðXð 	‡W�WˆYÓô.ó ð.ð
 €Jr    )F)!Ú__doc__rB   Ú
contextlibr   Úutilsr   Úutils.import_utilsr   rh   r   r   Úfastapi.middleware.corsr   Úfastapi.responsesr   r	   Úchat_completionr
   Ú
completionr   r   r   rG   r   Útranscriptionr   r   r   r   Ú
get_loggerÚ__name__r„   r‰   © r    r   Ú<module>r–      s_   ðñó Ý *å Ý 4ñ ×Òß(Ý6ßAå 2Ý )Ý 'Ý %Ý /ß CÑ Cð 
×	Ò	˜HÓ	%€÷gñ gr    