o
    #`^hhT                     @  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__ N/home/air/shanriGPT/back/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dd fd	d
Z  ZS )BaseAzureClientr   retries_takenoptionsr   r3   intr$   httpx.Requestc                  sX   |j tv r$t|jr$|jd}|d ur$dt| jvr$d| |j  |_ t j||dS )Nmodelz/deploymentsz/deployments/r2   )	url_deployments_endpointsr   	json_datagetstrbase_urlr&   _build_request)r(   r4   r3   r7   r)   r+   r,   r>   4   s
   zBaseAzureClient._build_request)r4   r   r3   r5   r$   r6   )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_endpointr<   r@   
str | NonerA   rB   rC   rD   AzureADTokenProvider | NonerE   rF   !float | Timeout | None | NotGivenrG   r5   rH   Mapping[str, str] | NonerI   Mapping[str, object] | NonerJ   httpx.Client | NonerK   boolr$   r%   c                C     d S Nr+   )r(   rL   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   r+   r+   r,   r'   D      zAzureOpenAI.__init__c                C  rT   rU   r+   )r(   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   r+   r+   r,   r'   W      )rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   r=   c                C  rT   rU   r+   )r(   r=   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   r+   r+   r,   r'   i   rW   )rA   rL   r@   rB   rC   rD   rE   projectr=   rF   rG   rH   rI   rJ   rK   rX   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
rB   rE   rX   r=   rF   rG   rH   rI   rJ   rK   osenvironr;   r   
ValueErrorAPI_KEY_SENTINELr&   r'   _api_version_azure_ad_token_azure_ad_token_provider)r(   rA   rL   r@   rB   rC   rD   rE   rX   r=   rF   rG   rH   rI   rJ   rK   r)   r+   r,   r'   {   \   '

rB   rE   rX   rA   rC   rD   r=   rF   rJ   rG   rH   set_default_headersrI   set_default_query_extra_kwargsstr | httpx.URL | Noneint | NotGivenro   rp   rq   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.
        )rA   rC   rD   )rB   rE   rX   r=   rF   rJ   rG   rH   ro   rI   rp   rq   r&   copyrj   rk   rl   r(   rB   rE   rX   rA   rC   rD   r=   rF   rJ   rG   rH   ro   rI   rp   rq   r)   r+   r,   rx      &   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 )rk   rl   
isinstancer<   rh   r(   providertokenr+   r+   r,   _get_azure_ad_token  s   
zAzureOpenAI._get_azure_ad_tokenr4   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   r;   rB   ri   rh   r(   r4   r   rC   r+   r+   r,   _prepare_options  s   

zAzureOpenAI._prepare_options)rL   r<   r@   rM   rA   rM   rB   rM   rC   rM   rD   rN   rE   rM   rF   rO   rG   r5   rH   rP   rI   rQ   rJ   rR   rK   rS   r$   r%   )r@   rM   rA   rM   rB   rM   rC   rM   rD   rN   rE   rM   rF   rO   rG   r5   rH   rP   rI   rQ   rJ   rR   rK   rS   r$   r%   )r=   r<   rA   rM   rB   rM   rC   rM   rD   rN   rE   rM   rF   rO   rG   r5   rH   rP   rI   rQ   rJ   rR   rK   rS   r$   r%   ) rA   rM   rL   rM   r@   rM   rB   rM   rC   rM   rD   rN   rE   rM   rX   rM   r=   rM   rF   rO   rG   r5   rH   rP   rI   rQ   rJ   rR   rK   rS   r$   r%   ) rB   rM   rE   rM   rX   rM   rA   rM   rC   rM   rD   rN   r=   rr   rF   rO   rJ   rR   rG   rs   rH   rP   ro   rP   rI   rQ   rp   rQ   rq   rt   r$   r   r$   rM   r4   r   r$   r   r-   r.   r/   r
   r   r   r'   r   rx   with_optionsr   r   r0   r+   r+   r)   r,   r?   C   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@   rA   rB   rC   rD   rE   rX   rF   rG   rH   rI   rJ   rK   rL   r<   r@   rM   rA   rB   rC   rD    AsyncAzureADTokenProvider | NonerE   rX   rF   rO   rG   r5   rH   rP   rI   rQ   rJ   httpx.AsyncClient | NonerK   rS   r$   r%   c                C  rT   rU   r+   )r(   rL   r@   rA   rB   rC   rD   rE   rX   rF   rG   rH   rI   rJ   rK   r+   r+   r,   r'   1  s   zAsyncAzureOpenAI.__init__c                C  rT   rU   r+   )r(   r@   rA   rB   rC   rD   rE   rX   rF   rG   rH   rI   rJ   rK   r+   r+   r,   r'   E  rV   )rA   rB   rC   rD   rE   rX   rF   rG   rH   rI   rJ   rK   r=   c                C  rT   rU   r+   )r(   r=   rA   rB   rC   rD   rE   rX   rF   rG   rH   rI   rJ   rK   r+   r+   r,   r'   X  rV   )rL   r@   rA   rB   rC   rD   rE   rX   r=   rF   rG   rH   rI   rJ   rK   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.
        NrY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   )r(   rL   r@   rA   rB   rC   rD   rE   rX   r=   rF   rG   rH   rI   rJ   rK   r)   r+   r,   r'   k  rm   rn   rr   rs   ro   rp   rq   rt   r   c                  ru   rv   rw   ry   r)   r+   r,   rx     rz   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 r{   )	rk   rl   inspectisawaitabler|   r	   r   r<   rh   r}   r+   r+   r,   r     s   


z$AsyncAzureOpenAI._get_azure_ad_tokenr4   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)rL   r<   r@   rM   rA   rM   rB   rM   rC   rM   rD   r   rE   rM   rX   rM   rF   rO   rG   r5   rH   rP   rI   rQ   rJ   r   rK   rS   r$   r%   )r@   rM   rA   rM   rB   rM   rC   rM   rD   r   rE   rM   rX   rM   rF   rO   rG   r5   rH   rP   rI   rQ   rJ   r   rK   rS   r$   r%   )r=   r<   rA   rM   rB   rM   rC   rM   rD   r   rE   rM   rX   rM   rF   rO   rG   r5   rH   rP   rI   rQ   rJ   r   rK   rS   r$   r%   ) rL   rM   r@   rM   rA   rM   rB   rM   rC   rM   rD   r   rE   rM   rX   rM   r=   rM   rF   rO   rG   r5   rH   rP   rI   rQ   rJ   r   rK   rS   r$   r%   ) rB   rM   rE   rM   rX   rM   rA   rM   rC   rM   rD   r   r=   rr   rF   rO   rJ   r   rG   rs   rH   rP   ro   rP   rI   rQ   rp   rQ   rq   rt   r$   r   r   r   r   r+   r+   r)   r,   r   0  s    d*
r   )7
__future__r   rf   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   setr9   r<   AzureADTokenProviderAsyncAzureADTokenProviderClientAsyncClientr   r   joinri   r#   r1   r?   r   r+   r+   r+   r,   <module>   s6    (  $n