Ë
    GêñiW  ã                   ó  — d Z ddlZddlmZ ddlmZ ddlmZ  e«       rddlm	Z	m
Z
 ddlmZ dd	lmZmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ d
dlmZ  ej6                  e«      Z	 ddedededededede	fd„Zy)z
FastAPI app factory.
é    N)Úasynccontextmanageré   )Úlogging)Úis_serve_available)ÚFastAPIÚRequest)ÚCORSMiddleware)ÚJSONResponseÚStreamingResponseé   )ÚChatCompletionHandler)ÚCompletionHandler)ÚModelManager)ÚResponseHandler)ÚTranscriptionHandler)ÚX_REQUEST_IDÚmodel_managerÚchat_handlerÚcompletion_handlerÚresponse_handlerÚtranscription_handlerÚenable_corsÚreturnc                 ó  ‡ ‡‡‡‡— t         dt        fˆ fd„«       }t        |¬«      }|r2|j                  t        dgddgdg¬«       t        j                  d«       |j                  d«      d	t        fd
„«       }|j                  d«      d	t        dt        fˆfd„«       }	|j                  d«      d	t        dt        fˆfd„«       }
|j                  d«      d	t        dt        fˆfd„«       }|j                  d«      d	t        fˆfd„«       }|j                  d«      dt        fˆ fd„«       }|j                  d«      ˆ fd„«       }|j                  d«      |j                  d«      ˆ fd„«       «       }|j                  d«      d„ «       }|S )a™  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.
        enable_cors: If `True`, adds permissive CORS middleware (allow all origins).

    Returns:
        A FastAPI app ready to be passed to uvicorn.
    Úappc                ó8   •K  — d ­–— ‰j                  «        y ­w©N)Úshutdown)r   r   s    €úa/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/transformers/cli/serving/server.pyÚlifespanzbuild_server.<locals>.lifespan=   s   øè ø€ äØ×ÑÕ ùs   ƒ)r    Ú*T)Úallow_originsÚallow_credentialsÚallow_methodsÚallow_headersz@CORS allow origin is set to `*`. Not recommended for production.ÚhttpÚrequestc              “   óö   K  — | j                   j                  t        «      xs t        t	        j
                  «       «      }|| j                  _         || «      ƒ d{  –—† }||j                   t        <   |S 7 Œ­w)z(Get or set the request ID in the header.N)ÚheadersÚgetr   ÚstrÚuuidÚuuid4ÚstateÚ
request_id)r'   Ú	call_nextr/   Úresponses       r   Úrequest_id_middlewarez+build_server.<locals>.request_id_middlewareP   s_   è ø€ ð —_‘_×(Ñ(¬Ó6ÒK¼#¼d¿j¹j»lÓ:Kˆ
Ø#-ˆ�‰Ô Ù" 7Ó+×+ˆØ)3ˆ×ÑœÑ&Øˆð ,ús   ‚AA9ÁA7ÁA9z/v1/chat/completionsÚbodyc              “   ól   •K  — ‰j                  || j                  j                  «      ƒ d {  –—† S 7 Œ­wr   ©Úhandle_requestr.   r/   )r'   r3   r   s     €r   Úchat_completionsz&build_server.<locals>.chat_completions[   s*   øè ø€ à!×0Ñ0°°w·}±}×7OÑ7OÓP×PÐPÐPúó   ƒ*4­2®4z/v1/completionsc              “   ól   •K  — ‰j                  || j                  j                  «      ƒ d {  –—† S 7 Œ­wr   r5   )r'   r3   r   s     €r   Úcompletionsz!build_server.<locals>.completions_   s*   øè ø€ à'×6Ñ6°t¸W¿]¹]×=UÑ=UÓV×VÐVÐVúr8   z/v1/responsesc              “   ól   •K  — ‰j                  || j                  j                  «      ƒ d {  –—† S 7 Œ­wr   r5   )r'   r3   r   s     €r   Ú	responseszbuild_server.<locals>.responsesc   s*   øè ø€ à%×4Ñ4°T¸7¿=¹=×;SÑ;SÓT×TÐTÐTúr8   z/v1/audio/transcriptionsc              “   óB   •K  — ‰j                  | «      ƒ d {  –—† S 7 Œ­wr   )r6   )r'   r   s    €r   Úaudio_transcriptionsz*build_server.<locals>.audio_transcriptionsg   s   øè ø€ à*×9Ñ9¸'ÓB×BÐBÐBús   ƒ˜™z/load_modelc              “   ó¬   •K  — ddl m} | j                  d«      }|€
 |dd¬«      ‚‰j                  |«      }t	        ‰j                  |«      d¬«      S ­w)	Nr   )ÚHTTPExceptionÚmodeli¦  z*Missing `model` field in the request body.)Ústatus_codeÚdetailztext/event-stream)Ú
media_type)Úfastapir@   r*   Úprocess_model_namer   Úload_model_streaming)r3   r@   rA   Úmodel_id_and_revisionr   s       €r   Ú
load_modelz build_server.<locals>.load_modelk   s[   øè ø€ å)à—‘˜Ó!ˆØˆ=Ù¨CÐ8dÔeÐeØ -× @Ñ @ÀÓ GÐÜ Ø×.Ñ.Ð/DÓEÐReô
ð 	
ùs   ƒAAz/resetc                  ó>   •— ‰ j                  «        t        ddi«      S ©NÚstatusÚok)r   r
   ©r   s   €r   Úresetzbuild_server.<locals>.resetw   s   ø€ à×ÑÔ Ü˜X tÐ,Ó-Ð-ó    z
/v1/modelsc                  ó<   •— t        d‰ j                  «       dœ«      S )NÚlist)ÚobjectÚdata)r
   Úget_gen_modelsrN   s   €r   Úlist_modelsz!build_server.<locals>.list_models|   s   ø€ ô  v°}×7SÑ7SÓ7UÑVÓWÐWrP   z/healthc                  ó   — t        ddi«      S rK   )r
   © rP   r   Úhealthzbuild_server.<locals>.health�   s   € ä˜X tÐ,Ó-Ð-rP   )r   r   Úadd_middlewarer	   ÚloggerÚwarning_onceÚ
middlewarer   ÚpostÚdictr*   Úoptions)r   r   r   r   r   r   r    r   r2   r7   r:   r<   r>   rI   rO   rV   rY   s   `````            r   Úbuild_serverra   )   sÖ  ü€ ô( ð!œGô !ó ð!ô ˜8Ô
$€CáØ×ÑÜØ˜%Ø"Ø˜%Ø˜%ð 	ô 	
ô 	×ÑÐ^Ô_ð 	‡^�^�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Óñ.ó ð.ð €JrP   )F) Ú__doc__r,   Ú
contextlibr   Úutilsr   Úutils.import_utilsr   rE   r   r   Úfastapi.middleware.corsr	   Úfastapi.responsesr
   r   Úchat_completionr   Ú
completionr   r   r   r1   r   Útranscriptionr   r   Ú
get_loggerÚ__name__r[   Úboolra   rX   rP   r   ú<module>rn      s£   ðñó Ý *å Ý 4ñ Ôß(Ý6ßAå 2Ý )Ý 'Ý %Ý /Ý ð 
ˆ×	Ñ	˜HÓ	%€ð ñ\Øð\à'ð\ð *ð\ð &ð	\ð
 0ð\ð ð\ð ô\rP   