
    i=                         d 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 ddlmZ ddlmZ d	d
lmZ dedefdZ G d de      Zy)z
This file contains the calling Azure OpenAI's `/openai/realtime` endpoint.

This requires websockets, and is currently only supported on LiteLLM Proxy.
    )AnyOptionalcast)verbose_proxy_logger))REALTIME_WEBSOCKET_MAX_MESSAGE_SIZE_BYTES   )Logging)RealTimeStreaming)get_shared_realtime_ssl_context   )AzureChatCompletion	client_ws
backend_wsc                    K   dd l }	 	 |j                          d {   }| j                  |       d {    27 7 # |j                  j                  $ r Y y w xY ww)Nr   )
websocketsrecv	send_text
exceptionsConnectionClosed)r   r   r   messages       t/Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/litellm/llms/azure/realtime/handler.pyforward_messagesr      s]     &OO--G%%g... -.  11 s4   A? ;? =? ? AAAAc                       e Zd Z	 ddededee   dee   def
dZ	 	 	 	 	 	 	 	 	 ddeded	edee   d
ee   dee   dee   dee   dee   dee   dee   dee	   fdZ
y)AzureOpenAIRealtimeNapi_basemodelapi_versionrealtime_protocolreturnc                     |j                  dd      }|duxr |j                         dv }|rd}| | d| S d}| | d| d	| S )
a  
        Construct Azure realtime WebSocket URL.

        Args:
            api_base: Azure API base URL (will be converted from https:// to wss://)
            model: Model deployment name
            api_version: Azure API version
            realtime_protocol: Protocol version to use:
                - "GA" or "v1": Uses /openai/v1/realtime (GA path)
                - "beta" or None: Uses /openai/realtime (beta path, default)

        Returns:
            WebSocket URL string

        Examples:
            beta/default: "wss://.../openai/realtime?api-version=2024-10-01-preview&deployment=gpt-4o-realtime-preview"
            GA/v1:        "wss://.../openai/v1/realtime?model=gpt-realtime-deployment"
        zhttps://zwss://NGAV1z/openai/v1/realtimez?model=z/openai/realtimez?api-version=z&deployment=)replaceupper)selfr   r   r   r   _is_gapaths          r   _construct_urlz"AzureOpenAIRealtime._construct_url    s    2 ##J9 #$. 
3D3J3J3L Q
 4
 (DZvWUG44 &DZv];-|E7SS    	websocketlogging_objapi_keyazure_ad_tokenclienttimeoutuser_api_key_dictlitellm_metadatac           
        K   dd l }ddlm} |t        d      ||
|
j	                         dvrt        d      | j                  ||||
      }	 t               }|j                  |d|it        |      4 d {   }t        |t        ||      ||d	|xs i i
      }|j                          d {    d d d       d {    y 7 M7 7 	# 1 d {  7  sw Y   y xY w# |j                  j                  $ r9}|j                  |j                  t!        |             d {  7   Y d }~y d }~wt"        $ r t%        j&                  d       Y y w xY ww)Nr   )ClientConnectionz+api_base is required for Azure OpenAI callsr!   z.api_version is required for Azure OpenAI calls)r   zapi-key)additional_headersmax_sizesslr2   )r1   request_data)codereasonz+Error in AzureOpenAIRealtime.async_realtime)r   websockets.asyncio.clientr4   
ValueErrorr%   r)   r   connectr   r
   r   bidirectional_forwardr   InvalidStatusCodeclosestatus_codestr	Exceptionr   	exception)r&   r   r+   r,   r   r-   r   r.   r/   r0   r   r1   r2   r   r4   urlssl_contextr   realtime_streaminges                       r   async_realtimez"AzureOpenAIRealtime.async_realtimeH   so     	>JKK%):)@)@)B,)VMNN!!e[<M " 
	9;K!))w$ C *   %6):6&7"46F6L"!M&" )>>@@@   A   " $$66 	E//q}}SV/DDD 	 **= 		s   AE)C# :C;C# >4C2C
3C7C# CC# EC# 
CC# C CC C# E C# #E<)D0%D(&D0+E0!EEEE)N)	NNNNNNNNN)__name__
__module____qualname__rB   r   r)   r   LiteLLMLoggingfloatdictrI    r*   r   r   r      s    ,0&T&T &T c]	&T
 $C=&T 
&TZ #'!%%)(, $#'+/+/+/66 6 $	6
 3-6 #6 c]6 !6 6 %6 $C=6 $C=6 #4.6r*   r   N)__doc__typingr   r   r   litellm._loggingr   litellm.constantsr   "litellm_core_utils.litellm_loggingr	   rM   %litellm_core_utils.realtime_streamingr
   llms.custom_httpx.http_handlerr   azurer   r   r   rP   r*   r   <module>rY      sF    ' & 1 G L G N '
c s _- _r*   