o
    i                     @   s  d dl mZ d dlmZ d dlmZmZmZmZ d dl	m
Z
mZ d dlmZ d dlmZmZmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ eeZe ZdededB fddZdeedf deedf fddZ ej!deegej"j#ddi iiej$j#deiej%j#deiej&j#deiideededefddZ'e(de		d(dedede)dB de*dB fd d!Z+e!d"ededefd#d$Z,d%efd&d'Z-dS ))    )AsyncGenerator)
HTTPStatus)	APIRouterDependsFastAPIRequest)JSONResponseStreamingResponse)ErrorResponse)ResponsesRequestResponsesResponseStreamingResponsesResponse)OpenAIServingResponses)validate_json_request)load_aware_callwith_cancellation)init_loggerrequestreturnNc                 C   s
   | j jjS N)appstateopenai_serving_responses)r    r   b/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/entrypoints/openai/responses/api_router.py	responses   s   
r   	generatorc                 C  sF   | 2 z3 dH W }t |dd}d| d|jdd d}|V  q6 dS )z9Convert the generator to a stream of events in SSE formatNtypeunknownzevent: z
data: )indentz

)getattrmodel_dump_json)r   event
event_type
event_datar   r   r   _convert_stream_to_sse_events"   s   r%   z/v1/responsescontenttext/event-streammodel)dependenciesr   raw_requestc              
      s   t |}|d u r|jjj}|jddS z|| |I d H }W n ty6 } z||W  Y d }~S d }~ww t|trFt	|
 |jjdS t|trRt	|
 dS tt|ddS )N(The model does not support Responses APImessager&   status_coder&   r'   r&   
media_type)r   r   r   openai_serving_tokenizationcreate_error_responsecreate_responses	Exception
isinstancer
   r   
model_dumperrorcoder   r	   r%   )r   r*   handlerbase_serverr   er   r   r   r5   /   s,   


r5   z/v1/responses/{response_id}Fresponse_idstarting_afterstreamc              
      s   t |}|d u r|jjj}|jddS z|j| ||dI d H }W n ty8 } z||W  Y d }~S d }~ww t|trHt	|
 |jjdS t|trTt	|
 dS tt|ddS )Nr+   r,   )r?   r@   r.   r0   r'   r1   )r   r   r   r3   r4   retrieve_responsesr6   r7   r
   r   r8   r9   r:   r   r	   r%   )r>   r*   r?   r@   r;   r<   responser=   r   r   r   rA   S   s4   


rA   z"/v1/responses/{response_id}/cancelc              
      s   t |}|d u r|jjj}|jddS z
|| I d H }W n ty5 } z||W  Y d }~S d }~ww t|trEt	|
 |jjdS t	|
 dS )Nr+   r,   r.   r0   )r   r   r   r3   r4   cancel_responsesr6   r7   r
   r   r8   r9   r:   )r>   r*   r;   r<   rB   r=   r   r   r   rC   v   s$   

rC   r   c                 C   s   |  t d S r   )include_routerrouter)r   r   r   r   attach_router   s   rF   )NF).collections.abcr   httpr   fastapir   r   r   r   fastapi.responsesr   r	   'vllm.entrypoints.openai.engine.protocolr
   *vllm.entrypoints.openai.responses.protocolr   r   r   )vllm.entrypoints.openai.responses.servingr   vllm.entrypoints.openai.utilsr   vllm.entrypoints.utilsr   r   vllm.loggerr   __name__loggerrE   r   strr%   postOKvalueBAD_REQUEST	NOT_FOUNDINTERNAL_SERVER_ERRORr5   getintboolrA   rC   rF   r   r   r   r   <module>   s^   



!