a
    ~g\                     @  s  d dl m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mZ d dlmZmZ d dlZddlmZmZmZmZmZ ddlmZm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# ddl$m%Z% ddl&m'Z'm(Z( e)g dZ*e	g e+f Z,e	g df Z-edeej.ej/f dZ0edee"e e#e f dZ1d2g dZ3G dd de%Z4G dd de(e0e1f Z5G dd de5ej.e"e f eZ6G dd de5ej/e#e f eZ7dS )    )annotationsN)AnyUnionMappingTypeVarCallable	Awaitablecastoverload)Selfoverride   )	NOT_GIVENOmitQueryTimeoutNotGiven)is_given
is_mapping)OpenAIAsyncOpenAI)
model_copy)FinalRequestOptions)StreamAsyncStream)OpenAIError)DEFAULT_MAX_RETRIES
BaseClient)z/completionsz/chat/completionsz/embeddingsz/audio/transcriptionsz/audio/translationsz/audio/speechz/images/generationszstr | Awaitable[str]_HttpxClientT)bound_DefaultStreamT )<zmissing API key>c                      s"   e Zd Zdd fddZ  ZS )MutuallyExclusiveAuthErrorNonereturnc                   s   t  d d S )NzThe `api_key`, `azure_ad_token` and `azure_ad_token_provider` arguments are mutually exclusive; Only one can be passed at a time)super__init__)self	__class__ U/var/www/html/emsaiapi.evdpl.com/venv/lib/python3.9/site-packages/openai/lib/azure.pyr)   -   s    z#MutuallyExclusiveAuthError.__init__)__name__
__module____qualname__r)   __classcell__r-   r-   r+   r.   r$   ,   s   r$   c                      s0   e Zd Zedddddd fddZ  ZS )	BaseAzureClientr   retries_takenr   intzhttpx.Request)optionsr5   r'   c                  sX   |j tv rHt|jrH|jd}|d urHdt| jvrHd| |j  |_ t j||dS )Nmodelz/deploymentsz/deployments/r4   )	url_deployments_endpointsr   	json_datagetstrbase_urlr(   _build_request)r*   r7   r5   r8   r+   r-   r.   r?   4   s
    zBaseAzureClient._build_request)r/   r0   r1   r   r?   r2   r-   r-   r+   r.   r3   3   s   r3   c                      s  e Zd Zedddddddeeddddddddddddddd	d
dddddddZedddddddeedddddddddddddd	d
dddddddZeddddddeedddddddddddddd	d
dddddddZddddddddddeeddddddddddddddddd	d
ddddd fddZeddddddddededdddi ddddddddddddd
d
ddddd fdd ZeZ	dd!d"d#Z
ed$d$d%d&d'Zdd(d)d*d+d,Z  ZS )-AzureOpenAINF)azure_deploymentapi_versionapi_keyazure_ad_tokenazure_ad_token_providerorganizationwebsocket_base_urltimeoutmax_retriesdefault_headersdefault_queryhttp_client_strict_response_validationr=   
str | NonezAzureADTokenProvider | Nonestr | httpx.URL | None!float | Timeout | None | NotGivenr6   Mapping[str, str] | NoneMapping[str, object] | Nonezhttpx.Client | Noneboolr%   )azure_endpointrA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r'   c                C  s   d S Nr-   )r*   rT   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r-   r-   r.   r)   D   s    zAzureOpenAI.__init__)rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r'   c                C  s   d S rU   r-   )r*   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r-   r-   r.   r)   X   s    )rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   )r>   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r'   c                C  s   d S rU   r-   )r*   r>   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   r-   r-   r.   r)   k   s    )rB   rT   rA   rC   rD   rE   rF   projectrG   r>   rH   rI   rJ   rK   rL   rM   )rB   rT   rA   rC   rD   rE   rF   rV   rG   r>   rH   rI   rJ   rK   rL   rM   r'   c                  s@  |du rt jd}|du r(t jd}|du rH|du rH|du rHtd|du r\t jd}|du rltd|du r~d|i}ni |d|i}|
du r|du rt jd}|du rtd	|dur|d
 d| }
q|d
 d}
n|durtd|du rt}t j||||
||||||	|d || _	|| _
|| _dS )a  Construct a new synchronous azure openai client instance.

        This automatically infers the following arguments from their corresponding environment variables if they are not provided:
        - `api_key` from `AZURE_OPENAI_API_KEY`
        - `organization` from `OPENAI_ORG_ID`
        - `project` from `OPENAI_PROJECT_ID`
        - `azure_ad_token` from `AZURE_OPENAI_AD_TOKEN`
        - `api_version` from `OPENAI_API_VERSION`
        - `azure_endpoint` from `AZURE_OPENAI_ENDPOINT`

        Args:
            azure_endpoint: Your Azure endpoint, including the resource, e.g. `https://example-resource.azure.openai.com/`

            azure_ad_token: Your Azure Active Directory token, https://www.microsoft.com/en-us/security/business/identity-access/microsoft-entra-id

            azure_ad_token_provider: A function that returns an Azure Active Directory token, will be invoked on every request.

            azure_deployment: A model deployment, if given sets the base client URL to include `/deployments/{azure_deployment}`.
                Note: this means you won't be able to use non-deployment endpoints. Not supported with Assistants APIs.
        NAZURE_OPENAI_API_KEYAZURE_OPENAI_AD_TOKENMissing credentials. Please pass one of `api_key`, `azure_ad_token`, `azure_ad_token_provider`, or the `AZURE_OPENAI_API_KEY` or `AZURE_OPENAI_AD_TOKEN` environment variables.OPENAI_API_VERSION_Must provide either the `api_version` argument or the `OPENAI_API_VERSION` environment variableapi-versionAZURE_OPENAI_ENDPOINTuMust provide one of the `base_url` or `azure_endpoint` arguments, or the `AZURE_OPENAI_ENDPOINT` environment variable//openai/deployments//openai2base_url and azure_endpoint are mutually exclusiverC   rF   rV   r>   rH   rI   rJ   rK   rL   rG   rM   osenvironr<   r   
ValueErrorrstripAPI_KEY_SENTINELr(   r)   _api_version_azure_ad_token_azure_ad_token_provider)r*   rB   rT   rA   rC   rD   rE   rF   rV   rG   r>   rH   rI   rJ   rK   rL   rM   r+   r-   r.   r)   ~   s^    (

rC   rF   rV   rG   rB   rD   rE   r>   rH   rL   rI   rJ   set_default_headersrK   set_default_query_extra_kwargsint | NotGivenMapping[str, Any]r   rC   rF   rV   rG   rB   rD   rE   r>   rH   rL   rI   rJ   rn   rK   ro   rp   r'   c                  sD   t  j||||||	|
||||||p&| j|p.| j|p6| jd|dS z~
        Create a new client instance re-using the same options given to the current client with optional overriding.
        )rB   rD   rE   )rC   rF   rV   rG   r>   rH   rL   rI   rJ   rn   rK   ro   rp   r(   copyrj   rk   rl   r*   rC   rF   rV   rG   rB   rD   rE   r>   rH   rL   rI   rJ   rn   rK   ro   rp   r+   r-   r.   rv      s(    zAzureOpenAI.copyr&   c                 C  sH   | j d ur| j S | j}|d urD| }|r2t|ts@td| |S d S NzOExpected `azure_ad_token_provider` argument to return a string but it returned )rk   rl   
isinstancer=   rg   r*   providertokenr-   r-   r.   _get_azure_ad_token  s    
zAzureOpenAI._get_azure_ad_tokenr   r7   r'   c                 C  s   t |jri |jni }t|}||_|  }|d urT|dd u rd| |d< n,| jturx|dd u r| j|d< ntd|S NAuthorizationBearer api-keyzUnable to handle authr   headersr   r}   r<   rC   ri   rg   r*   r7   r   rD   r-   r-   r.   _prepare_options"  s    
zAzureOpenAI._prepare_optionsr   tuple[Query, dict[str, str]]r8   extra_queryr'   c                 C  sP   i }i || j |d}| jdkr.d| ji}n|  }|rHdd| i}||fS N)r\   Z
deploymentz<missing API key>r   r   r   rj   rC   r}   r*   r8   r   auth_headersqueryr|   r-   r-   r.   _configure_realtime6  s    
zAzureOpenAI._configure_realtimer/   r0   r1   r
   r   r   r)   r   rv   with_optionsr}   r   r   r2   r-   r-   r+   r.   r@   C   s   0..6f8,r@   c                      s  e Zd Zeddddddddeedddddddddddddddd	d
dddddddZeddddddddeeddddddddddddddd	d
dddddddZedddddddeeddddddddddddddd	d
dddddddZddddddddddeeddddddddddddddddd	d
ddddd fddZeddddddddededdddi ddddddddddddd
d
ddddd fdd ZeZ	dd!d"d#Z
ed$d$d%d&d'Zdd(d)d*d+d,Z  ZS )-AsyncAzureOpenAINF)rA   rB   rC   rD   rE   rF   rV   rG   rH   rI   rJ   rK   rL   rM   r=   rN   z AsyncAzureADTokenProvider | NonerO   rP   r6   rQ   rR   zhttpx.AsyncClient | NonerS   r%   )rT   rA   rB   rC   rD   rE   rF   rV   rG   rH   rI   rJ   rK   rL   rM   r'   c                C  s   d S rU   r-   )r*   rT   rA   rB   rC   rD   rE   rF   rV   rG   rH   rI   rJ   rK   rL   rM   r-   r-   r.   r)   G  s    zAsyncAzureOpenAI.__init__)rA   rB   rC   rD   rE   rF   rV   rG   rH   rI   rJ   rK   rL   rM   r'   c                C  s   d S rU   r-   )r*   rA   rB   rC   rD   rE   rF   rV   rG   rH   rI   rJ   rK   rL   rM   r-   r-   r.   r)   \  s    )rB   rC   rD   rE   rF   rV   rG   rH   rI   rJ   rK   rL   rM   )r>   rB   rC   rD   rE   rF   rV   rG   rH   rI   rJ   rK   rL   rM   r'   c                C  s   d S rU   r-   )r*   r>   rB   rC   rD   rE   rF   rV   rG   rH   rI   rJ   rK   rL   rM   r-   r-   r.   r)   p  s    )rT   rA   rB   rC   rD   rE   rF   rV   r>   rG   rH   rI   rJ   rK   rL   rM   )rT   rA   rB   rC   rD   rE   rF   rV   r>   rG   rH   rI   rJ   rK   rL   rM   r'   c                  s@  |du rt jd}|du r(t jd}|du rH|du rH|du rHtd|du r\t jd}|du rltd|du r~d|i}ni |d|i}|	du r|du rt jd}|du rtd	|dur|d
 d| }	q|d
 d}	n|durtd|du rt}t j||||	||||||
|d || _	|| _
|| _dS )a  Construct a new asynchronous azure openai client instance.

        This automatically infers the following arguments from their corresponding environment variables if they are not provided:
        - `api_key` from `AZURE_OPENAI_API_KEY`
        - `organization` from `OPENAI_ORG_ID`
        - `project` from `OPENAI_PROJECT_ID`
        - `azure_ad_token` from `AZURE_OPENAI_AD_TOKEN`
        - `api_version` from `OPENAI_API_VERSION`
        - `azure_endpoint` from `AZURE_OPENAI_ENDPOINT`

        Args:
            azure_endpoint: Your Azure endpoint, including the resource, e.g. `https://example-resource.azure.openai.com/`

            azure_ad_token: Your Azure Active Directory token, https://www.microsoft.com/en-us/security/business/identity-access/microsoft-entra-id

            azure_ad_token_provider: A function that returns an Azure Active Directory token, will be invoked on every request.

            azure_deployment: A model deployment, if given sets the base client URL to include `/deployments/{azure_deployment}`.
                Note: this means you won't be able to use non-deployment endpoints. Not supported with Assistants APIs.
        NrW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   )r*   rT   rA   rB   rC   rD   rE   rF   rV   r>   rG   rH   rI   rJ   rK   rL   rM   r+   r-   r.   r)     s^    (

rm   rq   rr   r   rs   c                  sD   t  j||||||	|
||||||p&| j|p.| j|p6| jd|dS rt   ru   rw   r+   r-   r.   rv     s(    zAsyncAzureOpenAI.copyr&   c                   sf   | j d ur| j S | j}|d urb| }t|r8|I d H }|rLttt|tsZtd| t|S d S rx   )	rk   rl   inspectisawaitablery   r	   r   r=   rg   rz   r-   r-   r.   r}     s    


z$AsyncAzureOpenAI._get_azure_ad_tokenr   r~   c                   s   t |jri |jni }t|}||_|  I d H }|d urZ|dd u rd| |d< n,| jtur~|dd u r| j|d< ntd|S r   r   r   r-   r-   r.   r   *  s    
z!AsyncAzureOpenAI._prepare_optionsr   r   r   c                   sV   i }i || j |d}| jdkr.d| ji}n |  I d H }|rNdd| i}||fS r   r   r   r-   r-   r.   r   >  s    
z$AsyncAzureOpenAI._configure_realtimer   r-   r-   r+   r.   r   F  s   2006f8,r   )8
__future__r   re   r   typingr   r   r   r   r   r   r	   r
   typing_extensionsr   r   httpx_typesr   r   r   r   r   _utilsr   r   _clientr   r   _compatr   _modelsr   
_streamingr   r   _exceptionsr   _base_clientr   r   setr:   r=   ZAzureADTokenProviderZAsyncAzureADTokenProviderClientAsyncClientr   r    joinri   r$   r3   r@   r   r-   r-   r-   r.   <module>   s6   (   