o
    nii                     @  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 ddlmZ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j0ej1f dZ2edee$e e%e f dZ3d4g dZ5G dd de'Z6G dd de*e2e3f Z7G dd de7ej0e$e f eZ8G dd de7ej1e%e f eZ9dS )    )annotationsN)AnyUnionMappingTypeVarCallable	Awaitablecastoverload)Selfoverride   )WorkloadIdentity)	NOT_GIVENOmitQuery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/images/editsz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/arapca_proje/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                      sL   e Zd ZU ded< ded< eddd fddZed fddZ  ZS )BaseAzureClientzhttpx.URL | None_azure_endpoint
str | None_azure_deploymentr   retries_takenoptionsr   r8   intr&   httpx.Requestc                  sZ   |j tv r%t|jr%|jd}|d ur%dt| jjvr%d| |j  |_ t j	||dS )Nmodelz/deploymentsz/deployments/r7   )
url_deployments_endpointsr   	json_datagetstrbase_urlpathr(   _build_request)r*   r9   r8   r<   r+   r-   r.   rD   9   s
   zBaseAzureClient._build_requestr=   rA   	httpx.URLc                   s`   | j r*| jr*|tvr*t|}|jr(| jjdd |jd }| jj	|dS |S t
 |S )zAdjust the URL if the client was configured with an Azure endpoint + deployment
        and the API feature being called is **not** a deployments-based endpoint
        (i.e. requires /deployments/deployment-name in the URL path).
           /s   /openai/raw_path)r6   r4   r>   httpxURLis_relative_urlrH   rstriplstrip	copy_withr(   _prepare_url)r*   r=   	merge_urlmerge_raw_pathr+   r-   r.   rO   G   s   
zBaseAzureClient._prepare_url)r9   r   r8   r:   r&   r;   )r=   rA   r&   rE   )r/   r0   r1   __annotations__r   rD   rO   r2   r-   r-   r+   r.   r3   5   s   
 r3   c                      s.  e Zd Zeddddddddeedddddd@d d!ZeddddddddeeddddddAd"d!Zedddddddeeddddd#dBd%d!Zddddddddddddeeddddd&dC fd*d!Zeddddddddddededdddi d+dD fd2d3ZeZ	dEd4d5Z
edFd8d9ZdGd>d?Z  ZS )HAzureOpenAINF)azure_deploymentapi_versionapi_keyazure_ad_tokenazure_ad_token_providerorganizationwebhook_secretwebsocket_base_urltimeoutmax_retriesdefault_headersdefault_queryhttp_client_strict_response_validationazure_endpointrA   rT   r5   rU   rV   str | Callable[[], str] | NonerW   rX   AzureADTokenProvider | NonerY   rZ   r[   str | httpx.URL | Noner\   !float | Timeout | None | NotGivenr]   r:   r^   Mapping[str, str] | Noner_   Mapping[str, object] | Noner`   httpx.Client | Nonera   boolr&   r'   c                C     d S Nr-   )r*   rb   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   r-   r-   r.   r)   [      zAzureOpenAI.__init__c                C  rk   rl   r-   )r*   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   r-   r-   r.   r)   p      )rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rB   c                C  rk   rl   r-   )r*   rB   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   r-   r-   r.   r)      rn   )rU   rb   rT   rV   workload_identityrW   rX   rY   projectrZ   r[   rB   r\   r]   r^   r_   r`   ra   ro   WorkloadIdentity | Nonerp   c                  sh  |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 ru|du rUt jd}|du r]td	|durl|d
 d| }n|d
 d}n|dur}td|du rt}t j|||	|
||||||||d || _	|| _
|| _|r|nd| _|rt|| _dS d| _dS )aa  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 with `azure_endpoint`, sets the base client URL to include `/deployments/{azure_deployment}`.
                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rV   rY   rp   rZ   rB   r\   r]   r^   r_   r`   r[   ra   osenvironr@   r   
ValueErrorrL   API_KEY_SENTINELr(   r)   _api_version_azure_ad_token_azure_ad_token_providerr6   rI   rJ   r4   )r*   rU   rb   rT   rV   ro   rW   rX   rY   rp   rZ   r[   rB   r\   r]   r^   r_   r`   ra   r+   r-   r.   r)      d   +
rV   ro   rY   rp   rZ   r[   rU   rW   rX   rB   r\   r`   r]   r^   set_default_headersr_   set_default_query_extra_kwargsint | NotGivenr   r   r   Mapping[str, Any]r   c                  H   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.
        )rU   rW   rX   )rV   ro   rY   rp   rZ   r[   rB   r\   r`   r]   r^   r   r_   r   r   r(   copyr   r   r   r*   rV   ro   rY   rp   rZ   r[   rU   rW   rX   rB   r\   r`   r]   r^   r   r_   r   r   r+   r-   r.   r     ,   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 )r   r   
isinstancerA   r   r*   providertokenr-   r-   r.   _get_azure_ad_token7  s   
zAzureOpenAI._get_azure_ad_tokenr9   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AuthorizationBearer api-keyzUnable to handle authr   headersr   r   r@   rV   r   r   r*   r9   r   rW   r-   r-   r.   _prepare_optionsF  s   

zAzureOpenAI._prepare_optionsr<   extra_queryr    tuple[httpx.URL, dict[str, str]]c           
      C  s   i }i || j | jp|d}| jr| jdkrd| ji}n|  }|r*dd| i}| jd urDt| j}|jdd }|j	|d}n| 
d	}|j	d
d}|j	i |d}	|	|fS N)rw   
deploymentz<missing API key>r   r   r   rF   s	   /realtimerG   z	/realtimewss)scheme)paramsr   r6   rV   r   r[   rI   rJ   rH   rL   rN   rO   
r*   r<   r   auth_headersqueryr   rB   rQ   realtime_urlr=   r-   r-   r.   _configure_realtimeZ  s(   

zAzureOpenAI._configure_realtime) rb   rA   rT   r5   rU   r5   rV   rc   rW   r5   rX   rd   rY   r5   rZ   r5   r[   re   r\   rf   r]   r:   r^   rg   r_   rh   r`   ri   ra   rj   r&   r'   )rT   r5   rU   r5   rV   rc   rW   r5   rX   rd   rY   r5   rZ   r5   r[   re   r\   rf   r]   r:   r^   rg   r_   rh   r`   ri   ra   rj   r&   r'   )rB   rA   rU   r5   rV   rc   rW   r5   rX   rd   rY   r5   rZ   r5   r[   re   r\   rf   r]   r:   r^   rg   r_   rh   r`   ri   ra   rj   r&   r'   )&rU   r5   rb   r5   rT   r5   rV   rc   ro   rq   rW   r5   rX   rd   rY   r5   rp   r5   rZ   r5   r[   re   rB   r5   r\   rf   r]   r:   r^   rg   r_   rh   r`   ri   ra   rj   r&   r'   )&rV   rc   ro   rq   rY   r5   rp   r5   rZ   r5   r[   re   rU   r5   rW   r5   rX   rd   rB   re   r\   rf   r`   ri   r]   r   r^   rg   r   rg   r_   rh   r   rh   r   r   r&   r   r&   r5   r9   r   r&   r   r<   rA   r   r   r&   r   r/   r0   r1   r
   r   r   r)   r   r   with_optionsr   r   r   r2   r-   r-   r+   r.   rS   Z   s    l0
rS   c                      s4  e Zd Zedddddddddeedddddd@d!d"ZedddddddddeeddddddAd#d"Zeddddddddeeddddd$dBd&d"Zddddddddddddeeddddd'dC fd*d"Zeddddddddddededdddi d+dD fd2d3ZeZ	dEd4d5Z
edFd8d9ZdGd>d?Z  ZS )HAsyncAzureOpenAINF)rT   rU   rV   rW   rX   rY   rp   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rA   rT   r5   rU   rV   )str | Callable[[], Awaitable[str]] | NonerW   rX    AsyncAzureADTokenProvider | NonerY   rp   rZ   r[   re   r\   rf   r]   r:   r^   rg   r_   rh   r`   httpx.AsyncClient | Nonera   rj   r&   r'   c                C  rk   rl   r-   )r*   rb   rT   rU   rV   rW   rX   rY   rp   rZ   r[   r\   r]   r^   r_   r`   ra   r-   r-   r.   r)   u  s   zAsyncAzureOpenAI.__init__c                C  rk   rl   r-   )r*   rT   rU   rV   rW   rX   rY   rp   rZ   r[   r\   r]   r^   r_   r`   ra   r-   r-   r.   r)     rm   )rU   rV   rW   rX   rY   rp   rZ   r[   r\   r]   r^   r_   r`   ra   rB   c                C  rk   rl   r-   )r*   rB   rU   rV   rW   rX   rY   rp   rZ   r[   r\   r]   r^   r_   r`   ra   r-   r-   r.   r)     rm   )rb   rT   rU   rV   ro   rW   rX   rY   rp   rZ   rB   r[   r\   r]   r^   r_   r`   ra   ro   rq   c                  sh  |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 ru|du rUt jd}|du r]td	|durl|d
 d| }n|d
 d}n|dur}td|du rt}t j|||	|
||||||||d || _	|| _
|| _|r|nd| _|rt|| _dS d| _dS )ab  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 with `azure_endpoint`, sets the base client URL to include `/deployments/{azure_deployment}`.
                Not supported with Assistants APIs.
        Nrr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   )r*   rb   rT   rU   rV   ro   rW   rX   rY   rp   rZ   rB   r[   r\   r]   r^   r_   r`   ra   r+   r-   r.   r)     r   r   r   r   r   r   r   r   c                  r   r   r   r   r+   r-   r.   r   !  r   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   )	r   r   inspectisawaitabler   r	   r   rA   r   r   r-   r-   r.   r   T  s   


z$AsyncAzureOpenAI._get_azure_ad_tokenr9   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   e  s   

z!AsyncAzureOpenAI._prepare_optionsr<   r   r   r   c           
        s   i }i || j | jp|d}| jr| jdkrd| ji}n|  I d H }|r.dd| i}| jd urHt| j}|jdd }|j	|d}n| 
d	}|j	d
d}|j	i |d}	|	|fS r   r   r   r-   r-   r.   r   y  s*   

z$AsyncAzureOpenAI._configure_realtime)"rb   rA   rT   r5   rU   r5   rV   r   rW   r5   rX   r   rY   r5   rp   r5   rZ   r5   r[   re   r\   rf   r]   r:   r^   rg   r_   rh   r`   r   ra   rj   r&   r'   ) rT   r5   rU   r5   rV   r   rW   r5   rX   r   rY   r5   rp   r5   rZ   r5   r[   re   r\   rf   r]   r:   r^   rg   r_   rh   r`   r   ra   rj   r&   r'   ) rB   rA   rU   r5   rV   r   rW   r5   rX   r   rY   r5   rp   r5   rZ   r5   r[   re   r\   rf   r]   r:   r^   rg   r_   rh   r`   r   ra   rj   r&   r'   )&rb   r5   rT   r5   rU   r5   rV   r   ro   rq   rW   r5   rX   r   rY   r5   rp   r5   rZ   r5   rB   r5   r[   re   r\   rf   r]   r:   r^   rg   r_   rh   r`   r   ra   rj   r&   r'   )&rV   r   ro   rq   rY   r5   rp   r5   rZ   r5   r[   re   rU   r5   rW   r5   rX   r   rB   re   r\   rf   r`   r   r]   r   r^   rg   r   rg   r_   rh   r   rh   r   r   r&   r   r   r   r   r   r-   r-   r+   r.   r   t  s    l0
r   ):
__future__r   r   r   typingr   r   r   r   r   r   r	   r
   typing_extensionsr   r   rI   authr   _typesr   r   r   r   r   _utilsr   r   _clientr   r   _compatr   _modelsr   
_streamingr   r   _exceptionsr   _base_clientr   r   setr>   rA   AzureADTokenProviderAsyncAzureADTokenProviderClientAsyncClientr   r!   joinr   r%   r3   rS   r   r-   r-   r-   r.   <module>   s:    ( %  $