Ë
    tPêjKX  ã                   ó`  — U d dl Z d dlZd dlmZmZ d dl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mZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZmZmZm Z   e«       Z!ee"d<   dZ#ee"d<   dZ$ee"d<   dZ%ee"d<   dZ&ee"d<   de'dz  de'fd„Z(de)e'   deddfd„Z*de+de)e'   fd„Z,	 d=de+de'de-ddfd„Z.ded ed!e)dz  d"ede/e'e+dz  e'f   f
d#„Z0	 d>d%e'd&e'd'e'dz  d(e'dz  d)e1dz  de'de'fd*„Z2d+e'de+e'ef   dz  fd,„Z3e!ji                  d- ee«      gd$g¬.«      e!ji                  d/ ee«      gd$g¬.«      e!ji                  d0 ee«      gd$g¬.«       ee«      fd1e
d2ed edefd3„«       «       «       Z5e!ji                  d4d$g¬5«      e!ji                  d6d$g¬5«      e!ji                  d7d$g¬5«      d1e
d2edefd8„«       «       «       Z6e!ji                  d9 ee«      gd$g¬.«      e!ji                  d: ee«      gd$g¬.«      e!ji                  d; ee«      gd$g¬.«       ee«      fd1e
d2ed ede fd<„«       «       «       Z7y)?é    N)ÚAnyÚFinal)Ú	APIRouterÚDependsÚHTTPExceptionÚRequestÚResponse)Ústatus)Úverbose_proxy_logger)ÚProxyExceptionÚUserAPIKeyAuth)Úcan_key_call_resolved_model)Úuser_api_key_auth)Údecrypt_value_helperÚencrypt_value_helper)Ú_read_request_body)ÚRealtimeClientSecretRequestÚRealtimeClientSecretResponseÚ#RealtimeTranscriptionSessionRequestÚ$RealtimeTranscriptionSessionResponseÚrouterÚrealtime_v1Ú_REALTIME_TOKEN_VERSIONzgpt-4o-realtime-previewÚ_DEFAULT_REALTIME_MODELúgpt-realtime-whisperÚ_DEFAULT_TRANSCRIPTION_MODEL)ÚrealtimeÚtranscriptionÚ_ALLOWED_SESSION_TYPESÚsession_typeÚreturnc                 ó   — | t         v r| S y)Nr   )r   )r    s    úo/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/realtime_endpoints/endpoints.pyÚ_coerce_realtime_session_typer$   #   s   € ØÔ-Ñ-ØÐØó    Ú
candidatesÚmodelc                 óX   — t        |t        «      r|r|| vr| j                  |«       y y y y )N)Ú
isinstanceÚstrÚappend)r&   r'   s     r#   Ú_append_model_candidater,   )   s.   € Ü�%œÔ¡%¨E¸Ñ,CØ×Ñ˜%Õ ð -D %Ðr%   Úsessionc                 ó~  — g }| j                  d«      }t        |t        «      r]|j                  d«      }t        |t        «      r<|j                  d«      }t        |t        «      rt        ||j                  d«      «       | j                  d«      }t        |t        «      rt        ||j                  d«      «       |S )NÚaudioÚinputr   r'   Úinput_audio_transcription)Úgetr)   Údictr,   )r-   r&   r/   Úaudio_inputÚnested_transcriptionÚflat_transcriptions         r#   Ú,_transcription_model_candidates_from_sessionr7   .   s£   € Ø#%€Jà—;‘;˜wÓ'€EÜ�%œÔØ"ŸY™Y wÓ/ˆÜ�k¤4Ô(Ø*5¯/©/¸/Ó*JÐ ÜÐ.´Ô5Ü'ØØ(×,Ñ,¨WÓ5ôð
 !(§¡Ð,GÓ HÐÜÐ$¤dÔ+Ü 
Ð,>×,BÑ,BÀ7Ó,KÔLàÐr%   Úcreate_if_missingc                 óþ  — d}| j                  d«      }t        |t        «      ri |¥d|i¥| d<   d}| j                  d«      }t        |t        «      r[|j                  d«      }t        |t        «      r:|j                  d«      }t        |t        «      ri |¥di |¥di |¥d|i¥i¥i¥| d<   d}|s|sy t        |t        «      r|ni }|j                  d«      }t        |t        «      r|ni }i |¥di |¥dd|ii¥i¥| d<   y )NFr1   r'   Tr/   r0   r   )r2   r)   r3   )r-   r'   r8   Úupdated_existing_configr6   r/   r4   r5   s           r#   Ú#_set_transcription_model_on_sessionr;   C   sU  € ð
 $Ðà '§¡Ð,GÓ HÐÜÐ$¤dÔ+ð0
Ø ð0
à�Uñ0
ˆÐ+Ñ,ð #'Ðà�K‰K˜Ó €EÜ�%œÔØ—i‘i Ó(ˆÜ�k¤4Ô(Ø*5¯/©/¸/Ó*JÐ ÜÐ.´Ô5ð	$Øð	$àð Ø%ðà'ð *Ø2ð*à# Uñ*ññ	$�˜Ñ ð +/Ð'áÑ&7Øä ¤tÔ,‰E°"€EØ—)‘)˜GÓ$€KÜ!+¨K¼Ô!>‘+ÀB€KðØ
ðàð 
Øð
à˜g uÐ-ñ
ñ€GˆGÒr%   ÚreqÚuser_api_key_dictÚllm_model_listÚ
llm_routerc              ƒ   ó°  K  — t        | j                  r| j                  j                  nd «      }| j                  r| j                  j                  d¬«      nd }|�||d<   | j                  r| j                  j                  nd }|xs | j                  xs t
        }|dk7  rt        ||||¬«      ƒ d {  –—†  |||fS t        |xs i «      }|s"t        ||«       t        || j                  «       |s|j                  t        «       |d   }|D ]  }	t        |	|||¬«      ƒ d {  –—†  Œ |� t        ||d¬«       |j                  dd «       |||fS 7 Œ�7 Œ/­w)	NT©Úexclude_noneÚtyper   ©r'   Úvalid_tokenr>   r?   r   ©r-   r'   r8   r'   )r$   r-   rC   Ú
model_dumpr'   r   r   r7   r,   r+   r   r;   Úpop)
r<   r=   r>   r?   r    Úsession_dataÚsession_modelr'   Útranscription_model_candidatesÚtranscription_models
             r#   Ú_prepare_client_secret_sessionrM   s   ss  è ø€ ô 8ÈCÏKÊK¸¿¹×8HÒ8HÐ]aÓb€LØTW×T_ÒT_ s§{¡{×'=Ñ'=È4Ð'=Ô'PÐei€LØÐØ+ˆ�VÑà03·²˜3Ÿ;™;×,Ò,À€MØÒF #§)¡)ÒFÔ/F€EØ�Ò&Ü)ØØ)Ø)Ø!ô	
÷ 	
ð 	
ð �l LÐ0Ð0ä,XÐYeÒYkÐikÓ,lÐ"Ù)ÜÐ >ÀÔNÜÐ >ÀÇ	Á	ÔJÙ)Ø&×-Ñ-Ô.JÔKà*¨1Ñ-€EØ=ò 
ÐÜ)Ø%Ø)Ø)Ø!ô	
÷ 	
ñ 	
ð
ð ÐÜ+Ø ØØ"õ	
ð
 	×Ñ˜ $Ô'Ø�, Ð,Ð,ð=	
øð"	
ús%   ‚B2EÂ4EÂ5A/EÄ$EÄ%.EÅEr   Úephemeral_keyÚmodel_idÚuser_idÚteam_idÚ
expires_atc                 ó\   — t         | ||xs d|xs d||dœ}t        j                  |d¬«      S )z„
    Encode metadata with the upstream ephemeral key so /realtime/calls can
    route without requiring model as a query param.
    Ú )ÚvrN   rO   rP   rQ   rR   r    )ú,ú:)Ú
separators)r   ÚjsonÚdumps)rN   rO   rP   rQ   rR   r    Úpayloads          r#   Ú_encode_realtime_token_payloadr\   ¢   s;   € ô %Ø&ØØ’=˜bØ’=˜bØ Ø$ñ&€Gô �:‰:�g¨*Ô5Ð5r%   Údecrypted_valuec                 ó$  — 	 t        j                  | «      }t        |t        «      sy|j                  d«      t        k7  ryt        |j                  d«      t        «      syt        |j                  d«      t        «      sy|S # t        $ r Y yw xY w)zV
    Decode realtime token payload; returns None for legacy/raw ephemeral tokens.
    NrU   rN   rO   )rY   ÚloadsÚ	Exceptionr)   r3   r2   r   r*   )r]   Údecodeds     r#   Ú_decode_realtime_token_payloadrb   º   s~   € ðÜŸ™ OÓ4ˆô �gœtÔ$ØØ‡{�{�3ÓÔ2Ò2ØÜ�g—k‘k /Ó2´CÔ8ØÜ�g—k‘k *Ó-¬sÔ3ØØ€Nøô ò Ùðús   ‚B Â	BÂBz/v1/realtime/client_secrets)ÚdependenciesÚtagsz/realtime/client_secretsz"/openai/v1/realtime/client_secretsÚrequestÚfastapi_responsec              ƒ   ó¦  K  — ddl m}m}m}m}m}m}m}	m}
m	} i }	 t        | ¬«      ƒ d {  –—† }t        d%i |¤Ž}t        ||||¬«      ƒ d {  –—† \  }}}d|i}|�||d<   n|j                  rd|dœ|d<   |j                  r|j                  j                  d	¬
«      |d<    ||| ||||¬«      ƒ d {  –—† }|j!                  ||d¬«      ƒ d {  –—† }t#        j$                  d|«        |	|d||
¬«      ƒ d {  –—† }|ƒ d {  –—† }|j:                  dk7  rMt#        j*                  d|j:                  |j<                  «       t?        |j@                  |j:                  d¬«      S |jC                  «       }|jE                  dd«      }|jE                  d «      }tG        ||t5        |d!d «      t5        |d"d «      t/        |tH        «      r|nd |¬#«      }tK        |«      }||d<   |jE                  d«      }t/        |tL        «      r/|jE                  d$«      }t/        |tL        «      r	d|v r||d<   ||d<   tO        d%i |¤ŽS 7 �Œ7 �Œð7 �ŒŽ7 �Œu7 �ŒN7 �ŒG# t&        $ rù}|j)                  |||¬«      ƒ d {  –—†7   t#        j*                  dt-        |«      «       t/        |t0        «      r|‚t/        |t2        «      rRt1        t5        |dt-        |«      «      t5        |dd«      t5        |dd«      t5        |dt6        j8                  «      ¬«      ‚t1        t5        |dt-        |«      «      t5        |dd«      t5        |dd«      t5        |dd«      ¬«      ‚d }~ww xY w­w)&Nr   ©	Úadd_litellm_data_to_requestÚgeneral_settingsr>   r?   Úproxy_configÚproxy_logging_objÚroute_requestÚ
user_modelÚversion©re   )r<   r=   r>   r?   r'   r-   r   )rC   r'   TrA   Úexpires_after©Údatare   rj   r=   ro   rk   Úacreate_realtime_client_secret©r=   rs   Ú	call_typez.WebRTC: /v1/realtime/client_secrets (model=%s)©rs   Ú
route_typer?   rn   ©r=   Úoriginal_exceptionÚrequest_datazWlitellm.proxy.realtime_endpoints.webrtc.create_realtime_client_secret(): Exception - %sÚmessagerC   ÚNoneÚparamÚstatus_code©r|   rC   r~   Úcodeéô  éÈ   z+WebRTC client_secrets upstream error %s: %súapplication/json©Úcontentr   Ú
media_typeÚvaluerT   rR   rP   rQ   ©rN   rO   rP   rQ   rR   r    Úclient_secret© )(Úlitellm.proxy.proxy_serverri   rj   r>   r?   rk   rl   rm   rn   ro   r   r   rM   r'   rq   rG   Úpre_call_hookr   Údebugr`   Úpost_call_failure_hookÚerrorr*   r)   r   r   ÚgetattrÚhttp_statusÚHTTP_400_BAD_REQUESTr   Útextr	   r†   rY   r2   r\   Úintr   r3   r   )re   rf   r=   ri   rj   r>   r?   rk   rl   rm   rn   ro   rs   Úbodyr<   r'   rI   r    Úllm_callÚupstream_respÚeÚupstream_jsonÚ	raw_valuerR   Útoken_payloadÚencrypted_tokenÚsession_objÚcss                               r#   Úcreate_realtime_client_secretr    Ð   sƒ  è ø€ ÷(
÷ 
õ 
ð €DðH
Ü.°wÔ?×?ˆÜ0Ñ8°4Ñ8ˆä2PØØ/Ø)Ø!ô	3
÷ -
Ñ)ˆˆ|˜\ð ˜Ðˆð Ð#Ø*ˆD�ŠOØ�YŠYà'1¸EÑBˆD�‰Oà×ÒØ$'×$5Ñ$5×$@Ñ$@ÈdÐ$@Ó$SˆD�Ñ!á0ØØØ-Ø/ØØ%ô
÷ 
ˆð '×4Ñ4Ø/ØØ6ð 5ó 
÷ 
ˆô 	×"Ñ"Ð#SÐUZÔ[á -ØØ7Ø!Ø!ô	!
÷ 
ˆð 6>¯~ˆð8 × Ñ  CÒ'Ü×"Ñ"Ø9Ø×%Ñ%Ø×Ñô	
ô
 Ø!×)Ñ)Ø%×1Ñ1Ø)ô
ð 	
ð "/×!3Ñ!3Ó!5€Mð *×-Ñ-¨g°rÓ:€IØ%×)Ñ)¨,Ó7€JÜ9ØØÜÐ)¨9°dÓ;ÜÐ)¨9°dÓ;Ü!+¨J¼Ô!<‘:À$Ø!ô€Mô #7°}Ó"E€OØ,€M�'Ñà&3×&7Ñ&7¸	Ó&B€KÜ�+œtÔ$Ø—O‘O OÓ4ˆÜ�bœ$Ô G¨r¡MØ)ˆBˆw‰KØ#.ˆ�iÑ ä'Ñ8¨-Ñ8Ð8ð[ @ùð-
ùð&
ùð
ùð
ùð 0>úäò 
Ø×6Ñ6Ø/Ø Øð 7ó 
÷ 	
ñ 	
ô
 	×"Ñ"ØeÜ�‹Fô	
ô �aœÔ(ØˆGÜ�aœÔ'Ü Ü  9¬c°!«fÓ5Ü˜Q ¨Ó/Ü˜a ¨&Ó1Ü˜Q ¬{×/OÑ/OÓPô	ð ô Ü˜A˜y¬#¨a«&Ó1Ü˜˜F FÓ+Ü˜!˜W fÓ-Ü˜˜M¨3Ó/ô	
ð 	
ûð'
üs¡   ‚MœI «H:¬!I ÁH=ÁA$I Â2I Â3I ÃIÃ)I Ã8IÃ9	I ÄI	ÄI ÄD3MÈ:I È=I É I ÉI ÉI É	I É	MÉM	É,I/É-CM	Í	MÍMz/v1/realtime/calls)rd   z/realtime/callsz/openai/v1/realtime/callsc              ƒ   óà  K  — ddl m}m}m}m}m}m}m}m}	 | j                  j                  d«      }
|
r|
j                  d«      s1t        t        j                  ddi«      t        j                   d¬«      S |
j#                  d«      j%                  «       }t'        |d	¬
«      }|s1t        t        j                  ddi«      t        j                   d¬«      S | j)                  «       ƒ d {  –—† }t+        |«      }|�ø|j                  d«      }|�Xt-        |t.        «      rHt1        j0                  «       |kD  r1t        t        j                  ddi«      t        j                   d¬«      S |j                  dd«      }|j                  d«      xs# | j2                  j                  d«      xs t4        }|j                  d«      xs d }|j                  d«      xs d }t7        |j                  d«      «      }n(|}| j2                  j                  dt4        «      }d }d }d}t9        ||¬«      }i }	 d|i}|dk(  rt;        ||d¬«       n||d<   ||||dœ} ||| |||	|¬«      ƒ d {  –—† }|j=                  ||d¬«      ƒ d {  –—† }t?        j@                  d|«        ||d||¬ «      ƒ d {  –—† }|ƒ d {  –—† }t        |jR                  |jT                  |j                  j                  d)d*«      ¬«      S 7 �Œ7 Œ“7 Œy7 ŒQ7 ŒI# tB        $ rç}|jE                  |||¬!«      ƒ d {  –—†7   t?        jF                  d"tI        |«      «       t-        |tJ        «      rRtM        tO        |d#tI        |«      «      tO        |dd$«      tO        |d%d$«      tO        |d&t        jP                  «      ¬'«      ‚tM        tO        |d#tI        |«      «      tO        |dd$«      tO        |d%d$«      tO        |d&d(«      ¬'«      ‚d }~ww xY w­w)+Nr   )ri   rj   r?   rk   rl   rm   rn   ro   ÚAuthorizationzBearer r�   z'Missing or invalid Authorization headerr„   r…   Úrealtime_calls_auth)rˆ   ÚkeyzInvalid or expired tokenrR   zToken has expiredrN   rT   rO   r'   rP   rQ   r    r   )rP   rQ   rC   r   TrF   )r'   Úopenai_ephemeral_keyÚsdp_bodyr-   rr   Úarealtime_callsru   z%WebRTC: /v1/realtime/calls (model=%s)rw   ry   zNlitellm.proxy.realtime_endpoints.webrtc.proxy_realtime_calls(): Exception - %sr|   r}   r~   r   r€   r‚   zcontent-typezapplication/sdp)+rŒ   ri   rj   r?   rk   rl   rm   rn   ro   Úheadersr2   Ú
startswithr	   rY   rZ   r’   ÚHTTP_401_UNAUTHORIZEDÚremoveprefixÚstripr   r–   rb   r)   r•   ÚtimeÚquery_paramsr   r$   r   r;   r�   r   rŽ   r`   r�   r�   r*   r   r   r‘   r“   r†   r   )re   rf   ri   rj   r?   rk   rl   rm   rn   ro   Úauth_headerr�   Údecrypted_token_valuer¦   Údecoded_payloadrR   r¥   r'   rP   rQ   r    Úminimal_authrs   Úsession_configr—   r˜   r™   s                              r#   Úproxy_realtime_callsr´   b  s  è ø€ ÷ 	÷ 	ó 	ð &-§_¡_×%8Ñ%8¸Ó%I€KÙ˜k×4Ñ4°YÔ?ÜÜ—J‘J Ð)RÐSÓTÜ#×9Ñ9Ø)ô
ð 	
ð )×5Ñ5°iÓ@×FÑFÓH€OÜ#7ØØ!ô$Ðñ !ÜÜ—J‘J Ð)CÐDÓEÜ#×9Ñ9Ø)ô
ð 	
ð $+§<¡<£>×1€HÜ;Ð<QÓR€OØÐ"à+×/Ñ/°Ó=ˆ
ØÐ!¤j°¼SÔ&AÜ�y‰y‹{˜ZÒ'ÜÜ ŸJ™J¨Ð1DÐ'EÓFÜ +× AÑ AØ1ôð ð  /×2Ñ2°?ÀBÓGÐØ×#Ñ# JÓ/Òo°7×3GÑ3G×3KÑ3KÈGÓ3TÒoÔXoˆØ!×%Ñ% iÓ0Ò8°DˆØ!×%Ñ% iÓ0Ò8°DˆÜ4°_×5HÑ5HÈÓ5XÓY‰ð  5ÐØ×$Ñ$×(Ñ(¨Ô2IÓJˆØˆØˆØ!ˆô )ØØô€Lð
 €DðC
à�Lð!
ˆð ˜?Ò*Ü/Ø&ØØ"&öð ',ˆN˜7Ñ#ð Ø$8Ø Ø%ñ	
ˆñ 1ØØØ-Ø*ØØ%ô
÷ 
ˆð '×4Ñ4Ø*ØØ'ð 5ó 
÷ 
ˆô 	×"Ñ"Ð#JÈEÔRá -ØØ(Ø!Ø!ô	!
÷ 
ˆð 6>¯~ˆô4 Ø×%Ñ%Ø!×-Ñ-Ø ×(Ñ(×,Ñ,¨^Ð=NÓOôð ðO 2ùðl
øð
øð
øð 0>ùäò 
Ø×6Ñ6Ø*Ø Øð 7ó 
÷ 	
ñ 	
ô
 	×"Ñ"Ø\Ü�‹Fô	
ô �aœÔ'Ü Ü  9¬c°!«fÓ5Ü˜Q ¨Ó/Ü˜a ¨&Ó1Ü˜Q ¬{×/OÑ/OÓPô	ð ô Ü˜A˜y¬#¨a«&Ó1Ü˜˜F FÓ+Ü˜!˜W fÓ-Ü˜˜M¨3Ó/ô	
ð 	
ûð#
üsŒ   ‚C&O.Ã(K0Ã)E O.È*5K; ÉK3É K; É;K5É<)K; Ê%K7Ê&	K; Ê/K9Ê0K; Ê4=O.Ë3K; Ë5K; Ë7K; Ë9K; Ë;	O+ÌO&ÌLÌC
O&Ï&O+Ï+O.z#/v1/realtime/transcription_sessionsz /realtime/transcription_sessionsz*/openai/v1/realtime/transcription_sessionsc              ƒ   ó`  K  — ddl m}m}m}m}m}m}m}	m}
m	} i }	 t        | ¬«      ƒ d{  –—† }t        d$i |¤Ž}|j                  «       xs d}t        ||||¬«      ƒ d{  –—†  |j                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ }}}||dœ} ||| ||||¬	«      ƒ d{  –—† }|j                  ||d
¬«      ƒ d{  –—† }t!        j"                  d|«        |	|d
||
¬«      ƒ d{  –—† }|ƒ d{  –—† }|j8                  dk7  rMt!        j(                  d|j8                  |j:                  «       t=        |j>                  |j8                  d¬«      S |jA                  «       }|jC                  d«      }t-        |tD        «      rsd|v ro|jC                  dd«      }|jC                  d«      }tG        ||t3        |d d«      t3        |d!d«      t-        |tH        «      r|ndd"¬#«      }tK        |«      |d<   ||d<   tM        d$i |¤ŽS 7 �ŒÚ7 �Œ§c c}}w 7 �Œl7 �ŒS7 �Œ,7 �Œ%# t$        $ �r}|j'                  |||¬«      ƒ d{  –—†7   t!        j(                  dt+        |«      «       t-        |t.        «      r|‚t-        |t0        «      r]t/        t3        |dt3        |dt+        |«      «      «      t3        |dd«      t3        |dd«      t3        |dt4        j6                  «      ¬«      ‚t/        t3        |dt+        |«      «      t3        |dd«      t3        |dd«      t3        |dd«      ¬«      ‚d}~ww xY w­w)%a)  
    Create an ephemeral Realtime transcription session
    (POST /v1/realtime/transcription_sessions) for the WebRTC/WebSocket flow.

    Mirrors the client_secrets route but targets the transcription_sessions
    endpoint and encrypts the ephemeral key returned under `client_secret.value`.
    r   rh   rp   Nr   rD   r'   )r'   Útranscription_sessionrr   Ú&acreate_realtime_transcription_sessionru   z8Realtime: /v1/realtime/transcription_sessions (model=%s)rw   ry   zXlitellm.proxy.realtime_endpoints.create_realtime_transcription_session(): Exception - %sÚdetailr|   rC   r}   r~   r   r€   r‚   rƒ   z5Realtime transcription_sessions upstream error %s: %sr„   r…   rŠ   rˆ   rT   rR   rP   rQ   r   r‰   r‹   )'rŒ   ri   rj   r>   r?   rk   rl   rm   rn   ro   r   r   Úresolved_modelr   Úitemsr�   r   rŽ   r`   r�   r�   r*   r)   r   r   r‘   r’   r“   r   r”   r	   r†   rY   r2   r3   r\   r•   r   r   )re   rf   r=   ri   rj   r>   r?   rk   rl   rm   rn   ro   rs   r–   r<   r'   ÚkrU   r¶   r—   r˜   r™   rš   rŠ   r›   rR   rœ   s                              r#   Ú%create_realtime_transcription_sessionr¼     sX  è ø€ ÷6
÷ 
õ 
ð €Dð@
Ü.°wÔ?×?ˆÜ8Ñ@¸4Ñ@ˆà×.Ñ.Ó0ÒJÐ4JˆÜ)ØØ)Ø)Ø!ô	
÷ 	
ð 	
ð :>¿¹»×'V±°°AÈÈgË¨¨1©Ð'VÐÑ'VØÐ9NÑOˆá0ØØØ-Ø/ØØ%ô
÷ 
ˆð '×4Ñ4Ø/ØØ>ð 5ó 
÷ 
ˆô 	×"Ñ"Ð#]Ð_dÔeá -ØØ?Ø!Ø!ô	!
÷ 
ˆð 6>¯~ˆð8 × Ñ  CÒ'Ü×"Ñ"ØCØ×%Ñ%Ø×Ñô	
ô
 Ø!×)Ñ)Ø%×1Ñ1Ø)ô
ð 	
ð "/×!3Ñ!3Ó!5€Mð )×,Ñ,¨_Ó=€MÜ�-¤Ô&¨7°mÑ+CØ -× 1Ñ 1°'¸2Ó >ˆ	Ø)×-Ñ-¨lÓ;ˆ
Ü=Ø#ØÜÐ-¨y¸$Ó?ÜÐ-¨y¸$Ó?Ü%/°
¼CÔ%@‘zÀdØ(ô 
ˆô "6°mÓ!Dˆ�gÑØ)6ˆ�oÑ&ä/Ñ@°-Ñ@Ð@ðA @ùð	
ûó (Wð
ùð
ùð
ùð 0>úäó 
Ø×6Ñ6Ø/Ø Øð 7ó 
÷ 	
ñ 	
ô
 	×"Ñ"ØfÜ�‹Fô	
ô �aœÔ(ØˆGÜ�aœÔ'Ü Ü  8¬W°Q¸	Ä3ÀqÃ6Ó-JÓKÜ˜Q ¨Ó/Ü˜a ¨&Ó1Ü˜Q ¬{×/OÑ/OÓPô	ð ô Ü˜A˜y¬#¨a«&Ó1Ü˜˜F FÓ+Ü˜!˜W fÓ-Ü˜˜M¨3Ó/ô	
ð 	
ûð'
üs²   ‚L.œH «H¬5H Á!HÁ"H Á9HÂHÂH Â%HÂ&H ÃHÃ)H Ã+HÃ,	H Ã5HÃ6H Ã:DL.ÈH ÈH ÈH ÈH ÈH ÈH È
L+È'L&È>IÈ?C'L&Ì&L+Ì+L.)F)r   )8rY   r­   Útypingr   r   ÚhttpxÚfastapir   r   r   r   r	   r
   r’   Úlitellm._loggingr   Úlitellm.proxy._typesr   r   Úlitellm.proxy.auth.auth_checksr   Ú$litellm.proxy.auth.user_api_key_authr   Ú0litellm.proxy.common_utils.encrypt_decrypt_utilsr   r   Ú-litellm.proxy.common_utils.http_parsing_utilsr   Úlitellm.types.realtimer   r   r   r   r   Ú__annotations__r   r   r   r   r*   r$   Úlistr,   r3   r7   Úboolr;   ÚtuplerM   r•   r\   rb   Úpostr    r´   r¼   r‹   r%   r#   ú<module>rÌ      sË  ðô Û ß ã ß HÕ HÝ )å 1ß ?Ý FÝ B÷õ M÷ó ñ “€ˆÓ à!.Ð ˜Ó .Ø!:Ð ˜Ó :Ø&<Ð ˜eÓ <Ø =Ð ˜Ó =ð°°d±
ð ¸só ð!¨¨S©	ð !¸#ð !À$ó !ð
¸$ð À4ÈÁ9ó ð0 $ñ-Øð-àð-ð ð-ð 
ó	-ð`,-Ø	$ð,-à%ð,-ð ˜4‘Kð,-ð ð	,-ð
 ˆ3��t‘˜SÐ Ñ!ó,-ðj #ñ6Øð6àð6ð �4‰Zð6ð �4‰Zð	6ð
 �d‘
ð6ð ð6ð 	ó6ð0Øðà	ˆ#ˆsˆ(�^�dÑóð, ‡�Ø!ÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�Ø(ÙÐ+Ó,Ð-Ø
ˆð ó ñ )0Ð0AÓ(Bñ@9Øð@9àð@9ð &ð@9ð "ò	@9óóóð@9ðF ‡�ØØ
ˆð ó ð ‡�ØØ
ˆð ó ð ‡�ØØ
ˆð ó ðPØðPàðPð òPó	ó	ó	ðPðf ‡�Ø)ÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�Ø&ÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�Ø0ÙÐ+Ó,Ð-Ø
ˆð ó ñ )0Ð0AÓ(BñzAØðzAàðzAð &ðzAð *ò	zAóóóñzAr%   