ó
    ‡Ž¡jƒ  ã                   ó6  • S r SSKrSSKJr  SSKJr  SSKJr  SSKJ	r	  \	" 5       (       a  SSK
JrJr  SS	KJr  SS
KJrJr  \(       a  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJrJrJr  \R>                  " \ 5      r! S S\SSSSSSSSS\S\"SS4S jjr#g)!z
FastAPI app factory.
é    N)Úasynccontextmanager)ÚTYPE_CHECKINGé   )Úlogging)Úis_serve_available)ÚFastAPIÚRequest)ÚCORSMiddleware)ÚJSONResponseÚStreamingResponseé   )ÚChatCompletionHandler)ÚCompletionHandler)ÚResponseHandler)ÚTranscriptionHandler)ÚModelManager)ÚX_REQUEST_IDÚCBWorkerDeadErrorÚGenerationStateÚmodel_managerÚchat_handlerr   Úcompletion_handlerr   Úresponse_handlerr   Útranscription_handlerr   Úgeneration_stateÚenable_corsÚreturnr   c                 óŠ  ^ ^^^^^• [         S[        4U 4S jj5       n[        US9nUR                  [        5      S[        S[        4S j5       n	U(       a/  UR                  [        S/SS/S/S	9  [        R                  S
5        UR                  S5      S[        4S j5       n
UR                  S5      S[        S[        4U4S jj5       nUR                  S5      S[        S[        4U4S jj5       nUR                  S5      S[        S[        4U4S jj5       nUR                  S5      S[        4U4S jj5       nUR                  S5      S[        4U 4S jj5       nUR                  S5      U 4S j5       nUR                  S5      UR                  S5      U 4S j5       5       nUR                  S5      U4S j5       nU$ )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.
Úappc                ó8   >#   • S 7v •  TR                  5         g 7f©N)Úshutdown)r   r   s    €Ú­C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/cli/serving/server.pyÚlifespanÚbuild_server.<locals>.lifespanD   s   øé € äØ×ÑÕ ùs   ƒ)r$   Ú_requestÚexcc              “   ó4   #   • [        S[        U5      0SS9$ 7f)NÚerroré÷  ©Ústatus_code)r   Ústr)r&   r'   s     r#   Ú_cb_dead_handlerÚ&build_server.<locals>._cb_dead_handlerK   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.ÚhttpÚrequestc              “   óþ   #   • U R                   R                  [        5      =(       d    [        [        R
                  " 5       5      nX R                  l        U" U 5      I Sh  v•N nX#R                   [        '   U$  N7f)z(Get or set the request ID in the header.N)ÚheadersÚgetr   r-   ÚuuidÚuuid4ÚstateÚ
request_id)r6   Ú	call_nextr=   Úresponses       r#   Úrequest_id_middlewareÚ+build_server.<locals>.request_id_middleware\   sZ   é € ð —_‘_×(Ñ(¬Ó6×K¼#¼d¿jºj»lÓ:Kˆ
Ø#-�‰Ô Ù" 7Ó+×+ˆØ)3×ÑœÑ&Øˆñ ,ùs   ‚A A=Á"A;Á#A=z/v1/chat/completionsÚbodyc              “   ój   >#   • TR                  XR                  R                  5      I S h  v•N $  N7fr!   ©Úhandle_requestr<   r=   )r6   rB   r   s     €r#   Úchat_completionsÚ&build_server.<locals>.chat_completionsg   s'   øé € à!×0Ñ0°·}±}×7OÑ7OÓP×PÐPÑPùó   ƒ)3¬1­3z/v1/completionsc              “   ój   >#   • TR                  XR                  R                  5      I S h  v•N $  N7fr!   rD   )r6   rB   r   s     €r#   ÚcompletionsÚ!build_server.<locals>.completionsk   s'   øé € à'×6Ñ6°t¿]¹]×=UÑ=UÓV×VÐVÑVùrH   z/v1/responsesc              “   ój   >#   • TR                  XR                  R                  5      I S h  v•N $  N7fr!   rD   )r6   rB   r   s     €r#   Ú	responsesÚbuild_server.<locals>.responseso   s'   øé € à%×4Ñ4°T¿=¹=×;SÑ;SÓT×TÐTÑTùrH   z/v1/audio/transcriptionsc              “   óB   >#   • TR                  U 5      I S h  v•N $  N7fr!   )rE   )r6   r   s    €r#   Úaudio_transcriptionsÚ*build_server.<locals>.audio_transcriptionss   s   øé € à*×9Ñ9¸'ÓB×BÐBÑBùs   ƒ˜™z/load_modelc              “   ó¢   >#   • SSK Jn  U R                  S5      nUc  U" SSS9eTR                  U5      n[	        TR                  U5      SS9$ 7f)	Nr   )ÚHTTPExceptionÚmodeli¦  z*Missing `model` field in the request body.)r,   Údetailztext/event-stream)Ú
media_type)ÚfastapirS   r9   Úprocess_model_namer   Úload_model_streaming)rB   rS   rT   Úmodel_id_and_revisionr   s       €r#   Ú
load_modelÚ build_server.<locals>.load_modelw   sZ   øé € å)à—‘˜Ó!ˆØ‰=Ù¨CÐ8dÑeÐeØ -× @Ñ @ÀÓ GÐÜ Ø×.Ñ.Ð/DÓEÐReñ
ð 	
ùs   ƒAAz/resetc                  ó>   >• T R                  5         [        SS05      $ )NÚstatusÚok)r"   r   ©r   s   €r#   ÚresetÚbuild_server.<locals>.resetƒ   s   ø€ à×ÑÔ Ü˜X tÐ,Ó-Ð-ó    z
/v1/modelsc                  ó<   >• [        ST R                  5       S.5      $ )NÚlist)ÚobjectÚdata)r   Úget_gen_modelsr`   s   €r#   Úlist_modelsÚ!build_server.<locals>.list_modelsˆ   s   ø€ ô  v°}×7SÑ7SÓ7UÑVÓWÐWrc   z/healthc                  ób   >• T R                  5       (       d  [        SSS.SS9$ [        SS05      $ )NÚ	unhealthyÚcb_worker_dead)r^   Úreasonr*   r+   r^   r_   )Úis_cb_aliver   )r   s   €r#   ÚhealthÚbuild_server.<locals>.health�   s6   ø€ à×+Ñ+×-Ñ-Ü¨;ÐBRÑ SÐadÑeÐeÜ˜X tÐ,Ó-Ð-rc   )r   r   Úexception_handlerr   r	   Úadd_middlewarer
   ÚloggerÚwarning_onceÚ
middlewareÚpostÚdictr9   Úoptions)r   r   r   r   r   r   r   r$   r   r.   r@   rF   rJ   rM   rP   r[   ra   ri   rp   s   ``````             r#   Úbuild_serverrz   ,   s	  ý€ ô0 ð!œGö !ó ð!ô ˜8Ñ
$€Cà×ÑÔ,Ó-ðB¬ð BÔ7Hó Bó .ðBö Ø×ÑÜØ˜%Ø"Ø˜%Ø˜%ð 	ñ 	
ô 	×ÑÐ^Ô_ð 	‡^�^�FÓð¬Wó ó ðð 	‡X�XÐ$Ó%ðQ¬ð Q´tö Qó &ðQð 	‡X�XÐÓ ðW¤7ð W´$ö Wó !ðWð 	‡X�XˆoÓðU¤ð U´ö Uó ðUð 	‡X�XÐ(Ó)ðC¬Gö Có *ðCð 	‡X�XˆmÓð	
œtö 	
ó ð	
ð 	‡X�XˆhÓô.ó ð.ð 	‡W�Wˆ\ÓØ‡[�[�ÓôXó ó ðXð 	‡W�WˆYÓô.ó ð.ð
 €Jrc   )F)$Ú__doc__r:   Ú
contextlibr   Útypingr   Úutilsr   Úutils.import_utilsr   rW   r   r	   Úfastapi.middleware.corsr
   Úfastapi.responsesr   r   Úchat_completionr   Ú
completionr   r?   r   Útranscriptionr   r   r   r   r   r   Ú
get_loggerÚ__name__rt   Úboolrz   © rc   r#   Ú<module>r‰      s¸   ðñó Ý *Ý  å Ý 4ñ ×Ñß(Ý6ßAæÝ6Ý-Ý)Ý3å 'ß CÑ Cð 
×	Ò	˜HÓ	%€ð ñgØðgà)ðgð ,ðgð (ð	gð
 2ðgð &ðgð ðgð ögrc   