
    g                     \   d dl Z 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
 d dlZd dlmZmZ d dl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!m"Z" d	d
l#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)  e       Z* G d d      Z+de,fdZ-de.fdZ/de,de	e
eef      de0fdZ1 G d de&      Z2y)    N)AnyCallable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   )HttpxBinaryResponseContent   )BaseLLM   )AzureOpenAIErrorprocess_azure_headersc                   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    M/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/azure/azure.py__init__z'AzureOpenAIAssistantsAPIConfig.__init__+   s     	    c                 
    g dS )N)rolecontentattachmentsmetadatar#   r$   s    r&   *get_supported_openai_create_message_paramszIAzureOpenAIAssistantsAPIConfig.get_supported_openai_create_message_params0   s    
 	
r(   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 )Nr*   r-   r+   z'Azure only accepts content as a string.  )messagestatus_coder,   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%   r/   r0   paramvaluefile_idsitems          r&   'map_openai_params_create_message_paramszFAzureOpenAIAssistantsAPIConfig.map_openai_params_create_message_params8   sN    /446LE5*/'
".3
+)#eS)16OI.!-->> I$' ?  
 &&(eT* %$,$OODO<&22d: $&-mm&J&J -C  -J  -J(--& 14	 'K '" !" !& "-->> y  !A  !A K! %(	 ?  A 7L r(   returnN)__name__
__module____qualname____doc__r'   r.   dictrE   r#   r(   r&   r    r    &   s.    	

)"&)9=)r(   r    azure_client_paramsc                 b    | j                  dd       }|d|v r|| d<   | j                  d       | S )Nazure_endpointz/openai/deploymentsbase_url)getpop)rM   rO   s     r&   !select_azure_base_url_or_endpointrS   d   sE     ),,-=tDN! N2.<
+##$45r(   azure_ad_tokenc           	         t        j                  dd       }t        j                  dd       }t        j                  dd      }||t        dd      t        |       }|t        dd	      t	        j
                  ||||d
      }t        j                  |      }||S t        j                  }|j                  | d| d|ddd|d      }|j                  dk7  r!t        |j                  |j                        |j	                         }	|	j                  dd       }|	j                  dd       }
|t        dd      |
t        dd      t        j                  |||
       |S )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r4   r3   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)keyrB   ttl)osgetenvr   r   jsondumpsazure_ad_cache	get_cacher9   module_level_clientpostr4   textrQ   	set_cache)rT   r[   r\   r]   r^   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|   x   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_clientrG   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_versionapi-versionF)r6   _custom_query)rM   r}   dynamic_paramskvs        r&   _check_dynamic_azure_paramsr      sY     #_N#))+11#5}l&@&@&O!O ,
 r(   c                       e Zd Zd2 fdZd Zdee   dee   dee   dee   ded	ed
ee	e
j                  f   dee   ded   fdZdeded
ee	e
j                  f   fdZdeded
ee	e
j                  f   fdZ	 	 	 d3dedededededededededed
ee	e
j                  f   dededee   fdZ	 	 	 d4dededededed
ededededee   dee   fdZ	 	 d5dedededededed
edee   fdZ	 	 d5dededededededed
edee   fdZ	 	 	 d4deded ed!ededee   dee   fd"Z	 	 	 	 	 	 d6d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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
jB                  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
jB                  fd&Z$d edee   defd'Z%	 	 d5deded eded!ededede&jN                  fd(Z(	 	 	 	 	 	 	 	 d7d)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'fd*Z)	 	 	 d4d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*fd.Z+	 d8d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*fd/Z,	 	 	 d4dee   dededed
e	d0edee   d!ee   d)ee   defd1Z- xZ.S )9AzureChatCompletionrG   c                 "    t         |           y r"   )superr'   )r%   	__class__s    r&   r'   zAzureChatCompletion.__init__   s    r(   c                 l    ddi}|||d<   |S |$|j                  d      rt        |      }d| |d<   |S )Nzcontent-typezapplication/jsonzapi-keyoidc/zBearer Authorization)
startswithr|   )r%   api_keyrT   headerss       r&   validate_environmentz(AzureChatCompletion.validate_environment   s_    .
 !(GI
 	 '((1!=n!M)00@'AGO$r(   r   api_baser   rT   modelmax_retriestimeoutrx   client_type)syncasyncc
                 b   |||t         j                  ||d}
t        |
      }
|||
d<   n#|!|j                  d      rt	        |      }||
d<   |$|	dk(  rt        d	i |
}|S |	dk(  rt        d	i |
}S |}|6t        |j                  t              r|j                  j                  d|       |S )
Nr   rO   azure_deploymenthttp_clientr   r   rM   r   r   rT   r   r   r   r#   )r9   client_sessionrS   r   r|   r
   r	   r7   r   rL   
setdefault)r%   r   r   r   rT   r   r   r   rx   r   rM   r}   s               r&   _get_sync_azure_clientz*AzureChatCompletion._get_sync_azure_client   s     '& %"11&
 @ 3
 -4	*'((1!=n!M4B 01>f$*A-@A  '/F2EF  "L&:l6P6PRV+W**55m[Qr(   r}   rf   c                     	  |j                   j                  j                  j                  di |d|i}t	        |j
                        }|j                         }||fS # t        $ r}|d}~ww xY w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createrL   r   parse	Exceptionr%   r}   rf   r   raw_responser   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/c                    K   	  |j                   j                  j                  j                  di |d|i d{   }t	        |j
                        }|j                         }||fS 7 -# t        $ r}|d}~ww xY wwr   r   r   s           r&   )make_azure_openai_chat_completion_requestz=AzureChatCompletion.make_azure_openai_chat_completion_request)  s     		!W!2!2!>!>!P!P!W!W "" '" L <//0G#))+H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                 @   |r||d<   	 ||t        dd      |j                  dd      }|j                  dd      }d	|v r|y|j                  d
      s|d
z  }|| z  }|| t        j                  ||d}|||d<   n#|!|j                  d      rt        |      }||d<   |du rt        d&i |}nt        d&i |}d |d|}n,t        j                         j                  |||||xs i       }|du rJ|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      |||t        j                  ||d}t%        |      }|||d<   n#|!|j                  d      rt        |      }||d<   |t!        |t              r|	rt        d&i |}n:|}|6t!        |j&                  t(              r|j&                  j+                  d|       t!        |t              st        dd      | j-                  |||      \  }}|j/                         }|j1                  ||||||d        t3        ||||!      S # t         $ r}|d }~wt4        $ rT}t7        |d"d      }t7        |d#d       }t7        |d$d       }||rt7        |d#d       }t        |t9        |      |%      d }~ww xY w)'Nextra_headersrY   zMissing model or messagesrZ   r   r   	json_modeFgateway.ai.cloudflare.comr_   )r   rP   r   r   r   r   r   rT   Tr   r   )r   r   r0   litellm_paramsr   stream)
r   r   r   rf   r   r   r   rT   r   rx   )r   rf   r   r   r   r   rT   r   r   rx   r   convert_tool_call_to_json_moder   rT   )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}   rf   r   )r   r   r   r   r   original_responser   )response_objectmodel_response_objectr   _response_headersr4   r   r   r4   r3   r   r#   )r   rR   endswithr9   r   r   r|   r	   r
   AzureOpenAIConfigtransform_requestrQ   async_streamingr   	streamingpre_callr7   intrS   r   rL   r   r   
model_dump	post_callr   r   getattrr8   )r%   r   r   r   r   r   r   r   rT   r   r   r   r   r0   r   	logger_fnr   r   rx   r   r   rM   rf   r}   r   stringified_responser   r4   error_headerserror_responses                                 r&   
completionzAzureChatCompletion.completion?  s`   * /6OO,v	} 0& #-H  *--mQ?K(7(;(;K(OI +h6>#,,S1 C5'*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//$/!)'5!# '$/'5 '% 0    ++!)!'5 '$/#'5'5 '%$/7@ ,   _,1Jd1R~~ +%#1# +#1#! &   $$"# (/.<$ (3$,/3% %  "+s3*$'1M 
 $/&.(-#*#9#9#.&'# 'H(;'# &5<'	2#/%009)En)U<J'(89 N%fk:%#.#E1D#EL#)L".:$22D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J2 "J2 ?%J2 %EJ2 2	L;J==L	ALLr   c           	      0  K   d }	 |j                  dd      }t        |t              st        dd      |||t        j
                  ||d}t        |      }|||d<   n#|
!|
j                  d	      rt        |
      }
|
|d
<   ||rt        di |}n|}|	j                  |d   |j                  ||
d|j                  j                  d|d       | j                  |||       d {   \  }}||	j                  d<   |j!                         }|	j#                  |d   ||d|i       t%        ||d|i||      S 7 R# t        $ r*}|	j#                  |d   |d|it'        |             |d }~wt(        j*                  $ r>}|	j#                  |d   |d|it'        |             t        dt'        |            d }~wt,        $ rL}|	j#                  |d   |d|it'        |             t/        |d      r|t        dt'        |            d }~ww xY ww)Nr   r   rY   r   rZ   r   r   r   r   rT   r   r   Tr   r   r   r   r   r   response_headersr   r   r   )r   r   hidden_paramsr   r   r   r   r   r   r   r4   r#   )rR   r7   r   r   r9   aclient_sessionrS   r   r|   r	   r   r   	_base_url_uri_referencer   model_call_detailsr   r   r   r8   asyncioCancelledErrorr   hasattr)r%   r   r   r   r   rf   r   r   r   r   rT   r   rx   r   r   rM   r}   r   r   r   s                       r&   r   zAzureChatCompletion.acompletion  s     b	H((=!4Kk3/& #-I   +"*$)&66*"# #D$7# "18#I.+!,,W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> ;H<D> >	H%E,,H9F;;HAHHHc           
          |j                  dd      }t        |t              st        dd      |||t        j
                  ||d}t        |      }|||d<   n#|	!|	j                  d	      rt        |	      }	|	|d
<   |
|rt        di |}n|
}|j                  |d   |j                  ||	d|j                  j                  d|d       | j                  |||      \  }}t        ||d||j!                  dd       t#        |            }|S )Nr   r   rY   r   rZ   r   r   r   r   rT   r   r   Tr   r   r   azurestream_optionscompletion_streamr   custom_llm_providerr   r   r   r#   )rR   r7   r   r   r9   r   rS   r   r|   r
   r   r   r   r   r   r   rQ   r   )r%   r   r   r   r   r   rf   r   r   rT   rx   r   rM   r}   r   r   streamwrappers                    r&   r   zAzureChatCompletion.streaming  sc    hh}a0+s+")E 
 '& %"11&
 @ 3
 -4	*'((1!=n!M4B 01>^&=)<=L!Lz" ((  '&4 )22AA#'+ 	 	
 !OO%D' P 
 ,& '#88$4d;3G<
 r(   c           
        K   	 |||t         j                  |j                  dd      |d}t        |      }|||d<   n#|	!|	j	                  d      rt        |	      }	|	|d<   |
|rt        di |}n|
}|j                  |d   |j                  ||	d	|j                  j                  d
|d       | j                  |||       d {   \  }}||j                  d<   t        ||d||j                  dd       |      }|S 7 9# t        $ rT}t!        |dd      }t!        |dd       }t!        |dd       }||rt!        |dd       }t#        |t%        |      |      d }~ww xY ww)Nr   r   r   r   r   r   rT   r   r   Tr   r   r   r   r   r   r   r4   r   r   r   r   r#   )r9   r   rR   rS   r   r|   r	   r   r   r   r   r   r   r   rQ   r   r   r   r8   )r%   r   r   r   r   r   rf   r   r   rT   rx   rM   r}   r   r   r   r   r4   r   r   s                       r&   r   z#AzureChatCompletion.async_streaming  s    ?	  +"*$)&66#xxq9"# #D$7# "18#I.+!,,W5%A.%QN8F#$45~/F2EF%  :&$,, $+*8  !- 6 6 E E#'+/! !  '+&T&T) 'U ' !GX
 BIK**+=> 0"*$+'#xx(8$?")M ! !!"  	!!]C8K#Ay$7M$Q
D9N$ '	4 H"'Q 	s<   E$CD D	8D E$D 	E!AEE!!E$rM   r   c	           	        K   d }		 |t        di |}
n|}
 |
j                  j                  j                  di |d|i d {   }t	        |j
                        }|j                         }	|	j                         }|j                  ||d|i|       t        ||d|it        |      d      S 7 k# t        $ r'}|j                  ||d|it        |             |d }~ww xY ww)Nr   r   r   r   	embedding)r   r   r   r   response_typer#   )r	   
embeddingsr   r   rL   r   r   r   r   r   r   r   r8   )r%   rf   r   rM   r   r   r   rx   r   r   openai_aclientr   r   r   r   s                  r&   
aembeddingzAzureChatCompletion.aembedding  s     !	~!1!H4G!H!'!S!:!:!L!L!S!S "" '" L <//0G#))+H#+#6#6#8 !!!6 ="6	 "  4 4&4('2"7"@) (  	!!!6 ="%a&	 "  G	s;   C$=B1 B/A*B1 .C$/B1 1	C!:"CC!!C$r0   c           
         |r||d<   | j                   | j                         | _         	 ||d|}|t        j                  }t	        |t
              st        dd      |||||d}t        |      }|rt        j                  |d<   nt        j                  |d<   |	|	|d	<   n#|
!|
j                  d
      rt        |
      }
|
|d<   |j                  ||	||	|
dd       |du r| j                  ||||	||||      S |t        di |}n|} |j                  j                   j"                  di |d|i}t%        |j&                        }|j)                         }|j+                  ||	||d|       t-        |j/                         |dt1        |            S # t        $ r}|d }~wt2        $ rT}t5        |dd      }t5        |dd       }t5        |dd       }||rt5        |dd       }t        |t7        |      |      d }~ww xY w)Nr   )r   r   rY   r   rZ   r   rO   r   r   r   r   r   r   r   rT   r   )r   r   r   T)rf   r   r   r   r   rM   r   rx   r   )r   r   r   r   )r   r   r   r   r4   r   r   r   r   r#   )_client_sessioncreate_client_sessionr9   DEFAULT_MAX_RETRIESr7   r   r   rS   r   r   r   r|   r   r   r
   r   r   r   rL   r   r   r   r   r   r   r   r   r8   )r%   r   r   r   r   r   r   r   r0   r   rT   r   rx   r   r   rf   rM   r}   r   r   r   r4   r   r   s                           r&   r   zAzureChatCompletion.embeddingC  s   " /6OO,'#'#=#=#?D O	"UFoFD"%99k3/& #-I   +"*$)*"# #D$7# 5<5L5L#M25<5K5K#M2"18#I.+!,,W5%A.%QN8F#$45   +/+2nU! !  T! +##1(;#! ' 	 	 ~*A-@A%K<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%F''H3AHHc           	      p  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{    d}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(  r0|j                         }t        dt        j                  |            |j                         d   }t        j.                  d|j                  t        j                  |      j1                  d      t        j2                  dd       !      S |
j                  |||"       d{   S 7 T7 7 7 &7 7 7 w)#
        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   urlrf   r   operation-locationr   rZ   r
  r   x   status%Expected 'status' in response. Got={}	succeededfailed  Operation polling timed out.retry-after
   r  r2   resultrg   utf-8POSThttps://api.openai.com/v1methodr
  r4   r   r+   requestr
  rn   r   )r7   floatr   httpxTimeoutr   r   AZUREr   rR   rs   rn   ro   r   r   rt   rQ   areadtimer   r?   r   sleepResponseencodeRequest)r%   rx   r   r   r   r   rf   r   _params_httpx_timeoutasync_handlerr   operation_location_urltimeout_secs
start_time
error_datar  s                    r&   make_async_azure_httpx_requestz2AzureChatCompletion.make_async_azure_httpx_request  s     >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%]]_
&3

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

6*11':V9TU	  #'' ( 
 
 	
_
 # T '
s   CL6L#AL6L& L67L)8CL6L,L6!L/"L69L2:L6C
L6L4L6&L6)L6,L6/L62L64L6c           	         |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 rV|dv rQt        |d	
      }|j                  dd       |
j                  |t        j                  |      |      }d|j                  v r|j                  d   }nt        d|j                        |
j!                  ||      }|j#                          d}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(  r0|j                         }t        dt        j                  |            |j                         d   }t        j,                  d|j                  t        j                  |      j/                  d      t        j0                  dd       !      S |
j                  |||"      S )$r   Nr   r   r   r   rx   r  r  r  r  r   r	  r  r   rZ   r  r  r  r  r  r  r  r  r  r  r2   r  rg   r  r  r  r  r  r  r#   )r7   r   r   r!  r"  r   r9   r   r   rR   rs   rn   ro   r   r   rt   rQ   readr%  r   r?   r&  r'  r(  r)  )r%   rx   r   r   r   r   rf   r   r*  r+  sync_handlerr   r-  r.  r/  r0  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%]]_
&3

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

6*11':V9TU	     ! 
 	
r(   c                     |j                  dd      }|j                  d      r|j                  d      }|j                  dd      }|d}d|v r|}n|dz   |z   }|dz  }|d|z   z  }|S )NrO    r_   r   z/openai/deployments/z/images/generationsz?api-version=)rQ   r   rstrip)r%   rM   r   r   r   base_url_with_deployments         r&   create_azure_base_urlz)AzureChatCompletion.create_azure_base_urls  s     ,//b
 S!s+H.22="E=E!X-'/$'/2H'H5'P$ $99  Ok$AA ''r(   c
           	      0  K   d }
	 |j                  dd      }|j                  d      r|j                  d      }|j                  dd      }| j                  ||j                  dd            }|j	                  |d   ||||d	       | j                  d |	|||||
       d {   }|j                         }
|
}|j                  ||d|i|       t        ||d      S 7 ;# t        $ r'}|j                  ||d|it        |             |d }~ww xY ww)Nr   r7  r_   r   r   rM   r   promptr   r   r   r   rx   r   r   r   r   rf   r   r   r   image_generationr   r   r   )rQ   r   r8  r:  r   r1  rn   r   r   r   r8   )r%   rf   r   rM   r   r   r   r   rx   r   r   r   r   img_gen_api_basehttpx_responser   r   s                    r&   aimage_generationz%AzureChatCompletion.aimage_generation  st     $(6	/33BH   %#??3/266}bIK#99$7txxQS?T  :  
   8n+/ 0&! !  483V3V)' 4W 4 .N &**,H#+ !!!6 ="6	 "  4 4&40 '.0  	!!!6 ="%a&	 "  G	s;   DBC# %C!&:C#  D!C# #	D,"DDDr=  c                    	 |rt        |      dkD  r|}nd }|
0|j                  dd       |j                  d      |
j                  d<   ||d|}|j                  dd      }t	        |t
              st        dd	      |	||||d
}t        |      }|||d<   n#|!|j                  d      rt        |      }||d<   |du r| j                  |t        ||
|||||	      S | j                  ||j                  dd            }|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   )r   r=  r   r   rY   r   rZ   r   r   r   r   rT   T)	rf   r   r   r   r   rx   rM   r   r   r7  r<  r=  r>  r   r?  r   r   r@  rA  r4   r   )lenrQ   rR   _hidden_paramsr7   r   r   rS   r   r|   rD  r   r:  r   r5  rn   r   r   r   r   r8   )r%   r=  r   r0   r   r   r   r   r   r   r   rT   rx   aimg_generationrf   r   rM   rB  rC  r   r   
error_codes                         r&   r@  z$AzureChatCompletion.image_generation  s~    T	HUa *#''d;G9H9L9L :--g6 #fHHD((=!4Kk3/& #-I   +"*$)*"# #D$7# "18#I.+!,,W5%A.%QN8F#$45$&--4uR]n|  GN  W]  sF  PW  ah-  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E3  BE3 3	G
<E>>G

;GG
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   rK  r0   r   r   r   rT   r   r   rx   r   	r   r   r   rT   r   r   r   rx   r   r   rK  r   r   r#   )rR   async_audio_speechr   audiospeechr   r   r   )r%   r   r   rK  r0   r   r   r   rL  r   r   rT   rM  rx   r}   r   s                   r&   audio_speechz AzureChatCompletion.audio_speech4  s    " &))-;7d?** /!'-' +   %)$?$?#)# %@ 
%
 4<%%,,33 

 	
 *83D3DEEr(   c                    K   | j                  ||||||	|
|d	      } |j                  j                  j                  d|||d| d {   }t	        |j
                        S 7 w)Nr   rO  rP  rQ  r#   )r   rS  rT  r   r   r   )r%   r   r   rK  r0   r   r   r   rT   r   r   rx   r}   azure_responses                 r&   rR  z&AzureChatCompletion.async_audio_speechj  s      *.)D)D#)# *E 
*
  @|1188??  
 
 	 
 
 *>3J3JKK
s   AA'
A%A'modec
                    t         j                  xs t        j                         }
d|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_   )rP   r   r   r   r   )r   rO   r   r   r   r@  zmodel is not setuserHey)r*   r+   r   r   zinvalid completion responsezx-ratelimit-remaining-requestszx-ratelimit-remaining-tokenszx-ms-region)r9   r   r!  Clientr   r
   r   r   r   r   r   r   r   rQ   )r%   r   r   r   r   r   rX  r   r   r=  r   rx   r   r   r   s                  r&   get_headerszAzureChatCompletion.get_headers  s    !//A5<<>&(2$$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 	E/(E**E/rF   )FNN)NNN)NN)NNNNNN)NNNNNNNNr"   )/rH   rI   rJ   r'   r   r   r8   r   r   r   r!  r"  r   r   r   r
   rL   r   r	   r   r<   r   boolr   LiteLLMLoggingObjr   r   r   r   r   r   r   r   r'  r1  r   r5  r:  r9   r   rD  r@  r   rU  rR  r]  __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 "&(,%)"&dd d 	d
 d d 'd *d d #d !d c]d $d  
!dL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r(   r   )3r   rn   rl   r%  typingr   r   r   r   r   r   r!  openair	   r
   r9   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   baser   common_utilsr   r   rp   r    rL   rS   r8   r|   r^  r   r   r#   r(   r&   <module>rk     s      	  @ @  0  - S 
   <  A; ;|4 (H' H'V5.>!>?@ 
*}' }r(   