o
    +ifS                     @  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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Z0G dd de"Z1G dd de%e-e.f Z2G dd de2ej+ee f eZ3G dd de2ej,e e f eZ4dS )    )annotationsN)AnyUnionMappingTypeVarCallable	Awaitablecast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/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__ I/var/www/html/corbot_env/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'   r1   r3   r(   r*   r+   r:   3   s
   zBaseAzureClient._build_request)r1   r   r#   r2   )r,   r-   r.   r   r:   r/   r*   r*   r(   r+   r0   2   s    r0   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; f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_endpointr8   r<   
str | Noner=   r>   r?   r@   AzureADTokenProvider | NonerA   rB   !float | Timeout | None | NotGivenrC   intrD   Mapping[str, str] | NonerE   Mapping[str, object] | NonerF   httpx.Client | NonerG   boolr#   r$   c                C     d S Nr*   )r'   rH   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r*   r*   r+   r&   A      zAzureOpenAI.__init__c                C  rQ   rR   r*   )r'   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r*   r*   r+   r&   U      )r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r9   c                C  rQ   rR   r*   )r'   r9   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   r*   r*   r+   r&   h   rT   )r=   rH   r<   r>   r?   r@   rA   projectr9   rB   rC   rD   rE   rF   rG   rU   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>   rA   rU   r9   rB   rC   rD   rE   rF   rG   osenvironr7   r   
ValueErrorAPI_KEY_SENTINELr%   r&   _api_version_azure_ad_token_azure_ad_token_provider)r'   r=   rH   r<   r>   r?   r@   rA   rU   r9   rB   rC   rD   rE   rF   rG   r(   r*   r+   r&   {   \   '

r>   rA   rU   r=   r?   r@   r9   rB   rF   rC   rD   set_default_headersrE   set_default_query_extra_kwargsstr | httpx.URL | Noneint | NotGivenrl   rm   rn   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?   r@   )r>   rA   rU   r9   rB   rF   rC   rD   rl   rE   rm   rn   r%   copyrg   rh   ri   r'   r>   rA   rU   r=   r?   r@   r9   rB   rF   rC   rD   rl   rE   rm   rn   r(   r*   r+   ru      &   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 )rh   ri   
isinstancer8   re   r'   providertokenr*   r*   r+   _get_azure_ad_token  s   
zAzureOpenAI._get_azure_ad_tokenr1   r   c                   s   t |jr
i |jni }||_|  }|d ur&|dd u r%d| |d< n| jtur8|dd u r7| j|d< ntdt |S NAuthorizationzBearer zapi-keyzUnable to handle auth	r   headersr}   r7   r>   rf   re   r%   _prepare_optionsr'   r1   r   r?   r(   r*   r+   r     s   

zAzureOpenAI._prepare_options)rH   r8   r<   rI   r=   rI   r>   rI   r?   rI   r@   rJ   rA   rI   rB   rK   rC   rL   rD   rM   rE   rN   rF   rO   rG   rP   r#   r$   )r<   rI   r=   rI   r>   rI   r?   rI   r@   rJ   rA   rI   rB   rK   rC   rL   rD   rM   rE   rN   rF   rO   rG   rP   r#   r$   )r9   r8   r=   rI   r>   rI   r?   rI   r@   rJ   rA   rI   rB   rK   rC   rL   rD   rM   rE   rN   rF   rO   rG   rP   r#   r$   ) r=   rI   rH   rI   r<   rI   r>   rI   r?   rI   r@   rJ   rA   rI   rU   rI   r9   rI   rB   rK   rC   rL   rD   rM   rE   rN   rF   rO   rG   rP   r#   r$   ) r>   rI   rA   rI   rU   rI   r=   rI   r?   rI   r@   rJ   r9   ro   rB   rK   rF   rO   rC   rp   rD   rM   rl   rM   rE   rN   rm   rN   rn   rq   r#   r   r#   rI   r1   r   r#   r$   r,   r-   r.   r
   r   r   r&   r   ru   with_optionsr}   r   r/   r*   r*   r(   r+   r;   @   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; fd3d4Z  ZS )<AsyncAzureOpenAINF)r<   r=   r>   r?   r@   rA   rU   rB   rC   rD   rE   rF   rG   rH   r8   r<   rI   r=   r>   r?   r@    AsyncAzureADTokenProvider | NonerA   rU   rB   rK   rC   rL   rD   rM   rE   rN   rF   httpx.AsyncClient | NonerG   rP   r#   r$   c                C  rQ   rR   r*   )r'   rH   r<   r=   r>   r?   r@   rA   rU   rB   rC   rD   rE   rF   rG   r*   r*   r+   r&   /  s   zAsyncAzureOpenAI.__init__c                C  rQ   rR   r*   )r'   r<   r=   r>   r?   r@   rA   rU   rB   rC   rD   rE   rF   rG   r*   r*   r+   r&   D  rS   )r=   r>   r?   r@   rA   rU   rB   rC   rD   rE   rF   rG   r9   c                C  rQ   rR   r*   )r'   r9   r=   r>   r?   r@   rA   rU   rB   rC   rD   rE   rF   rG   r*   r*   r+   r&   X  rS   )rH   r<   r=   r>   r?   r@   rA   rU   r9   rB   rC   rD   rE   rF   rG   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.
        NrV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   )r'   rH   r<   r=   r>   r?   r@   rA   rU   r9   rB   rC   rD   rE   rF   rG   r(   r*   r+   r&   l  rj   rk   ro   rp   rl   rm   rn   rq   r   c                  rr   rs   rt   rv   r(   r*   r+   ru     rw   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 rx   )	rh   ri   inspectisawaitablery   r	   r   r8   re   rz   r*   r*   r+   r}     s   


z$AsyncAzureOpenAI._get_azure_ad_tokenr1   r   c                   s   t |jri |jni }||_|  I d H }|d ur*|dd u r)d| |d< n| jtur<|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_options)rH   r8   r<   rI   r=   rI   r>   rI   r?   rI   r@   r   rA   rI   rU   rI   rB   rK   rC   rL   rD   rM   rE   rN   rF   r   rG   rP   r#   r$   )r<   rI   r=   rI   r>   rI   r?   rI   r@   r   rA   rI   rU   rI   rB   rK   rC   rL   rD   rM   rE   rN   rF   r   rG   rP   r#   r$   )r9   r8   r=   rI   r>   rI   r?   rI   r@   r   rA   rI   rU   rI   rB   rK   rC   rL   rD   rM   rE   rN   rF   r   rG   rP   r#   r$   ) rH   rI   r<   rI   r=   rI   r>   rI   r?   rI   r@   r   rA   rI   rU   rI   r9   rI   rB   rK   rC   rL   rD   rM   rE   rN   rF   r   rG   rP   r#   r$   ) r>   rI   rA   rI   rU   rI   r=   rI   r?   rI   r@   r   r9   ro   rB   rK   rF   r   rC   rp   rD   rM   rl   rM   rE   rN   rm   rN   rn   rq   r#   r   r   r   r   r*   r*   r(   r+   r   .  s    d*
r   )5
__future__r   rc   r   typingr   r   r   r   r   r   r	   r
   typing_extensionsr   r   httpx_typesr   r   r   r   _utilsr   r   _clientr   r   _modelsr   
_streamingr   r   _exceptionsr   _base_clientr   r   setr5   r8   AzureADTokenProviderAsyncAzureADTokenProviderClientAsyncClientr   r   joinrf   r"   r0   r;   r   r*   r*   r*   r+   <module>   s4    (  $o