a
    f T                     @  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 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Z/edee!e e"e f dZ0d1g dZ2G dd de$Z3G dd de'e/e0f Z4G dd de4ej-e!e f eZ5G dd de4ej.e"e f eZ6dS )    )annotationsN)AnyUnionMappingTypeVarCallable	Awaitablecastoverload)Selfoverride   )	NOT_GIVENOmit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__ I/var/www/ai-form-bot/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                      s(   e Zd Zeddd fddZ  ZS )BaseAzureClientr   zhttpx.Requestoptionsr&   c                   sT   |j tv rHt|jrH|jd}|d urHdt| jvrHd| |j  |_ t |S )Nmodelz/deploymentsz/deployments/)	url_deployments_endpointsr   Z	json_datagetstrbase_urlr'   _build_request)r)   r4   r5   r*   r,   r-   r;   4   s
    zBaseAzureClient._build_request)r.   r/   r0   r   r;   r1   r,   r,   r*   r-   r2   3   s   r2   c                      s  e Z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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Ze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Z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 fddZe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 fdd ZeZ	dd!d"d#Z
ed$d$d%d&d'Z  ZS )(AzureOpenAINF)azure_deploymentapi_versionapi_keyazure_ad_tokenazure_ad_token_providerorganizationtimeoutmax_retriesdefault_headersdefault_queryhttp_client_strict_response_validationr9   
str | NonezAzureADTokenProvider | None!float | Timeout | None | NotGivenintMapping[str, str] | NoneMapping[str, object] | Nonezhttpx.Client | Noneboolr$   )azure_endpointr=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r&   c                C  s   d S Nr,   )r)   rO   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r,   r,   r-   r(   B   s    zAzureOpenAI.__init__)r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r&   c                C  s   d S rP   r,   )r)   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r,   r,   r-   r(   U   s    )r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   )r:   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r&   c                C  s   d S rP   r,   )r)   r:   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r,   r,   r-   r(   g   s    )r>   rO   r=   r?   r@   rA   rB   projectr:   rC   rD   rE   rF   rG   rH   )r>   rO   r=   r?   r@   rA   rB   rQ   r:   rC   rD   rE   rF   rG   rH   r&   c                  s0  |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
| }	q| d}	n|durtd|du rt}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
r?   rB   rQ   r:   rC   rD   rE   rF   rG   rH   osenvironr8   r   
ValueErrorAPI_KEY_SENTINELr'   r(   _api_version_azure_ad_token_azure_ad_token_provider)r)   r>   rO   r=   r?   r@   rA   rB   rQ   r:   rC   rD   rE   rF   rG   rH   r*   r,   r-   r(   y   s\    '
r?   rB   rQ   r>   r@   rA   r:   rC   rG   rD   rE   set_default_headersrF   set_default_query_extra_kwargsstr | httpx.URL | Noneint | NotGivenMapping[str, Any]r   r?   rB   rQ   r>   r@   rA   r:   rC   rG   rD   rE   rg   rF   rh   ri   r&   c                  sB   t  j||||||	|
|||||p$| j|p,| j|p4| jd|dS z~
        Create a new client instance re-using the same options given to the current client with optional overriding.
        )r>   r@   rA   )r?   rB   rQ   r:   rC   rG   rD   rE   rg   rF   rh   ri   r'   copyrc   rd   re   r)   r?   rB   rQ   r>   r@   rA   r:   rC   rG   rD   rE   rg   rF   rh   ri   r*   r,   r-   rp      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 )rd   re   
isinstancer9   ra   r)   providertokenr,   r,   r-   _get_azure_ad_token
  s    
zAzureOpenAI._get_azure_ad_tokenr   r3   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AuthorizationzBearer zapi-keyzUnable to handle authr   headersr   rw   r8   r?   rb   ra   r)   r4   r{   r@   r,   r,   r-   _prepare_options  s    
zAzureOpenAI._prepare_optionsr.   r/   r0   r
   r   r   r(   r   rp   Zwith_optionsrw   r}   r1   r,   r,   r*   r-   r<   A   s   .,,4d6*r<   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ee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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 fdd ZeZ	dd!d"d#Z
ed$d$d%d&d'Z  ZS )(AsyncAzureOpenAINF)r=   r>   r?   r@   rA   rB   rQ   rC   rD   rE   rF   rG   rH   r9   rI   z AsyncAzureADTokenProvider | NonerJ   rK   rL   rM   zhttpx.AsyncClient | NonerN   r$   )rO   r=   r>   r?   r@   rA   rB   rQ   rC   rD   rE   rF   rG   rH   r&   c                C  s   d S rP   r,   )r)   rO   r=   r>   r?   r@   rA   rB   rQ   rC   rD   rE   rF   rG   rH   r,   r,   r-   r(   /  s    zAsyncAzureOpenAI.__init__)r=   r>   r?   r@   rA   rB   rQ   rC   rD   rE   rF   rG   rH   r&   c                C  s   d S rP   r,   )r)   r=   r>   r?   r@   rA   rB   rQ   rC   rD   rE   rF   rG   rH   r,   r,   r-   r(   C  s    )r>   r?   r@   rA   rB   rQ   rC   rD   rE   rF   rG   rH   )r:   r>   r?   r@   rA   rB   rQ   rC   rD   rE   rF   rG   rH   r&   c                C  s   d S rP   r,   )r)   r:   r>   r?   r@   rA   rB   rQ   rC   rD   rE   rF   rG   rH   r,   r,   r-   r(   V  s    )rO   r=   r>   r?   r@   rA   rB   rQ   r:   rC   rD   rE   rF   rG   rH   )rO   r=   r>   r?   r@   rA   rB   rQ   r:   rC   rD   rE   rF   rG   rH   r&   c                  s0  |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
| }	q| d}	n|durtd|du rt}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.
        NrR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   )r)   rO   r=   r>   r?   r@   rA   rB   rQ   r:   rC   rD   rE   rF   rG   rH   r*   r,   r-   r(   i  s\    '
rf   rj   rk   rl   r   rm   c                  sB   t  j||||||	|
|||||p$| j|p,| j|p4| jd|dS rn   ro   rq   r*   r,   r-   rp     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 rr   )	rd   re   inspectisawaitablers   r	   r   r9   ra   rt   r,   r,   r-   rw     s    


z$AsyncAzureOpenAI._get_azure_ad_tokenr   r3   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 rx   rz   r|   r,   r,   r-   r}     s    
z!AsyncAzureOpenAI._prepare_optionsr~   r,   r,   r*   r-   r   .  s   0..4d6*r   )7
__future__r   r_   r   typingr   r   r   r   r   r   r	   r
   typing_extensionsr   r   Zhttpx_typesr   r   r   r   Z_utilsr   r   Z_clientr   r   _compatr   Z_modelsr   Z
_streamingr   r   _exceptionsr   Z_base_clientr   r   setr7   r9   ZAzureADTokenProviderZAsyncAzureADTokenProviderZClientZAsyncClientr   r   joinrb   r#   r2   r<   r   r,   r,   r,   r-   <module>   s4   (  n