o
    iX	                     @   s   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 eeZerGd dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ neZe ZeddefddZdefddZdddddddedB ded f
ddZdS )    )TYPE_CHECKING)	APIRouterFastAPI	WebSocket)RealtimeConnection)OpenAIServingRealtime)init_logger)	Namespace)State)EngineClient)RequestLogger)SupportedTaskz/v1/realtime	websocketc                    s,   | j }|jj}t| |}| I dH  dS )a  WebSocket endpoint for realtime audio transcription.

    Protocol:
    1. Client connects to ws://host/v1/realtime
    2. Server sends session.created event
    3. Client optionally sends session.update with model/params
    4. Client sends input_audio_buffer.commit when ready
    5. Client sends input_audio_buffer.append events with base64 PCM16 chunks
    6. Server processes and sends transcription.delta events
    7. Server sends transcription.done with final text + usage
    8. Repeat from step 5 for next utterance
    9. Optionally, client sends input_audio_buffer.commit with final=True
       to signal audio input is finished. Useful when streaming audio files

    Audio format: PCM16, 16kHz, mono, base64-encoded
    N)appstateopenai_serving_realtimer   handle_connection)r   r   serving
connection r   a/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/entrypoints/openai/realtime/api_router.pyrealtime_endpoint   s
   
r   r   c                 C   s   |  t td dS )z.Attach the realtime router to the FastAPI app.zRealtime API router attachedN)include_routerrouterloggerinfo)r   r   r   r   attach_router5   s   
r   engine_clientr   r   r
   argsr	   request_loggerNsupported_tasks)r   .c                 C   s,   d|v rt | |j||jd|_d S d |_d S )Nrealtime)r   log_error_stack)r   openai_serving_modelsr"   r   )r   r   r   r   r    r   r   r   init_realtime_state;   s   r$   )typingr   fastapir   r   r   +vllm.entrypoints.openai.realtime.connectionr   (vllm.entrypoints.openai.realtime.servingr   vllm.loggerr   __name__r   argparser	   starlette.datastructuresr
   vllm.engine.protocolr   vllm.entrypoints.loggerr   
vllm.tasksr   objectr   r   r   r   tupler$   r   r   r   r   <module>   s8   