§
    ‚Štjƒ  ã                   ó"  — d Z ddlZddlm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 er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mZmZ  ej        e ¦  «        Z!	 d!dedddddddddede"ddfd „Z#dS )"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ÚGenerationStateFÚmodel_managerÚchat_handlerr   Úcompletion_handlerr   Úresponse_handlerr   Útranscription_handlerr   Úgeneration_stateÚenable_corsÚreturnr   c                 óB  ‡ ‡‡‡‡‡— t           dt          fˆ fd„¦   «         }t          |¬¦  «        }|                     t          ¦  «        dt          dt          fd„¦   «         }	|r<|                     t          dgddgdg¬	¦  «         t                               d
¦  «         | 	                    d¦  «        dt          fd„¦   «         }
| 
                    d¦  «        dt          dt          fˆfd„¦   «         }| 
                    d¦  «        dt          dt          fˆfd„¦   «         }| 
                    d¦  «        dt          dt          fˆfd„¦   «         }| 
                    d¦  «        dt          fˆfd„¦   «         }| 
                    d¦  «        dt          fˆ fd„¦   «         }| 
                    d¦  «        ˆ fd„¦   «         }|                     d¦  «        |                     d¦  «        ˆ fd„¦   «         ¦   «         }|                     d¦  «        ˆf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.
        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                ó>   •K  — d W V — ‰                      ¦   «          d S ©N)Úshutdown)r   r   s    €ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/cli/serving/server.pyÚlifespanzbuild_server.<locals>.lifespanD   s*   øè è € àˆˆˆˆØ×ÒÑ Ô Ð Ð Ð ó    )r$   Ú_requestÚexcc              “   óF   K  — t          dt          |¦  «        id¬¦  «        S )NÚerroré÷  ©Ústatus_code)r   Ústr)r&   r'   s     r#   Ú_cb_dead_handlerz&build_server.<locals>._cb_dead_handlerK   s&   è è € õ ˜W¥c¨#¡h¤hÐ/¸SÐAÑAÔAÐAr%   Ú*T)Úallow_originsÚallow_credentialsÚallow_methodsÚallow_headersz@CORS allow origin is set to `*`. Not recommended for production.ÚhttpÚrequestc              “   óà   K  — | j                              t          ¦  «        pt          t	          j        ¦   «         ¦  «        }|| j        _         || ¦  «        ƒ d{V —†}||j         t          <   |S )z(Get or set the request ID in the header.N)ÚheadersÚgetr   r-   ÚuuidÚuuid4ÚstateÚ
request_id)r5   Ú	call_nextr<   Úresponses       r#   Úrequest_id_middlewarez+build_server.<locals>.request_id_middleware\   sm   è è € ð ”_×(Ò(­Ñ6Ô6ÐK½#½d¼j¹l¼lÑ:KÔ:Kˆ
Ø#-ˆŒÔ Ø"˜ 7Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+ˆØ)3ˆÔ�Ñ&Øˆr%   z/v1/chat/completionsÚbodyc              “   óT   •K  — ‰                      || j        j        ¦  «        ƒ d {V —†S r!   ©Úhandle_requestr;   r<   )r5   r@   r   s     €r#   Úchat_completionsz&build_server.<locals>.chat_completionsg   s4   øè è € à!×0Ò0°°w´}Ô7OÑPÔPÐPÐPÐPÐPÐPÐPÐPr%   z/v1/completionsc              “   óT   •K  — ‰                      || j        j        ¦  «        ƒ d {V —†S r!   rB   )r5   r@   r   s     €r#   Úcompletionsz!build_server.<locals>.completionsk   s4   øè è € à'×6Ò6°t¸W¼]Ô=UÑVÔVÐVÐVÐVÐVÐVÐVÐVr%   z/v1/responsesc              “   óT   •K  — ‰                      || j        j        ¦  «        ƒ d {V —†S r!   rB   )r5   r@   r   s     €r#   Ú	responseszbuild_server.<locals>.responseso   s4   øè è € à%×4Ò4°T¸7¼=Ô;SÑTÔTÐTÐTÐTÐTÐTÐTÐTr%   z/v1/audio/transcriptionsc              “   ó>   •K  — ‰                      | ¦  «        ƒ d {V —†S r!   )rC   )r5   r   s    €r#   Úaudio_transcriptionsz*build_server.<locals>.audio_transcriptionss   s-   øè è € à*×9Ò9¸'ÑBÔBÐBÐBÐBÐBÐBÐBÐBr%   z/load_modelc              “   óÎ   •K  — ddl m} |                      d¦  «        }|€ |dd¬¦  «        ‚‰                     |¦  «        }t	          ‰                     |¦  «        d¬¦  «        S )	Nr   )ÚHTTPExceptionÚmodeli¦  z*Missing `model` field in the request body.)r,   Údetailztext/event-stream)Ú
media_type)ÚfastapirL   r8   Úprocess_model_namer   Úload_model_streaming)r@   rL   rM   Úmodel_id_and_revisionr   s       €r#   Ú
load_modelz build_server.<locals>.load_modelw   s…   øè è € à)Ð)Ð)Ð)Ð)Ð)à—’˜Ñ!Ô!ˆØˆ=Ø�-¨CÐ8dÐeÑeÔeÐeØ -× @Ò @ÀÑ GÔ GÐÝ Ø×.Ò.Ð/DÑEÔEÐReð
ñ 
ô 
ð 	
r%   z/resetc                  óN   •— ‰                       ¦   «          t          ddi¦  «        S )NÚstatusÚok)r"   r   ©r   s   €r#   Úresetzbuild_server.<locals>.resetƒ   s(   ø€ à×ÒÑ Ô Ð Ý˜X tÐ,Ñ-Ô-Ð-r%   z
/v1/modelsc                  óL   •— t          d‰                      ¦   «         dœ¦  «        S )NÚlist)ÚobjectÚdata)r   Úget_gen_modelsrX   s   €r#   Úlist_modelsz!build_server.<locals>.list_modelsˆ   s'   ø€ õ  v°}×7SÒ7SÑ7UÔ7UÐVÐVÑWÔWÐWr%   z/healthc                  óv   •— ‰                       ¦   «         st          dddœd¬¦  «        S t          ddi¦  «        S )NÚ	unhealthyÚcb_worker_dead)rV   Úreasonr*   r+   rV   rW   )Úis_cb_aliver   )r   s   €r#   Úhealthzbuild_server.<locals>.health�   sH   ø€ à×+Ò+Ñ-Ô-ð 	fÝ¨;ÐBRÐ SÐ SÐadÐeÑeÔeÐeÝ˜X tÐ,Ñ-Ô-Ð-r%   )r   r   Úexception_handlerr   r	   Úadd_middlewarer
   ÚloggerÚwarning_onceÚ
middlewareÚpostÚdictr8   Úoptions)r   r   r   r   r   r   r   r$   r   r.   r?   rD   rF   rH   rJ   rT   rY   r_   re   s   ``````             r#   Úbuild_serverrn   ,   s=  øøøøøø€ õ0 ð!�Gð !ð !ð !ð !ð !ñ Ôð!õ ˜8Ð
$Ñ
$Ô
$€Cà×ÒÕ,Ñ-Ô-ðB­ð BÕ7Hð Bð Bð Bñ .Ô-ðBð ð `Ø×ÒÝØ˜%Ø"Ø˜%Ø˜%ð 	ñ 	
ô 	
ð 	
õ 	×ÒÐ^Ñ_Ô_Ð_ð 	‡^‚^�FÑÔð­Wð ð ð ñ Ôðð 	‡X‚XÐ$Ñ%Ô%ðQ­ð Qµtð Qð Qð Qð Qð Qñ &Ô%ðQð 	‡X‚XÐÑ Ô ðW¥7ð Wµ$ð Wð Wð Wð Wð Wñ !Ô ðWð 	‡X‚XˆoÑÔðU¥ð Uµð Uð Uð Uð Uð Uñ ÔðUð 	‡X‚XÐ(Ñ)Ô)ðC­Gð Cð Cð Cð Cð Cñ *Ô)ðCð 	‡X‚XˆmÑÔð	
�tð 	
ð 	
ð 	
ð 	
ð 	
ñ Ôð	
ð 	‡X‚XˆhÑÔð.ð .ð .ð .ñ Ôð.ð 	‡W‚Wˆ\ÑÔØ‡[‚[�ÑÔðXð Xð Xð Xñ Ôñ ÔðXð 	‡W‚WˆYÑÔð.ð .ð .ð .ñ Ôð.ð
 €Jr%   )F)$Ú__doc__r9   Ú
contextlibr   Útypingr   Úutilsr   Úutils.import_utilsr   rP   r   r	   Úfastapi.middleware.corsr
   Úfastapi.responsesr   r   Úchat_completionr   Ú
completionr   r>   r   Útranscriptionr   r   r   r   r   r   Ú
get_loggerÚ__name__rh   Úboolrn   © r%   r#   ú<module>r}      sÏ  ððð ð €€€Ø *Ð *Ð *Ð *Ð *Ð *Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ð ÐÑÔð BØ(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ø6Ð6Ð6Ð6Ð6Ð6ØAÐAÐAÐAÐAÐAÐAÐAàð 4Ø6Ð6Ð6Ð6Ð6Ð6Ø-Ð-Ð-Ð-Ð-Ð-Ø)Ð)Ð)Ð)Ð)Ð)Ø3Ð3Ð3Ð3Ð3Ð3à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cð 
ˆÔ	˜HÑ	%Ô	%€ð ðgð gØðgà)ðgð ,ðgð (ð	gð
 2ðgð &ðgð ðgð ðgð gð gð gð gð gr%   