Ë
    uPêjBj  ã                   ó4  — U d Z ddlZddl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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mZ ddlmZ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/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@ZA  e2«       ZBe	eCd<    e8«       ZDe	eCd<    e4«       ZEe	eCd<    e>«       ZFe	eCd <    e<«       ZGe	eCd!<    e«       ZH ei «      ZIe	eeJef      eCd"<   d#eKeJef   d$eJd%eKeJef   fd&„ZLd'eKd%eKfd(„ZMd)eJd*eJdz  d+eJdz  d,e%d%eNeeJeJf   f
d-„ZOeA	 	 	 	 dOd.eJdz  d#eKeJef   dz  d/eKeJef   dz  d0ePdz  fd1„«       ZQeA	 	 	 dPd.eJdz  d2eKeJef   dz  d0ePdz  fd3„«       ZReA	 	 	 dPd4eJd5eSd.eJdz  d#eKeJef   dz  d0ePdz  f
d6„«       ZTd7edz  d8eJdz  d)e
d9   d%eNeJeJf   fd:„ZUd7edz  d8eJdz  d;ed<ePd%eNeJeJf   f
d=„ZVeA	 	 	 	 	 	 	 dQd.eJd>ed?eJdz  d@eJdz  dAeJdz  dBeJdz  dCedz  d0ePdz  dDe!dz  fdE„«       ZWd.eJd)eJd%eXfdF„ZYdGdHiZZe	e!   eCdI<   d.eJdJeJdz  dKeeJef   d%eNeJe!dz  f   fdL„Z[d)eJd@eJdz  dKeeJef   d%eeJeJdz  f   fdM„Z\	 	 	 	 dOd.eJd)eJd@eJdz  d?eJdz  dAeJdz  dJeJdz  dKeKdz  fdN„Z]y)Rz.Abstraction function for OpenAI's realtime APIé    N)ÚMapping)ÚMappingProxyType)ÚAnyÚFinalÚLiteralÚcast)Ú.REALTIME_CREDENTIAL_RESOLUTION_TIMEOUT_SECONDSÚ)REALTIME_WEBSOCKET_MAX_MESSAGE_SIZE_BYTESÚrequest_timeout)Úget_llm_provider)ÚBaseRealtimeConfig)ÚBaseLLMHTTPHandler)ÚXAIModelInfo)Úget_secret_str)ÚVERTEX_CREDENTIALS_TYPESÚVertexAccessTokenResolver)ÚRealtimeClientSecretRequestÚRealtimeExpiresAfterÚRealtimeQueryParamsÚRealtimeSessionConfigÚ#RealtimeTranscriptionSessionRequest)ÚGenericLiteLLMParams)ÚLlmProviders)ÚProviderConfigManageré   )Úget_litellm_params)ÚLogging)Úget_azure_ad_token)ÚAzureOpenAIRealtime)ÚBedrockRealtime)Úget_shared_realtime_ssl_context)ÚOpenAIRealtime)ÚVertexAIRealtimeConfig)Ú
VertexBase)ÚXAIRealtime)ÚclientÚazure_realtimeÚopenai_realtimeÚbedrock_realtimeÚxai_realtimeÚvertex_llm_baseÚ_EMPTY_MODEL_PARAMSÚsessionÚ
model_nameÚreturnc                 ó   — d| vr| S i | ¥d|i¥S )NÚmodel© )r-   r.   s     ú^/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/realtime_api/main.pyÚ_with_resolved_session_modelr4   5   s!   € Ø�gÑØˆØ+ˆgÐ+�w 
Ñ+Ð+ó    Úkwargsc                 ó¸   — 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)r6   r9   r:   s      r3   Ú_build_litellm_metadatar<   ;   s`   € àF §
¡
Ð+=Ó >Ò DÀ"ÐF€HØŸ™ JÓ/Ò5°2×:Ñ:¸<ÓHÒjÈFÏJÉJÐWcÓLdÒjÐhj€JÙØ!+ˆ�ÑØ€Or5   Ú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Ú ©r1   Úprovider)Úapi_base)Úapi_keyzhttps://api.openai.comÚOPENAI_API_KEYú/)Ú2litellm.llms.base_llm.realtime.http_transformationrB   r   Ú_member_map_Úvaluesr   Ú!get_provider_realtime_http_configrF   rG   Úget_api_baseÚget_api_keyÚlitellmÚ
openai_keyr   Úrstrip)
r=   r>   r?   r@   rB   Úprovider_configÚraw_api_baseÚraw_api_keyÚresolved_api_baseÚresolved_api_keys
             r3   Ú"_get_realtime_http_provider_configrX   D   só   € õð 6:€OØœl×7Ñ7×>Ñ>Ó@Ñ@Ü/×QÑQØÜ!Ð"5Ó6ô
ˆð
 +ÒE¨n×.EÑ.E€LØ(ÒB¨N×,BÑ,B€KàÐ"Ø+×8Ñ8À,Ð8ÓOÐØ*×6Ñ6¸{Ð6ÓKÑð )ÒX¬G×,<Ñ,<ÒXÐ@XÐàÒjœ7Ÿ?™?Òj¬g×.@Ñ.@ÒjÄNÐScÓDdÒjÐhjð 	ð Ð-×4Ñ4°SÓ9Ð;KÐKÐKr5   r1   Ú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                  d«      t        «      rt        |d   |«      |d<   t         j#                  |||||xs t$        |||j                  d«      |j                  d«      |j&                  ¬«
      ƒ d {  –—† S 7 Œ­w)N)r1   r-   rY   úgpt-4o-realtime-previewÚlitellm_logging_obj©r1   rF   rG   ©r=   r>   r?   r@   )rY   r-   rF   ©r6   r1   Úoptional_paramsr@   r=   Tr1   ©Úexclude_noneÚexcluder-   Úextra_headersr&   ©
rF   rG   Úrequest_dataÚlogging_objrZ   rS   r1   re   r&   Úapi_versionr2   )r   r   r   r-   r1   r;   r   r   rF   rG   rX   Úupdate_from_kwargsÚ
model_dumpÚ
isinstanceÚdictr4   Úbase_llm_http_handlerÚ$async_realtime_client_secret_handlerr   ri   )r1   r-   rY   rZ   r6   Úreqr.   r]   r@   r=   r?   r>   rS   rV   rW   rg   s                   r3   Úacreate_realtime_client_secretrq   l   s¡  è ø€ ô -ØÙ4;Ô%Ñ0¨Ò0ÀÙ?LÔ*Ñ;¨]Ò;ÐRVô€Cð
 (+§{¡{Ð'>�#—+‘+×#Ò#ÀDÒsÈSÏYÉYÒsÐZs€JØ17·±Ð<QÓ1RÐÜ0Ñ:°6Ñ:€Nô 	ØØ×(Ñ(Ø×&Ñ&ô	ñØØØØô 	+Ø/Ø)Ø'Ø%ô		ñ	ØØØð ×*Ñ*ØØØ*7ÀGÑLØ"Ð$5Ð6Ø/ð +ô ð Ÿ.™.°dÀWÀI˜.ÓN€LÜ�,×"Ñ" 9Ó-¬tÔ4Ü">¸|ÈIÑ?VÐXbÓ"cˆ�YÑÜ&×KÑKØ"Ø Ø!Ø'ØÒ*œ?Ø'ØØ—j‘j Ó1Ø�z‰z˜(Ó#Ø"×.Ñ.ð Ló ÷ ð ð ús   ‚E'E0Å)E.Å*E0Útranscription_sessionc              ‹   ó\  K  — t        dd| i|xs i ¤Ž}|j                  «       xs d}|j                  d«      }t        di |¤Ž}t	        ||j
                  |j                  ¬«      \  }}}	}
t        ||
|	|¬«      \  }}}|j                  ||d|id|i|¬«       |j                  d	dh¬
«      }t        |j                  d«      t        «      r||d   d<   t        j                  |||||xs t        |||j                  d«      |j                  d«      |j                  ¬«
      ƒ d{  –—† S 7 Œ­w)ut  
    Create an ephemeral transcription session via POST
    /v1/realtime/transcription_sessions.

    ``transcription_session`` is the upstream request body (input_audio_format,
    input_audio_transcription, turn_detection, â€¦). ``model`` is a LiteLLM-only
    routing hint; the provider model lives in
    ``transcription_session.input_audio_transcription.model``.
    r1   zgpt-realtime-whisperr]   r^   r_   rr   rF   r`   Trb   Úinput_audio_transcriptionre   r&   rf   Nr2   )r   Úresolved_modelr;   r   r   rF   rG   rX   rj   rk   rl   rm   rn   Ú,async_realtime_transcription_session_handlerr   ri   )r1   rr   rZ   r6   rp   r.   r]   r@   r=   r?   r>   rS   rV   rW   rg   s                  r3   Ú&acreate_realtime_transcription_sessionrw   ©   sz  è ø€ ô  5ñ Øðà Ò& Bñ€Cð ×#Ñ#Ó%Ò?Ð)?€JØ17·±Ð<QÓ1RÐÜ0Ñ:°6Ñ:€Nô 	ØØ×(Ñ(Ø×&Ñ&ô	ñØØØØô 	+Ø/Ø)Ø'Ø%ô		ñ	ØØØð ×*Ñ*ØØØ0Ð2GÐHØ"Ð$5Ð6Ø/ð +ô ð Ÿ.™.°dÀWÀI˜.ÓN€Lô
 �,×"Ñ"Ð#>Ó?ÄÔFØ=GˆÐ0Ñ1°'Ñ:Ü&×SÑSØ"Ø Ø!Ø'ØÒ*œ?Ø'ØØ—j‘j Ó1Ø�z‰z˜(Ó#Ø"×.Ñ.ð Tó ÷ ð ð ús   ‚D#D,Ä%D*Ä&D,Úopenai_ephemeral_keyÚsdp_bodyc              ‹   óÈ  K  — |xs d}|j                  d«      }t        di |¤Ž}t        ||j                  |j                  ¬«      \  }}	}
}t        |	||
|¬«      \  }}}|�t        ||«      }|j                  ||d|dœd|i|	¬«       t        j                  || |||xs t        ||||j                  d	«      |j                  d
«      |j                  ¬«      ƒ d {  –—† S 7 Œ­w)Nr\   r]   r^   r_   T)Úrealtime_callsr-   rF   r`   re   r&   )rF   rx   ry   rh   rZ   rS   r1   Úsession_configre   r&   ri   r2   )r;   r   r   rF   rG   rX   r4   rj   rn   Úasync_realtime_calls_handlerr   ri   )rx   ry   r1   r-   rZ   r6   r.   r]   r@   r=   r?   r>   rS   rV   Ú_s                  r3   Úarealtime_callsr   ñ   s%  è ø€ ð Ò3Ð3€JØ17·±Ð<QÓ1RÐÜ0Ñ:°6Ñ:€Nô 	ØØ×(Ñ(Ø×&Ñ&ô	ñØØØØô -OØ/Ø)Ø'Ø%ô	-Ñ)€OÐ&¨ð ÐÜ.¨w¸
ÓCˆØ×*Ñ*ØØØ+/¸GÑDØ"Ð$5Ð6Ø/ð +ô ô '×CÑCØ"Ø1ØØ'ØÒ*œ?Ø'ØØØ—j‘j Ó1Ø�z‰z˜(Ó#Ø"×.Ñ.ð Dó ÷ ð ð ús   ‚CC"ÃC ÃC"ÚcredentialsÚ
project_id)Ú	vertex_aiÚvertex_ai_betaÚgeminic              ƒ   óN   K  — t         j                  | ||¬«      ƒ d {  –—† S 7 Œ­w)N©r€   r�   r=   )r+   Ú_ensure_access_token_asyncr†   s      r3   Úvertex_access_token_resolverrˆ   &  s3   è ø€ ô
 !×;Ñ;ØØØ/ð <ó ÷ ð ð ús   ‚%ž#Ÿ%ÚresolverÚtimeout_secondsc              ƒ   ó¶   K  — 	 t        j                   || |d¬«      |¬«      ƒ d {  –—† S 7 Œ# t         j                  $ r}t        d|› d�«      |‚d }~ww xY w­w)Nr‚   r†   )rZ   zGVertex AI realtime: timed out fetching Google OAuth access token after zZs; check network egress from the proxy to the OAuth token endpoint (oauth2.googleapis.com))ÚasyncioÚwait_forÚTimeoutErrorÚ
ValueError)r€   r�   r‰   rŠ   Úes        r3   Ú$_resolve_vertex_access_token_boundedr‘   2  s|   è ø€ ðÜ×%Ñ%ÙØ'Ø%Ø$/ôð
 $ô
÷ 
ð 	
ð 
ùô ×Ñò ÜØUØÐð  BðBó
ð ð		ûðüs1   ‚A„#. §,¨. «A¬. ®AÁAÁAÁAÚ	websocketrF   rG   ri   Úazure_ad_tokenr&   Úquery_paramsc	              ‹   óB  K  — t        t        dz  |	j                  d«      «      }
t        t        dz  |	j                  d«      «      }|
€i }
|�|
j                  |«       |	j                  d«      }|	j                  dd«      }t	        d<i |	¤Ž}t        d<i |	¤Ž}t        | ||¬«      \  } }}}|�i |¥}d|v r| |d<   |j                  |	| |i ||¬«       d}|t        j                  j                  «       v r t        j                  | t        |«      ¬	«      }|�Bt        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s2 |j                  d«      xs t,        j.                  j                  d«      }|€|xs i j                  d«      dk(  rd}|xs d}|rdnt1        t	        d<i |	¤d|i¤Ž«      }t2        j                  | |||||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(  rx|xs |j                   xs t%        d*«      xs d+}t9        j:                  |d,¬-«      }t<        j                  | ||||d|||	j                  d
«      t        |	«      ¬«
      ƒ d{  –—†  y|d.k(  �rN|	j                  d/«      xs |	j                  d0«      xs t%        d1«      }!|	j                  d2«      xs0 |	j                  d3«      xs t"        j>                  xs t%        d4«      }"|	j                  d5«      xs0 |	j                  d6«      xs t"        j@                  xs t%        d7«      }#tB        jE                  |#| ¬8«      }$tG        |!|"tH        tJ        ¬9«      ƒ d{  –—† \  }%}&tM        |%|&|$¬:«      }'t        j                  | |||'|xs |j                   d|||
|	j                  d
«      t        |	«      |¬«      ƒ d{  –—†  ytO        d;| › �«      ‚7 �Œ¼7 �Œ}7 �Œâ7 �Œî7 �Œt7 Œ‚7 Œ$­w)=zT
    Private function to handle the realtime API call.

    For PROXY use only.
    NÚheadersre   r]   Úuserr^   r1   )r6   r1   r—   ra   r@   r=   rD   Úuser_api_key_dict)r1   r’   rh   rS   rF   rG   r&   rZ   r–   r˜   r8   r”   ÚazureÚAZURE_API_BASEÚAZURE_API_KEYú2024-10-01-previewÚrealtime_protocolÚLITELLM_AZURE_REALTIME_PROTOCOLÚintentÚtranscriptionÚGAÚbetar“   )r1   r’   rF   rG   ri   r“   r&   rZ   rh   r�   r”   r˜   r8   Úopenaiúhttps://api.openai.com/rH   )
r1   r’   rh   rF   rG   r&   rZ   r”   r˜   r8   Ú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   r’   rh   rF   rG   rZ   r¦   r§   r¨   r©   rª   r«   r¬   r­   r®   r¯   r°   ÚxaiÚXAI_API_BASEúhttps://api.x.ai/v1T)Úlegacy_generic_before_envr‚   Úvertex_credentialsÚvertex_ai_credentialsÚVERTEXAI_CREDENTIALSÚvertex_projectÚvertex_ai_projectÚVERTEXAI_PROJECTÚvertex_locationÚvertex_ai_locationÚVERTEXAI_LOCATION©Úvertex_regionr1   ©r€   r�   r‰   rŠ   ©Úaccess_tokenÚprojectÚlocationúUnsupported model: r2   )(r   rm   r;   Úupdater   r   r   rj   r   rK   rL   r   Úget_provider_realtime_configrn   Úasync_realtimer<   rF   rP   r   rG   rQ   ri   ÚosÚenvironr   r'   r(   r)   r   rO   r*   r¸   r»   r+   Úget_vertex_regionr‘   rˆ   r	   r#   r�   )(r1   r’   rF   rG   ri   r“   r&   rZ   r”   r6   r–   re   r]   r—   r@   Úlitellm_params_dictÚ_custom_llm_providerr?   r>   rS   r�   Úresolved_azure_ad_tokenr¦   r§   r¨   r©   rª   r«   r¬   r­   r®   r¯   r°   rµ   r¸   r»   Úresolved_locationrÂ   Úresolved_projectÚvertex_realtime_configs(                                           r3   Ú
_arealtimerÒ   I  sÉ  è ø€ ô$ ”4˜$‘; §
¡
¨9Ó 5Ó6€GÜ¤ t¡¨V¯Z©Z¸Ó-HÓI€MØ€ØˆØÐ Ø�‰�}Ô%Ø17·±Ð<QÓ1RÐØ—*‘*˜V TÓ*€DÜ0Ñ:°6Ñ:€Nä!3Ñ!=°fÑ!=ÐäEUØØØôFÑB€EÐ Ð2Bð ÐØ'˜,Ð'ˆØ�lÑ"Ø$)ˆL˜Ñ!à×*Ñ*ØØØØØ*Ø0ð +ô ð 26€OØœ|×8Ñ8×?Ñ?ÓAÑAÜ/×LÑLØÜ!Ð"6Ó7ô
ˆð Ð"Ü#×2Ñ2ØØØ+Ø+ØØØØØØ$Ÿj™jÐ)<Ó=Ü4°VÓ<Ø%ð 3ó 
÷ 	
ñ 	
ð 
 Ó	(Ø#Òv ~×'>Ñ'>ÒvÄ'×BRÑBRÒvÔVdÐeuÓVvˆà!Òm¤W§_¡_Òm¼×8JÑ8JÒmÌnÐ]lÓNmˆà!ÒW ^×%?Ñ%?ÒWÐCWˆð �J‰JÐ*Ó+ò AØ×!Ñ!Ð"5Ó6òAä�z‰z�~‰~Ð?Ó@ð 	ð
 Ð$¨,Ò*<¸"×)AÑ)AÀ(Ó)KÈÒ)^Ø $ÐØ-Ò7°Ðá‰DÔ!3Ô4HÑ4qÈ6Ñ4qÐbpÒ4qÓ!rð 	 ô ×+Ñ+ØØØØØ#Ø2ØØØ+Ø/Ø%Ø$Ÿj™jÐ)<Ó=Ü4°VÓ<ð ,ó 
÷ 	
ñ 	
ð 
 Ò	)Ø#Òo ~×'>Ñ'>ÒoÄ'×BRÑBRÒoÐVoˆà!Òn¤W§_¡_Òn¼×8JÑ8JÒnÌnÐ]mÓNnˆä×,Ñ,ØØØ+ØØØØØ%Ø$Ÿj™jÐ)<Ó=Ü4°VÓ<ð -ó 
÷ 	
ñ 	
ð 
 Ò	*à!'§¡Ð,=Ó!>ˆØ#)§:¡:Ð.AÓ#BÐØ'-§z¡zÐ2IÓ'JÐØ#)§:¡:Ð.AÓ#BÐØ%Ÿz™z¨/Ó:ˆØ"(§*¡*Ð-?Ó"@ÐØ"(§*¡*Ð-?Ó"@ÐØ(.¯
©
Ð3KÓ(LÐØ"(§*¡*Ð-?Ó"@ÐØ.4¯j©jÐ9WÓ.XÐ$Ø!'§¡Ð,=Ó!>ˆä×-Ñ-ØØØ+Ø%Ò1¨Ø#Ò. wØØ+Ø/Ø"7Ø/Ø'Ø-Ø-Ø#9Ø-Ø)EØ+ð# .ó 
÷ 	
ñ 	
ð& 
 Ò	&àÒr × 7Ñ 7Òr¼>È.Ó;YÒrÐ]rð 	ô ×*Ñ*¨?ÐVZÔ[ˆä×)Ñ)ØØØ+ØØØØØ%Ø$Ÿj™jÐ)<Ó=Ü4°VÓ<ð *ó 
÷ 	
ñ 	
ð 
 Ó	,à�J‰JÐ+Ó,ò 6Ø�z‰zÐ1Ó2ò6äÐ4Ó5ð 	ð �J‰JÐ'Ó(ò 2Ø�z‰zÐ-Ó.ò2ä×%Ñ%ò2ô Ð0Ó1ð	 	ð �J‰JÐ(Ó)ò 3Ø�z‰zÐ.Ó/ò3ä×&Ñ&ò3ô Ð1Ó2ð	 	ô $3×#DÑ#DÐSbÐjoÐ#DÓ#pÐô
 7Ø*Ø%Ü1ÜJô	
÷ 
ñ	
ØØô )?Ø%Ø$Ø&ô)
Ðô $×2Ñ2ØØØ+Ø2Ø%Ò@¨×)@Ñ)@ØØØØØ$Ÿj™jÐ)<Ó=Ü4°VÓ<Ø%ð 3ó 
÷ 	
ñ 	
ô Ð.¨u¨gÐ6Ó7Ð7ðQ	
ùð@	
ùð(	
ùð4	
ùð4	
ùðH
øð	
ús„   ‚EXÅXÅEXÊXÊBXÌ0XÌ1C6XÐ'XÐ(A<XÒ$XÒ%C3XÖXÖAX×8X×9XØXØXØXØXØXØXc                 ó¨   — 	 t        j                  | |¬«      }|j                  d«      dk(  ryd|j                  d«      xs dv S # t        $ r Y yw xY w)	N)r1   r=   FÚmodeÚaudio_transcriptionTz#/v1/realtime/transcription_sessionsÚsupported_endpointsr2   )rP   Úget_model_infoÚ	Exceptionr;   )r1   r=   Ú
model_infos      r3   Ú%_is_transcription_only_realtime_modelrÚ   0  s`   € ðÜ#×2Ñ2¸ÐTgÔhˆ
ð ‡~�~�fÓÐ!6Ò6ØØ0°Z·^±^ÐDYÓ5ZÒ5`Ð^`ÐaÐaøô	 ò Ùðús   ‚A Á	AÁArŸ   r    Ú_TRANSCRIPTION_QUERY_PARAMSr�   Úmodel_paramsc                 óØ   — t        | d«      rt        nd }|xs2 |j                  d«      xs t        j                  j                  d«      }t        |t        «      r|nd }|�||fS |�d|fS y)Nr™   r�   rž   r¡   )r¢   N)rÚ   rÛ   r;   rÉ   rÊ   rl   Ústr)r1   r�   rÜ   r”   Úconfigured_rawÚ
configureds         r3   Ú_azure_realtime_health_protocolrá   =  s|   € ô :_Ð_dÐfmÔ9nÕ5Ðtx€LàÒw˜\×-Ñ-Ð.AÓBÒwÄbÇjÁjÇnÁnÐUvÓFwð ô +5°^ÄSÔ*I™Èt€JØÐØ˜<Ð'Ð'ØÐØ�\Ð!Ð!Ør5   c           
      óŠ   — | dk7  rt        d|i«      S t        j                  ||rd ¬«      S t        t	        di |¤Ž«      ¬«      S )Nr™   zapi-key)rG   r“   r2   )r   r'   Úget_auth_headersr   r   ©r=   rG   rÜ   s      r3   Ú#_realtime_health_check_auth_headersrå   L  s]   € ð ˜gÒ%Ü ¨GÐ 4Ó5Ð5Ü×*Ñ*ØÙ '˜ð +ó ð ä-?Ô@TÑ@dÐWcÑ@dÓ-eð +ó ð r5   c              ƒ   ó4  K  — ddl }d}t        |||xs t        ¬«      }	|dk(  r=t        | ||xs t        ¬«      \  }
}t        j                  |xs d| |xs d|
|¬«      }�nE|d	k(  rt        j                  |xs d
d| i¬«      }�n!|dk(  rt        j                  |xs dd| i¬«      }nþ|dk(  rë|xs i }t        j                  t        j                  |«      | ¬«      }t        t        j                  |«      t        j                  |«      t        t         ¬«      ƒ d{  –—† \  }}t#        |||¬«      }|j%                  || ¬«      }t'        «       }|j)                  i | d¬«      }|j+                  ||t,        |¬«      4 ƒd{  –—†  	 ddd«      ƒd{  –—†  yt/        d| › �«      ‚t'        «       }|j+                  ||	t,        |¬«      4 ƒd{  –—†  	 ddd«      ƒd{  –—†  y7 ŒÆ7 Œd7 ŒU# 1 ƒd{  –—†7  sw Y   ŒVx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" for beta path);
            None resolves it for Azure from model_params/env, with transcription-only models probing GA
            plus intent=transcription the way real calls do

    Returns:
        bool - True if connection is successful, False otherwise
    Raises:
        Exception - if the connection is not successful
    r   Nrä   r™   )r1   r�   rÜ   rC   rœ   )rF   r1   ri   r�   r”   r£   r¤   r1   )rF   r”   r±   r³   r‚   r¾   rÀ   rÁ   )rF   r1   )r–   r1   rG   )Úadditional_headersÚmax_sizeÚsslTrÅ   )Ú
websocketsrå   r,   rá   r'   Ú_construct_urlr(   r*   r+   rË   r$   Úsafe_get_vertex_ai_locationr‘   Úsafe_get_vertex_ai_credentialsÚsafe_get_vertex_ai_projectrˆ   r	   r#   Úget_complete_urlr!   Úvalidate_environmentÚconnectr
   r�   )r1   r=   rG   rF   ri   r�   rÜ   rê   ÚurlÚauth_headersÚresolved_protocolÚazure_query_paramsÚvertex_model_paramsrÏ   rÂ   rÐ   rÑ   Ússl_contextr–   s                      r3   Ú_realtime_health_checkrø   W  s{  è ø€ ó6 à€CÜ=Ø/ØØ!Ò8Ô%8ô€Lð
 ˜gÒ%Ü0OØØ/Ø%Ò<Ô)<ô1
Ñ-ÐÐ-ô
 ×+Ñ+Ø’^ ØØ#Ò;Ð';Ø/Ø+ð ,ó 
Šð 
 Ò	(Ü×,Ñ,ØÒ:Ð!:Ø! 5Ð)ð -ó 
Šð 
 Ò	%Ü×)Ñ)°8Ò3TÐ?TÐdkÐmrÐcsÐ)Ót‰Ø	 Ò	+Ø%1Ò%7°RÐÜ#2×#DÑ#DÜ$×@Ñ@ÐATÓUØð $Eó $
Ðô 7Ü"×AÑAÐBUÓVÜ!×<Ñ<Ð=PÓQÜ1ÜJô	
÷ 
ñ	
ØØô )?Ø%Ø$Ø&ô)
Ðð
 %×5Ñ5¸xÈuÐ5ÓUˆÜ5Ó7ˆØ/×DÑDÈRÐW\ÐfjÐDÓkˆØ×%Ñ%ØØ&Ü>Øð	 &ó 
÷ 	ñ 	ð ÷	÷ 	ð 	ô Ð.¨u¨gÐ6Ó7Ð7Ü1Ó3€KØ×!Ñ!ØØ'Ü:Øð	 "ó ÷ ñ ð ÷÷ ð ð1
øð	øð 	ø÷ 	÷ 	ñ 	úðøð ø÷ ÷ ñ üs�   ‚DHÄG$ÄA#HÆG&ÆHÆG*ÆHÆG(Æ:HÇG?ÇHÇHÇHÇHÇHÇ&HÇ(HÇ*G<Ç0G3Ç1G<Ç8HÈHÈHÈ	HÈ
HÈH)NNNN)NNN)NNNNNNN)^Ú__doc__rŒ   rÉ   Úcollections.abcr   Útypesr   Útypingr   r   r   r   rP   Úlitellm.constantsr	   r
   r   Ú1litellm.litellm_core_utils.get_llm_provider_logicr   Ú-litellm.llms.base_llm.realtime.transformationr   Ú*litellm.llms.custom_httpx.llm_http_handlerr   Úlitellm.llms.xai.common_utilsr   Úlitellm.secret_managers.mainr   Úlitellm.types.llms.vertex_air   r   Úlitellm.types.realtimer   r   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.common_utilsr   Ú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'   Ú__annotations__r(   r)   r*   r+   rn   r,   rÞ   rm   r4   r<   ÚtuplerX   Úfloatrq   rw   Úbytesr   rˆ   r‘   rÒ   ÚboolrÚ   rÛ   rá   rå   rø   r2   r5   r3   ú<module>r     sÚ  ðÚ 4ã Û 	Ý #Ý "ß ,Ó ,ã ÷ñ õ
 OÝ LÝ IÝ 6Ý 7ß \÷õ õ 6Ý ,Ý /å FÝ JÝ 8Ý =Ý ;Ý LÝ 9Ý KÝ 7Ý 3Ý ,á+Ó-€�Ó -Ù'Ó)€�Ó )Ù)Ó+Ð �%Ó +Ù!“m€ˆeÓ #Ù#›€�Ó %Ù*Ó,Ð Ù0@ÀÓ0DÐ �U˜7 3¨ 8Ñ,Ñ-Ó Dð,¨$¨s°C¨x©.ð ,Àcð ,ÈdÐSVÐX[ÐS[Énó ,ð Dð ¨Tó ð%LØð%Là˜D‘jð%Lð ˜4‘Zð%Lð )ð	%Lð
 ˆ3��Sˆ=Ñó%LðP àØ%)Ø+/Ø ñ	9Ø�‰:ð9à�#�s�(‰^˜dÑ"ð9ð ˜˜S˜‘> DÑ(ð9ð �T‰\ò	9ó ð9ðx àØ37Ø ñDØ�‰:ðDà  S ™>¨DÑ0ðDð �T‰\òDó ðDðN ð Ø%)Ø ñ1Øð1àð1ð �‰:ð1ð �#�s�(‰^˜dÑ"ð	1ð
 �T‰\ò1ó ð1ðh	Ø)¨DÑ0ð	à�d‘
ð	ð !Ð!HÑIð	ð ˆ3�ˆ8�_ó		ðØ)¨DÑ0ðà�d‘
ðð (ðð ð	ð
 ˆ3�ˆ8�_óð. ð  ØØ"Ø!%ØØ Ø/3ñc8Øðc8àðc8ð �D‰jðc8ð �4‰Zð	c8ð
 �t‘ðc8ð ˜$‘Jðc8ð �$‰Jðc8ð �T‰\ðc8ð &¨Ñ,òc8ó ðc8ðLb°ð bÈ3ð bÐSWó bð <DÀ_Ð:UÐ ˜UÐ#6Ñ7Ó UðØðØ#&¨¡:ðØ=DÀSÈ#ÀXÑ=Nðà
ˆ3Ð# dÑ*Ð*Ñ+óðØðØ'*¨T¡zðØAHÈÈcÈÑARðàˆS�#˜‘*ˆ_Ñóð  Ø"Ø$(Ø $ñ^Øð^àð^ð �4‰Zð^ð �D‰jð	^ð
 �t‘ð^ð ˜T‘zð^ð ˜‘+ô^r5   