
    AHj                     d   d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	m
Z
 d dlZd dlmZmZmZmZm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mZ d dlm Z m!Z!m"Z"m#Z# d d	l$m%Z%m&Z&m'Z' d
dl(m)Z) ddl*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3  G d d      Z4de5de	e
eef      de6fdZ7 G d de.e+      Z8y)    N)AnyCallable	CoroutineDictListOptionalUnion)APITimeoutErrorAsyncAzureOpenAIAsyncOpenAIAzureOpenAIOpenAI)AZURE_OPERATION_POLLING_TIMEOUTDEFAULT_MAX_RETRIES)Logging)track_llm_api_timing)AsyncHTTPHandlerHTTPHandlerget_async_httpx_client)EmbeddingResponseImageResponseLlmProvidersModelResponse)CustomStreamWrapper convert_to_model_response_object
modify_url   )HttpxBinaryResponseContent   )BaseLLM   )AzureOpenAIErrorBaseAzureLLMget_azure_ad_token_from_oidcprocess_azure_headers!select_azure_base_url_or_endpoint)!get_azure_image_generation_configc                   2    e Zd ZdZ	 	 ddZd ZdedefdZy)	AzureOpenAIAssistantsAPIConfigz
    Reference: https://learn.microsoft.com/en-us/azure/ai-services/openai/assistants-reference-messages?tabs=python#create-message
    Nc                      y N selfs    P/root/tools/cai/cai_env/lib/python3.12/site-packages/litellm/llms/azure/azure.py__init__z'AzureOpenAIAssistantsAPIConfig.__init__5   s     	    c                 
    g dS )N)rolecontentattachmentsmetadatar,   r-   s    r/   *get_supported_openai_create_message_paramszIAzureOpenAIAssistantsAPIConfig.get_supported_openai_create_message_params:   s    
 	
r1   non_default_paramsoptional_paramsc                 B   |j                         D ]
  \  }}|dk(  r||d<   |dk(  r||d<   |dk(  r7t        |t              r||d<   7t        j                  j                  dd      |dk(  s^g }t        |t              rc|D ]]  }d|v r|j                  |d          t        j                  d	u r/t        j                  j                  d
j                  |      d       t        j                  j                  dj                  t        |      |      d       |S )Nr3   r6   r4   z'Azure only accepts content as a string.  )messagestatus_coder5   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.   r8   r9   paramvaluefile_idsitems          r/   'map_openai_params_create_message_paramszFAzureOpenAIAssistantsAPIConfig.map_openai_params_create_message_paramsB   sX    /446 %	LE5*/'
".3
+)#eS)16OI.!-->> I$' ?  
 &&(eT* % "$,$OODO<&22d: $&-mm&J&J -C  -J  -J(--& 14	 'K '" !"" "-->> y  !A  !A K! %(	 ?  A%	L r1   returnN)__name__
__module____qualname____doc__r0   r7   dictrN   r,   r1   r/   r)   r)   0   s.    	

)"&)9=)r1   r)   azure_client_paramsazure_clientrP   c                     |ydg}| j                         D ]'  \  }}||v s|dk(  s|||j                  d   k7  s' y y)z
    Returns True if user passed in client params != initialized azure client

    Currently only implemented for api version
    Tapi_versionzapi-versionF)r?   _custom_query)rV   rW   dynamic_paramskvs        r/   _check_dynamic_azure_paramsr^   n   s^     #_N#))+ 11#5}l&@&@&O!O
 r1   c            $           e Zd Zd1 fdZdeeef   dedeee	j                  f   fdZ e       deeef   dedeee	j                  f   defd	       Z	 	 	 d2d
edededee   dedededee   dee   dededeee	j                  f   dededee   fdZddddi fdee   ded
ededededededededee   dee   dee   dee   fdZdddi fdedee   dededed
edededee   dee   dee   fdZdddi fdededee   dededed
edededee   dee   dee   fdZdddddddi fd
ededededededee   dee   dee   deeee	j                  f      dee   dee   dee   dee   defd Z	 	 	 	 	 	 	 	 d3d
ededededededed!edee   dee   dee   dee   dee   dee   deeeeeef   f   fd"Z dee!   deeee	j                  f      dededededede	jD                  fd#Z#dee$   deeee	j                  f      dededededede	jD                  fd$Z%d%ed
ee   defd&Z&	 	 	 d4dedee'   d%ededededed
ee   de'fd'Z(	 	 	 	 	 	 	 	 	 	 d5d(eded!ededed
ee   dee   dee   dee   dee'   dee   dee   dee   de'fd)Z)	 	 	 	 	 d6d
eded*ed!edee   dee   dee   d+ee   dedeee	j                  f   dee   dee   d,ee   dee   de*fd-Z+	 	 d7d
eded*ed!edee   dee   dee   dee   dee   dedeee	j                  f   dee   de*fd.Z,	 	 	 d4d
ee   dedededed/edee   dee   d(ee   defd0Z- xZ.S )8AzureChatCompletionrP   Nc                 "    t         |           y r+   )superr0   )r.   	__class__s    r/   r0   zAzureChatCompletion.__init__   s    r1   rW   datatimeoutc                     	  |j                   j                  j                  j                  di |d|i}t	        |j
                        }|j                         }||fS # t        $ r}|d}~ww xY w)
        Helper to:
        - call chat.completions.create.with_raw_response when litellm.return_response_headers is True
        - call chat.completions.create by default
        re   Nr,   )chatcompletionswith_raw_responsecreaterU   headersparse	Exception)r.   rW   rd   re   raw_responserl   responsees           r/   .make_sync_azure_openai_chat_completion_requestzBAzureChatCompletion.make_sync_azure_openai_chat_completion_request   s{    		Q<,,88JJQQ  'L <//0G#))+HH$$ 	G	s   AA 	A/(A**A/logging_objc                   K   t        j                          }	  |j                  j                  j                  j                  di |d|i d{   }t        |j                        }|j                         }||fS 7 -# t        $ rF}	t        j                          }
t        |
|z
  d      }|	xj                  d| d| dz  c_
        |	d}	~	wt        $ r}	|	d}	~	ww xY ww)rg   re   Nr   z - timeout value=z, time taken=z secondsr,   )timerh   ri   rj   rk   rU   rl   rm   r
   roundr<   rn   )r.   rW   rd   re   rs   
start_timero   rl   rp   rq   end_time
time_deltas               r/   )make_azure_openai_chat_completion_requestz=AzureChatCompletion.make_azure_openai_chat_completion_request   s      YY[
	!W!2!2!>!>!P!P!W!W "" '" L <//0G#))+HH$$  	yy{Hx*4a8JII,WI]:,hWWIG 	G	sG   C7A? A=,A? <C=A? ?	CAC		CCCCmodelmessagesmodel_responseapi_keyapi_baserY   api_typeazure_ad_tokenazure_ad_token_providerr[   print_verboseacompletionrl   c                    |r||d<   	 ||t        dd      |j                  dd       }|t        }|j                  dd      }|(d|v r$| j                  ||||||||	|||	      }d |d
|}nyt        j
                  j                  |      r-t	        j
                         j                  |||||xs i       }n,t	        j                         j                  |||||xs i       }|du rP|j                  dd      r| j                  |||
||||||	||||      S | j                  ||||||||	|
||||||      S d|v r%|d   du r| j                  |||
||||||	||||      S |j                  ||||d|||d       t        |t              st        dd      | j!                  |||||d|      }t        |t"        t$        f      st        dd      | j'                  |||      \  }}t        |t(              rt        dd|d d        |j+                         }|j-                  ||||||d       t/        ||||      S # t         $ r}|d }~wt0        $ rb}t3        |dd      }t3        |dd       }t3        |dd       }t3        |d d       }||rt3        |dd       }t        |t)        |      ||!      d }~ww xY w)"Nextra_headers  zMissing model or messagesr=   r<   max_retries	json_modeFgateway.ai.cloudflare.com)r   r{   rY   r   re   r~   r   r   r   clientlitellm_paramsr{   r|   )r{   )r{   r|   r9   r   rl   Tstream)rs   r   r[   rd   r{   r~   rY   r   r   re   r   r   r   )r   rd   r}   r~   rY   r{   r   r   r[   re   r   rs   r   convert_tool_call_to_json_moder   r~   r   )rl   rY   r   complete_input_dictinputr~   additional_argsmax retries must be an intrY   r   r~   r{   r   	_is_asyncr     8azure_client is not an instance of AzureOpenAI or OpenAIrW   rd   re   'Unexpected string response from Azure: )rl   rY   r   r   r~   original_responser   )response_objectmodel_response_objectr   _response_headersr=   rl   rp   bodyr=   r<   rl   r   )r"   popr   ,_init_azure_client_for_cloudflare_ai_gatewayrB   AzureOpenAIGPT5Configis_model_gpt_5_modeltransform_requestAzureOpenAIConfiggetasync_streamingr   	streamingpre_callr@   intget_azure_openai_clientr   r   rr   rA   
model_dump	post_callr   rn   getattr)r.   r{   r|   r}   r~   r   rY   r   r   r   r[   r   re   rs   r9   r   	logger_fnr   rl   r   r   r   rd   rW   rp   stringified_responserq   r=   error_headerserror_response
error_bodys                                  r/   
completionzAzureChatCompletion.completion   s   , /6OO,l	} 0& #-H  *--mTBK"1(7(;(;K(OI #(Cx(OJJ% + +###1,C +!#1 K  "&8OO..CC%CP446HH%$3#1#Mr I  002DD%$3#1#Mr E  d""&&x7//$/!)'5!# '$/'50G '%$/'5 0     ++!)!'5 '$/#'50G'5 '%$/$/7@'5 ,  " _,1Jd1R~~ +%#1# +#1,C#! +#1 &  " $$"# (/.<$ (3$,/3% %  "+s3*$'1M   $;; +%#!##1  <   ",f0EF*$' Z 
 %)$W$W!-D' %X %! h,*$'"I(SWTW.IY Z  (0':':'<$%%"#&:#*'2$,%	 & 	 8$8*83<&-	    	G 	!!]C8K#Ay$7M$Q
D9N FD1J$ '	4 H"'A%	 	s8   DI I =(I &C%I 	KIK#AK  Kr   r   r   c           	        K   d }	 | j                  |||||d|      }t        |t        t        f      st	        d      |	j                  |d   |j                  ||d|d|d       | j                  ||||	       d {   \  }}||	j                  d	<   t        |t              rt        d
d|d d
        |j                         }|	j                  |d   ||d|i       t        ||d|i||      S 7 u# t        $ r*}|	j                  |d   |d|it        |             |d }~wt        j                  $ r>}|	j                  |d   |d|it        |             t        d
t        |            d }~wt         $ rg}t#        |dt        |            }t#        |dd       }|	j                  |d   |d|it        |             t%        |d      r|t        d
||      d }~ww xY ww)NTr   BAzure client is not an instance of AsyncAzureOpenAI or AsyncOpenAIr|   r   rl   r   r   r   r   rW   rd   re   rs   response_headersr   r   r   r   r   rl   )r   r   hidden_paramsr   r   r   r~   r   r   r<   r   r=   r=   r<   r   )r   r@   r   r   
ValueErrorr   r~   rz   model_call_detailsrA   r"   r   r   r   asyncioCancelledErrorrn   r   hasattr)r.   r~   rY   r{   r   rd   re   r[   r}   rs   r   r   r   r   r   r   rp   rW   rl   r   rq   r<   r   s                          r/   r   zAzureChatCompletion.acompletion  s    $ Y	T77'!- 8 L l-={,KL X    :&$,, $+*8  !)#'+/! !  '+&T&T)'	 'U ' !GX BIK**+=>(C(& #EhtPSnEUV  $,#6#6#8 !!:&"6!6 =	 "  4 4&4('2")/M +!8   	!!:&!6 ="%a&	 "  G%% 	D!!:&!6 ="%a&	 "  #sCFCC 	TaCF3G1fd+D!!:&!6 ="%a&	 "  q-(&3dSS	TsU   G+A:C8  C6A4C8 5G+6C8 8	G(%D&&G(<9E55G(A"G##G((G+c           
         |||t         j                  |	|d}t        |      }|||d<   n+|
"|
j                  d      rt	        |
      }
|
|d<   n|||d<   | j                  |||||d|      }t        |t        t        f      st        d	d
      |j                  |d   |j                  ||
d|d|d       | j                  |||      \  }}t        ||d||j                  dd       t        |            }|S )N)rY   azure_endpointazure_deploymenthttp_clientr   re   )rV   r~   zoidc/r   r   Fr   r   r   r   r|   r   Tr   r   r   azurestream_optionscompletion_streamr{   custom_llm_providerrs   r   r   )rB   client_sessionr&   
startswithr$   r   r@   r   r   r"   r   r~   rr   r   r   r%   )r.   rs   r   r~   rY   r[   rd   r{   re   r   r   r   r   r   rV   rW   rl   rp   streamwrappers                      r/   r   zAzureChatCompletion.streaming  sp   $ '& %"11&
 @ 3
 -4	*'((1!=n!M4B 01$0=T 9:33#) 4 
 ,f(=>"R 
 	z" ((  '&4 %#'+ 	 	
 !OO%D' P 
 ,& '#88$4d;3G<
 r1   c           
      n  K   	 | j                  |||||d|      }t        |t        t        f      st	        d      |j                  |d   |j                  ||
d|d|d       | j                  ||||       d {   \  }}||j                  d	<   t        ||d
||j                  dd       |      }|S 7 9# t        $ ro}t        |dd      }t        |dd       }t        |dd       }t        |dt        |            }t        |dd       }||rt        |dd       }t        ||||      d }~ww xY ww)NTr   r   r|   r   r   r   r   r   r   r   r   r=   r   rl   rp   r<   r   r   )r   r@   r   r   r   r   r~   rz   r   r   r   rn   r   rA   r"   )r.   rs   r   r~   rY   r[   rd   r{   re   r   r   r   r   r   rW   rl   rp   r   rq   r=   r   r   r<   r   s                           r/   r   z#AzureChatCompletion.async_streaming=  s     =	77'!- 8 L l-={,KL X 
   :&$,, $+*8  !)#'+/! !  '+&T&T)'	 'U ' !GX BIK**+=> 0"*$+'#xx(8$?")M ! #!$  	!!]C8K#Ay$7M$Q
D9NaCF3G FD1J$ '	4 H"'%	 	s<   D5A:B: >B8?8B: 7D58B: :	D2A*D--D22D5r   r   c           	      F  K   d }	 | j                  ||||d|	|      }t        |t        t        f      st	        d       |j
                  j                  j                  di |d|
i d {   }t        |j                        }	 |j                         }t        |t              r!t        |j                  xs dd|d d        |j!                         }|j#                  ||d	|i|
       t%        ||d|it'        |      d      }t        |t(              st        dd      |S 7 # t        j                  $ r-}t        |j                  xs ddt        |             |d }~ww xY w# t*        $ r'}|j#                  ||d	|it        |      
       |d }~ww xY ww)NTrY   r   r~   r{   r   r   r   r   re   r   z.Failed to parse raw Azure embedding response: r   r   r   r   rl   	embedding)r   r   r   r   response_typez:embedding_response is not an instance of EmbeddingResponser,   )r   r@   r   r   r   
embeddingsrj   rk   rU   rl   rm   jsonJSONDecodeErrorr"   r=   rA   r   r   r   r%   r   rn   )r.   r{   rd   r}   r   rs   r   r~   rY   r   re   r   r   r   r   rp   openai_aclientro   rl   
json_errorr   embedding_responserq   s                          r/   
aembeddingzAzureChatCompletion.aembedding  s    " J	!99'!- : N n/?.MN X  "T!:!:!L!L!S!S "" '" L <//0G"'--/ (C(& , 8 8 ?CEhtPSnEUV  $,#6#6#8  !!!6 ="6	 "  "B 4&4('2"7"@)" 02CD& #X  &%e& '' "& , 8 8 ?CLSQ[_L]^ """@  	!!!6 ="%a&	 "  G	s`   F!A&E. ,D)-E. D+ BE. (F!)E. +E+>(E&&E++E. .	F7"FFF!r9   c                    |r||d<   | j                   | j                         | _         	 ||d|}|t        j                  }|j	                  ||	||	|
dd       |du r| j                  |||||	|||||
      S | j                  |||	|d||	      }t        |t        t        f      st        d
d       |j                  j                  j                  di |d|i}t        |j                        }|j!                         }t        |t"              r!t        |j$                  xs d
d|d d
        |j'                  ||	||d|       t)        |j+                         |dt-        |            S # t        $ r}|d }~wt.        $ rb}t1        |dd
      }t1        |dd       }t1        |dd       }t#        |      }||rt1        |dd       }|j2                  }t        |||      d }~ww xY w)Nr   )r{   r   r   )r   rl   r   T)
rd   r   r{   rs   r~   r}   re   r   r   r   Fr   r   r   r   re   r   )r   r   r   r   )r   r   r   r   r=   rl   rp   )r=   r<   rl   r,   )_client_sessioncreate_client_sessionrB   r   r   r   r   r@   r   r   r"   r   rj   rk   rU   rl   rm   rA   r=   r   r   r   r%   rn   r   text)r.   r{   r   r   rY   re   rs   r}   r9   r~   r   r   r   r   r   rl   r   rd   rW   ro   rp   rq   r=   r   r   
error_texts                             r/   r   zAzureChatCompletion.embedding  sq   & /6OO,'#'#=#=#?D H	"UFoFD"%99  +/+2nU! !  T! +##1#!#1% '    77'!- 8 L l[&,AB& #V  L<22DDKKddd\cdL<//0G#))+H(C(& , 8 8 ?CEhtPSnEUV 
 !!8<( S"*	 "  4HDWDWDYq  P[  oD  EL  oM  N  N 	G 
	!!]C8K#Ay$7M$Q
D9NQJ$ '	4 H+00
"'] 
	s,   AE5 <C8E5 5	G.>F  G.AG))G.c           	        K   |ui }|;t        |t              st        |t              r5t        j                  |      }	|	|d<   nt        j                  dd      |d<   t        t        j                  |      }
n|}
d|v r|dv rt        |d	
      }|j                  dd       |
j                  |t        j                  |      |       d{   }d|j                  v r|j                  d   }nt        d|j                        |
j!                  ||       d{   }|j#                          d{    t$        }t'        j&                         }d|j                         vr(t)        dj+                  |j                                     |j                         d   dvrt'        j&                         |z
  |kD  rt        dd      t-        j.                  t        |j                  j!                  d      xs d             d{    |
j!                  ||       d{   }|j#                          d{    |j                         d   dvr|j                         d   dk(  rg|j                         }|j!                  d|      }t        |t0              r|j!                  dd      nt        j                  |      }t        d||      |j                         d   }t        j2                  d|j                  t        j                  |      j5                  d       t        j6                  d!d"#      $      S |
j                  |||%       d{   S 7 7 B7 -7 ]7 E7 07 w)&
        Implemented for azure dall-e-2 image gen calls

        Alternative to needing a custom transport implementation
        Nre        @      @re   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{   urlrd   rl   operation-locationr   r   r   rl   status%Expected 'status' in response. Got={}	succeededfailed  Operation polling timed out.retry-after
   r   errorr<   Image generation failedr;   r   result   utf-8POSThttps://api.openai.com/v1methodr   r=   rl   r4   requestr   r   rl   )r@   floatr   httpxTimeoutr   r   AZUREr   r   postr   dumpsrl   r"   r   r   areadr   ru   rn   rH   r   sleeprU   ResponseencodeRequest)r.   r   re   r   rY   r~   rd   rl   _params_httpx_timeoutasync_handlerrp   operation_location_urltimeout_secsrw   
error_data_error_body
_error_msgr   s                      r/   make_async_azure_httpx_requestz2AzureChatCompletion.make_async_azure_httpx_requestK  sV     >G"gu-GS1I%*]]7%;N)7GI&%*]]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%]]_
 )nnWjA "+t4  OOI/HIJ/ 
 ' #&#  ]]_X.F>> ((

6*11':V9TU	  #'' ( 
 
 	
w
 # T '4
s   CM2MAM2M! M27M$8CM2
M'M2%M*&M2=M->M2DM2M0M2!M2$M2'M2*M2-M20M2c           	      L   |wi }|;t        |t              st        |t              r5t        j                  |      }	|	|d<   nt        j                  dd      |d<   t        d&i |dt        j                  i}
n|}
d|v r|dv rt        |d	
      }|j                  dd       |
j                  |t        j                  |      |      }d|j                  v r|j                  d   }nt        d|j                        |
j!                  ||      }|j#                          t$        }t'        j&                         }d|j                         vr(t)        dj+                  |j                                     |j                         d   dvrt'        j&                         |z
  |kD  rt        dd      t'        j,                  t        |j                  j!                  d      xs d             |
j!                  ||      }|j#                          |j                         d   dvr|j                         d   dk(  rg|j                         }|j!                  d|      }t        |t.              r|j!                  dd      nt        j                  |      }t        d||      |j                         d   }t        j0                  d|j                  t        j                  |      j3                  d       t        j4                  d!d"#      $      S |
j                  |||%      S )'r   Nre   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   r;   r   r   r  r  r  r  r  r  r	  r,   )r@   r
  r   r  r  r   rB   r   r   r   r  r   r  rl   r"   r   r   readr   ru   rn   rH   r  rU   r  r  r  )r.   r   re   r   rY   r~   rd   rl   r  r  sync_handlerrp   r  r  rw   r  r  r  r   s                      r/   make_sync_azure_httpx_requestz1AzureChatCompletion.make_sync_azure_httpx_request  s    >G"gu-GS1I%*]]7%;N)7GI&%*]]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%]]_
 )nnWjA "+t4  OOI/HIJ/ 
 ' #&#  ]]_X.F>> ((

6*11':V9TU	     ! 
 	
r1   rV   c                 (   ddl m} |j                  dd      }|j                  d      r|j	                  d      }|j                  dd      }|d}|j                  |      r|j                  |||      S d|v r|}n|dz   |z   }|d	z  }|d
|z   z  }|S )Nr   )%AzureFoundryFluxImageGenerationConfigr    /rY   )r   r{   rY   z/openai/deployments/z/images/generationsz?api-version=)&litellm.llms.azure_ai.image_generationr#  r   endswithrstripis_flux2_modelget_flux2_image_generation_url)r.   rV   r{   r#  r   rY   base_url_with_deployments          r/   create_azure_base_urlz)AzureChatCompletion.create_azure_base_url,  s    	
 ,//b
 S!s+H.22="E=E 1??F8WW!' X   "X-'/$'/2H'H5'P$ $99  Ok$AA ''r1   c           
        K   d }	 |j                  dd      }|j                  d      r|j                  d      }|j                  dd      }| j                  ||
xs |j                  dd            }|j	                  |d   ||||d	       | j                  d |	|||||
       d {   }t        |j                  dd            }|C|j                  |j                  dd      ||xs
 t               ||||t        j                        S |j                         }|}|j                  ||d|i|       t        ||d      S 7 # t        $ r'}|j                  ||d|it        |             |d }~ww xY ww)Nr   r$  r%  rY   r{   rV   r{   promptr   r   rl   r   r   re   r   rY   r~   rd   rl   zdall-e-2)r{   ro   r}   rs   request_datar9   r   encodingr   r   image_generationr   r   r   )r   r'  r(  r,  r   r  r'   #transform_image_generation_responser   rB   r3  r   r   r   rn   rA   )r.   rd   r}   rV   r~   r   rs   rl   r   re   r{   rp   r   rY   img_gen_api_basehttpx_responseprovider_configr   rq   s                      r/   aimage_generationz%AzureChatCompletion.aimage_generationO  s     $(I	/33BH   %#??3/266}bIK#99$74txx4  :     8n+/ 0&! !  483V3V)' 4W 4 .N @*-O *&JJ((7J7!/#1#D]_ +!%$(#'$-- K 	 	 *..0'/$%%#%:D$A&:	 &  8$8*8"4 I.R  	!!!6 ="%a&	 "  G	sH   E:B#E )E*A#E E:6E E:E 	E7"E22E77E:r/  c                    	 |rt        |      dkD  r|}nd }|
3|1|j                  dd       |j                  dd       |
j                  d<   |j                  di       }i ||}|r|j                  dd       nd }|xs ||d|}|j                  dd      }t	        |t
              st        dd	
      |%|# |       }|r|j                  dd        d| |d<   | j                  |xs i ||xs d|	|d      }|du r| j                  |t        ||
||||||
      S | j                  ||      }|j                  |d   ||||d       | j                  d |||	xs d|xs d||      }|j                         }|j                  ||d|i|       t        ||
d      S # t        $ r}|d }~wt         $ r@}t#        |dd       }|t        |t%        |      
      t        dt%        |      
      d }~ww xY w)Nr   
base_modelr{   
extra_body)r{   r/  r   r   r   r   r   zapi-keyzBearer Authorizationr$  F)r   r~   
model_namerY   r   is_asyncT)
rd   r   rs   r}   r~   r   rV   re   rl   r{   r.  r/  r0  r   r1  r   r   r4  r5  r=   r   )lenr   _hidden_paramsr   r@   r   r"   initialize_azure_sdk_clientr:  r   r,  r   r!  r   r   r   rn   r   rA   )r.   r/  re   r9   rs   rl   r{   r~   r   rY   r}   r   r   r   aimg_generationr   r=  flattened_paramsr<  rd   r   rV   r7  r8  rp   rq   
error_codes                              r/   r4  z$AzureChatCompletion.image_generation  s   $Y	HUa *"."&&|T:F9G9K9K $:--g6
 ),,\2>J@/@Z@ ;I""<6d  (05FWFVWD((=!4Kk3/& #-I  #:#F!8!:!KK	40188H/IGO, 372R2R-3 ;B'! 3S 3 $&--4uR]n|  GN  W]  sF  PW  ah  pu-  v  v  $99$7u  :  
   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+   DF  BF   	G7)F++G77;G22G7voiceorganizationaspeechc                    |j                  dd      }	|"|du r| j                  ||||||||||	|
||      S | j                  ||||d||      } |j                  j                  j
                  d	|||d|}t        |j                        S )
Nr   r   T)r{   r   rG  r9   r~   r   rY   r   r   r   re   r   r   Fr   rY   r~   r{   r   r   r   r{   rG  r   rp   r,   )r   async_audio_speechr   audiospeechrk   r   rp   )r.   r{   r   rG  r9   r~   r   rY   rH  r   re   r   r   rI  r   r   rW   rp   s                     r/   audio_speechz AzureChatCompletion.audio_speech  s    $ &))-;7d?** /!'-(?'- +    %)$@$@#) %A %
 4<%%,,33 

 	
 *83D3DEEr1   c           	         K   | j                  ||||d||      } |j                  j                  j                  d|||d| d {   }t	        |j
                        S 7 w)NTrK  rL  rM  r,   )r   rO  rP  rk   r   rp   )r.   r{   r   rG  r9   r~   r   rY   r   r   r   re   r   r   rW   azure_responses                   r/   rN  z&AzureChatCompletion.async_audio_speechL  s       *.)E)E#) *F *
  @|1188??  
 
 	 
 
 *>3J3JKK
s   AA%A#	A%modec
                    t         j                  xs t        j                         }
|3d|v r/|j	                  d      s|dz  }|| z  }t        |||||
      }d }n"t        |||||
      }||dk7  rt        d      d }|ddd	g}	 |j                  j                  j                  j                  ||
      }i }|t        |d      st        d      |j                  j                  dd       |j                  d   |d<   |j                  j                  dd       |j                  d   |d<   |j                  j                  dd       |j                  d   |d<   |S # t        $ r}|d }~ww xY w)Nr   r%  )base_urlrY   r~   re   r   )rY   r   r~   re   r   r4  zmodel is not setuserHey)r3   r4   r   rl   zinvalid completion responsezx-ratelimit-remaining-requestszx-ratelimit-remaining-tokenszx-ms-region)rB   r   r  Clientr'  r   rn   rh   ri   rj   rk   r   rl   r   )r.   r{   r~   r   rY   re   rT  r|   r   r/  r   r   r   rq   rp   s                  r/   get_headerszAzureChatCompletion.get_headerso  s    !//A5<<>$?8$K$$S)C5'"H !'*F E !''*F });!; 233
!'E:;H	00BBII! J J WZ%C9:: ""#CTJV9C9K9K0:H56 !!"@$GS7A7I7I.8H34 !!-6B&0&8&8&GH]#-  	G	s   	1E! !	E1*E,,E1rO   )FNN)NNNNNNNN)NNN)
NNNNNNNNNN)NNNNN)NN)/rQ   rR   rS   r0   r	   r   r   rU   r
  r  r  rr   r   r   r   LiteLLMLoggingObjrz   rA   rE   r   r   r   boolr   r   r   r   r   r   r   r   r   r   r   r  r  r   r!  r,  r   r:  r4  r   rQ  rN  rZ  __classcell__)rc   s   @r/   r`   r`      s-
   K/0  uemm+,	, ,k9:  uemm+,	
 ' ^ ""&)DD D &	D
 #D D D D !D "*(!3D D  D uemm+,D 'D$ %D& $'Dd )-6:9=)+!lT#lT lT 	lT
 lT lT lT lT &lT 'lT lT !lT "*(!3lT )1lT  !!lTr )-6:)+L L #	L
 L L L L L L !L "*(!3L !Lr )-6:)+M&M M #	M
 M M M M M M !M "*(!3M !Mn "&%)-19=%)(,6:)+\\ \ *	\
 \ '\ \ #\ c]\ )*\ %u}} 456\ c]\ !\ "*(!3\ !\  
!\P "&(,6:%)"&)-#__ _ 	_
 _ _ '_ *_ _ #_ !_ "*(!3_ c]_  $!_" !#_$ 
 )C6G,G"HH	I%_Bp
)*p
 %u}} 456p
 	p

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

 m
 m
 m
 m
 
m
^!(#'!(08!(	!(X #WW !/W "	W
 W W 'W W }W 
W@  $!%"&%)26(,6:)-!kHkH kH 	kH
 'kH kH }kH #kH 3-kH c]kH !/kH !kH "*(!3kH  !!kH" 
#kHr )-6:"&)-!5F5F 5F 	5F
 5F #5F 3-5F c]5F sm5F 5F uemm+,5F !5F "*(!35F $5F  !!5F" 
$#5FH )-!L!L !L 	!L
 !L #!L 3-!L c]!L !!L "*(!3!L !L uemm+,!L !!L 
$!LV $( $ $G}G G 	G
 G G G 4.G ~G G 
Gr1   r`   )9r   r   ru   typingr   r   r   r   r   r   r	   r  openair
   r   r   r   r   rB   litellm.constantsr   r   *litellm.litellm_core_utils.litellm_loggingr   r[  (litellm.litellm_core_utils.logging_utilsr   &litellm.llms.custom_httpx.http_handlerr   r   r   litellm.types.utilsr   r   r   r   litellm.utilsr   r   r   types.llms.openair   baser    common_utilsr"   r#   r$   r%   r&   r4  r'   r)   rU   r\  r^   r`   r,   r1   r/   <module>ri     s       H H H    R S I 
   <   @; ;|5.>!>?@ 
*s, sr1   