
    ^hp	                       S SK r S SKrS SKrS SKrS SKJrJrJrJrJ	r	J
r
Jr  S SKrS SKJrJr  S SKrS SKJr  S SKJr  S SKJrJrJr  S SKJrJrJrJr  S SKJ r J!r!J"r"J#r#  S	S
K$J%r%J&r&J'r'J(r(J)r)  SSK*J+r+  SSK,J-r-J.r.  \" 5       r/ " S S5      r0S\14S jr2S\34S jr4S\1S\
\\\4      S\54S jr6 " S S\+5      r7 " S S\+5      r8g)    N)AnyCallable	CoroutineListLiteralOptionalUnion)AsyncAzureOpenAIAzureOpenAI)	DualCache)Logging)AsyncHTTPHandlerHTTPHandlerget_async_httpx_client)EmbeddingResponseImageResponseLlmProvidersModelResponse)CustomStreamWrapper convert_to_model_response_object
get_secret
modify_url   )BatchCancelBatchRequestCreateBatchRequestHttpxBinaryResponseContentRetrieveBatchRequest   )BaseLLM   )AzureOpenAIErrorprocess_azure_headersc                   >    \ rS rSrSr  S
S jrS rS\S\4S jrS	r	g)AzureOpenAIAssistantsAPIConfig,   z
Reference: https://learn.microsoft.com/en-us/azure/ai-services/openai/assistants-reference-messages?tabs=python#create-message
Nc                     g N selfs    R/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/azure/azure.py__init__'AzureOpenAIAssistantsAPIConfig.__init__1   s     	    c                 
    / SQ$ )N)rolecontentattachmentsmetadatar)   r*   s    r,   *get_supported_openai_create_message_paramsIAzureOpenAIAssistantsAPIConfig.get_supported_openai_create_message_params6   s    
 	
r/   non_default_paramsoptional_paramsc                 Z   UR                  5        GH  u  p4US:X  a  XBS'   US:X  a  XBS'   M  US:X  a9  [        U[        5      (       a  XBS'   M=  [        R                  R                  SSS9eUS:X  d  Mc  / n[        U[        5      (       ag  U H_  nSU;   a  UR                  US   5        M  [        R                  S	L a  M4  [        R                  R                  S
R                  U5      SS9e   M  [        R                  R                  SR                  [        U5      U5      SS9e   U$ )Nr1   r4   r2   z'Azure only accepts content as a string.  )messagestatus_coder3   file_idTzTAzure doesn't support {}. To drop it from the call, set `litellm.drop_params = True.zWInvalid param. attachments should always be a list. Got={}, Expected=List. Raw value={})items
isinstancestrlitellmutilsUnsupportedParamsErrorlistappenddrop_paramsformattype)r+   r7   r8   paramvaluefile_idsitems          r,   'map_openai_params_create_message_paramsFAzureOpenAIAssistantsAPIConfig.map_openai_params_create_message_params>   sL    /446LE*/'
".3
+)#eS))16I.!-->> I$' ?  
 &&(eT** %$,$OODO<&22d: $&-mm&J&J -C  -J  -J(--& 14	 'K '" !" !& "-->> y  !A  !A K! %(	 ?  A 7L r/   r)   returnN)
__name__
__module____qualname____firstlineno____doc__r-   r5   dictrM   __static_attributes__r)   r/   r,   r%   r%   ,   s.    	

)"&)9=)r/   r%   azure_client_paramsc                 f    U R                  SS 5      nUb  SU;   a  XS'   U R                  S5        U $ )Nazure_endpointz/openai/deploymentsbase_url)getpop)rX   rZ   s     r,   !select_azure_base_url_or_endpointr^   j   sB     ),,-=tDN! N2.<
+##$45r/   azure_ad_tokenc           	         [         R                  " SS 5      n[         R                  " SS 5      n[         R                  " SS5      nUb  Uc
  [        SSS9e[        U 5      nUc
  [        SS	S9e[        R
                  " UUUUS
.5      n[        R                  U5      nUb  U$ [        R                  nUR                  U SU S3USSSUS.S9nUR                  S:w  a  [        UR                  UR                  S9eUR	                  5       n	U	R                  SS 5      nU	R                  SS 5      n
Uc
  [        SSS9eU
c
  [        SSS9e[        R                  UUU
S9  U$ )NAZURE_CLIENT_IDAZURE_TENANT_IDAZURE_AUTHORITY_HOSTz!https://login.microsoftonline.com  z/AZURE_CLIENT_ID and AZURE_TENANT_ID must be setr<   r;   i  z6OIDC token could not be retrieved from secret manager.)azure_client_idazure_tenant_idazure_authority_host
oidc_token/z/oauth2/v2.0/tokenclient_credentialsz,https://cognitiveservices.azure.com/.defaultz6urn:ietf:params:oauth:client-assertion-type:jwt-bearer)	client_id
grant_typescopeclient_assertion_typeclient_assertion)data   access_token
expires_inz(Azure AD Token access_token not returnedz&Azure AD Token expires_in not returned)keyrJ   ttl)osgetenvr"   r   jsondumpsazure_ad_cache	get_cacherA   module_level_clientpostr<   textr\   	set_cache)r_   rf   rg   rh   ri   azure_ad_token_cache_keyazure_ad_token_access_tokenclient	req_tokenazure_ad_token_jsonazure_ad_token_expires_ins              r,   get_azure_ad_token_from_oidcr   ~   s   ii 148Oii 148O99 C /"9E
 	

 N+JL
 	

  $zz..$8$		
  #1":":;S"T".**((F
 /!22DE(.C%] *
  	I #!--NN
 	

 $..*"5"9"9.$"O 3 7 7d K"*%O
 	
 !(%M
 	
 $)%   '&r/   azure_clientrP   c                     Uc  gS/nU R                  5        H-  u  p4X2;   d  M  US:X  d  M  Uc  M  XAR                  S   :w  d  M-    g   g)zv
Returns True if user passed in client params != initialized azure client

Currently only implemented for api version
Tapi_versionapi-versionF)r>   _custom_query)rX   r   dynamic_paramskvs        r,   _check_dynamic_azure_paramsr      sS     #_N#))+1#5}&@&@&O!O ,
 r/   c                   0  ^  \ rS rSrS5U 4S jjrS rS\\   S\\   S\\   S\\   S	\S
\S\	\
\R                  4   S\\   S\S   4S jrS\S\S\	\
\R                  4   4S jrS\S\S\	\
\R                  4   4S jr   S6S	\S\S\S\S\S\S\S\S\S\S\	\
\R                  4   S\S\S\\   4S jjr   S7S\S\S	\S\S\S\S\S\S\S\\   S\\   4S jjr  S8S\S\S\S\S\S	\S\S\\   4S jjr  S8S\S\S\S\S\S\S	\S\S\\   4S  jjr   S7S\S\S!\S"\S\S\\   S\\   4S# jjr      S9S	\S"\S\S\S\
S\S\S$\S\\   S\\   S
\\   S\\   S\4S% jjr S\\!   S\\	\
\R                  4      S\S\S\S\S\S\RD                  4S& jr#S\\$   S\\	\
\R                  4      S\S\S\S\S\S\RD                  4S' jr%S!\S	\\   S\4S( jr&  S8S\S\S!\S\S"\S\S\S\'RP                  4S) jjr)        S:S*\S\
S$\S\S\S	\\   S\\   S\\   S\\   S\\(   S\\   S\(4S+ jjr*   S7S	\S"\S,\S$\S\\   S\\   S\\   S-\\   S
\S\	\
\R                  4   S\\   S.\\   S\+4S/ jjr, S;S	\S"\S,\S$\S\\   S\\   S\\   S\\   S
\S\	\
\R                  4   S\+4S0 jjr-   S7S	\\   S\S\S\S\
S1\S\\   S"\\   S*\\   S\4S2 jjr.   S7S	\\   S\\   S\S\\   S\
S1\S\\   S"\\   S*\\   S\4S3 jjr/S4r0U =r1$ )<AzureChatCompletion   rP   c                 "   > [         TU ]  5         g r(   superr-   r+   	__class__s    r,   r-   AzureChatCompletion.__init__       r/   c                 x    SS0nUb  XS'   U$ Ub)  UR                  S5      (       a  [        U5      nSU 3US'   U$ )Nzcontent-typezapplication/jsonzapi-keyoidc/zBearer Authorization)
startswithr   )r+   api_keyr_   headerss       r,   validate_environment(AzureChatCompletion.validate_environment   s`    .
 !(I
 	 '((11!=n!M)00@'AGO$r/   r   api_baser   r_   modelmax_retriestimeoutr   client_type)syncasyncc
                 x   UUU[         R                  UUS.n
[        U
S9n
Ub  X:S'   O(Ub%  UR                  S5      (       a  [	        U5      nXJS'   Uc&  U	S:X  a  [        S	0 U
D6nU$ U	S:X  a  [        S	0 U
D6nW$ UnUb;  [        UR                  [        5      (       a  UR                  R                  SU5        U$ )
Nr   rZ   azure_deploymenthttp_clientr   r   rX   r   r   r_   r   r   r   r)   )rA   client_sessionr^   r   r   r   r
   r?   r   rV   
setdefault)r+   r   r   r   r_   r   r   r   r   r   rX   r   s               r,   _get_sync_azure_client*AzureChatCompletion._get_sync_azure_client   s     '& %"11&
 @ 3
 -4	*'((11!=n!M4B 01>f$*A-@A  '/F2EF  "L&:l6P6PRV+W+W**55m[Qr/   r   rq   c                      UR                   R                  R                  R                  " S0 UDSU0D6n[	        UR
                  5      nUR                  5       nXV4$ ! [         a  nUeSnAff = fz
Helper to:
- call chat.completions.create.with_raw_response when litellm.return_response_headers is True
- call chat.completions.create by default
r   Nr)   chatcompletionswith_raw_responsecreaterV   r   parse	Exceptionr+   r   rq   r   raw_responser   responsees           r,   .make_sync_azure_openai_chat_completion_requestBAzureChatCompletion.make_sync_azure_openai_chat_completion_request  sw    		',,88JJQQ  'L <//0G#))+H$$ 	G	s   AA 
A/(A**A/c                    #     UR                   R                  R                  R                  " S0 UDSU0D6I Sh  vN n[	        UR
                  5      nUR                  5       nXV4$  N,! [         a  nUeSnAff = f7fr   r   r   s           r,   )make_azure_openai_chat_completion_request=AzureChatCompletion.make_azure_openai_chat_completion_request/  s     		!-!2!2!>!>!P!P!W!W "" '" L <//0G#))+H$$  	G	s8   A>7A* A(+A* 'A>(A* *
A;4A66A;;A>messagesmodel_responseapi_typer   print_verboselogging_objacompletionr   c                    U(       a  UUS'    Ub  Uc
  [        SSS9eUR                  SS5      nUR                  SS5      nS	U;   a  Uc  UR                  S
5      (       d  US
-  nXQ -  nUU [        R                  UUS.nUb  UUS'   O)Ub&  UR                  S5      (       a  [        U5      nUUS'   USL a  [        S&0 UD6nO[        S&0 UD6nS US.UEnO/[        R                  " 5       R                  UUUUU=(       d    0 S9nUSL aI  UR                  SS5      (       a  U R                  UUU	UUUUUUUS9
$ U R                  UUUUUUUU	UUUUS9$ SU;   a   US   SL a  U R                  UUU	UUUUUUUS9
$ UR                  UUUUS.UUUS.S9  [!        U["        5      (       d
  [        SSS9eUUU[        R                  UUS.n[%        US9nUb  UUS'   O)Ub&  UR                  S5      (       a  [        U5      nUUS'   Ub  [!        U[        5      (       a  U	(       a  [        S&0 UD6nO@UnUb;  [!        UR&                  [(        5      (       a  UR&                  R+                  SU5        [!        U[        5      (       d
  [        SSS9eU R-                  UUUS9u  nnUR/                  5       nUR1                  UUUUUUS.S 9  [3        UUUUS!9$ ! [          a  nUeS nAf[4         aW  n[7        US"S5      n[7        US#S 5      n[7        US$S 5      nUc  U(       a  [7        US#S 5      n[        U[9        U5      US%9eS nAff = f)'Nextra_headersrd   zMissing model or messagesre   r   r   	json_modeFgateway.ai.cloudflare.comrj   )r   r[   r   r   r   r   r   r_   Tr   r   )r   r   r8   litellm_paramsr   stream)
r   r   r   rq   r   r   r   r_   r   r   )r   rq   r   r   r   r   r_   r   r   r   r   convert_tool_call_to_json_moder   r_   )r   r   r   complete_input_dictinputr   additional_argsmax retries must be an intr   r   r     z.azure_client is not an instance of AzureOpenAIr   rq   r   )r   r   r   r   r   original_responser   )response_objectmodel_response_objectr   _response_headersr<   r   r   r<   r;   r   r)   )r"   r]   endswithrA   r   r   r   r
   r   AzureOpenAIConfigtransform_requestr\   async_streamingr   	streamingpre_callr?   intr^   r   rV   r   r   
model_dump	post_callr   r   getattrr@   )r+   r   r   r   r   r   r   r   r_   r   r   r   r   r8   r   	logger_fnr   r   r   r   r   rX   rq   r   r   stringified_responser   r<   error_headerserror_responses                                 r,   
completionAzureChatCompletion.completionE  sx   * /6OO,v	} 0& #-H  *--mQ?K(7(;(;K(OI +h6>#,,S11 C'*H (3'/j'.'='='2#*+' *9@+I6'3)44W==-I ..N AO+,<="d*!1!H4G!H!,!C/B!C!%8OO002DD%$3#1#Mr E  d""&&x77//$/!)'5!# '$/'5 '% 0    ++!)!'5 '$/#'5'5 '%$/7@ ,   _,1Jd1R~~ +%#1# +#1#! &   $$"# (/.<$ (3$,/3% %  "+s33*$'1M 
 $/&.(-#*#9#9#.&'# 'H(;'# &5<'	2#/%0099)En)U<J'(89 N%fk::%#.#E1D#EL#)L".:$22D4 4 %22==); ",<<*$' P 
 %)$W$W!-D' %X %! (0':':'<$%%"#&:#*'2$,%	 & 	 8$8*83<&-	    	G 	!!]C8K#Ay$7M$Q
D9N$ '	4 H"'Q 	s8   D,K ;K %K ;EK 
MK!!M.AM  Mr   c           	        #    S n UR                  SS5      n[        U[        5      (       d
  [        SSS9eUUU[        R
                  UUS.n[        US9nUb  XS'   O(U
b%  U
R                  S	5      (       a  [        U
5      n
XS
'   Ub  U(       a  [        S0 UD6nOUnU	R                  US   UR                  UU
S.UR                  R                  SUS.S9  U R                  UUUS9I S h  vN u  nnUU	R                  S'   UR!                  5       nU	R#                  US   UUSU0S9  [%        UUSU0UUS9$  NL! [         a'  nU	R#                  US   USU0['        U5      S9  UeS nAf[(        R*                   a8  nU	R#                  US   USU0['        U5      S9  [        S['        U5      S9eS nAf[,         aK  nU	R#                  US   USU0['        U5      S9  [/        US5      (       a  Ue[        S['        U5      S9eS nAff = f7f)Nr   r   rd   r   re   r   r   r   r   r_   r   r   Tr   r   r   r   r   r   response_headersr   r   r   )r   r   hidden_paramsr   r   r   r   r   r   r   r<   r)   )r]   r?   r   r"   rA   aclient_sessionr^   r   r   r
   r   r   	_base_url_uri_referencer   model_call_detailsr   r   r   r@   asyncioCancelledErrorr   hasattr)r+   r   r   r   r   rq   r   r   r   r   r_   r   r   r   r   rX   r   r   r   r   s                       r,   r   AzureChatCompletion.acompletion  s     b	H((=!4Kk3//& #-I   +"*$)&66*"# #D$7# "18I.+!,,W55%A.%QN8F$45 ~/F2EF%   :&$,, $+*8  !- 6 6 E E#'+/! !  '+&T&T) 'U ' !GX
 BIK**+=>#+#6#6#8 !!:&"6!6 =	 "  4 4&4('2")/M !,   	!!:&!6 ="%a&	 "  G%% 	D!!:&!6 ="%a&	 "  #sCFCC 	H!!:&!6 ="%a&	 "  q-((&3AGG	HsU   HC'D< -D:.AD< 9H:D< <
H
"E((H
?3F22H
?AHH

Hc           
         UR                  SS5      n[        U[        5      (       d
  [        SSS9eUUU[        R
                  UUS.n[        US9nUb  X<S'   O(U	b%  U	R                  S	5      (       a  [        U	5      n	XS
'   U
b  U(       a  [        S0 UD6nOU
nUR                  US   UR                  UU	S.UR                  R                  SUS.S9  U R                  XUS9u  p[        UUSUUR!                  SS 5      [#        U5      S9nU$ )Nr   r   rd   r   re   r   r   r   r   r_   r   r   Tr   r   r   azurestream_optionscompletion_streamr   custom_llm_providerr   r   r   r)   )r]   r?   r   r"   rA   r   r^   r   r   r   r   r   r   r   r   r   r\   r#   )r+   r   r   r   r   r   rq   r   r   r_   r   r   rX   r   r   r   streamwrappers                    r,   r   AzureChatCompletion.streaming  s_    hh}a0+s++")E 
 '& %"11&
 @ 3
 -4	*'((11!=n!M4B 01>^&=)<=L!Lz" ((  '&4 )22AA#'+ 	 	
 !OO%' P 
 ,& '#88$4d;3G<
 r/   c           
        #     UUU[         R                  UR                  SS5      US.n[        US9nUb  X;S'   O(U	b%  U	R	                  S5      (       a  [        U	5      n	XS'   U
b  U(       a  [        S0 UD6nOU
nUR                  US   UR                  UU	S	.UR                  R                  S
US.S9  U R                  UUUS9I S h  vN u  pXR                  S'   [        UUSUUR                  SS 5      US9nU$  N4! [         aW  n[!        USS5      n[!        USS 5      n[!        USS 5      nUc  U(       a  [!        USS 5      n[#        U[%        U5      US9eS nAff = f7f)Nr   r   r   r   r   r   r_   r   r   Tr   r   r   r   r   r   r  r<   r   r   r   r   r)   )rA   r   r]   r^   r   r   r
   r   r   r   r   r   r   r   r\   r   r   r"   r@   )r+   r   r   r   r   r   rq   r   r   r_   r   rX   r   r   r   r  r   r<   r   r   s                       r,   r   #AzureChatCompletion.async_streaming  s    ?	  +"*$)&66#xxq9"# #D$7# "18I.+!,,W55%A.%QN8F$45~/F2EF%  :&$,, $+*8  !- 6 6 E E#'+/! !  '+&T&T) 'U ' !G
 BI**+=> 0"*$+'#xx(8$?")M ! !!"  	!!]C8K#Ay$7M$Q
D9N$ '	4 H"'Q 	s<   E%CD 
C?3D >E%?D 
E"AEE""E%rX   r   c	           	        #    S n	 Uc  [        S0 UD6n
OUn
U
R                  R                  R                  " S0 UDSU0D6I S h  vN n[	        UR
                  5      nUR                  5       n	U	R                  5       nUR                  UUSU0US9  [        UUSU0[        U5      SS9$  Ne! [         a$  nUR                  UUSU0[        U5      S9  UeS nAff = f7f)Nr   r   r   r   	embedding)r   r   r   r   response_typer)   )r
   
embeddingsr   r   rV   r   r   r   r   r   r#   r   r@   )r+   rq   r   rX   r   r   r   r   r   r   openai_aclientr   r   r   r   s                  r,   
aembeddingAzureChatCompletion.aembedding  s     !	~!1!H4G!H!'!/!:!:!L!L!S!S "" '" L <//0G#))+H#+#6#6#8 !!!6 ="6	 "  4 4&4('2"7"@) (  	!!!6 ="%a&	 "  G	s;   C>B, B*A$B, )C*B, ,
C6CCCr8   c                 2   U(       a  XS'   U R                   c  U R                  5       U l          XS.UEnU=(       d    [        R                  n[	        U[
        5      (       d
  [        SSS9eUUUUUS.n[        US9nU(       a  [        R                  US'   O[        R                  US'   U	b  U	US	'   O)U
b&  U
R                  S
5      (       a  [        U
5      n
U
US'   UR                  UU	UXS.S.S9  USL a  U R                  UUUU	UUUUS9$ Uc  [        S0 UD6nOUnUR                  R                   R"                  " S0 UDSU0D6n[%        UR&                  5      nUR)                  5       nUR+                  UU	XS.US9  [-        UR/                  5       US[1        U5      S9$ ! [         a  nUeS nAf[2         aW  n[5        USS5      n[5        USS 5      n[5        USS 5      nUc  U(       a  [5        USS 5      n[        U[7        U5      US9eS nAff = f)Nr   r   r   rd   r   re   r   rZ   r   r   r   r   r   r   r   r_   r   )r   r   r   T)rq   r   r   r   r   rX   r   r   r   )r   r   r   r	  )r   r   r
  r   r<   r   r   r   r   r)   )_client_sessioncreate_client_sessionrA   DEFAULT_MAX_RETRIESr?   r   r"   r^   r   r   r   r   r   r  r   r  r   r   rV   r   r   r   r   r   r#   r   r   r@   )r+   r   r   r   r   r   r   r   r8   r   r_   r   r   r  r   rq   rX   r   r   r   r   r<   r   r   s                           r,   r	  AzureChatCompletion.embeddingI  s   " /6O,'#'#=#=#?D N	"FoFD%D)D)DKk3//& #-I   +"*$)*"# #D$7# 5<5L5L#M25<5K5K#M2"18#I.+!,,W55%A.%QN8F#$45   +/+2U! !  T! +##1(;#! ' 	 	 ~*A-@A%'22DDKKddd\cdL<//0G#))+H!!8< S"*	 "  4HDWDWDYq  P[  oD  EL  oM  N  N 	G 	!!]C8K#Ay$7M$Q
D9N$ '	4 H"'Q 	s,   CF& BF& &
H0F22H?AHHc           
      z  #    Uc{  0 nUbE  [        U[        5      (       d  [        U[        5      (       a  [        R                  " U5      n	XS'   O[        R                  " SSS9US'   [        [        R                  US9n
OUn
SU;   Ga  US;   Ga~  [        US	S
9nUR                  SS5        U
R                  U[        R                  " U5      US9I Sh  vN nSUR                  ;   a  UR                  S   nO[        SUR                  S9eU
R!                  UUS9I Sh  vN nUR#                  5       I Sh  vN   Sn[$        R$                  " 5       nSUR                  5       ;  a(  ['        SR)                  UR                  5       5      5      eUR                  5       S   S;  a  [$        R$                  " 5       U-
  U:  a
  [        SSS9e[*        R,                  " [        UR                  R!                  S5      =(       d    S5      5      I Sh  vN   U
R!                  UUS9I Sh  vN nUR#                  5       I Sh  vN   UR                  5       S   S;  a  M  UR                  5       S   S:X  a.  UR                  5       n[        S[        R                  " U5      S9eUR                  5       S   n[        R.                  " SUR                  [        R                  " U5      R1                  S5      [        R2                  " SSS 9S!9$ U
R                  UUUS"9I Sh  vN $  GNS GN
 GN GN GN
 N N7f)#j
Implemented for azure dall-e-2 image gen calls

Alternative to needing a custom transport implementation
Nr        @      @r   connect)llm_providerparamsimages/generationsz2023-06-01-previewz2023-07-01-previewz2023-08-01-previewz2023-09-01-previewz2023-10-01-preview!/openai/images/generations:submitoriginal_urlnew_pathr   urlrq   r   operation-locationr   re   r%  r   x   status%Expected 'status' in response. Got={}	succeededfailed  Operation polling timed out.retry-after
   r-  r:   resultrr   utf-8POSThttps://api.openai.com/v1methodr%  r<   r   r2   requestr%  ry   r   )r?   floatr   httpxTimeoutr   r   AZUREr   r]   r~   ry   rz   r   r"   r   r\   areadtimer   rG   r   sleepResponseencodeRequest)r+   r   r   r   r   r   rq   r   _params_httpx_timeoutasync_handlerr   operation_location_urltimeout_secs
start_time
error_datar2  s                    r,   make_async_azure_httpx_request2AzureChatCompletion.make_async_azure_httpx_request  s     >G"gu--GS1I1I%*]]7%;N)7I&%*]]5#%N	"2)//M
 #M !H, "%0SH HH +//ZZ% 0  H
 $x'7'77)1)9)9:N)O&&3NN*..* /  H
 ..""" #LJx}}.;BB8==?S  --/(+3JJ99;+l:*$'1O  mmC(8(8(<(<](K(Qr$RSSS!.!2!2.# "3 "  nn&&& --/(+3JJ }}x(H4%]]_
&3

:@VWW]]_X.F>> ((

6*11':V9TU	  #'' ( 
 
 	
_
 # T '
s   CL;L(AL;!L+"L;9L.:CL;L1L;*L4+L;L7L; CL;#L9$L;+L;.L;1L;4L;7L;9L;c           
         Uc  0 nUbE  [        U[        5      (       d  [        U[        5      (       a  [        R                  " U5      n	XS'   O[        R                  " SSS9US'   [        S#0 UDS[        R                  0D6n
OUn
SU;   GaU  US;   GaN  [        US	S
9nUR                  SS5        U
R                  U[        R                  " U5      US9nSUR                  ;   a  UR                  S   nO[        SUR                  S9eU
R!                  UUS9nUR#                  5         Sn[$        R$                  " 5       nSUR                  5       ;  a(  ['        SR)                  UR                  5       5      5      eUR                  5       S   S;  a  [$        R$                  " 5       U-
  U:  a
  [        SSS9e[$        R*                  " [        UR                  R!                  S5      =(       d    S5      5        U
R!                  UUS9nUR#                  5         UR                  5       S   S;  a  M  UR                  5       S   S:X  a.  UR                  5       n[        S[        R                  " U5      S9eUR                  5       S   n[        R,                  " SUR                  [        R                  " U5      R/                  S5      [        R0                  " SSS 9S!9$ U
R                  UUUS"9$ )$r  Nr   r  r  r  r   r  r  r   r!  r   r$  r&  r   re   r'  r(  r)  r*  r+  r.  r/  r0  r1  r-  r:   r2  rr   r3  r4  r5  r6  r8  r:  r)   )r?   r;  r   r<  r=  r   rA   r   r   r]   r~   ry   rz   r   r"   r   r\   readr@  r   rG   rA  rB  rC  rD  )r+   r   r   r   r   r   rq   r   rE  rF  sync_handlerr   rH  rI  rJ  rK  r2  s                    r,   make_sync_azure_httpx_request1AzureChatCompletion.make_sync_azure_httpx_request  s    >G"gu--GS1I1I%*]]7%;N)7I&%*]]5#%N	"&PP9O9OPL!L !H, "%0SH HH $((ZZ% ) H
 $x'7'77)1)9)9:N)O&&3NN#''* ( H
 MMO #LJx}}.;BB8==?S  --/(+3JJ99;+l:*$'1O  

3x//33MBHbIJ'++.# ,   --/(+3JJ }}x(H4%]]_
&3

:@VWW]]_X.F>> ((

6*11':V9TU	     ! 
 	
r/   c                     UR                  SS5      nUR                  S5      (       a  UR                  S5      nUR                  SS5      nUc  SnSU;   a  UnOUS-   U-   nUS-  nUSU-   -  nU$ )NrZ    rj   r   z/openai/deployments/z/images/generationsz?api-version=)r\   r   rstrip)r+   rX   r   r   r   base_url_with_deployments         r,   create_azure_base_url)AzureChatCompletion.create_azure_base_urlx  s     ,//b
 S!!s+H.22="E=E!X-'/$'/2H'H5'P$ $99  Ok$AA ''r/   c
           
        #    S n
 UR                  SS5      nUR                  S5      (       a  UR                  S5      nUR                  SS5      nU R                  X1R                  SS5      S9nUR	                  US   UUUUS.S	9  U R                  S U	UUUUUS
9I S h  vN nUR                  5       n
U
nUR                  UUSU0US9  [        UUSS9$  N5! [         a$  nUR                  UUSU0[        U5      S9  UeS nAff = f7f)Nr   rT  rj   r   r   rX   r   promptr   r   r   r   r   r   r   r   r   rq   r   r   r   image_generationr   r   r
  )r\   r   rU  rW  r   rL  ry   r   r   r   r@   )r+   rq   r   rX   r   r   r   r   r   r   r   r   r   img_gen_api_basehttpx_responser   r   s                    r,   aimage_generation%AzureChatCompletion.aimage_generation  st     $(6	/33BH   %%#??3/266}bIK#99$7xxQS?T  :  
   8n+/ 0&! !  483V3V)' 4W 4 .N &**,H#+ !!!6 ="6	 "  4 4&40 '.0  	!!!6 ="%a&	 "  G	s;   D	BC  C!4C D	C 
D"DDD	r[  c                     U(       a  [        U5      S:  a  UnOS nU
b1  UR                  SS 5      b  UR                  S5      U
R                  S'   XaS.UEnUR                  SS5      n[	        U[
        5      (       d
  [        SSS	9eU	UUUUS
.n[        US9nUb  UUS'   O)Ub&  UR                  S5      (       a  [        U5      nUUS'   USL a  U R                  U[        XJX|UX%S9	$ U R                  UUR                  SS5      S9nUR                  US   UUUUS.S9  U R                  S UUU	=(       d    SU=(       d    SUUS9nUR                  5       nUR!                  UUSU0US9  [#        UU
SS9$ ! [         a  nUeS nAf[$         a;  n['        USS 5      nUb  [        U[)        U5      S	9e[        S[)        U5      S	9eS nAff = f)Nr   
base_modelr   r   r[  r   r   rd   r   re   r  r   r   r   r_   T)	rq   r   r   r   r   r   rX   r   r   rT  rZ  r[  r\  r   r]  r   r   r^  r_  r<   r   )lenr\   r]   _hidden_paramsr?   r   r"   r^   r   r   rb  r   rW  r   rQ  ry   r   r   r   r   r@   )r+   r[  r   r8   r   r   r   r   r   r   r   r_   r   aimg_generationrq   r   rX   r`  ra  r   r   
error_codes                         r,   r^  $AzureChatCompletion.image_generation  sq    T	HUa *#''d;G9H9L9L :--g6 #HHD((=!4Kk3//& #-I   +"*$)*"# #D$7# "18#I.+!,,W55%A.%QN8F#$45$&--4uR]  GN  sF  PW-  i  i#99$7txxQS?T  :  
   8n+/ 0&! !  .2-O-O)'-22 .P .N &**,H !!!6 ="*	 "  4Hdr  CU  V  V 	G 	H M48J%&:s1vNN&3AGG	Hs+   C%E6 (BE6 6
G
 FG
6GG
voiceorganizationaspeechc                    UR                  SS5      n	Ub  USL a  U R                  UUUUUUUUU	U
US9$ U R                  UUUUUU	U
USS9	nUR                  R                  R
                  " S	UUUS.UD6n[        UR                  S9$ )
Nr   r   T)r   r   rl  r8   r   r   r   r_   r   r   r   r   	r   r   r   r_   r   r   r   r   r   r   rl  r   r   r)   )r]   async_audio_speechr   audiospeechr   r   r   )r+   r   r   rl  r8   r   r   r   rm  r   r   r_   rn  r   r   r   s                   r,   audio_speech AzureChatCompletion.audio_speech9  s    " &))-;7d?** /!'-' +   %)$?$?#)# %@ 
%
  %%,,33 

 	
 *83D3DEEr/   c                    #    U R                  UUUUUU	U
USS9	nUR                  R                  R                  " SUUUS.UD6I S h  vN n[	        UR
                  S9$  N7f)Nr   rp  rq  rr  r)   )r   rt  ru  r   r   r   )r+   r   r   rl  r8   r   r   r   r_   r   r   r   r   azure_responses                 r,   rs  &AzureChatCompletion.async_audio_speecho  s      *.)D)D#)# *E 
*
  ,1188??  
 
 	 
 
 *>3J3JKK
s   AA!AA!modec
                    [         R                  =(       d    [        R                  " 5       n
SU;   a0  UR	                  S5      (       d  US-  nX1 -  n[        UUUUU
S9nS nO![        UUUUU
S9nUc  US:w  a  [        S5      eS nUc  SSS	./n UR                  R                  R                  R                  UUS
9n0 nUb  [        US5      (       d  [        S5      eUR                  R                  SS 5      b  UR                  S   US'   UR                  R                  SS 5      b  UR                  S   US'   UR                  R                  SS 5      b  UR                  S   US'   U$ ! [         a  nUeS nAff = f)Nr   rj   r[   r   r   r   r   r   rZ   r   r   r   r^  model is not setuserHey)r1   r2   r   r   invalid completion responsex-ratelimit-remaining-requestsx-ratelimit-remaining-tokensx-ms-region)rA   r   r<  Clientr   r   r   r   r   r   r   r   r   r\   )r+   r   r   r   r   r   r{  r   r   r[  r   r   r   r   r   s                  r,   get_headersAzureChatCompletion.get_headers  s    !//A5<<>&(2$$S))C'"H !'*F E !''*F });!; 233
!'E:;H	00BBII! J J WZ%C%C9:: ""#CTJV9C9K9K0:H56 !!"@$GS7A7I7I.8H34 !!-6B&0&8&8&GH]#-  	G	s   .E. .
E?8E::E?c
                   #    [         R                  =(       d!    [        [        R                  S9R
                  n
SU;   a0  UR                  S5      (       d  US-  nX1 -  n[        UUUUU
S9nS nO![        UUUUU
S9nUc  US:w  a  [        S5      eS nUS:X  a.  UR                  R                  R                  UU	S	9I S h  vN nGOUS
:X  aF  Uc  [        S5      eUR                  R                  R                  R                  UUS9I S h  vN nGOUS:X  a<  Uc  [        S5      eUR                  R                  R                  UUS9I S h  vN nGOgUS:X  a<  U	c  [        S5      eUR                  R                  R                  UU	S	9I S h  vN nGO%US:X  a  [         R"                  R%                  [         R"                  R'                  [(        5      5      n[         R"                  R+                  US5      n[-        US5      nUR.                  R0                  R                  R                  UUU	S9I S h  vN nO{US:X  a8  UR.                  R2                  R                  R                  UU	SS9I S h  vN nO=US:X  a,  UR4                  R                  R7                  SS9I S h  vN nO[        S5      e0 nUb  [9        US5      (       d  [        S5      eUR:                  R=                  SS 5      b  UR:                  S   US'   UR:                  R=                  SS 5      b  UR:                  S   US'   UR:                  R=                  S S 5      b  UR:                  S    US '   U$  GN GNc GN$ GN GN= GN N7f)!N)r  r   rj   r}  r~  r^  r  r   rf  r   zmessages is not setr   r	  zinput is not setr  zprompt is not setaudio_transcriptionz../../../tests/gettysburg.wavrb)filer   r[  rv  alloy)r   r   rl  batchr!   )limitzmode not setr   r  r  r  r  )rA   r   r   r   r>  r   r   r
   r   r   r   r   r   r  imagesgeneraterw   pathdirnamerealpath__file__joinopenrt  transcriptionsru  batchesrD   r   r   r\   )r+   r   r   r   r   r   r{  r   r   r[  r   r   r   pwd	file_path
audio_filer   s                    r,   ahealth_check!AzureChatCompletion.ahealth_check  s     ## N%<3E3EFMM 	
 '(2$$S))C'"H%!'*F E &''*F });!; 233
<%11CCJJ  K   J V^ 566%{{66HHOO!  P   J [ } 233%00BBII  J   J ''~ 344%}}>>GG  H   J **''//"''"2"28"<=C4I i.J%||::LLSS  T   J
 ^#%||22DDKK  L   J
 W_%~~??DD1DMMJN++WZ%C%C9:: ""#CTJV9C9K9K0:H56 !!"@$GS7A7I7I.8H34 !!-6B&0&8&8&GH]#I Ns   B?NM-ANM0ANM3ANM6B*N<M9==N:M<;1N,M?-CN0N3N6N9N<N?N)r  rO   )FNNNNNNN)NNNNNN)NNNNNNNNr(   )2rQ   rR   rS   rT   r-   r   r   r@   r   r	   r;  r<  r=  r   r   r   r   rV   r   r
   r   rD   r   boolr   LiteLLMLoggingObjr   r   r   r   r   r  r	  r   rB  rL  r   rQ  rW  rA   r   rb  r^  r   rv  rs  r  r  rW   __classcell__r   s   @r,   r   r      s	   
)c]) 3-) #	)
 !) ) ) uemm+,) ) _-)V!  uemm+,	,&  uemm+,	N ""&'MM M &	M
 M M M M M M  M uemm+,M 'M" #M$ $%Mt )-9=rHrH rH 	rH
 rH rH rH rH &rH 'rH !rH )1rH| )-B B 	B
 B B B B B !B\ )-L&L L 	L
 L L L L L !Lj "&-1-- *- "	-
 - '- #- )*-r "&(,%)"&cc c 	c
 c c 'c *c c #c !c c]c $c  
!cJe
)*e
 %u}} 456e
 	e

 e
 e
 e
 e
 
e
Na
%a
 %u}} 456a
 	a

 a
 a
 a
 a
 
a
F(#'(08(	(> CC &C "	C
 C C 'C C 
		CX  $!%"&%)26(,dHdH dH 	dH
 'dH dH }dH #dH 3-dH c]dH !/dH !dH 
dHd )-"&4F4F 4F 	4F
 4F #4F 3-4F c]4F sm4F 4F uemm+,4F !4F $4F 
$4FD "L"L "L 	"L
 "L #"L 3-"L c]"L !"L "L uemm+,"L 
$"LX $( $ $G}G G 	G
 G G G 4.G ~G G 
Gb $( $ $s}s #s 	s
 c]s s s 4.s ~s s 
s sr/   r   c                     ^  \ rS rSrSrSU 4S jjr   SS\\   S\\   S\\	\
R                  4   S\\   S	\\   S
\\\\4      S\S\\\\4      4S jjrS\S\S\4S jr SS\S\S\\   S\\   S	\\   S\\	\
R                  4   S\\   S
\\\\4      S\\\\\\4   4   4S jjrS\S
\S\4S jr SS\S\S\\   S\\   S	\\   S\\	\
R                  4   S\\   S
\\   4S jjr SS\S\S\\   S\\   S\\	\
R                  4   S\\   S\\   S
\\   4S jjr  SS
\S\\   S\\   4S jjr   S S\S\\   S\\   S	\\   S\\	\
R                  4   S\\   S\\   S\\   S
\\   4S jjrSrU =r$ )!AzureBatchesAPIiR  zj
Azure methods to support for batches
- create_batch()
- retrieve_batch()
- cancel_batch()
- list_batch()
rP   c                 "   > [         TU ]  5         g r(   r   r   s    r,   r-   AzureBatchesAPI.__init__[  r   r/   r   r   r   r   r   r   	_is_asyncc                 (   [        5       nS n	Uc  0 n
UR                  5        H1  u  pUS:X  d  US:X  d  US:X  a  M  US:X  a	  Ub  XS'   M(  Uc  M-  XU'   M3     SU
;  a  [        R                  U
S'   USL a  [	        S0 U
D6n	U	$ [        S0 U
D6n	 U	$ Un	U	$ )	Nr+   r   r  r   rZ   r   Tr)   )localsr>   rA   AZURE_DEFAULT_API_VERSIONr
   r   )r+   r   r   r   r   r   r   r  received_argsopenai_clientrq   r   r   s                r,   get_azure_openai_client'AzureBatchesAPI.get_azure_openai_client^  s     HL>D%++-;!x-13C*_-.)*]G . D(&-&G&G]#D  0 84 8 	 !, 3d 3  #Mr/   create_batch_datar   c                 Z   #    UR                   R                  " S0 UD6I S h  vN nU$  N7fNr)   )r  r   )r+   r  r   r   s       r,   acreate_batchAzureBatchesAPI.acreate_batch~  s/     
 &--44I7HII J    +)+c	           
          U R                  UUUUUUUS9n	U	c  [        S5      eUSL a/  [        U	[        5      (       d  [        S5      eU R	                  X)S9$ U	R
                  R                  " S0 UD6n
U
$ )N)r   r   r   r   r   r   r  jOpenAI client is not initialized. Make sure api_key is passed or OPENAI_API_KEY is set in the environment.T\OpenAI client is not an instance of AsyncOpenAI. Make sure you passed an AsyncOpenAI client.)r  r   r)   )r  
ValueErrorr?   r
   r  r  r   )r+   r  r  r   r   r   r   r   r   r   r   s              r,   create_batchAzureBatchesAPI.create_batch  s     ((!''# )  	 |  l,<== r  %%"3 &    ''..C1BCr/   retrieve_batch_datac                 Z   #    UR                   R                  " S0 UD6I S h  vN nU$  N7fr  )r  retrieve)r+   r  r   r   s       r,   aretrieve_batchAzureBatchesAPI.aretrieve_batch  s-     
  00G3FGG Hr  c	           
          U R                  UUUUUUUS9n	U	c  [        S5      eUSL a/  [        U	[        5      (       d  [        S5      eU R	                  X)S9$ U	R
                  R                  " S0 UD6n
U
$ )N)r   r   r   r   r   r   r  r  Tr  )r  r   r)   )r  r  r?   r
   r  r  r  )r+   r  r  r   r   r   r   r   r   r   r   s              r,   retrieve_batchAzureBatchesAPI.retrieve_batch  s     ((!''# )  	 |  l,<== r  ''$7 (    ''00G3FGr/   cancel_batch_datarm  c	           	          U R                  UUUUUUS9n	U	c  [        S5      eU	R                  R                  " S0 UD6n
U
$ )N)r   r   r   r   r   r  r  r)   )r  r  r  cancel)r+   r  r  r   r   r   r   rm  r   r   r   s              r,   cancel_batchAzureBatchesAPI.cancel_batch  sg     ((!'# )  	 |   ''..C1BCr/   afterr  c                 T   #    UR                   R                  X#S9I S h  vN nU$  N7f)Nr  r  )r  rD   )r+   r   r  r  r   s        r,   alist_batchesAzureBatchesAPI.alist_batches  s,       ,,5,FF Gs   (&(c
           
          U R                  UUUUUU	US9n
U
c  [        S5      eUSL a0  [        U
[        5      (       d  [        S5      eU R	                  XUS9$ U
R
                  R                  XxS9nU$ )N)r   r   r   r   r   r   r  r  Tr  )r   r  r  r  )r  r  r?   r
   r  r  rD   )r+   r  r   r   r   r   r   r  r  r   r   r   s               r,   list_batchesAzureBatchesAPI.list_batches  s     ((!''# )  	 |  l,<== r  %%# &    '',,5,Fr/   r)   rO   )NNFr(   r  r  ) rQ   rR   rS   rT   rU   r-   r   r@   r	   r;  r<  r=  r   r   r
   r  r  r   r   r  r   r   r  r   r  r  r   r  r  r  rW   r  r  s   @r,   r  r  R  sT    &*AE# 3- uemm+,	
 c] c] {,<<=>  
%%556	7@- ' 
	" BF$$ .$ #	$
 3-$ c]$ uemm+,$ c]$ {,<<=>$ 
uiS%00	1$L1 ! 
	" )-$$ 2$ #	$
 3-$ c]$ uemm+,$ c]$ %$^ )- . #	
 3- uemm+, c] sm %>  $#	  } }	"  $#(,%% #% 3-	%
 c]% uemm+,% c]% }% }% %% %r/   r  )9r   ry   rw   r@  typingr   r   r   r   r   r   r	   r<  openair
   r   rA   litellm.caching.cachingr   *litellm.litellm_core_utils.litellm_loggingr   r  &litellm.llms.custom_httpx.http_handlerr   r   r   litellm.types.utilsr   r   r   r   litellm.utilsr   r   r   r   types.llms.openair   r   r   r   r   baser    common_utilsr"   r#   r{   r%   rV   r^   r@   r   r  r   r   r  r)   r/   r,   <module>r     s      	  K K K  0  - S 
     A; ;|4 (H' H'V5.>!>?@ 
*q' qh+Rg Rr/   