
    AHjK                        d Z ddlZddlmZmZmZmZ ddl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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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/m0Z0 ddl1m2Z3  e$       Z4 e*       Z5 e&       Z6 e0       Z7 e.       Z8 e       Z9de:de:fdZ;de<dee<   dee<   dede=ee<e<f   f
dZ>e3	 	 	 	 d2d ee<   d!eee<ef      d"eee<ef      d#ee?   fd$       Z@e3	 	 	 d3d%e<d&eAd ee<   d!eee<ef      d#ee?   f
d'       ZBe3	 	 	 	 	 	 	 d4d e<d(ed)ee<   d*ee<   d+ee<   d,ee<   d-ee   d#ee?   d.ee   fd/       ZC	 	 	 d3d e<de<d*ee<   d)ee<   d+ee<   d0ee<   fd1ZDy)5z.Abstraction function for OpenAI's realtime API    N)AnyDictOptionalcast))REALTIME_WEBSOCKET_MAX_MESSAGE_SIZE_BYTESrequest_timeout)get_llm_provider)BaseRealtimeConfig)BaseLLMHTTPHandler)get_secret_str)RealtimeClientSecretRequestRealtimeExpiresAfterRealtimeQueryParamsRealtimeSessionConfig)GenericLiteLLMParams)LlmProviders)ProviderConfigManager   )get_litellm_params)Logging)AzureOpenAIRealtime)BedrockRealtime)get_shared_realtime_ssl_context)OpenAIRealtime)VertexAIRealtimeConfig)
VertexBase)XAIRealtime)clientkwargsreturnc                     i | j                  d      xs i }| j                  d      xs i j                  d      xs | j                  d      xs g }|r||d<   |S )zbBuild the litellm_metadata dict for guardrail checking (internal only, not forwarded to provider).litellm_metadatametadata
guardrails)get)r   r#   r$   s      Q/root/tools/cai/cai_env/lib/python3.12/site-packages/litellm/realtime_api/main.py_build_litellm_metadatar'   )   si    ?$67=2?H	J		%2**<8 	::l#	 
 !+O    custom_llm_providerdynamic_api_basedynamic_api_keylitellm_paramsc                    ddl m} d}| t        j                  j	                         v r t        j                  dt        |             }|xs |j                  }|xs |j                  }|%|j                  |      }|j                  |      }	nO|xs t        j                  xs d}|xs3 t        j                  xs! t        j                  xs t        d	      xs d}	||j                  d
      |	fS )a  
    Return (provider_config, resolved_api_base, resolved_api_key) for the
    realtime HTTP endpoints (client_secrets / realtime_calls).

    Uses ProviderConfigManager so each provider keeps its credential-resolution
    and URL-construction logic in its own transformation class.
    r   )BaseRealtimeHTTPConfigN modelprovider)api_base)api_keyzhttps://api.openai.comOPENAI_API_KEY/)2litellm.llms.base_llm.realtime.http_transformationr.   r   _member_map_valuesr   !get_provider_realtime_http_configr3   r4   get_api_baseget_api_keylitellm
openai_keyr   rstrip)
r)   r*   r+   r,   r.   provider_configraw_api_baseraw_api_keyresolved_api_baseresolved_api_keys
             r&   "_get_realtime_http_provider_configrE   6   s    9=Ol77>>@@/QQ!"56

 $>~'>'>L!;^%;%;K"+88,8O*66{6K )XG,<,<X@X !! ./  	 -44S9;KKKr(   r1   sessionexpires_aftertimeoutc                   K   t        | |rt        di |nd |rt        di |nd       }|j                  |j                  j                  nd xs |j                  xs d}|j                  d      }t        di |}t        ||j                  |j                        \  }}	}
}t        |	||
|      \  }}}|j                  ||||dd|i|	       |j                  d	d
h      }t        j                  |||||xs t        |||j                  d      |j                  d      |j                   
       d {   S 7 w)N)r1   rF   rG   gpt-4o-realtime-previewlitellm_logging_objr1   r3   r4   r)   r*   r+   r,   )rG   rF   r3   r   r1   optional_paramsr,   r)   Tr1   )exclude_noneexcludeextra_headersr   )
r3   r4   request_datalogging_objrH   r@   r1   rR   r   api_version )r   r   r   rF   r1   r%   r   r	   r3   r4   rE   update_from_kwargs
model_dumpbase_llm_http_handler$async_realtime_client_secret_handlerr   rU   )r1   rF   rG   rH   r   req
model_namerK   r,   r)   r+   r*   r@   rC   rD   rS   s                   r&   acreate_realtime_client_secretr]   b   s     &4;%00?L*;];RVC "kk5		4 	%99	%$ 
 +1**5J*K)3F3N 	((&&	 	+/)'%			 ***7GL"$56/ +  >>tgY>GL&KK" !'*?'jj1zz(#".. L    s   D6D?8D=9D?openai_ephemeral_keysdp_bodyc                   K   |xs d}|j                  d      }t        di |}t        ||j                  |j                        \  }}	}
}t        |	||
|      \  }}}|j                  ||d|dd|i|	       t        j                  || |||xs t        ||||j                  d	      |j                  d
      |j                         d {   S 7 w)NrJ   rK   rL   rM   T)realtime_callsrF   r3   rN   rR   r   )r3   r^   r_   rT   rH   r@   r1   session_configrR   r   rU   rV   )r%   r   r	   r3   r4   rE   rW   rY   async_realtime_calls_handlerr   rU   )r^   r_   r1   rF   rH   r   r\   rK   r,   r)   r+   r*   r@   rC   _s                  r&   arealtime_callsre      s     33J*0**5J*K)3F3N 	((&&	 -O/)'%	-)O& **+/GD"$56/ +  'CC"1'*?'jj1zz(#".. D    s   CCCC	websocketr3   r4   rU   azure_ad_tokenr   query_paramsc	                   K   t        t        t           |	j                  d            }
t        t        t           |	j                  d            }|
i }
||
j	                  |       |	j                  d      }|	j                  dd      }t        d7i |	}t        d7i |	}t        | ||      \  } }}}|i |d| i}|j                  |	| |i ||       d}|t        j                  j                         v r t        j                  | t        |      	      }|At        j                  | ||||||||
|	j                  d
      t!        |	             d{    y|dk(  r|xs+ |j"                  xs t$        j"                  xs t'        d      }|xs/ t$        j(                  xs t$        j*                  xs t'        d      }|xs |j,                  xs d}|	j                  d      xs6 |j                  d      xs# t.        j0                  j                  d      xs d}t2        j                  | ||||dd||||	j                  d
      t!        |	             d{    y|dk(  r|xs" |j"                  xs t$        j"                  xs d}|xs/ t$        j(                  xs t$        j*                  xs t'        d      }t4        j                  | ||||d|||	j                  d
      t!        |	      
       d{    y|dk(  r|	j                  d      }|	j                  d      }|	j                  d      }|	j                  d      }|	j                  d      }|	j                  d      }|	j                  d      }|	j                  d       }|	j                  d!      }|	j                  d"      }|	j                  d#      }t6        j                  | |||xs ||xs |||||||||||||$       d{    y|d%k(  r|xs |j"                  xs t'        d&      xs d'}|xs t$        j(                  xs t'        d(      }t8        j                  | ||||d|||	j                  d
      t!        |	      
       d{    y|d)k(  rN|	j                  d*      xs |	j                  d+      xs t'        d,      } |	j                  d-      xs0 |	j                  d.      xs t$        j:                  xs t'        d/      }!|	j                  d0      xs0 |	j                  d1      xs t$        j<                  xs t'        d2      }"t>        jA                  |"| 3      }#t>        jC                  | |!d)4       d{   \  }$}%tE        |$|%|#5      }&t        j                  | |||&|xs |j"                  d|||
|	j                  d
      t!        |	             d{    ytG        d6|        7 7 7 7 7 t7 7 $w)8zT
    Private function to handle the realtime API call.

    For PROXY use only.
    headersrR   NrK   userrL   r1   )r   r1   rk   rO   r,   r)   r0   user_api_key_dict)r1   rf   rT   r@   r3   r4   r   rH   rj   rl   r"   azureAZURE_API_BASEAZURE_API_KEY2024-10-01-previewrealtime_protocolLITELLM_AZURE_REALTIME_PROTOCOLbeta)r1   rf   r3   r4   rU   rg   r   rH   rT   rq   rl   r"   openaihttps://api.openai.com/r5   )
r1   rf   rT   r3   r4   r   rH   rh   rl   r"   bedrockaws_region_nameaws_access_key_idaws_secret_access_keyaws_session_tokenaws_role_nameaws_session_nameaws_profile_nameaws_web_identity_tokenaws_sts_endpointaws_bedrock_runtime_endpointaws_external_id)r1   rf   rT   r3   r4   rH   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   xaiXAI_API_BASEhttps://api.x.ai/v1XAI_API_KEY	vertex_aivertex_credentialsvertex_ai_credentialsVERTEXAI_CREDENTIALSvertex_projectvertex_ai_projectVERTEXAI_PROJECTvertex_locationvertex_ai_locationVERTEXAI_LOCATIONvertex_regionr1   credentials
project_idr)   access_tokenprojectlocationUnsupported model: rV   )$r   r   dictr%   updater   r   r	   rW   r   r8   r9   r   get_provider_realtime_configrY   async_realtimer'   r3   r=   r   r4   r>   rU   osenvironazure_realtimeopenai_realtimebedrock_realtimexai_realtimer   r   vertex_llm_baseget_vertex_region_ensure_access_token_asyncr   
ValueError)'r1   rf   r3   r4   rU   rg   r   rH   rh   r   rj   rR   rK   rk   r,   litellm_params_dict_custom_llm_providerr+   r*   r@   rq   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   resolved_locationr   resolved_projectvertex_realtime_configs'                                          r&   
_arealtimer      s    $ 8D>6::i#89G$O)DEM }%*0**5J*K::fd#D)3F3N,6v6EUFBE2B 7,77***0 +  59O|88??AA/LL!"67
 "#22++$jj)<=4V< 3 
 	
 	
 
	( 0&&00 ./	 	  //!!/ o.	 	 "W^%?%?WCW JJ*+ !!"56zz~~?@ 	 	 ++#+/$jj)<=4V< , 
 	
 	
 
	) )&&)) )	 	  00!!0 ./	 	 ,,+%$jj)<=4V< - 
 	
 	
 
	* **%67"JJ':; &

+B C"JJ':;

?3!::&89!::&89!',D!E!::&89'-zz2P'Q$ **%67--+%1#.w+/"7/'--#9-)E+# . 
 	
 	
& 
	& %&&%n-% %	 	 "UW__U}8U))+%$jj)<=4V< * 
 	
 	
 
	,JJ+, 6zz12645 	 JJ'( 2zz-.2%%2 01	 	 JJ() 3zz./3&&3 12	 	 ,==) > 
 "<<*% + = 
 
	
 "8%$&"
 $22+2%@)@)@$jj)<=4V< 3 
 	
 	
 .ug677q	
H	
:	
4	
:	
L
	
s   EW0WDW0W BW07W#8C6W0.W&/BW05W)6C4W0*W,+AW0	W.
W0 W0#W0&W0)W0,W0.W0rq   c                   K   ddl }d}|dk(  r#t        j                  |xs d| |xs d|      }n?|dk(  rt        j                  |xs dd	| i
      }n|dk(  rt        j                  |xs dd	| i
      }n|dk(  rt
        j                  xs t        d      }t        j                  ||       }	t        j                  dt
        j                  xs t        d      d       d{   \  }
}t        |
||	      }|j                  ||       }t               }|j                  i | d      }|j!                  ||t"        |      4 d{    	 ddd      d{    yt%        d|        t               }|j!                  |d|it"        |      4 d{    	 ddd      d{    y7 7 f7 W# 1 d{  7  sw Y   XxY w7 17 "# 1 d{  7  sw Y   yxY ww)a-  
    Health check for realtime API - tries connection to the realtime API websocket

    Args:
        model: str - model name
        api_base: str - api base
        api_version: Optional[str] - api version
        api_key: str - api key
        custom_llm_provider: str - custom llm provider
        realtime_protocol: Optional[str] - protocol version ("GA"/"v1" for GA path, "beta"/None for beta path)

    Returns:
        bool - True if connection is successful, False otherwise
    Raises:
        Exception - if the connection is not successful
    r   Nrm   r/   rp   )r3   r1   rU   rq   rt   ru   r1   )r3   rh   r   r   r   r   r   r   r   r   )r3   r1   )rj   r1   r4   )additional_headersmax_sizesslTr   zapi-key)
websocketsr   _construct_urlr   r   r=   r   r   r   r   r   r   r   get_complete_urlr   validate_environmentconnectr   r   )r1   r)   r4   r3   rU   rq   r   urlr   r   r   r   r   ssl_contextrj   s                  r&   _realtime_health_checkr     sL    0 Cg%++^#;';/	 , 
 
	(,,:!:!5) - 
 
	%))6!6guEU * 
 
	+!11X^DW5X+==) > 
 "<<--S@R1S + = 
 
	
 "8%$&"

 %55xu5U57(==eT > 
 %%&>	 & 
 	 	 	 	 	 .ug67713K!!w
 ; "      3
	 	 	 	 	    s   C%G$'F0(A#G$F2G$F6G$F4<G$GG$GG$*G+G$2G$4G$6G<F?=GG$G$G!GG!G$)NNNN)NNN)NNNNNNN)E__doc__r   typingr   r   r   r   r=   litellm.constantsr   r   1litellm.litellm_core_utils.get_llm_provider_logicr	   -litellm.llms.base_llm.realtime.transformationr
   *litellm.llms.custom_httpx.llm_http_handlerr   litellm.secret_managers.mainr   litellm.types.realtimer   r   r   r   litellm.types.routerr   litellm.types.utilsr   litellm.utilsr   %litellm_core_utils.get_litellm_paramsr   "litellm_core_utils.litellm_loggingr   LiteLLMLoggingllms.azure.realtime.handlerr   llms.bedrock.realtime.handlerr   llms.custom_httpx.http_handlerr   llms.openai.realtime.handlerr   &llms.vertex_ai.realtime.transformationr   llms.vertex_ai.vertex_llm_baser   llms.xai.realtime.handlerr   utilsr   wrapper_clientr   r   r   r   r   rY   r   r'   strtuplerE   floatr]   bytesre   r   r   rV   r(   r&   <module>r      s   4 	 , ,  X N L I 7  6 , / F J = ; L 9 K 7 3 ,$& ""$ },*, 
D 
T 
)L)Lsm)L c])L )	)L
 3S=)LX (,.2#	;C=;d38n%; DcN+; e_	; ;|   (,#/// C=/ d38n%	/
 e_/ /d  #!!%$( #26o8o8o8 smo8 c]	o8
 #o8 SMo8 SMo8 e_o8 ./o8 o8l #!%'+TTT c]T sm	T
 #T  }Tr(   