
    ^hf                         S SK r S SKrS SKJrJrJrJr  S SKrS SKrS SK	r	S SK	J
r
Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  \(       a	  S S	KJr  \rO\r " S
 S5      rg)    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_provider)calculate_max_parallel_requests)Routerc                   L    \ rS rSr\S\S\4S j5       r\S\S\4S j5       r	Sr
g)	InitalizeOpenAISDKClient   litellm_router_instancereturnc                     U c  gU R                   bF  [        U S5      (       a5  [        U R                   S5      (       a  U R                   R                  SL a  gg)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    i/home/james-whalen/.local/lib/python3.13/site-packages/litellm/router_utils/client_initalization_utils.pyshould_initialize_sync_client6InitalizeOpenAISDKClient.should_initialize_sync_client   sb     #*"::F/1JKK+CCEV  ,CCSS     modelc                    U R                   nUR                  S0 5      nUR                  S5      nUS   S   nUR                  SS5      nUR                  SS5      nUR                  SS5      n[        UUUU R                  S	9n	U	(       a6  [        R
                  " U	5      n
U S
3nU R                  R                  UU
SS9  UR                  S5      nU=(       d    UR                  SS5      S   =(       d    SnSnSnU[        R                  ;   a  [        R                  " US9u  pnnUnUnU[        R                  ;   dM  U[        R                  ;   d9  US:X  d3  US:X  d-  US:X  d'  US:X  d!  US:X  d  SU;   d  U[        R                  ;   Ga  SnUS:X  a:  [        R                  R                  U5      (       a  SnSnUR!                  SS5      nUR                  S5      =(       d    UnU(       aM  [#        U[$        5      (       a8  UR'                  S5      (       a"  UR!                  SS5      n[)        U5      nUUS'   UR                  S5      nUR                  S5      nU=(       d    U=(       d    UnU(       a8  UR'                  S5      (       a"  UR!                  SS5      n[)        U5      nUUS'    USL ak  Ubh  [#        U[$        5      (       aS  UR+                  S5      (       d=  UR+                  S5      (       a  US -  nO!UR+                  S!5      (       a  US-  nOUS-  nUR                  S"5      nU(       a8  UR'                  S5      (       a"  UR!                  SS5      n[)        U5      nUUS"'   UR-                  S#S5      =(       d    [        R.                  n[#        U[$        5      (       a8  UR'                  S5      (       a"  UR!                  SS5      n[1        U5      nUUS#'   UR-                  S$U5      n[#        U[$        5      (       a8  UR'                  S5      (       a"  UR!                  SS5      n[1        U5      nUUS$'   UR-                  S%S5      n[#        U[$        5      (       a8  UR'                  S5      (       a"  UR!                  SS5      n[1        U5      nUUS%'   UR                  S&S5      n[#        U[$        5      (       a8  UR'                  S5      (       a"  UR!                  SS5      n[)        U5      nUUS&'   Sn UR                  S'5      (       aN  [2        R4                  " S(5        [7        UR                  S'5      UR                  S)5      UR                  S*5      S+9n US:X  d  US:X  Gah  Ub  [#        U[$        5      (       dG  US   R9                  5        V!V"s0 s H  u  n!n"U!S:w  d  M  U!U"_M     n#n!n"US,   U#S-.n$[;        S.U$ 35      eUR                  S/5      n%U%b"  U%R'                  S05      (       a  [=        U%5      n%O!U c  [        R>                  SL a   [A        5       n Uc%  [B        RD                  " S2[        RF                  5      nS3U;   Ga%  UR+                  S5      (       d  US-  nUR!                  SS5      n&UU& -  nU S43n[H        RJ                  " UU%U UUUU[L        RN                  " [L        RP                  " S5S6S79[        RR                  S89S99n'U R                  R                  UU'USS:9  [T        RW                  U S;9(       ap  U S<3n[H        RX                  " UU%U UUUU[L        RZ                  " [L        RP                  " S5S6S79[        RR                  S89S99n'U R                  R                  UU'USS:9  U S=3n[H        RJ                  " UU%U UUUU[L        RN                  " [L        RP                  " S5S6S79[        RR                  S89S99n'U R                  R                  UU'USS:9  [T        RW                  U S;9(       aq  U S>3n[H        RX                  " UU%U UUUU[L        RZ                  " [L        RP                  " S5S6S79[        RR                  S89S99n'U R                  R                  UU'USS:9  ggUn(U(b  [#        U([$        5      (       a  U(SS? S@-   n([2        R4                  " SAU SB[%        U5       SCU( 35        UUUU%U SD.n)U b  U U)SE'   SSFK.J/n*  U*" U)5      n)U S43n[H        RJ                  " SK0 U)DUU[L        RN                  " [L        RP                  " S5S6S79[        RR                  S89SG.D6n'U R                  R                  UU'USS:9  [T        RW                  U S;9(       aq  U S<3n[H        RX                  " SK0 U)DUU[L        RZ                  " [L        RP                  " S5S6S79[        RR                  S89SG.D6n'U R                  R                  UU'USS:9  U S=3n[H        RJ                  " SK0 U)DUU[L        RN                  " [L        RP                  " S5S6S79[        RR                  S89SG.D6n'U R                  R                  UU'USS:9  [T        RW                  U S;9(       ar  U S>3n[H        RX                  " SK0 U)DUU[L        RZ                  " [L        RP                  " S5S6S79[        RR                  S89SG.D6n'U R                  R                  UU'USS:9  ggUn(U(b  [#        U([$        5      (       a  U(SS? S@-   n([2        R4                  " SHU SI[%        U5       SCU( 35        U S43n[H        R`                  " UUUUU[L        RN                  " [L        RP                  " S5S6S79[        RR                  S89SJ9n'U R                  R                  UU'USS:9  [T        RW                  U S;9(       an  U S<3n[H        Rb                  " UUUUU[L        RZ                  " [L        RP                  " S5S6S79[        RR                  S89SJ9n'U R                  R                  UU'USS:9  U S=3n[H        R`                  " UUUUU[L        RN                  " [L        RP                  " S5S6S79[        RR                  S89SJ9n'U R                  R                  UU'USS:9  [T        RW                  U S;9(       ao  U S>3n[H        Rb                  " UUUUU[L        RZ                  " [L        RP                  " S5S6S79[        RR                  S89SJ9n'U R                  R                  UU'USS:9  gggs  sn"n!f ! [:         a    [2        R4                  " S15         GNf = f)Lz
- 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)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)r2   r>   azure_ad_token_providerr4   r5   r6   r8   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:)r2   azure_endpointr5   r>   rF   rF   )!select_azure_base_url_or_endpoint)r6   r8   rG   zInitializing OpenAI Client for z, Api Base:)r2   r4   r6   r8   r9   rG    )2
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   items
ValueErrorr
   enable_azure_ad_token_refreshr   osgetenvAZURE_DEFAULT_API_VERSIONr1   AsyncAzureOpenAIhttpxAsyncClientLimits
ssl_verifyr   r   AzureOpenAIClientlitellm.llms.azure.azurerN   AsyncOpenAIOpenAI)+r   r   rP   r   r=   model_idr"   r#   r$    calculated_max_parallel_requests	semaphore	cache_keyr*   default_api_basedefault_api_key_r2   r3   is_azure_ai_studio_modelapi_key_env_namer4   api_base_env_namer5   api_version_env_namer6   timeout_env_namer7   stream_timeout_env_namer8   max_retries_env_namer9   organization_env_namerF   kvfiltered_litellm_params_filtered_modelr>   azure_modelrI   _api_keyazure_client_paramsrN   s+                                              r   
set_client#InitalizeOpenAISDKClient.set_client5   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5AGX  (%O '@@@"g&I&II"g-"l2"o5"h."&>>!Z/W===-2$"g-==;;JGG/3,*2'!+!3!3Hb!AJ %((3FGw,,&&}55#*??="#E ()9:,3y)%))*5H&4&8&8&DH8H8(8  H//>>$,$4$4]B$G!)*;<-5z* )D0(x-- ))&11 $$S))%H&&u--OH&H(,,];K{55mDD'2':':="'M$,-AB0;}- ""9d3Nw7N7N  '3''G,>,>},M,M#*??="#E $%56,3y).<.@.@ '/N .#..>3L3L4 4 +9*@*@PR*S'!+,C!D3A/0)7););q*K +s++0F0F}0U0U'2':':="'M$()=>0;}-)--ndCL,,,1H1H1W1W(4(<(<]B(O%-.CD1=~.CG#!!+..%++B +M,00=,00="0"4"4_"E+' #g-1D1T#:h+D+D %**:$;$A$A$C/$CDAq	> 1$C , / ',L&9*A'O %`ap`qr  "0!3!34D!E!-%0099)En)U+3==E2M2O/
 &"$))+W-N-N#K /(:#,,S1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?? )") *'+	 @ '4  'H+
8S0I0I#+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?? )") *'+	 @ . #'Jx,E,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;;%%&#'	 < %M >L/, & -33Hs   (t9t&
t  u urO   N)__name__
__module____qualname____firstlineno__staticmethodLitellmRouterboolr   dictr   __static_attributes__rO   r   r   r   r      sL    !.	 2 p!.p7;p pr   r   )rR   ri   typingr   r   r   r   rm   r1   rW   r   r   litellm._loggingr	   rs   r
   litellm.llms.azure.common_utilsr   3litellm.secret_managers.get_azure_ad_token_providerr   litellm.utilsr   litellm.routerr   _Routerr   r   rO   r   r   <module>r      sL     	 9 9    . 2 A N :0MML Lr   