
    gh                         d dl Z d dlZd dlmZmZmZmZ d dlZd dl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mZ d dlmZ d dlmZ er	d d	lmZ eZneZ G d
 d      Zy)    N)TYPE_CHECKINGAnyCallableOptional)
get_secretget_secret_str)verbose_router_logger)get_azure_ad_token_from_oidc)"get_azure_ad_token_from_entrata_id)get_azure_ad_token_from_username_password)get_azure_ad_token_provider)calculate_max_parallel_requests)Routerc                   @    e Zd Zededefd       Zededefd       Zy)InitalizeOpenAISDKClientlitellm_router_instancereturnc                     | y| j                   ;t        | d      r/t        | j                   d      r| j                   j                  du ryy)z
        Returns if Sync OpenAI, Azure Clients should be initialized.

        Do not init sync clients when router.router_general_settings.async_only_mode is True

        Frouter_general_settingsasync_only_modeT)r   hasattrr   r   s    d/var/www/openai/venv/lib/python3.12/site-packages/litellm/router_utils/client_initalization_utils.pyshould_initialize_sync_clientz6InitalizeOpenAISDKClient.should_initialize_sync_client   sZ     #*"::F/1JK+CCEV ,CCSS     modelc                 d   | j                   }|j                  di       }|j                  d      }|d   d   }|j                  dd      }|j                  dd      }|j                  dd      }t        |||| j                  	      }	|	r8t	        j
                  |	      }
| d
}| j                  j                  ||
d       |j                  d      }|xs |j                  dd      d   xs d}d}d}|t        j                  v rt        j                  |      \  }}}}|}|}|t        j                  v sB|t        j                  v s0|dk(  s+|dk(  s&|dk(  s!|dk(  s|dk(  sd|v s|t        j                  v rd}|dk(  r5t        j                  j                  |      rd}d}|j!                  dd      }|j                  d      xs |}|rCt#        |t$              r3|j'                  d      r"|j!                  dd      }t)        |      }||d<   |j                  d      }|j                  d      }|xs |xs |}|r3|j'                  d      r"|j!                  dd      }t)        |      }||d<   	 |du rV|Tt#        |t$              rD|j+                  d      s3|j+                  d      r|d z  }n|j+                  d!      r|dz  }n|dz  }|j                  d"      }|r3|j'                  d      r"|j!                  dd      }t)        |      }||d"<   |j-                  d#d      xs t        j.                  }t#        |t$              r3|j'                  d      r"|j!                  dd      }t1        |      }||d#<   |j-                  d$|      }t#        |t$              r3|j'                  d      r"|j!                  dd      }t1        |      }||d$<   |j-                  d%d      }t#        |t$              r3|j'                  d      r"|j!                  dd      }t1        |      }||d%<   |j                  d&d      }t#        |t$              r3|j'                  d      r"|j!                  dd      }t)        |      }||d&<   d} |j                  d'      rPt3        j4                  d(       t7        |j                  d'      |j                  d)      |j                  d*      +      } |j                  d,      rL|j                  d-      r;t9        |j                  d,      |j                  d-      |j                  d)      .      } |dk(  s|dk(  rx|t#        |t$              sA|d   j;                         D !"ci c]  \  }!}"|!dk7  r|!|" }#}!}"|d/   |#d0}$t=        d1|$       |j                  d2      }%|%|%j'                  d3      r+t?        |%      }%n| t        j@                  du r	 tC               } |$tE        jF                  d5t        jH                        }d6|v r@|j+                  d      s|dz  }|j!                  dd      }&||& z  }| d7}tK        jL                  ||%| ||||tO        jP                  tO        jR                  d8d9:      t        jT                  ;      <      }'| j                  j                  ||'|d=       tV        jY                  | >      ry| d?}tK        jZ                  ||%| ||||tO        j\                  tO        jR                  d8d9:      t        jT                  ;      <      }'| j                  j                  ||'|d=       | d@}tK        jL                  ||%| ||||tO        jP                  tO        jR                  d8d9:      t        jT                  ;      <      }'| j                  j                  ||'|d=       tV        jY                  | >      r| dA}tK        jZ                  ||%| ||||tO        j\                  tO        jR                  d8d9:      t        jT                  ;      <      }'| j                  j                  ||'|d=       y|}(|(t#        |(t$              r|(ddB dCz   }(t3        j4                  dD| dEt%        |       dF|(        ||||%| dG})| | |)dH<   ddIl/m0}*  |*|)      })| d7}tK        jL                  dNi |)||tO        jP                  tO        jR                  d8d9:      t        jT                  ;      dJ}'| j                  j                  ||'|d=       tV        jY                  | >      rw| d?}tK        jZ                  dNi |)||tO        j\                  tO        jR                  d8d9:      t        jT                  ;      dJ}'| j                  j                  ||'|d=       | d@}tK        jL                  dNi |)||tO        jP                  tO        jR                  d8d9:      t        jT                  ;      dJ}'| j                  j                  ||'|d=       tV        jY                  | >      rx| dA}tK        jZ                  dNi |)||tO        j\                  tO        jR                  d8d9:      t        jT                  ;      dJ}'| j                  j                  ||'|d=       yyy|}(|(t#        |(t$              r|(ddB dCz   }(t3        j4                  dK| dLt%        |       dF|(        | d7}tK        jb                  |||||tO        jP                  tO        jR                  d8d9:      t        jT                  ;      M      }'| j                  j                  ||'|d=       tV        jY                  | >      rw| d?}tK        jd                  |||||tO        j\                  tO        jR                  d8d9:      t        jT                  ;      M      }'| j                  j                  ||'|d=       | d@}tK        jb                  |||||tO        jP                  tO        jR                  d8d9:      t        jT                  ;      M      }'| j                  j                  ||'|d=       tV        jY                  | >      rx| dA}tK        jd                  |||||tO        j\                  tO        jR                  d8d9:      t        jT                  ;      M      }'| j                  j                  ||'|d=       yyyc c}"}!w # t<        $ r t3        j4                  d4       Y Kw xY w)Oa  
        - Initializes Azure/OpenAI clients. Stores them in cache, b/c of this - https://github.com/BerriAI/litellm/issues/1278
        - Initializes Semaphore for client w/ rpm. Stores them in cache. b/c of this - https://github.com/BerriAI/litellm/issues/2994
        litellm_paramsr   
model_infoidrpmNtpmmax_parallel_requests)r!   r#   r"   default_max_parallel_requests_max_parallel_requests_clientT)keyvalue
local_onlycustom_llm_provider/   r    )r   azure
azure_textcustom_openaiopenaiztext-completion-openaizft:gpt-3.5-turboFzazure/api_keyzos.environ/api_basebase_urlz/v1/zv1/z/v1api_versiontimeoutstream_timeoutmax_retriesorganization	tenant_idz,Using Azure AD Token Provider for Azure Auth	client_idclient_secret)r9   r:   r;   azure_usernameazure_password)r<   r=   r:   
model_name)r>   r   zFapi_base is required for Azure OpenAI. Set it on your config. Model - azure_ad_tokenzoidc/z*Azure AD Token Provider could not be used.AZURE_API_VERSIONzgateway.ai.cloudflare.com_async_clienti  d   )max_connectionsmax_keepalive_connections)limitsverify)r1   r?   azure_ad_token_providerr3   r4   r5   r7   http_client)r&   r'   ttlr(   r   _client_stream_async_client_stream_client   z***************z%Initializing Azure OpenAI Client for z, Api Base: z
, Api Key:)r1   azure_endpointr4   r?   rG   rG   )!select_azure_base_url_or_endpoint)r5   r7   rH   zInitializing OpenAI Client for z, Api Base:)r1   r3   r5   r7   r8   rH    )3
client_ttlgetr   r$   asyncio	Semaphorecache	set_cachesplitlitellmopenai_compatible_providersget_llm_provideropen_ai_chat_completion_modelsopen_ai_embedding_modelsutils_is_non_openai_azure_modelreplace
isinstancestr
startswithr   endswithpoprequest_timeoutr   r	   debugr   r   items
ValueErrorr
   enable_azure_ad_token_refreshr   osgetenvAZURE_DEFAULT_API_VERSIONr0   AsyncAzureOpenAIhttpxAsyncClientLimits
ssl_verifyr   r   AzureOpenAIClientlitellm.llms.azure.azurerO   AsyncOpenAIOpenAI)+r   r   rQ   r   r>   model_idr!   r"   r#    calculated_max_parallel_requests	semaphore	cache_keyr)   default_api_basedefault_api_key_r1   r2   is_azure_ai_studio_modelapi_key_env_namer3   api_base_env_namer4   api_version_env_namer5   timeout_env_namer6   stream_timeout_env_namer7   max_retries_env_namer8   organization_env_namerG   kvfiltered_litellm_params_filtered_modelr?   azure_modelrJ   _api_keyazure_client_paramsrO   s+                                              r   
set_clientz#InitalizeOpenAISDKClient.set_client8   s    -77
#3R8#''0
&t,  -  - . 2 23JD Q+J"7*A*_*_	,
( ,))*JKI#*$ABI#))33 4  -001FG1VZ5E5Ec15Ma5PVTV'"E"EE8?8P8P 95A"GX  (%O '@@@"g&I&II"g-"l2"o5"h."&>>!Z/W===-2$"g-==;;JG/3,*2'!+!3!3Hb!AJ %((3FGw,&&}5#*??="#E ()9:,3y)%))*5H&4&8&8&DH8H8(8  H//>$,$4$4]B$G!)*;<-5z* )D0(x- ))&1 $$S)%H&&u-OH&H(,,];K{55mD'2':':="'M$,-AB0;}- ""9d3Nw7N7N  '3'G,>,>},M#*??="#E $%56,3y).<.@.@ '/N .#.>3L3L4 +9*@*@PR*S'!+,C!D3A/0)7););q*K +s+0F0F}0U'2':':="'M$()=>0;}-)--ndCL,,1H1H1W(4(<(<]B(O%-.CD1=~.CG#!!+.%++B +M,00=,00="0"4"4_"E+'
 !!"238J8J 9 +T#1#5#56F#G#1#5#56F#G,00=+' #g-1D1T#:h+D %**:$;$A$A$C/$CDAq	> 1$C , / ',L&9*A'O %`ap`qr  "0!3!34D!E!-%009)En)U+3==E2M2O/
 &"$))+W-N-N#K /(:#,,S1 C","4"4Xr"BK;-0H#+*M :I$55 ''50G!)$/ '$/$)$5$5#(<<04PS$ $+#5#5	%G ,11;;%%&#'	 <  0MM0G N  (0j$8	"("4"4$++94K%-(3$+(3(-',||48TW(" (/'9'9	)# 055?? )") *'+	 @  $,*,@ AI$55 ''50G!)$/ .$/$)$5$5#(<<04PS$ $+#5#5	%G ,11;;%%&#'	 <  0MM0G N  (0j$?	"("4"4$++94K%-(3$2(3(-',||48TW(" (/'9'9	)# 055?? )") *'+	 @   'H+
8S0I#+BQ<(#:)//?
|<X[\dXeWffpqypz{ $+*2'2*83J+' /:3 ,,EF +L++' $,*M :I$55 
-
 '$/$)$5$5#(<<04PS$ $+#5#5	%	
G ,11;;%%&#'	 <  0MM0G N  (0j$8	"("4"4 
#1
#$+(3(-',||48TW(" (/'9'9	)	
# 055?? )") *'+	 @  $,*,@ AI$55 
-
 .$/$)$5$5#(<<04PS$ $+#5#5	%	
G ,11;;%%&#'	 <  0MM0G N  (0j$?	"("4"4 
#1
#$2(3(-',||48TW(" (/'9'9	)	
# 055?? )") *'+	 @ gT #'Jx,E'|h6H%++5j\SQY]O[efneop  (j6	 ,,#%# +!- % 1 1$||,0C   '11	! (--77!!"#	 8  ,II,C J  $,*G 4I$mm '!) '$/%1$)LL#(<<04PS$ $+#5#5	%G ,11;;%%&#'	 <   (j(<=	 ,,#%* +!- % 1 1$||,0C   '11	! (--77!!"#	 8  ,II,C J  $,*N ;I$mm '!) .$/%1$)LL#(<<04PS$ $+#5#5	%G ,11;;%%&#'	 < %] >\/, & -33Hs   )t
t t/.t/N)	__name__
__module____qualname__staticmethodLitellmRouterboolr   dictr   rP   r   r   r   r      sL    !.	 2 x!.x7;x xr   r   )rS   rj   typingr   r   r   r   rn   r0   rX   r   r   litellm._loggingr	   rt   r
   litellm.llms.azure.common_utilsr   r   3litellm.secret_managers.get_azure_ad_token_providerr   litellm.utilsr   litellm.routerr   _Routerr   r   rP   r   r   <module>r      sN     	 9 9    . 2 A :0MMT Tr   