
    iP                         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  ej2                  e      Z	 d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)ModelManager)ResponseHandler)TranscriptionHandler)X_REQUEST_IDmodel_managerchat_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        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    p/var/www/vps2.regionflexible.com/Desarrollo/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_middlewareN   s_      __((6K#djjl: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%   r1   r   s     r   chat_completionsz&build_server.<locals>.chat_completionsY   s*     !00w}}7O7OPPPP   *424z/v1/responsesc                 l   K   j                  || j                  j                         d {   S 7 wr   r3   )r%   r1   r   s     r   	responseszbuild_server.<locals>.responses]   s*     %44T7==;S;STTTTr6   z/v1/audio/transcriptionsc                 B   K   j                  |        d {   S 7 wr   )r4   )r%   r   s    r   audio_transcriptionsz*build_server.<locals>.audio_transcriptionsa   s     *99'BBBBs   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)r1   r<   r=   model_id_and_revisionr   s       r   
load_modelz build_server.<locals>.load_modele   s[     )!=C8dee - @ @ G ../DERe
 	
s   AAz/resetc                  >     j                          t        ddi      S Nstatusok)r   r
   r   s   r   resetzbuild_server.<locals>.resetq   s     Xt,--    z
/v1/modelsc                  <    t        d j                         d      S )Nlist)objectdata)r
   get_gen_modelsrJ   s   r   list_modelsz!build_server.<locals>.list_modelsv   s     v}7S7S7UVWWrL   z/healthc                      t        ddi      S rG   )r
    rL   r   healthzbuild_server.<locals>.health{   s    Xt,--rL   )r   r   add_middlewarer	   loggerwarning_once
middlewarer   postdictr(   options)r   r   r   r   r   r   r   r0   r5   r8   r:   rE   rK   rR   rU   s   ````           r   build_serverr]   (   s   & !G ! ! 8
$C%"%% 	 	
 	^_ 	^^FW   	XX$%Q Qt Q &Q 	XXoU U U U 	XX()CG C *C 	XXm	
t 	
 	
 	XXh. . 	WW\[[X  X 	WWY. . JrL   )F)__doc__r*   
contextlibr   utilsr   utils.import_utilsr   rA   r   r   fastapi.middleware.corsr	   fastapi.responsesr
   r   chat_completionr   r   r   r/   r   transcriptionr   r   
get_logger__name__rW   boolr]   rT   rL   r   <module>ri      s     *  4 (6A 2 ' % /  
		H	% WW'W &W 0	W
 W WrL   