
    Z j5                        S r SSK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  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\	4S jjr!g)z
FastAPI app factory.
    N)asynccontextmanager   )logging)is_serve_available)FastAPIRequest)CORSMiddleware)JSONResponseStreamingResponse   )ChatCompletionHandler)CompletionHandler)ModelManager)ResponseHandler)TranscriptionHandler)X_REQUEST_IDCBWorkerDeadErrorGenerationStatemodel_managerchat_handlercompletion_handlerresponse_handlertranscription_handlergeneration_stateenable_corsreturnc                   ^ ^^^^^ [         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    p/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/cli/serving/server.pylifespanbuild_server.<locals>.lifespanA   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_handlerH   s      Wc#h/SAAs   *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)r5   	call_nextr<   responses       r"   request_id_middleware+build_server.<locals>.request_id_middlewareY   sZ      __((6K#djjl: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<   )r5   rA   r   s     r"   chat_completions&build_server.<locals>.chat_completionsd   s'     !00}}7O7O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    rC   )r5   rA   r   s     r"   completions!build_server.<locals>.completionsh   s'     '66t]]=U=UVVVVrG   z/v1/responsesc                 j   >#    TR                  XR                  R                  5      I S h  vN $  N7fr    rC   )r5   rA   r   s     r"   	responsesbuild_server.<locals>.responsesl   s'     %44T==;S;STTTTrG   z/v1/audio/transcriptionsc                 B   >#    TR                  U 5      I S h  vN $  N7fr    )rD   )r5   r   s    r"   audio_transcriptions*build_server.<locals>.audio_transcriptionsp   s     *99'BBBBs   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)fastapirR   r8   process_model_namer   load_model_streaming)rA   rR   rS   model_id_and_revisionr   s       r"   
load_model build_server.<locals>.load_modelt   sZ     )!=C8dee - @ @ G ../DERe
 	
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     Xt,--    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}7S7S7UVWWrb   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 SadeeXt,--rb   )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?   rE   rI   rL   rO   rZ   r`   rh   ro   s   ``````             r"   build_serverry   )   s	   0 !G ! ! 8
$C,-B B7H B .B %"%% 	 	
 	^_ 	^^FW   	XX$%Q Qt Q &Q 	XX W7 W$ W !W 	XXoU U U U 	XX()CG C *C 	XXm	
t 	
 	
 	XXh. . 	WW\[[X  X 	WWY. .
 Jrb   )F)"__doc__r9   
contextlibr   utilsr   utils.import_utilsr   rV   r   r   fastapi.middleware.corsr	   fastapi.responsesr
   r   chat_completionr   
completionr   r   r   r>   r   transcriptionr   r   r   r   
get_logger__name__rs   boolry    rb   r"   <module>r      s     *  4 (6A 2 ) ' % / C C 
		H	% gg'g *g &	g
 0g &g g grb   