o
    CjiQ                     @  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 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__ g/var/www/html/Resume-Parser/resume-parser-inhouse/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&   r0   r2   r'   r)   r*   r9   2   s
   zBaseAzureClient._build_request)r0   r   r"   r1   )r+   r,   r-   r   r9   r.   r)   r)   r'   r*   r/   1   s    r/   c                        e Zd Zeddddddeedddddd4d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eedddddd6d!dZddddddddeeddddd"d7 fd#dZeddddddededdddi d$d8 fd,d-ZeZ	d9d.d/Z
ed: fd2d3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_endpointr7   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%   @      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%   T      r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r8   c                C  rR   rS   r)   r&   r8   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   r)   r)   r*   r%   g   rW   )r>   rI   r=   r?   r@   rA   rB   r8   rC   rD   rE   rF   rG   rH   c                  s.  |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`
        - `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?   rB   r8   rC   rD   rE   rF   rG   rH   osenvironr6   r   
ValueErrorAPI_KEY_SENTINELr$   r%   _api_version_azure_ad_token_azure_ad_token_provider)r&   r>   rI   r=   r?   r@   rA   rB   r8   rC   rD   rE   rF   rG   rH   r'   r)   r*   r%   z   Z   %

r?   rB   r>   r@   rA   r8   rC   rG   rD   rE   set_default_headersrF   set_default_query_extra_kwargsstr | httpx.URL | Noneint | NotGivenrp   rq   rr   Mapping[str, Any]r
   c                  @   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   r8   rC   rG   rD   rE   rp   rF   rq   rr   r$   copyrk   rl   rm   r&   r?   rB   r>   r@   rA   r8   rC   rG   rD   rE   rp   rF   rq   rr   r'   r)   r*   ry      $   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 )rl   rm   
isinstancer7   ri   r&   providertokenr)   r)   r*   _get_azure_ad_token  s   
zAzureOpenAI._get_azure_ad_tokenr0   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   r6   r?   rj   ri   r$   _prepare_optionsr&   r0   r   r@   r'   r)   r*   r     s   

zAzureOpenAI._prepare_options)rI   r7   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#   )r8   r7   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   r8   rJ   rC   rL   rD   rM   rE   rN   rF   rO   rG   rP   rH   rQ   r"   r#   )r?   rJ   rB   rJ   r>   rJ   r@   rJ   rA   rK   r8   rs   rC   rL   rG   rP   rD   rt   rE   rN   rp   rN   rF   rO   rq   rO   rr   ru   r"   r
   r"   rJ   r0   r   r"   r#   r+   r,   r-   r	   r   r   r%   r   ry   with_optionsr   r   r.   r)   r)   r'   r*   r;   ?   s    a(
r;   c                      r:   );AsyncAzureOpenAINFr<   rI   r7   r=   rJ   r>   r?   r@   rA    AsyncAzureADTokenProvider | NonerB   rC   rL   rD   rM   rE   rN   rF   rO   rG   httpx.AsyncClient | NonerH   rQ   r"   r#   c                C  rR   rS   r)   rT   r)   r)   r*   r%   )  rU   zAsyncAzureOpenAI.__init__c                C  rR   rS   r)   rV   r)   r)   r*   r%   =  rW   rX   r8   c                C  rR   rS   r)   rY   r)   r)   r*   r%   P  rW   )rI   r=   r>   r?   r@   rA   rB   r8   rC   rD   rE   rF   rG   rH   c                  s.  |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`
        - `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.
        NrZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   )r&   rI   r=   r>   r?   r@   rA   rB   r8   rC   rD   rE   rF   rG   rH   r'   r)   r*   r%   c  rn   ro   rs   rt   rp   rq   rr   ru   r
   c                  rv   rw   rx   rz   r'   r)   r*   ry     r{   zAsyncAzureOpenAI.copyc                   s^   | j d ur	| j S | j}|d ur-| }t|r|I d H }|r$t|ts+td| |S d S r|   )rl   rm   inspectisawaitabler}   r7   ri   r~   r)   r)   r*   r     s   


z$AsyncAzureOpenAI._get_azure_ad_tokenr0   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)rI   r7   r=   rJ   r>   rJ   r?   rJ   r@   rJ   rA   r   rB   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   rC   rL   rD   rM   rE   rN   rF   rO   rG   r   rH   rQ   r"   r#   )r8   r7   r>   rJ   r?   rJ   r@   rJ   rA   r   rB   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   r8   rJ   rC   rL   rD   rM   rE   rN   rF   rO   rG   r   rH   rQ   r"   r#   )r?   rJ   rB   rJ   r>   rJ   r@   rJ   rA   r   r8   rs   rC   rL   rG   r   rD   rt   rE   rN   rp   rN   rF   rO   rq   rO   rr   ru   r"   r
   r   r   r   r)   r)   r'   r*   r   (  s    a(
r   )4
__future__r   rg   r   typingr   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   setr4   r7   AzureADTokenProviderAsyncAzureADTokenProviderClientAsyncClientr   r   joinrj   r!   r/   r;   r   r)   r)   r)   r*   <module>   s4    $  $j