
    j                     \   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/ ddl0m1Z1  G d d      Z2de3de	e
eef      de4fdZ5 G d de,e)      Z6y)    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_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    q/Users/manta/Documents/Projects/TheRoad-I1/backend/.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_params4   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 )Nr1   r4   r2   z'Azure only accepts content as a string.  )messagestatus_coder3   file_idTzTAzure doesn't support {}. To drop it from the call, set `litellm.drop_params = True.zWInvalid param. attachments should always be a list. Got={}, Expected=List. Raw value={})items
isinstancestrlitellmutilsUnsupportedParamsErrorlistappenddrop_paramsformattype)r,   r6   r7   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.   r5   dictrL   r*   r/   r-   r'   r'   *   s.    	

)"&)9=)r/   r'   azure_client_paramsazure_clientrN   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)rT   rU   dynamic_paramskvs        r-   _check_dynamic_azure_paramsr\   h   sY     #_N#))+11#5}l&@&@&O!O ,
 r/   c            $           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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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e%   d%ededededede&jJ                  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AzureChatCompletionrN   Nc                 "    t         |           y r)   )superr.   )r,   	__class__s    r-   r.   zAzureChatCompletion.__init__~   s    r/   rU   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
        rc   Nr*   )chatcompletionswith_raw_responsecreaterS   headersparse	Exception)r,   rU   rb   rc   raw_responserj   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)re   rc   Nr   z - timeout value=z, time taken=z secondsr*   )timerf   rg   rh   ri   rS   rj   rk   r
   roundr:   rl   )r,   rU   rb   rc   rq   
start_timerm   rj   rn   ro   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_baserW   api_typeazure_ad_tokenazure_ad_token_providerrY   print_verboseacompletionrj   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"              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        |t1        |      ||       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}   ry   rW   r   rc   r|   r   r   r   clientlitellm_paramsry   rz   )ry   )ry   rz   r7   r   rj   Tstream)rq   r}   rY   rb   ry   r|   rW   r   r   rc   r   r   r   )r}   rb   r{   r|   rW   ry   r   r   rY   rc   r   rq   r   convert_tool_call_to_json_moder   r|   r   )rj   rW   r}   complete_input_dictinputr|   additional_argsmax retries must be an intrW   r}   r|   ry   r   	_is_asyncr     .azure_client is not an instance of AzureOpenAIrU   rb   rc   )rj   rW   r}   r   r|   original_responser   )response_objectmodel_response_objectr   _response_headersr;   rj   rn   bodyr;   r:   rj   r   )r    popr   ,_init_azure_client_for_cloudflare_ai_gatewayr@   AzureOpenAIGPT5Configis_model_gpt_5_modeltransform_requestAzureOpenAIConfiggetasync_streamingr   	streamingpre_callr>   intget_azure_openai_clientr   rp   
model_dump	post_callr   rl   getattrr?   )r,   ry   rz   r{   r|   r}   rW   r~   r   r   rY   r   rc   rq   r7   r   	logger_fnr   rj   r   r   r   rb   rU   rn   stringified_responsero   r;   error_headerserror_response
error_bodys                                  r-   
completionzAzureChatCompletion.completion   s   , /6OO,g	} 0& #-H  *--mTBK"1(7(;(;K(OI +h6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  <   ",<*$' P 
 %)$W$W!-D' %X %! (0':':'<$%%"#&:#*'2$,%	 & 	 8$8*83<&-	    	G 	!!]C8K#Ay$7M$Q
D9N FD1J$ '	4 H"'A%	 	s8   DH! H! ;(H! $B<H! !	J*H,,J8AJJ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 AsyncAzureOpenAIrz   r   rj   r}   r   r   r   rU   rb   rc   rq   response_headersr   r   rj   )r   r   hidden_paramsr   r   r   r|   r   r   r   r   r:   r   r;   )r;   r:   r   )r   r>   r   
ValueErrorr   r|   	_base_url_uri_referencerx   model_call_detailsr   r   r   r    r?   asyncioCancelledErrorrl   r   hasattr)r,   r|   rW   ry   r}   rb   rc   rY   r{   rq   r   r   r   r   r   r   rn   rU   rj   r   ro   r:   r   s                          r-   r   zAzureChatCompletion.acompletionv  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)rW   azure_endpointazure_deploymenthttp_clientr   rc   )rT   r|   zoidc/r   r   Fr   r   r   r   rz   r   Tr   r   r   azurestream_optionscompletion_streamry   custom_llm_providerrq   r   r   )r@   client_sessionr$   
startswithr"   r   r>   r   r    r   r|   r   r   rp   r   r   r#   )r,   rq   r}   r|   rW   rY   rb   ry   rc   r   r   r   r   r   rT   rU   rj   rn   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   rz   r   r   r   r   r   r   r   r   r;   r   rj   rn   r:   r   r   )r   r>   r   r   r   r|   r   r   rx   r   r   r   rl   r   r?   r    )r,   rq   r}   r|   rW   rY   rb   ry   rc   r   r   r   r   r   rU   rj   rn   r   ro   r;   r   r   r:   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rW   r}   r|   ry   r   r   r   r   rc   r   r   rj   	embedding)r   r   r   r   response_typer   z:embedding_response is not an instance of EmbeddingResponser   r*   )r   r>   r   r   
embeddingsrh   ri   rS   rj   rk   r   r   r   r#   r   r    rl   r?   )r,   ry   rb   r{   r   rq   r}   r|   rW   r   rc   r   r   r   r   rn   openai_aclientrm   rj   r   embedding_responsero   s                         r-   
aembeddingzAzureChatCompletion.aembeddingx  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&r7   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   )ry   r   r   )r   rj   r   T)
rb   r   ry   rq   r|   r{   rc   r   r   r}   Fr   r   r   r   rc   )r   r}   r   r   )r   r   r   r   r;   rj   rn   )r;   r:   rj   r*   )_client_sessioncreate_client_sessionr@   r   r   r   r   r>   r   r    r   rh   ri   rS   rj   rk   r   r   r   r#   rl   r   r?   text)r,   ry   r   r}   rW   rc   rq   r{   r7   r|   r   r   r   r   r   rj   r   rb   rU   rm   rn   ro   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
        Nrc        @      @rc   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_pathry   urlrb   rj   operation-locationr   r   r   rj   status%Expected 'status' in response. Got={}	succeededfailed  Operation polling timed out.retry-after
   r   r9   result   utf-8POSThttps://api.openai.com/v1methodr   r;   rj   r2   requestr   jsonrj   )r>   floatr   httpxTimeoutr   r   AZUREr   r   postr  dumpsrj   r    r   r   areadr   rs   rl   rF   r   sleepResponseencodeRequest)r,   r   rc   r}   rW   r|   rb   rj   _params_httpx_timeoutasync_handlerrn   operation_location_urltimeout_secsru   
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   Nrc   r   r   r   r   r   r   r   r   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r9   r   r   r   r   r   r   r   r  r*   )r>   r  r   r  r  r   r@   r   r   r   r  r  r	  rj   r    r   r   readr   rs   rl   rF   r  r  r  r  )r,   r   rc   r}   rW   r|   rb   rj   r  r  sync_handlerrn   r  r  ru   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%]]_
&3

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

6*11':V9TU	     ! 
 	
r/   rT   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    /rW   z/openai/deployments/z/images/generationsz?api-version=)r   endswithrstrip)r,   rT   ry   r}   rW   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
           
        K   d }
	 |j                  dd      }|j                  d      r|j                  d      }|j                  dd      }| j                  ||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  rW   ry   rT   ry   promptr   r}   rj   r   r   rc   r}   rW   r|   rb   rj   zdall-e-2)ry   rm   r{   rq   request_datar7   r   encodingr   r   image_generationr   r   r   )r   r  r  r   r   r  r%   #transform_image_generation_responser   r@   r'  r  r   r   rl   r?   )r,   rb   r{   rT   r|   r   rq   rj   r   rc   rn   r}   rW   img_gen_api_basehttpx_responseprovider_configr   ro   s                     r-   aimage_generationz%AzureChatCompletion.aimage_generation  s     $(G	/33BH   %#??3/266}bIK#99$7txxQS?T  :  
   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   E6BE %E&A#E 	E6
6E  E6E 	E3"E..E33E6r#  c                    	 |rt        |      dkD  r|}nd }|
0|j                  dd       |j                  d      |
j                  d<   |j                  di       }i ||}||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   ||||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_modelry   
extra_body)ry   r#  r   r   r   r   r   zapi-keyzBearer Authorizationr  F)r   r|   
model_namerW   r}   is_asyncT)	rb   r   rq   r{   r|   r   rT   rc   rj   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   rl   r   r?   )r,   r#  rc   r7   rq   rj   ry   r|   r}   rW   r{   r   r   r   aimg_generationr   r1  flattened_paramsrb   r   rT   r+  r,  rn   ro   
error_codes                             r-   r(  z$AzureChatCompletion.image_generationK  s   $U	HUa *#''d;G9H9L9L :--g6
 ),,\2>J@/@Z@"fI8HID((=!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-  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<F ?BF 	G)F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)ry   r   r;  r7   r|   r}   rW   r   r   r   rc   r   r   Fr}   rW   r|   ry   r   r   r   ry   r;  r   rn   r*   )r   async_audio_speechr   audiospeechri   r   rn   )r,   ry   r   r;  r7   r|   r}   rW   r<  r   rc   r   r   r=  r   r   rU   rn   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)NTr?  r@  rA  r*   )r   rC  rD  ri   r   rn   )r,   ry   r   r;  r7   r|   r}   rW   r   r   r   rc   r   r   rU   azure_responses                   r-   rB  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_urlrW   r|   rc   r   )rW   r   r|   rc   r   r(  zmodel is not setuserHey)r1   r2   r   rj   zinvalid completion responsezx-ratelimit-remaining-requestszx-ratelimit-remaining-tokenszx-ms-region)r@   r   r  Clientr  r   rl   rf   rg   rh   ri   r   rj   r   )r,   ry   r|   r}   rW   rc   rH  rz   r   r#  r   r   r   ro   rn   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/rM   )FNN)NNNNNNNN)NN)
NNNNNNNNNN)NNNNN)NNN).rO   rP   rQ   r.   r   rS   r	   r  r  r  rp   r   r   LiteLLMLoggingObjrx   r?   rC   r   r   r   boolr   r   r   r   r   r   r   r   r   r   r   r  r  r   r  r   r   r@   r.  r(  r   rE  rB  rN  __classcell__)ra   s   @r-   r^   r^   }   s
   !  uemm+,	, &  uemm+,	
 ' ^ ""&)  &	
 #    ! "*(!3    uemm+, '$ %& $'Z )-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(	(> UU !/U "	U
 U U 'U U 
		U|  $!%"&%)26(,6:)-!gHgH gH 	gH
 'gH gH }gH #gH 3-gH c]gH !/gH !gH "*(!3gH  !!gH" 
#gHj )-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^   )7r   r  rs   typingr   r   r   r   r   r   r	   r  openair
   r   r   r@   litellm.constantsr   r   *litellm.litellm_core_utils.litellm_loggingr   rO  (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(  r%   r'   rS   rP  r\   r^   r*   r/   r-   <module>r]     s       H H H  A A  R S I 
   <   @; ;|5.>!>?@ 
*X, Xr/   