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__ ^/var/www/html/cobodadashboardai.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   Z	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_endpointr@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   r'   c                C  s   d S Nr-   )r*   rS   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   r-   r-   r.   r)   D   s    zAzureOpenAI.__init__)r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   r'   c                C  s   d S rT   r-   )r*   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   r-   r-   r.   r)   X   s    )rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   )r=   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   r'   c                C  s   d S rT   r-   )r*   r=   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   r-   r-   r.   r)   k   s    )rA   rS   r@   rB   rC   rD   rE   projectrF   r=   rG   rH   rI   rJ   rK   rL   )rA   rS   r@   rB   rC   rD   rE   rU   rF   r=   rG   rH   rI   rJ   rK   rL   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rB   rE   rU   r=   rG   rH   rI   rJ   rK   rF   rL   osenvironr;   r   
ValueErrorrstripAPI_KEY_SENTINELr(   r)   _api_version_azure_ad_token_azure_ad_token_provider)r*   rA   rS   r@   rB   rC   rD   rE   rU   rF   r=   rG   rH   rI   rJ   rK   rL   r+   r-   r.   r)   ~   s^    (

rB   rE   rU   rF   rA   rC   rD   r=   rG   rK   rH   rI   set_default_headersrJ   set_default_query_extra_kwargsint | NotGivenMapping[str, Any]r   rB   rE   rU   rF   rA   rC   rD   r=   rG   rK   rH   rI   rm   rJ   rn   ro   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.
        )rA   rC   rD   )rB   rE   rU   rF   r=   rG   rK   rH   rI   rm   rJ   rn   ro   r(   copyri   rj   rk   r*   rB   rE   rU   rF   rA   rC   rD   r=   rG   rK   rH   rI   rm   rJ   rn   ro   r+   r-   r.   ru      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 )rj   rk   
isinstancer<   rf   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;   rB   rh   rf   r*   r7   r   rC   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   ri   rB   r|   r*   r8   r   Zauth_headersqueryr{   r-   r-   r.   _configure_realtime6  s    
zAzureOpenAI._configure_realtimer/   r0   r1   r
   r   r   r)   r   ru   Z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)r@   rA   rB   rC   rD   rE   rU   rF   rG   rH   rI   rJ   rK   rL   r<   rM   z AsyncAzureADTokenProvider | NonerN   rO   r6   rP   rQ   zhttpx.AsyncClient | NonerR   r%   )rS   r@   rA   rB   rC   rD   rE   rU   rF   rG   rH   rI   rJ   rK   rL   r'   c                C  s   d S rT   r-   )r*   rS   r@   rA   rB   rC   rD   rE   rU   rF   rG   rH   rI   rJ   rK   rL   r-   r-   r.   r)   G  s    zAsyncAzureOpenAI.__init__)r@   rA   rB   rC   rD   rE   rU   rF   rG   rH   rI   rJ   rK   rL   r'   c                C  s   d S rT   r-   )r*   r@   rA   rB   rC   rD   rE   rU   rF   rG   rH   rI   rJ   rK   rL   r-   r-   r.   r)   \  s    )rA   rB   rC   rD   rE   rU   rF   rG   rH   rI   rJ   rK   rL   )r=   rA   rB   rC   rD   rE   rU   rF   rG   rH   rI   rJ   rK   rL   r'   c                C  s   d S rT   r-   )r*   r=   rA   rB   rC   rD   rE   rU   rF   rG   rH   rI   rJ   rK   rL   r-   r-   r.   r)   p  s    )rS   r@   rA   rB   rC   rD   rE   rU   r=   rF   rG   rH   rI   rJ   rK   rL   )rS   r@   rA   rB   rC   rD   rE   rU   r=   rF   rG   rH   rI   rJ   rK   rL   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.
        NrV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   )r*   rS   r@   rA   rB   rC   rD   rE   rU   r=   rF   rG   rH   rI   rJ   rK   rL   r+   r-   r.   r)     s^    (

rl   rp   rq   r   rr   c                  sD   t  j||||||	|
||||||p&| j|p.| j|p6| jd|dS rs   rt   rv   r+   r-   r.   ru     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 rw   )	rj   rk   inspectisawaitablerx   r	   r   r<   rf   ry   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   rd   r   typingr   r   r   r   r   r   r	   r
   Ztyping_extensionsr   r   Zhttpx_typesr   r   r   r   r   _utilsr   r   Z_clientr   r   Z_compatr   Z_modelsr   Z
_streamingr   r   _exceptionsr   Z_base_clientr   r   setr:   r<   ZAzureADTokenProviderZAsyncAzureADTokenProviderZClientZAsyncClientr   r    joinrh   r$   r3   r?   r   r-   r-   r-   r.   <module>   s6   (   