a
    !fQ                     @  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 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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Z-d.g dZ/G dd de!Z0G dd de$e,e-f Z1G dd de1ej*ee f eZ2G dd de1ej+ee f eZ3dS )    )annotationsN)AnyUnionMappingTypeVarCallable	Awaitableoverload)Selfoverride   )	NOT_GIVENOmitTimeoutNotGiven)is_given
is_mapping)OpenAIAsyncOpenAI)FinalRequestOptions)StreamAsyncStream)OpenAIError)DEFAULT_MAX_RETRIES
BaseClient)z/completionsz/chat/completionsz/embeddingsz/audio/transcriptionsz/audio/translationsz/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__ Q/var/www/html/python-backend/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'   r2   r3   r(   r*   r+   r9   2   s
    zBaseAzureClient._build_request)r,   r-   r.   r   r9   r/   r*   r*   r(   r+   r0   1   s   r0   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ee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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 fdd ZeZ	dd!d"d#Z
ed$dd% f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_validationr7   
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?   r@   rA   rB   rC   rD   rE   rF   rG   r$   c                C  s   d S Nr*   r'   rO   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r*   r*   r+   r&   @   s    zAzureOpenAI.__init__r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r$   c                C  s   d S rP   r*   r'   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r*   r*   r+   r&   T   s    r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r8   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r$   c                C  s   d S rP   r*   r'   r8   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r*   r*   r+   r&   g   s    )r=   rO   r<   r>   r?   r@   rA   r8   rB   rC   rD   rE   rF   rG   )r=   rO   r<   r>   r?   r@   rA   r8   rB   rC   rD   rE   rF   rG   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
| }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`
        - `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.
        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>   rA   r8   rB   rC   rD   rE   rF   rG   osenvironr6   r   
ValueErrorAPI_KEY_SENTINELr%   r&   _api_version_azure_ad_token_azure_ad_token_provider)r'   r=   rO   r<   r>   r?   r@   rA   r8   rB   rC   rD   rE   rF   rG   r(   r*   r+   r&   z   sZ    %
r>   rA   r=   r?   r@   r8   rB   rF   rC   rD   set_default_headersrE   set_default_query_extra_kwargsstr | httpx.URL | Noneint | NotGivenMapping[str, Any]r
   r>   rA   r=   r?   r@   r8   rB   rF   rC   rD   rl   rE   rm   rn   r$   c                  s@   t  j||||||	|
||||p"| j|p*| j|p2| 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?   r@   )r>   rA   r8   rB   rF   rC   rD   rl   rE   rm   rn   r%   copyrh   ri   rj   r'   r>   rA   r=   r?   r@   r8   rB   rF   rC   rD   rl   rE   rm   rn   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 )ri   rj   
isinstancer7   rf   r'   providertokenr*   r*   r+   _get_azure_ad_token  s    
zAzureOpenAI._get_azure_ad_tokenr   r1   c                   s   t |jri |jni }||_|  }|d urL|dd u rxd| |d< n,| jturp|dd u rx| j|d< ntdt |S NAuthorizationzBearer zapi-keyzUnable to handle auth	r   headersr|   r6   r>   rg   rf   r%   _prepare_optionsr'   r2   r   r?   r(   r*   r+   r     s    
zAzureOpenAI._prepare_optionsr,   r-   r.   r	   r   r   r&   r   ru   Zwith_optionsr|   r   r/   r*   r*   r(   r+   r:   ?   s   .,,2a4(r:   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ee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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 fdd ZeZ	dd!d"d#Z
ed$dd% fd&d'Z  ZS )(AsyncAzureOpenAINFr;   r7   rH   z AsyncAzureADTokenProvider | NonerI   rJ   rK   rL   zhttpx.AsyncClient | NonerM   r"   rN   c                C  s   d S rP   r*   rQ   r*   r*   r+   r&   )  s    zAsyncAzureOpenAI.__init__rR   c                C  s   d S rP   r*   rS   r*   r*   r+   r&   =  s    rT   rU   c                C  s   d S rP   r*   rV   r*   r*   r+   r&   P  s    )rO   r<   r=   r>   r?   r@   rA   r8   rB   rC   rD   rE   rF   rG   )rO   r<   r=   r>   r?   r@   rA   r8   rB   rC   rD   rE   rF   rG   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
| }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`
        - `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.
        NrW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   )r'   rO   r<   r=   r>   r?   r@   rA   r8   rB   rC   rD   rE   rF   rG   r(   r*   r+   r&   c  sZ    %
rk   ro   rp   rq   r
   rr   c                  s@   t  j||||||	|
||||p"| j|p*| j|p2| jd|dS rs   rt   rv   r(   r*   r+   ru     s$    zAsyncAzureOpenAI.copyr#   c                   s\   | j d ur| j S | j}|d urX| }t|r8|I d H }|rFt|tsTtd| |S d S rw   )ri   rj   inspectisawaitablerx   r7   rf   ry   r*   r*   r+   r|     s    


z$AsyncAzureOpenAI._get_azure_ad_tokenr   r1   c                   s   t |jri |jni }||_|  I d H }|d urR|dd u r~d| |d< n,| jturv|dd u r~| j|d< ntdt |I d H S r}   r   r   r(   r*   r+   r      s    
z!AsyncAzureOpenAI._prepare_optionsr   r*   r*   r(   r+   r   (  s   .,,2a4(r   )4
__future__r   rd   r   typingr   r   r   r   r   r   r	   Ztyping_extensionsr
   r   Zhttpx_typesr   r   r   r   _utilsr   r   Z_clientr   r   Z_modelsr   Z
_streamingr   r   _exceptionsr   Z_base_clientr   r   setr5   r7   ZAzureADTokenProviderZAsyncAzureADTokenProviderZClientZAsyncClientr   r   joinrg   r!   r0   r:   r   r*   r*   r*   r+   <module>   s2   $  j