
    g                        d dl 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  G d de      Z	 	 	 	 dd	ee   d
ee   deeej$                  f   dee   dee   dee   deeeef      dedeeeef      fdZdeej,                  ef   defdZ	 ddededededeg ef   f
dZ	 ddededededeg ef   f
dZy)    )CallableOptionalUnionN)AsyncAzureOpenAIAzureOpenAI)verbose_logger)BaseLLMException)get_secret_strc            
            e Zd Z	 	 	 ddeej
                     deej                     deeej                  e	f      f fdZ
 xZS )AzureOpenAIErrorrequestresponseheadersc                 .    t         |   |||||       y )N)status_codemessager   r   r   )super__init__)selfr   r   r   r   r   	__class__s         T/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/azure/common_utils.pyr   zAzureOpenAIError.__init__   s&     	# 	 	
    )NNN)__name__
__module____qualname__r   httpxRequestResponser   Headersdictr   __classcell__)r   s   @r   r   r      s[    
 ,0-18<
 %--(	

 5>>*
 %t 345
 
r   r   api_keyapi_basetimeoutmax_retriesapi_versionorganizationclient	_is_asyncreturnc                    t               }d }	|ti }
|j                         D ]*  \  }}|dk(  s
|dk(  s|dk(  r|dk(  r|||
d<   #|&||
|<   , d|
vrt        j                  |
d<   |du rt	        di |
}	|	S t        di |
}	|	S |}	|	S )	Nr   r(   r)   r#   azure_endpointr&   T )localsitemslitellmAZURE_DEFAULT_API_VERSIONr   r   )r"   r#   r$   r%   r&   r'   r(   r)   received_argsopenai_clientdatakvs                r   get_azure_openai_clientr7      s     HMDHM~!'')DAqF{a8mqK/?jQ])*%&Q * $")"C"CD,4t4M 	 (/$/M  r   r   c                     i }d| v r| d   |d<   d| v r| d   |d<   d| v r| d   |d<   d| v r| d   |d<   | j                         D ci c]  \  }}dj                  d|      | }}}i ||S c c}}w )Nzx-ratelimit-limit-requestszx-ratelimit-remaining-requestszx-ratelimit-limit-tokenszx-ratelimit-remaining-tokensz{}-{}llm_provider)r/   format)r   openai_headersr5   r6   llm_response_headerss        r   process_azure_headersr=   ?   s    N#w.7>(8
34 (72;B,<
78 "W,5<=W5X12%09@*:
56 :A9HA~q)1,   6"5n55	s   A,	tenant_id	client_idclient_secretscopec                    ddl m}m} t        j                  d       | j                  d      rt        |       }n| }|j                  d      rt        |      }n|}|j                  d      rt        |      }n|}t        j                  d|||       |||t        d       ||||      }	t        j                  d|	        ||	|      }
t        j                  d|
       |
S )	z
    Get Azure AD token provider from `client_id`, `client_secret`, and `tenant_id`

    Args:
        tenant_id: str
        client_id: str
        client_secret: str
        scope: str

    Returns:
        callable that returns a bearer token.
    r   )ClientSecretCredentialget_bearer_token_providerz&Getting Azure AD Token from Entrata IDzos.environ/z,tenant_id %s, client_id %s, client_secret %sz8tenant_id, client_id, and client_secret must be providedcredential %stoken_provider %s)azure.identityrC   rD   r   debug
startswithr
   
ValueError)r>   r?   r@   rA   rC   rD   
_tenant_id
_client_id_client_secret
credentialtoken_providers              r   "get_azure_ad_token_from_entrata_idrP   V   s    $ QABM*#I.

M*#I.

.'6&6	 Z/>3ISTT'
JOJ*5.z5AN,n=r   azure_usernameazure_passwordc                     ddl m}m} t        j                  d| ||        || ||      }t        j                  d|        |||      }t        j                  d|       |S )a  
    Get Azure AD token provider from `client_id`, `azure_username`, and `azure_password`

    Args:
        client_id: str
        azure_username: str
        azure_password: str
        scope: str

    Returns:
        callable that returns a bearer token.
    r   )UsernamePasswordCredentialrD   z2client_id %s, azure_username %s, azure_password %s)r?   usernamepasswordrE   rF   )rG   rT   rD   r   rH   )r?   rQ   rR   rA   rT   rD   rN   rO   s           r   )get_azure_ad_token_from_username_passwordrW      sl    $ U<	 ,J *5.z5AN,n=r   )NNNF)z,https://cognitiveservices.azure.com/.default)typingr   r   r   r   openair   r   r0   litellm._loggingr   )litellm.llms.base_llm.chat.transformationr	   litellm.secret_managers.mainr
   r   strfloatTimeoutintboolr7   r   r    r=   rP   rW   r-   r   r   <module>rb      s|   , ,  0  + F 7
' 
. "&"&=Ac]sm 5%--'( #	
 # 3- U;(889:  eK!1123B65)<#= 6$ 66 @	555 5 	5
 b#g5x @	&&& & 	&
 b#g&r   