o
    @Bi 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 fddZ  ZS )MutuallyExclusiveAuthErrorreturnNonec                   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__ P/var/www/html/Trade-python/venv/lib/python3.10/site-packages/openai/lib/azure.pyr'   -   s   z#MutuallyExclusiveAuthError.__init__)r$   r%   )__name__
__module____qualname__r'   __classcell__r+   r+   r)   r,   r#   ,   s    r#   c                      s"   e Zd Zed fddZ  ZS )BaseAzureClientoptionsr   r$   httpx.Requestc                   sT   |j tv r$t|jr$|jd}|d ur$dt| jvr$d| |j  |_ t |S )Nmodelz/deploymentsz/deployments/)	url_deployments_endpointsr   	json_datagetstrbase_urlr&   _build_request)r(   r2   r4   r)   r+   r,   r;   4   s
   zBaseAzureClient._build_request)r2   r   r$   r3   )r-   r.   r/   r   r;   r0   r+   r+   r)   r,   r1   3   s    r1   c                      s  e Zd Zeddddddeedddddd5ddZeddddddeedddddd6ddZedddddeedddddd7d!dZdddddddddeeddddd"d8 fd$dZedddddddededdddi d%d9 fd-d.ZeZ	d:d/d0Z
ed;d3d4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_validationazure_endpointr9   r=   
str | Noner>   r?   r@   rA   AzureADTokenProvider | NonerB   rC   !float | Timeout | None | NotGivenrD   intrE   Mapping[str, str] | NonerF   Mapping[str, object] | NonerG   httpx.Client | NonerH   boolr$   r%   c                C     d S Nr+   )r(   rI   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r+   r+   r,   r'   B      zAzureOpenAI.__init__c                C  rR   rS   r+   )r(   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r+   r+   r,   r'   U      )r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r:   c                C  rR   rS   r+   )r(   r:   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r+   r+   r,   r'   g   rU   )r>   rI   r=   r?   r@   rA   rB   projectr:   rC   rD   rE   rF   rG   rH   rV   c                  s0  |du r
t jd}|du rt jd}|du r$|du r$|du r$td|du r.t jd}|du r6td|du r?d|i}ni |d|i}|	du ro|du rUt jd}|du r]td	|duri| d
| }	n| d}	n|durwt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
r?   rB   rV   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>   rI   r=   r?   r@   rA   rB   rV   r:   rC   rD   rE   rF   rG   rH   r)   r+   r,   r'   y   \   '

r?   rB   rV   r>   r@   rA   r:   rC   rG   rD   rE   set_default_headersrF   set_default_query_extra_kwargsstr | httpx.URL | Noneint | NotGivenrm   rn   ro   Mapping[str, Any]r   c                  B   t  j||||||	|
|||||p| j|p| j|p| 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   rV   r:   rC   rG   rD   rE   rm   rF   rn   ro   r&   copyrh   ri   rj   r(   r?   rB   rV   r>   r@   rA   r:   rC   rG   rD   rE   rm   rF   rn   ro   r)   r+   r,   rv      &   zAzureOpenAI.copyc                 C  sH   | j d ur| j S | j}|d ur"| }|rt|ts td| |S d S NzOExpected `azure_ad_token_provider` argument to return a string but it returned )ri   rj   
isinstancer9   rf   r(   providertokenr+   r+   r,   _get_azure_ad_token
  s   
zAzureOpenAI._get_azure_ad_tokenr2   r   c                 C  s   t |jr
i |jni }t|}||_|  }|d ur+|dd u r)d| |d< |S | jtur>|dd u r<| j|d< |S tdNAuthorizationzBearer zapi-keyzUnable to handle authr   headersr   r~   r8   r?   rg   rf   r(   r2   r   r@   r+   r+   r,   _prepare_options  s   

zAzureOpenAI._prepare_options)rI   r9   r=   rJ   r>   rJ   r?   rJ   r@   rJ   rA   rK   rB   rJ   rC   rL   rD   rM   rE   rN   rF   rO   rG   rP   rH   rQ   r$   r%   )r=   rJ   r>   rJ   r?   rJ   r@   rJ   rA   rK   rB   rJ   rC   rL   rD   rM   rE   rN   rF   rO   rG   rP   rH   rQ   r$   r%   )r:   r9   r>   rJ   r?   rJ   r@   rJ   rA   rK   rB   rJ   rC   rL   rD   rM   rE   rN   rF   rO   rG   rP   rH   rQ   r$   r%   ) r>   rJ   rI   rJ   r=   rJ   r?   rJ   r@   rJ   rA   rK   rB   rJ   rV   rJ   r:   rJ   rC   rL   rD   rM   rE   rN   rF   rO   rG   rP   rH   rQ   r$   r%   ) r?   rJ   rB   rJ   rV   rJ   r>   rJ   r@   rJ   rA   rK   r:   rp   rC   rL   rG   rP   rD   rq   rE   rN   rm   rN   rF   rO   rn   rO   ro   rr   r$   r   r$   rJ   r2   r   r$   r   r-   r.   r/   r
   r   r   r'   r   rv   with_optionsr~   r   r0   r+   r+   r)   r,   r<   A   s    d*
r<   c                      s  e Zd Zedddddddeedddddd5ddZedddddddeedddddd6ddZeddddddeeddddd d7d"dZdddddddddeeddddd#d8 fd$dZedddddddededdddi d%d9 fd-d.ZeZ	d:d/d0Z
ed;d3d4Z  ZS )<AsyncAzureOpenAINF)r=   r>   r?   r@   rA   rB   rV   rC   rD   rE   rF   rG   rH   rI   r9   r=   rJ   r>   r?   r@   rA    AsyncAzureADTokenProvider | NonerB   rV   rC   rL   rD   rM   rE   rN   rF   rO   rG   httpx.AsyncClient | NonerH   rQ   r$   r%   c                C  rR   rS   r+   )r(   rI   r=   r>   r?   r@   rA   rB   rV   rC   rD   rE   rF   rG   rH   r+   r+   r,   r'   /  s   zAsyncAzureOpenAI.__init__c                C  rR   rS   r+   )r(   r=   r>   r?   r@   rA   rB   rV   rC   rD   rE   rF   rG   rH   r+   r+   r,   r'   C  rT   )r>   r?   r@   rA   rB   rV   rC   rD   rE   rF   rG   rH   r:   c                C  rR   rS   r+   )r(   r:   r>   r?   r@   rA   rB   rV   rC   rD   rE   rF   rG   rH   r+   r+   r,   r'   V  rT   )rI   r=   r>   r?   r@   rA   rB   rV   r:   rC   rD   rE   rF   rG   rH   c                  s0  |du r
t jd}|du rt jd}|du r$|du r$|du r$td|du r.t jd}|du r6td|du r?d|i}ni |d|i}|	du ro|du rUt jd}|du r]td	|duri| d
| }	n| d}	n|durwt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   )r(   rI   r=   r>   r?   r@   rA   rB   rV   r:   rC   rD   rE   rF   rG   rH   r)   r+   r,   r'   i  rk   rl   rp   rq   rm   rn   ro   rr   r   c                  rs   rt   ru   rw   r)   r+   r,   rv     rx   zAsyncAzureOpenAI.copyc                   sh   | j d ur	| j S | j}|d ur2| }t|r|I d H }|r'ttt|ts.td| t|S d S ry   )	ri   rj   inspectisawaitablerz   r	   r   r9   rf   r{   r+   r+   r,   r~     s   


z$AsyncAzureOpenAI._get_azure_ad_tokenr2   r   c                   s   t |jri |jni }t|}||_|  I d H }|d ur/|dd u r-d| |d< |S | jturB|dd u r@| j|d< |S tdr   r   r   r+   r+   r,   r     s   

z!AsyncAzureOpenAI._prepare_options)rI   r9   r=   rJ   r>   rJ   r?   rJ   r@   rJ   rA   r   rB   rJ   rV   rJ   rC   rL   rD   rM   rE   rN   rF   rO   rG   r   rH   rQ   r$   r%   )r=   rJ   r>   rJ   r?   rJ   r@   rJ   rA   r   rB   rJ   rV   rJ   rC   rL   rD   rM   rE   rN   rF   rO   rG   r   rH   rQ   r$   r%   )r:   r9   r>   rJ   r?   rJ   r@   rJ   rA   r   rB   rJ   rV   rJ   rC   rL   rD   rM   rE   rN   rF   rO   rG   r   rH   rQ   r$   r%   ) rI   rJ   r=   rJ   r>   rJ   r?   rJ   r@   rJ   rA   r   rB   rJ   rV   rJ   r:   rJ   rC   rL   rD   rM   rE   rN   rF   rO   rG   r   rH   rQ   r$   r%   ) r?   rJ   rB   rJ   rV   rJ   r>   rJ   r@   rJ   rA   r   r:   rp   rC   rL   rG   r   rD   rq   rE   rN   rm   rN   rF   rO   rn   rO   ro   rr   r$   r   r   r   r   r+   r+   r)   r,   r   .  s    d*
r   )7
__future__r   rd   r   typingr   r   r   r   r   r   r	   r
   typing_extensionsr   r   httpx_typesr   r   r   r   _utilsr   r   _clientr   r   _compatr   _modelsr   
_streamingr   r   _exceptionsr   _base_clientr   r   setr6   r9   AzureADTokenProviderAsyncAzureADTokenProviderClientAsyncClientr   r   joinrg   r#   r1   r<   r   r+   r+   r+   r,   <module>   s6    (  $n