
    i:w                       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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&m'Z' ddl(m)Z) ddl*m+Z+m,Z,  e-g d          Z.e	g e/f         Z0e	g df         Z1 edeej2        ej3        f                   Z4 edee&e         e'e         f                   Z5d6                    g d          Z7d&dZ8d'dZ9 G d de)          Z: G d  d!e,e4e5f                   Z; G d" d#e;ej2        e&e         f         e          Z< G d$ d%e;ej3        e'e         f         e          Z=dS )(    )annotationsN)AnyUnionMappingTypeVarCallable	Awaitablecastoverload)Selfoverride   )WorkloadIdentity)	NOT_GIVENOmitQueryHeadersTimeoutNotGiven)is_given
is_mapping)OpenAIAsyncOpenAI)
model_copy)SecurityOptions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>headersr   headerstrreturnboolc                b                                     t          fd| D                       S )Nc              3  H   K   | ]}|                                 k    V  d S N)lower).0keyr)   s     W/home/piyush/.hermes/hermes-agent/venv/lib/python3.11/site-packages/openai/lib/azure.py	<genexpr>z_has_header.<locals>.<genexpr>0   s0      88syy{{f$888888    )r0   any)r(   r)   s    `r3   _has_headerr7   .   s3    \\^^F8888888888r5   c                B    t          | d          pt          | d          S )NAuthorizationapi-key)r7   )r(   s    r3   _has_auth_headerr;   3   s!    w00SK4S4SSr5   c                        e Zd Zd fdZ xZS )MutuallyExclusiveAuthErrorr+   Nonec                J    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__s    r3   rA   z#MutuallyExclusiveAuthError.__init__8   s/     O	
 	
 	
 	
 	
r5   )r+   r>   )__name__
__module____qualname__rA   __classcell__rC   s   @r3   r=   r=   7   s=        
 
 
 
 
 
 
 
 
 
r5   r=   c                  h     e Zd ZU ded<   ded<   eddd fd            Zed fd            Z xZS )BaseAzureClientzhttpx.URL | None_azure_endpoint
str | None_azure_deploymentr   retries_takenoptionsr   rO   intr+   httpx.Requestc                  |j         t          v r\t          |j                  rH|j                            d          }|,dt          | j        j                  vrd| |j          |_         t                      	                    ||          S )Nmodelz/deploymentsz/deployments/rN   )
url_deployments_endpointsr   	json_datagetr*   base_urlpathr@   _build_request)rB   rP   rO   rT   rC   s       r3   r[   zBaseAzureClient._build_requestB   s     ;000Z@Q5R5R0%))'22E ^3t}?Q;R;R%R%RBeBW[BBww%%g]%KKKr5   rU   r*   	httpx.URLc                ^   | j         r| j        r~|t          vrut          j        |          }|j        rX| j        j                            d          dz   |j                            d          z   }| j        	                    |          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)rM   rK   rV   httpxURLis_relative_urlr`   rstriplstrip	copy_withr@   _prepare_url)rB   rU   	merge_urlmerge_raw_pathrC   s       r3   rg   zBaseAzureClient._prepare_urlP   s     ! 	d&: 	sJ`?`?`	#I( O(188>>LyOaOhOhimOnOnn  +55~5NNNww##C(((r5   )rP   r   rO   rQ   r+   rR   )rU   r*   r+   r\   )rD   rE   rF   __annotations__r   r[   rg   rG   rH   s   @r3   rJ   rJ   >   s         %%%%!!!!
 	L L L L L L L XL ) ) ) ) ) X) ) ) ) )r5   rJ   c                      e Zd ZedddddddddeedddddddGd#            ZedddddddddeedddddddHd$            Zeddddddddeedddddd%dId'            Zdddddddddddddeedddddd(dJ fd,Zedddddddddddededddddi d-dK fd5            ZeZ	dLd6Z
edMd:            ZedNd>            ZedOdA            ZdPdFZ xZS )QAzureOpenAINFT)azure_deploymentapi_versionapi_keyadmin_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_enforce_credentialsazure_endpointr*   rm   rL   rn   ro   str | Callable[[], str] | Nonerp   rq   rr   AzureADTokenProvider | Noners   rt   ru   str | httpx.URL | Nonerv   !float | Timeout | None | NotGivenrw   rQ   rx   Mapping[str, str] | Nonery   Mapping[str, object] | Nonerz   httpx.Client | Noner{   r,   r|   r+   r>   c                   d S r/    )rB   r}   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   s                     r3   rA   zAzureOpenAI.__init__d   	    * sr5   c                   d S r/   r   )rB   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   s                    r3   rA   zAzureOpenAI.__init__{   	    ( sr5   )rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   rY   c                   d S r/   r   )rB   rY   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   s                    r3   rA   zAzureOpenAI.__init__   r   r5   )rn   r}   rm   ro   rp   workload_identityrq   rr   rs   projectrt   ru   rY   rv   rw   rx   ry   rz   r{   r|   r   WorkloadIdentity | Noner   c                  |t           j                            d          }|t           j                            d          }|r|||t          d          |t           j                            d          }|t	          d          |d|i}ni |d|i}|h|t           j                            d          }|t	          d	          ||                    d
           d| }n*|                    d
           d}n|t	          d          |t          }t                                          |||	|
||||||||||           || _	        || _
        || _        |r|nd| _        |rt          j        |          n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ro   rp   rs   r   rt   rY   rv   rw   rx   ry   rz   ru   r{   r|   osenvironrX   r   
ValueErrorrd   API_KEY_SENTINELr@   rA   _api_version_azure_ad_token_azure_ad_token_providerrM   ra   rb   rK   )rB   rn   r}   rm   ro   rp   r   rq   rr   rs   r   rt   ru   rY   rv   rw   rx   ry   rz   r{   r|   rC   s                        r3   rA   zAzureOpenAI.__init__   	   Z ?jnn%;<<G!Z^^,CDDN 	GO8NSjSr B   *..)=>>Kq    *K8MMI}Im[IIM%!#0G!H!H%  L    +,33C88``N^``,33C88AAA) !UVVV?&G'%)#+'#1(C!5 	 	
 	
 	
  (-(?%5C!M!1!1<JTuy888PTr5   ro   rp   r   rs   r   rt   ru   rn   rq   rr   rY   rv   rz   rw   rx   set_default_headersry   set_default_queryr|   _extra_kwargsint | NotGivenr   r   bool | Noner   Mapping[str, Any]r   c                   t                                          |||||||||||||||||p| j        |	p| j        |
p| j        d|          S z~
        Create a new client instance re-using the same options given to the current client with optional overriding.
        )rn   rq   rr   )ro   rp   r   rs   r   rt   ru   rY   rv   rz   rw   rx   r   ry   r   r|   r   r@   copyr   r   r   rB   ro   rp   r   rs   r   rt   ru   rn   rq   rr   rY   rv   rz   rw   rx   r   ry   r   r|   r   rC   s                        r3   r   zAzureOpenAI.copy      8 ww||'/%)1##+ 3'/!5*?d.?"0"HD4H+B+cdFc   	#  
 
 	
r5   c                    | j         | j         S | j        }|5 |            }|rt          |t                    st	          d|           |S d S NzOExpected `azure_ad_token_provider` argument to return a string but it returned )r   r   
isinstancer*   r   rB   providertokens      r3   _get_azure_ad_tokenzAzureOpenAI._get_azure_ad_tokenN  sp    +''0HJJE 
5# 6 6  mfkmm   Ltr5   securityr   dict[str, str]c                l    | j         dd| j          iS | j        r| j        t          k    r	d| j        iS i S Nr9   Bearer r:   r   ro   r   rB   r   s     r3   _auth_headerszAzureOpenAI._auth_headers]  K    +#%Et/C%E%EFF< 	-DL,<<<t|,,	r5   r(   r   custom_headersc                `    t          |          st          |          rd S t          d          Nz"Could not resolve authentication method. Expected either api_key, azure_ad_token or azure_ad_token_provider to be set. Or for one of the `Authorization` or `api-key` headers to be explicitly supplied or omitted"r;   	TypeErrorrB   r(   r   s      r3   _validate_headerszAzureOpenAI._validate_headersg  ?    G$$ 	(8(H(H 	F c
 
 	
r5   rP   r   c                   t          |j                  r	i |j        ni }t          |          }||_        |                                 }|t	          |d          sd| |d<   ne| j        r+| j        t          k    rt	          |d          s
| j        |d<   n3t          |          st          | j                  rnt          d          |S Nr9   r   r:   zUnable to handle auth
r   r(   r   r   r7   ro   r   r;   rx   r   rB   rP   r(   rq   s       r3   _prepare_optionszAzureOpenAI._prepare_optionsp  s    @H@Y@Y)a)<GO)<)<_aW%%!1133%w88 F+E^+E+E(\ 	6dl.>>>w	22 2%)\	"g&& 	6*:4;O*P*P 	6 4555r5   rT   extra_queryr    tuple[httpx.URL, dict[str, str]]c                   i }i || j         | j        p|d}| j        r| j        dk    r
d| j        i}n|                                 }|rdd| i}| j        Mt          j        | j                  }|j                            d          dz   }|	                    |          }n+| 
                    d	          }|	                    d
          }|	                    i |          }	|	|fS N)r   
deploymentz<missing API key>r:   r9   r   r^   s	   /realtimer_   z	/realtimewss)scheme)paramsr   rM   ro   r   ru   ra   rb   r`   rd   rf   rg   
rB   rT   r   auth_headersqueryr   rY   ri   realtime_urlrU   s
             r3   _configure_realtimezAzureOpenAI._configure_realtime  s'   

,09E
 
 

 < 	DDL,???%t|4LL,,..E D /1B51B1BC".y!899H%.55d;;lJN#--~-FFLL((55H#--U-;;L$$IuI$66L  r5   )$r}   r*   rm   rL   rn   rL   ro   r~   rp   rL   rq   rL   rr   r   rs   rL   rt   rL   ru   r   rv   r   rw   rQ   rx   r   ry   r   rz   r   r{   r,   r|   r,   r+   r>   )"rm   rL   rn   rL   ro   r~   rp   rL   rq   rL   rr   r   rs   rL   rt   rL   ru   r   rv   r   rw   rQ   rx   r   ry   r   rz   r   r{   r,   r|   r,   r+   r>   )"rY   r*   rn   rL   ro   r~   rp   rL   rq   rL   rr   r   rs   rL   rt   rL   ru   r   rv   r   rw   rQ   rx   r   ry   r   rz   r   r{   r,   r|   r,   r+   r>   )*rn   rL   r}   rL   rm   rL   ro   r~   rp   rL   r   r   rq   rL   rr   r   rs   rL   r   rL   rt   rL   ru   r   rY   rL   rv   r   rw   rQ   rx   r   ry   r   rz   r   r{   r,   r|   r,   r+   r>   )*ro   r~   rp   rL   r   r   rs   rL   r   rL   rt   rL   ru   r   rn   rL   rq   rL   rr   r   rY   r   rv   r   rz   r   rw   r   rx   r   r   r   ry   r   r   r   r|   r   r   r   r+   r   r+   rL   r   r   r+   r   r(   r   r   r   r+   r>   rP   r   r+   r   rT   r*   r   r   r+   r   rD   rE   rF   r   r   r    rA   r   r   with_optionsr   r   r   r   r   rG   rH   s   @r3   rl   rl   c   s       
 (,"&26$(%)?C#'%)595>.4859+/,1%)'     X,  (,"&26$(%)?C#'%)595>.4859+/,1%)%     X* 
 #'26$(%)?C#'%)595>.4859+/,1%)%     X0 #'%)'+26$(59%)?C#'"%)59#5>.4859+/,1%)/nU nU nU nU nU nU nU nU`  37$(59#'"%)59"&%)?C+/5>+/&/488<599=,0+--2
 2
 2
 2
 2
 2
 2
 X2
h L       X 
 
 
 X
    X*! ! ! ! ! ! ! !r5   rl   c                      e Zd ZeddddddddddeedddddddGd$            ZeddddddddddeedddddddHd%            Zedddddddddeedddddd&dId(            Zdddddddddddddeedddddd)dJ fd,Zedddddddddddededddddi d-dK fd5            ZeZ	dLd6Z
edMd:            ZedNd>            ZedOdA            ZdPdFZ xZS )QAsyncAzureOpenAINFT)rm   rn   ro   rp   rq   rr   rs   r   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r*   rm   rL   rn   ro   )str | Callable[[], Awaitable[str]] | Nonerp   rq   rr    AsyncAzureADTokenProvider | Noners   r   rt   ru   r   rv   r   rw   rQ   rx   r   ry   r   rz   httpx.AsyncClient | Noner{   r,   r|   r+   r>   c                   d S r/   r   )rB   r}   rm   rn   ro   rp   rq   rr   rs   r   rt   ru   rv   rw   rx   ry   rz   r{   r|   s                      r3   rA   zAsyncAzureOpenAI.__init__  s	    , sr5   c                   d S r/   r   )rB   rm   rn   ro   rp   rq   rr   rs   r   rt   ru   rv   rw   rx   ry   rz   r{   r|   s                     r3   rA   zAsyncAzureOpenAI.__init__  r   r5   )rn   ro   rp   rq   rr   rs   r   rt   ru   rv   rw   rx   ry   rz   r{   r|   rY   c                   d S r/   r   )rB   rY   rn   ro   rp   rq   rr   rs   r   rt   ru   rv   rw   rx   ry   rz   r{   r|   s                     r3   rA   zAsyncAzureOpenAI.__init__  r   r5   )r}   rm   rn   ro   rp   r   rq   rr   rs   r   rt   rY   ru   rv   rw   rx   ry   rz   r{   r|   r   r   c                  |t           j                            d          }|t           j                            d          }|r|||t          d          |t           j                            d          }|t	          d          |d|i}ni |d|i}|h|t           j                            d          }|t	          d	          ||                    d
           d| }n*|                    d
           d}n|t	          d          |t          }t                                          |||	|
||||||||||           || _	        || _
        || _        |r|nd| _        |rt          j        |          n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.
        Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   )rB   r}   rm   rn   ro   rp   r   rq   rr   rs   r   rt   rY   ru   rv   rw   rx   ry   rz   r{   r|   rC   s                        r3   rA   zAsyncAzureOpenAI.__init__  r   r5   r   r   r   r   r   r   r   r   c                   t                                          |||||||||||||||||p| j        |	p| j        |
p| j        d|          S r   r   r   s                        r3   r   zAsyncAzureOpenAI.copyW  r   r5   c                  K   | j         | j         S | j        }|q |            }t          j        |          r| d {V }|r(t	          t          t          |          t                    st          d|           t          |          S d S r   )	r   r   inspectisawaitabler   r
   r   r*   r   r   s      r3   r   z$AsyncAzureOpenAI._get_azure_ad_token  s      +''0HJJE"5)) $# 
4U+;+;S A A  mfkmm   u::tr5   r   r   r   c                l    | j         dd| j          iS | j        r| j        t          k    r	d| j        iS i S r   r   r   s     r3   r   zAsyncAzureOpenAI._auth_headers  r   r5   r(   r   r   c                `    t          |          st          |          rd S t          d          r   r   r   s      r3   r   z"AsyncAzureOpenAI._validate_headers  r   r5   rP   r   c                  K   t          |j                  r	i |j        ni }t          |          }||_        |                                  d {V }|t	          |d          sd| |d<   ne| j        r+| j        t          k    rt	          |d          s
| j        |d<   n3t          |          st          | j                  rnt          d          |S r   r   r   s       r3   r   z!AsyncAzureOpenAI._prepare_options  s      @H@Y@Y)a)<GO)<)<_aW%%!#7799999999%w88 F+E^+E+E(\ 	6dl.>>>w	22 2%)\	"g&& 	6*:4;O*P*P 	6 4555r5   rT   r   r   r   c                  K   i }i || j         | j        p|d}| j        r| j        dk    r
d| j        i}n#|                                  d {V }|rdd| i}| j        Mt          j        | j                  }|j                            d          dz   }|	                    |          }n+| 
                    d	          }|	                    d
          }|	                    i |          }	|	|fS r   r   r   s
             r3   r   z$AsyncAzureOpenAI._configure_realtime  s=     

,09E
 
 

 < 	DDL,???%t|4LL2244444444E D /1B51B1BC".y!899H%.55d;;lJN#--~-FFLL((55H#--U-;;L$$IuI$66L  r5   )&r}   r*   rm   rL   rn   rL   ro   r   rp   rL   rq   rL   rr   r   rs   rL   r   rL   rt   rL   ru   r   rv   r   rw   rQ   rx   r   ry   r   rz   r   r{   r,   r|   r,   r+   r>   )$rm   rL   rn   rL   ro   r   rp   rL   rq   rL   rr   r   rs   rL   r   rL   rt   rL   ru   r   rv   r   rw   rQ   rx   r   ry   r   rz   r   r{   r,   r|   r,   r+   r>   )$rY   r*   rn   rL   ro   r   rp   rL   rq   rL   rr   r   rs   rL   r   rL   rt   rL   ru   r   rv   r   rw   rQ   rx   r   ry   r   rz   r   r{   r,   r|   r,   r+   r>   )*r}   rL   rm   rL   rn   rL   ro   r   rp   rL   r   r   rq   rL   rr   r   rs   rL   r   rL   rt   rL   rY   rL   ru   r   rv   r   rw   rQ   rx   r   ry   r   rz   r   r{   r,   r|   r,   r+   r>   )*ro   r   rp   rL   r   r   rs   rL   r   rL   rt   rL   ru   r   rn   rL   rq   rL   rr   r   rY   r   rv   r   rz   r   rw   r   rx   r   r   r   ry   r   r   r   r|   r   r   r   r+   r   r   r   r   r   r   r   rH   s   @r3   r   r     s       
 (,"&=A$(%)DH#'"%)595>.485904,1%))     X.  (,"&=A$(%)DH#'"%)595>.485904,1%)'     X, 
 #'=A$(%)DH#'"%)595>.485904,1%)'     X2 &*'+"&=A$(59%)DH#'"%)#595>.485904,1%)/nU nU nU nU nU nU nU nU`  >B$(59#'"%)59"&%)DH+/5>04&/488<599=,0+--2
 2
 2
 2
 2
 2
 2
 X2
h L   "    X 
 
 
 X
    X*! ! ! ! ! ! ! !r5   r   )r(   r   r)   r*   r+   r,   )r(   r   r+   r,   )>
__future__r   r   r   typingr   r   r   r   r   r	   r
   r   typing_extensionsr   r   ra   authr   _typesr   r   r   r   r   r   _utilsr   r   _clientr   r   _compatr   _modelsr   r   
_streamingr   r   _exceptionsr   _base_clientr    r!   setrV   r*   AzureADTokenProviderAsyncAzureADTokenProviderClientAsyncClientr"   r$   joinr   r7   r;   r=   rJ   rl   r   r   r5   r3   <module>r     s0   " " " " " " 				  T T T T T T T T T T T T T T T T T T T T , , , , , , , ,  # # # # # # G G G G G G G G G G G G G G G G ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )             : : : : : : : : , , , , , , , , % % % % % % : : : : : : : :	 	 	    C( $R)?%?@ uU\5CT5T/UVVV'+5kRUFV9V3WXXX 7788899 9 9 9 9
T T T T
 
 
 
 
 
 
 
") ") ") ") ")j!?@ ") ") ")Jz! z! z! z! z!/%,s";<f z! z! z!z	! ! ! ! !u'8+c:J'JK[ ! ! ! ! !r5   