
    h                     P   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 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-m.Z.m/Z/  G d d      Z0de1de	e
eef      de2fdZ3 G d de,e)      Z4y)    N)AnyCallable	CoroutineDictListOptionalUnion)APITimeoutErrorAsyncAzureOpenAIAzureOpenAI)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_endpointc                   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    T/var/www/Befach/backend/env/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_params3   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 )Nr0   r3   r1   z'Azure only accepts content as a string.  )messagestatus_coder2   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+   r5   r6   paramvaluefile_idsitems          r,   'map_openai_params_create_message_paramszFAzureOpenAIAssistantsAPIConfig.map_openai_params_create_message_params;   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-   r4   dictrK   r)   r.   r,   r&   r&   )   s.    	

)"&)9=)r.   r&   azure_client_paramsazure_clientrM   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)rS   rT   dynamic_paramskvs        r,   _check_dynamic_azure_paramsr[   g   sY     #_N#))+11#5}l&@&@&O!O ,
 r.   c            $       h    e Zd Zd1 fdZdededeeej                  f   fdZ
 e       dededeeej                  f   defd	       Z	 	 	 d2d
ed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ddddi fd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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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j@                  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j@                  fd$Z#d%ed
ee   defd&Z$	 	 d4deded%ededededede%jL                  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*	 	 d4d
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+	 	 	 d7d
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AzureChatCompletionrM   Nc                 "    t         |           y r(   )superr-   )r+   	__class__s    r,   r-   zAzureChatCompletion.__init__}   s    r.   rT   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
        rb   Nr)   )chatcompletionswith_raw_responsecreaterR   headersparse	Exception)r+   rT   ra   rb   raw_responseri   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)rd   rb   Nr   z - timeout value=z, time taken=z secondsr)   )timere   rf   rg   rh   rR   ri   rj   r
   roundr9   rk   )r+   rT   ra   rb   rp   
start_timerl   ri   rm   rn   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_baserV   api_typeazure_ad_tokenazure_ad_token_providerrX   print_verboseacompletionri   c                    |r||d<   	 ||t        dd      |j                  dd       }|t        }|j                  dd      }d|v r$| j                  ||||||||	|||	      }d |d
|}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              st        dd      | j!                  |||      \  }}|j#                         }|j%                  ||||||d       t'        ||||      S # t         $ r}|d }~wt(        $ rb}t+        |dd      }t+        |dd       }t+        |dd       }t+        |dd       }||rt+        |dd       }t        |t-        |      ||      d }~ww xY w) Nextra_headers  zMissing model or messagesr:   r9   max_retries	json_modeFgateway.ai.cloudflare.com)r|   rx   rV   r   rb   r{   r~   r   r   clientlitellm_paramsrx   ry   )rx   ry   r6   r   ri   Tstream)rp   r|   rX   ra   rx   r{   rV   r~   r   rb   r   r   r   )r|   ra   rz   r{   rV   rx   r~   r   rX   rb   r   rp   r   convert_tool_call_to_json_moder   r{   r~   )ri   rV   r|   complete_input_dictinputr{   additional_argsmax retries must be an intrV   r|   r{   rx   r   	_is_asyncr     .azure_client is not an instance of AzureOpenAIrT   ra   rb   )ri   rV   r|   r   r{   original_responser   )response_objectmodel_response_objectr   _response_headersr:   ri   rm   bodyr:   r9   ri   r   )r    popr   ,_init_azure_client_for_cloudflare_ai_gatewayr?   AzureOpenAIConfigtransform_requestgetasync_streamingr   	streamingpre_callr=   intget_azure_openai_clientr   ro   
model_dump	post_callr   rk   getattrr>   )r+   rx   ry   rz   r{   r|   rV   r}   r~   r   rX   r   rb   rp   r6   r   	logger_fnr   ri   r   r   r   ra   rT   rm   stringified_responsern   r:   error_headerserror_response
error_bodys                                  r,   
completionzAzureChatCompletion.completion   s   , /6OO,_	} 0& #-H  *--mTBK"1(7(;(;K(OI +h6JJ% + +###1,C +!#1 K  "&8OO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  <   ",<*$' P 
 %)$W$W!-D' %X %! (0':':'<$%%"#&:#*'2$,%	 & 	 8$8*83<&-	    	G 	!!]C8K#Ay$7M$Q
D9N FD1J$ '	4 H"'A%	 	s8   CG G .(G B<G 	IGI+AIIr   r   r   c           	        K   d }	 | j                  |||||d|      }t        |t              st        d      |	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"        $ 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   3Azure client is not an instance of AsyncAzureOpenAIry   r   ri   r|   r   r   r   rT   ra   rb   rp   response_headersr   r   ri   )r   r   hidden_paramsr   r   r   r{   r   r   r   r   r9   r   r:   )r:   r9   r   )r   r=   r   
ValueErrorr   r{   	_base_url_uri_referencerw   model_call_detailsr   r   r   r    r>   asyncioCancelledErrorrk   r   hasattr)r+   r{   rV   rx   r|   ra   rb   rX   rz   rp   r   r~   r   r   r   r   rm   rT   ri   r   rn   r9   r   s                          r,   r   zAzureChatCompletion.acompletionm  sT    $ R	T77'!- 8 L l,<= !VWW  :&$,, $+*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 	TaCF3G1fd+D!!:&!6 ="%a&	 "  q-(&3dSS	TsU   GBC# C!AC#  G!C# #	G,%DG'9E  G,A"GGGc           
         |||t         j                  |	|d}t        |      }|||d<   n+|
"|
j                  d      rt	        |
      }
|
|d<   n|||d<   | j                  |||||d|      }t        |t              st        d	d
      |j                  |d   |j                  ||
d|j                  j                  d|d       | j                  |||      \  }}t        ||d||j                  dd       t!        |            }|S )N)rV   azure_endpointazure_deploymenthttp_clientr   rb   )rS   r{   zoidc/r~   r   Fr   r   r   r   ry   r   Tr   r   r   azurestream_optionscompletion_streamrx   custom_llm_providerrp   r   r   )r?   client_sessionr$   
startswithr"   r   r=   r   r    r   r{   r   r   ro   r   r   r#   )r+   rp   r|   r{   rV   rX   ra   rx   rb   r   r~   r   r   r   rS   rT   ri   rm   streamwrappers                      r,   r   zAzureChatCompletion.streaming  sw   $ '& %"11&
 @ 3
 -4	*'((1!=n!M4B 01$0=T 9:33#) 4 
 ,4"H 
 	z" ((  '&4 )22AA#'+ 	 	
 !OO%D' P 
 ,& '#88$4d;3G<
 r.   c           
        K   	 | j                  |||||d|      }t        |t              st        d      |j	                  |d   |j
                  ||
d|j                  j                  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   ry   r   r   r   r   r   r   r   r   r:   r   ri   rm   r9   r   r   )r   r=   r   r   r   r{   r   r   rw   r   r   r   rk   r   r>   r    )r+   rp   r|   r{   rV   rX   ra   rx   rb   r   r~   r   r   r   rT   ri   rm   r   rn   r:   r   r   r9   r   s                           r,   r   z#AzureChatCompletion.async_streaming"  s     ;	77'!- 8 L l,<= !VWW   :&$,, $+*8  !- 6 6 E E#'+/! !  '+&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<   EBC C8C EC 	E A*D;;E  Er   r   c           	      P  K   d }	 | j                  ||||d|	|      }t        |t              st        d       |j                  j
                  j                  di |d|
i d {   }t        |j                        }|j                         }|j                         }|j                  ||d|i|       t        ||d|it        |      d	      }t        |t              st        d
d      |S 7 # t         $ r'}|j                  ||d|it#        |             |d }~ww xY ww)NTrV   r|   r{   rx   r   r   r   r   rb   r   r   ri   	embedding)r   r   r   r   response_typer   z:embedding_response is not an instance of EmbeddingResponser   r)   )r   r=   r   r   
embeddingsrg   rh   rR   ri   rj   r   r   r   r#   r   r    rk   r>   )r+   rx   ra   rz   r   rp   r|   r{   rV   r   rb   r   r~   r   r   rm   openai_aclientrl   ri   r   embedding_responsern   s                         r,   
aembeddingzAzureChatCompletion.aembeddingo  sp    " /	!99'!- : N n.>? !VWW!S!:!:!L!L!S!S "" '" L <//0G#))+H#+#6#6#8 !!!6 ="6	 "  "B 4&4('2"7"@)" 02CD& #X  &%34  	!!!6 ="%a&	 "  G	s<   D&A C3 &C1'B	C3 0D&1C3 3	D#<"DD##D&r6   c                 t   |r||d<   | j                   | j                         | _         	 ||d|}|t        j                  }|j	                  ||	||	|
dd       |du r| j                  |||||	|||||
      S | j                  |||	|d||	      }t        |t              st        d
d       |j                  j                  j                  di |d|i}t        |j                        }|j                         }|j!                  ||	||d|       t#        |j%                         |dt'        |            S # t        $ r}|d }~wt(        $ rb}t+        |dd
      }t+        |dd       }t+        |dd       }t-        |      }||rt+        |dd       }|j.                  }t        |||      d }~ww xY w)Nr   )rx   r   r   )r   ri   r   T)
ra   r   rx   rp   r{   rz   rb   r   r   r|   Fr   r   r   r   rb   )r   r|   r   r   )r   r   r   r   r:   ri   rm   )r:   r9   ri   r)   )_client_sessioncreate_client_sessionr?   r   r   r   r   r=   r   r    r   rg   rh   rR   ri   rj   r   r   r   r#   rk   r   r>   text)r+   rx   r   r|   rV   rb   rp   rz   r6   r{   r~   r   r   r   r   ri   r   ra   rT   rl   rm   rn   r:   r   r   
error_texts                             r,   r   zAzureChatCompletion.embedding  s3   & /6OO,'#'#=#=#?D C	"UFoFD"%99  +/+2nU! !  T! +##1#!#1% '    77'!- 8 L lK8& #L  L<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QJ$ '	4 H+00
"'] 
	s,   AD> <CD> >	F7E		F7AF22F7c           	      x  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(  r0|j                         }t        dt        j                  |            |j                         d   }t        j0                  d|j                  t        j                  |      j3                  d      t        j4                  dd             S |
j                  |||!       d{   S 7 X7 7 7 &7 7 7 w)"
        Implemented for azure dall-e-2 image gen calls

        Alternative to needing a custom transport implementation
        Nrb        @      @rb   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_pathrx   urlra   ri   operation-locationr   r   r   ri   status%Expected 'status' in response. Got={}	succeededfailed  Operation polling timed out.retry-after
   r   r8   result   utf-8POSThttps://api.openai.com/v1methodr   r:   ri   r1   requestr   jsonri   )r=   floatr   httpxTimeoutr   r   AZUREr   r   postr   dumpsri   r    r   r   areadr   rr   rk   rE   r   sleepResponseencodeRequest)r+   r   rb   r|   rV   r{   ra   ri   _params_httpx_timeoutasync_handlerrm   operation_location_urltimeout_secsrt   
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L:L'AL:L* L:7L-8CL:
L0L:%L3&L:=L6>L:C
L:"L8#L:*L:-L:0L:3L:6L:8L: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 rZ|dv rUt        |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(  r0|j                         }t        dt        j                  |            |j                         d   }t        j.                  d|j                  t        j                  |      j1                  d      t        j2                  dd             S |
j                  |||!      S )#r   Nrb   r   r   r   r   r   r   r   r   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r   r   r   r   r   r   r   r   r)   )r=   r  r   r  r  r   r?   r   r   r   r  r   r  ri   r    r   r   readr   rr   rk   rE   r  r	  r
  r  )r+   r   rb   r|   rV   r{   ra   ri   r  r  sync_handlerrm   r  r  rt   r  r   s                    r,   make_sync_azure_httpx_requestz1AzureChatCompletion.make_sync_azure_httpx_requests  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.   rS   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 )Nr    /rV   z/openai/deployments/z/images/generationsz?api-version=)r   endswithrstrip)r+   rS   rx   r|   rV   base_url_with_deployments         r,   create_azure_base_urlz)AzureChatCompletion.create_azure_base_url  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|   r  r  rV   rx   rS   rx   promptr   r|   ri   r   r   rb   r|   rV   r{   ra   ri   r   r   image_generationr   r   r   )r   r  r  r  r   r  r   r   r   rk   r>   )r+   ra   rz   rS   r{   r   rp   ri   r   rb   rm   r|   rV   img_gen_api_basehttpx_responser   rn   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                 Z   	 |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	      | j                  |xs i ||xs d
|	|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_modelrx   )rx   r   r   r   r   r   r   r  F)r   r{   
model_namerV   r|   is_asyncT)	ra   r   rp   rz   r{   r   rS   rb   ri   r  r   r!  r   r"  r   r   r#  r$  r:   r   )lenr   r   _hidden_paramsr=   r   r    initialize_azure_sdk_clientr'  r   r  r   r  r   r   r   rk   r   r>   )r+   r   rb   r6   rp   ri   rx   r{   r|   rV   rz   r~   r   r   aimg_generationr   ra   r   rS   r%  r&  rm   rn   
error_codes                           r,   r#  z$AzureChatCompletion.image_generation0  sM   $K	HUa *#''d;G9H9L9L :--g6 #fHHD((=!4Kk3/& #-I 
 372R2R-3 ;B'! 3S 3 $&--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+   B=E  BE 	F*EF**;F%%F*voiceorganizationaspeechc                    |j                  dd      }	|"|du r| j                  ||||||||||	|
||      S | j                  ||||d||      } |j                  j                  j
                  d	|||d|}t        |j                        S )
Nr   r   T)rx   r   r1  r6   r{   r|   rV   r~   r   r   rb   r   r   Fr|   rV   r{   rx   r   r   r   rx   r1  r   rm   r)   )r   async_audio_speechr   audiospeechrh   r   rm   )r+   rx   r   r1  r6   r{   r|   rV   r2  r   rb   r~   r   r3  r   r   rT   rm   s                     r,   audio_speechz AzureChatCompletion.audio_speech  s    $ &))-;7d?** /!'-(?'- +    %)$@$@#) %A %
 4<%%,,33 

 	
 *83D3DEEr.   c           	         K   | j                  ||||d||      } |j                  j                  j                  d|||d| d {   }t	        |j
                        S 7 w)NTr5  r6  r7  r)   )r   r9  r:  rh   r   rm   )r+   rx   r   r1  r6   r{   r|   rV   r~   r   r   rb   r   r   rT   azure_responses                   r,   r8  z&AzureChatCompletion.async_audio_speech  s       *.)E)E#) *F *
  @|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  )base_urlrV   r{   rb   r   )rV   r   r{   rb   r   r#  zmodel is not setuserHey)r0   r1   r   ri   zinvalid completion responsezx-ratelimit-remaining-requestszx-ratelimit-remaining-tokenszx-ms-region)r?   r   r  Clientr  r   rk   re   rf   rg   rh   r   ri   r   )r+   rx   r{   r|   rV   rb   r>  ry   r   r   r   r   r   rn   rm   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/rL   )FNN)NNNNNNNN)NN)
NNNNNNNNNN)NNNNN)NNN).rN   rO   rP   r-   r   rR   r	   r  r  r  ro   r   r   LiteLLMLoggingObjrw   r>   rB   r   r   boolr   r   r   r   r   r   r   r   r   r   r   r   r	  r  r   r  r  r?   r   r'  r#  r   r;  r8  rD  __classcell__)r`   s   @r,   r]   r]   |   s	   !  uemm+,	, &  uemm+,	
 ' ^ ""&)ww w &	w
 w w w w w "*w w  w uemm+,w 'w$ %w& $'wJ )-6:9=)+!eTeT eT 	eT
 eT eT eT eT &eT 'eT eT !eT "*(!3eT )1eT  !!eTd )-6:)+L L 	L
 L L L L L L !L "*(!3L !Lr )-6:)+K&K K 	K
 K K K K K K !K "*(!3K !Kj "&%)-19=%)(,6:)+AA A *	A
 A 'A A #A c]A )*A %u}} 456A c]A !A "*(!3A !A  
!AZ "&(,6:%)"&)-#ZZ Z 	Z
 Z Z 'Z *Z Z #Z !Z "*(!3Z c]Z  $!Z" !#Z$ 
 )C6G,G"HH	I%Zxc
)*c
 %u}} 456c
 	c

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

 `
 `
 `
 `
 
`
D(#'(08(	(> CC &C "	C
 C C 'C C 
		CX  $!%"&%)26(,6:)-!]H]H ]H 	]H
 ']H ]H }]H #]H 3-]H c]]H !/]H !]H "*(!3]H  !!]H" 
#]HV )-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r.   r]   )5r   r   rr   typingr   r   r   r   r   r   r	   r  openair
   r   r   r?   litellm.constantsr   r   *litellm.litellm_core_utils.litellm_loggingr   rE  (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$   r&   rR   rF  r[   r]   r)   r.   r,   <module>rS     s       H H H  A A  R S I 
   <  ; ;|5.>!>?@ 
*t, tr.   