
    ii                       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j0        ej1        f                   Z2 edee$e         e%e         f                   Z3d4                    g d          Z5 G d de'          Z6 G d de*e2e3f                   Z7 G d de7ej0        e$e         f         e          Z8 G d de7ej1        e%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                        e Zd Zd fdZ xZS )MutuallyExclusiveAuthErrorreturn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    W/home/ubuntu/.hermes/hermes-agent/venv/lib/python3.11/site-packages/openai/lib/azure.pyr,   z#MutuallyExclusiveAuthError.__init__/   s/     O	
 	
 	
 	
 	
    )r(   r)   )__name__
__module____qualname__r,   __classcell__r.   s   @r/   r'   r'   .   s=        
 
 
 
 
 
 
 
 
 
r0   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   r<   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/r;   )
url_deployments_endpointsr   	json_datagetstrbase_urlpathr+   _build_request)r-   r=   r<   rA   r.   s       r/   rI   zBaseAzureClient._build_request9   s     ;000Z@Q5R5R0%))'22E ^3t}?Q;R;R%R%RBeBW[BBww%%g]%KKKr0   rB   rF   	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)r:   r8   rC   httpxURLis_relative_urlrN   rstriplstrip	copy_withr+   _prepare_url)r-   rB   	merge_urlmerge_raw_pathr.   s       r/   rU   zBaseAzureClient._prepare_urlG   s     ! 	d&: 	sJ`?`?`	#I( O(188>>LyOaOhOhimOnOnn  +55~5NNNww##C(((r0   )r=   r   r<   r>   r(   r?   )rB   rF   r(   rJ   )r1   r2   r3   __annotations__r   rI   rU   r4   r5   s   @r/   r7   r7   5   s         %%%%!!!!
 	L L L L L L L XL ) ) ) ) ) X) ) ) ) )r0   r7   c                  ^    e Zd Zeddddddddeedddddd;d             Zeddddddddeedddddd<d!            Zedddddddeeddddd"d=d$            Zddddddddddddeeddddd%d> fd)Zeddddddddddededdddi d*d? fd1            ZeZ	d@d2Z
edAd5            ZdBd:Z xZS )C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_endpointrF   r[   r9   r\   r]   str | Callable[[], str] | Noner^   r_   AzureADTokenProvider | Noner`   ra   rb   str | httpx.URL | Nonerc   !float | Timeout | None | NotGivenrd   r>   re   Mapping[str, str] | Nonerf   Mapping[str, object] | Nonerg   httpx.Client | Nonerh   boolr(   r)   c                   d S N )r-   ri   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   s                   r/   r,   zAzureOpenAI.__init__[   	    & sr0   c                   d S rs   rt   )r-   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   s                  r/   r,   zAzureOpenAI.__init__p   	    $ sr0   )r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   rG   c                   d S rs   rt   )r-   rG   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   s                  r/   r,   zAzureOpenAI.__init__   rw   r0   )r\   ri   r[   r]   workload_identityr^   r_   r`   projectra   rb   rG   rc   rd   re   rf   rg   rh   ry   WorkloadIdentity | Nonerz   c                  |t           j                            d          }|t           j                            d          }|||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r]   r`   rz   ra   rG   rc   rd   re   rf   rg   rb   rh   osenvironrE   r   
ValueErrorrR   API_KEY_SENTINELr+   r,   _api_version_azure_ad_token_azure_ad_token_providerr:   rO   rP   r8   )r-   r\   ri   r[   r]   ry   r^   r_   r`   rz   ra   rb   rG   rc   rd   re   rf   rg   rh   r.   s                      r/   r,   zAzureOpenAI.__init__      V ?jnn%;<<G!Z^^,CDDN?~5:Q:Y 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 	 	
 	
 	
 (-(?%5C!M!1!1<JTuy888PTr0   r]   ry   r`   rz   ra   rb   r\   r^   r_   rG   rc   rg   rd   re   set_default_headersrf   set_default_query_extra_kwargsint | NotGivenr   r   r   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.
        )r\   r^   r_   )r]   ry   r`   rz   ra   rb   rG   rc   rg   rd   re   r   rf   r   r   r+   copyr   r   r   r-   r]   ry   r`   rz   ra   rb   r\   r^   r_   rG   rc   rg   rd   re   r   rf   r   r   r.   s                      r/   r   zAzureOpenAI.copy      4 ww||/%)1##+ 3'/*?d.?"0"HD4H+B+cdFc   	  
 
 	
r0   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   
isinstancerF   r   r-   providertokens      r/   _get_azure_ad_tokenzAzureOpenAI._get_azure_ad_token7  sp    +''0HJJE 
5# 6 6  mfkmm   Ltr0   r=   r   c                R   t          |j                  r	i |j        ni }t          |          }||_        |                                 }||                    d          d| |d<   n=| j        t          ur |                    d          
| j        |d<   nt          d          |S NAuthorizationBearer api-keyzUnable to handle authr   headersr   r   rE   r]   r   r   r-   r=   r   r^   s       r/   _prepare_optionszAzureOpenAI._prepare_optionsF  s    @H@Y@Y)a)<GO)<)<_aW%%!1133%{{?++3+E^+E+E(\!111{{9%%-%)\	" 4555r0   rA   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   r   r   rL   s	   /realtimerM   z	/realtimewss)scheme)paramsr   r:   r]   r   rb   rO   rP   rN   rR   rT   rU   
r-   rA   r   auth_headersqueryr   rG   rW   realtime_urlrB   s
             r/   _configure_realtimezAzureOpenAI._configure_realtimeZ  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  r0   ) ri   rF   r[   r9   r\   r9   r]   rj   r^   r9   r_   rk   r`   r9   ra   r9   rb   rl   rc   rm   rd   r>   re   rn   rf   ro   rg   rp   rh   rq   r(   r)   )r[   r9   r\   r9   r]   rj   r^   r9   r_   rk   r`   r9   ra   r9   rb   rl   rc   rm   rd   r>   re   rn   rf   ro   rg   rp   rh   rq   r(   r)   )rG   rF   r\   r9   r]   rj   r^   r9   r_   rk   r`   r9   ra   r9   rb   rl   rc   rm   rd   r>   re   rn   rf   ro   rg   rp   rh   rq   r(   r)   )&r\   r9   ri   r9   r[   r9   r]   rj   ry   r{   r^   r9   r_   rk   r`   r9   rz   r9   ra   r9   rb   rl   rG   r9   rc   rm   rd   r>   re   rn   rf   ro   rg   rp   rh   rq   r(   r)   )&r]   rj   ry   r{   r`   r9   rz   r9   ra   r9   rb   rl   r\   r9   r^   r9   r_   rk   rG   rl   rc   rm   rg   rp   rd   r   re   rn   r   rn   rf   ro   r   ro   r   r   r(   r   r(   r9   r=   r   r(   r   rA   rF   r   r   r(   r   r1   r2   r3   r   r   r   r,   r   r   with_optionsr   r   r   r4   r5   s   @r/   rZ   rZ   Z   sI       
 (,"&26%)?C#'%)595>.4859+/,1#     X(  (,"&26%)?C#'%)595>.4859+/,1!     X& 
 #'26%)?C#'%)595>.4859+/,1!     X, #'%)'+2659%)?C#'"%)59#5>.4859+/,1+jU jU jU jU jU jU jU jUX  3759#'"%)59"&%)?C+/5>+/&/488<599=+-).
 .
 .
 .
 .
 .
 .
 X.
` L       X&! ! ! ! ! ! ! !r0   rZ   c                  d    e Zd Zedddddddddee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d<d"            Zeddddddddeeddddd#d=d%            Zddddddddddddeeddddd&d> fd)Zeddddddddddededdddi d*d? fd1            ZeZ	d@d2Z
edAd5            ZdBd:Z xZS )CAsyncAzureOpenAINF)r[   r\   r]   r^   r_   r`   rz   ra   rb   rc   rd   re   rf   rg   rh   ri   rF   r[   r9   r\   r]   )str | Callable[[], Awaitable[str]] | Noner^   r_    AsyncAzureADTokenProvider | Noner`   rz   ra   rb   rl   rc   rm   rd   r>   re   rn   rf   ro   rg   httpx.AsyncClient | Nonerh   rq   r(   r)   c                   d S rs   rt   )r-   ri   r[   r\   r]   r^   r_   r`   rz   ra   rb   rc   rd   re   rf   rg   rh   s                    r/   r,   zAsyncAzureOpenAI.__init__u  s	    ( sr0   c                   d S rs   rt   )r-   r[   r\   r]   r^   r_   r`   rz   ra   rb   rc   rd   re   rf   rg   rh   s                   r/   r,   zAsyncAzureOpenAI.__init__  ru   r0   )r\   r]   r^   r_   r`   rz   ra   rb   rc   rd   re   rf   rg   rh   rG   c                   d S rs   rt   )r-   rG   r\   r]   r^   r_   r`   rz   ra   rb   rc   rd   re   rf   rg   rh   s                   r/   r,   zAsyncAzureOpenAI.__init__  ru   r0   )ri   r[   r\   r]   ry   r^   r_   r`   rz   ra   rG   rb   rc   rd   re   rf   rg   rh   ry   r{   c                  |t           j                            d          }|t           j                            d          }|||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   )r-   ri   r[   r\   r]   ry   r^   r_   r`   rz   ra   rG   rb   rc   rd   re   rf   rg   rh   r.   s                      r/   r,   zAsyncAzureOpenAI.__init__  r   r0   r   r   r   r   r   r   r   c                   t                                          |||||||
||||||||p| j        |p| j        |	p| j        d|          S r   r   r   s                      r/   r   zAsyncAzureOpenAI.copy!  r   r0   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   rF   r   r   s      r/   r   z$AsyncAzureOpenAI._get_azure_ad_tokenT  s      +''0HJJE"5)) $# 
4U+;+;S A A  mfkmm   u::tr0   r=   r   c                b  K   t          |j                  r	i |j        ni }t          |          }||_        |                                  d {V }||                    d          d| |d<   n=| j        t          ur |                    d          
| j        |d<   nt          d          |S r   r   r   s       r/   r   z!AsyncAzureOpenAI._prepare_optionse  s      @H@Y@Y)a)<GO)<)<_aW%%!#7799999999%{{?++3+E^+E+E(\!111{{9%%-%)\	" 4555r0   rA   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
             r/   r   z$AsyncAzureOpenAI._configure_realtimey  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  r0   )"ri   rF   r[   r9   r\   r9   r]   r   r^   r9   r_   r   r`   r9   rz   r9   ra   r9   rb   rl   rc   rm   rd   r>   re   rn   rf   ro   rg   r   rh   rq   r(   r)   ) r[   r9   r\   r9   r]   r   r^   r9   r_   r   r`   r9   rz   r9   ra   r9   rb   rl   rc   rm   rd   r>   re   rn   rf   ro   rg   r   rh   rq   r(   r)   ) rG   rF   r\   r9   r]   r   r^   r9   r_   r   r`   r9   rz   r9   ra   r9   rb   rl   rc   rm   rd   r>   re   rn   rf   ro   rg   r   rh   rq   r(   r)   )&ri   r9   r[   r9   r\   r9   r]   r   ry   r{   r^   r9   r_   r   r`   r9   rz   r9   ra   r9   rG   r9   rb   rl   rc   rm   rd   r>   re   rn   rf   ro   rg   r   rh   rq   r(   r)   )&r]   r   ry   r{   r`   r9   rz   r9   ra   r9   rb   rl   r\   r9   r^   r9   r_   r   rG   rl   rc   rm   rg   r   rd   r   re   rn   r   rn   rf   ro   r   ro   r   r   r(   r   r   r   r   r   r5   s   @r/   r   r   t  sS       
 (,"&=A%)DH#'"%)595>.485904,1%     X*  (,"&=A%)DH#'"%)595>.485904,1#     X( 
 #'=A%)DH#'"%)595>.485904,1#     X. &*'+"&=A59%)DH#'"%)#595>.485904,1+jU jU jU jU jU jU jU jUX  >B59#'"%)59"&%)DH+/5>04&/488<599=+-).
 .
 .
 .
 .
 .
 .
 X.
` L   "    X&! ! ! ! ! ! ! !r0   r   ):
__future__r   r   r   typingr   r   r   r   r   r	   r
   r   typing_extensionsr   r   rO   authr   _typesr   r   r   r   r   _utilsr   r   _clientr   r   _compatr   _modelsr   
_streamingr   r   _exceptionsr   _base_clientr   r   setrC   rF   AzureADTokenProviderAsyncAzureADTokenProviderClientAsyncClientr    r"   joinr   r'   r7   rZ   r   rt   r0   r/   <module>r      s   " " " " " " 				  T T T T T T T T T T T T T T T T T T T T , , , , , , , ,  # # # # # # > > > > > > > > > > > > > > ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )             ) ) ) ) ) ) , , , , , , , , % % % % % % : : : : : : : :	 	 	    C( $R)?%?@ uU\5CT5T/UVVV'+5kRUFV9V3WXXX 7788899 
 
 
 
 
 
 
 
") ") ") ") ")j!?@ ") ") ")JW! W! W! W! W!/%,s";<f W! W! W!t\! \! \! \! \!u'8+c:J'JK[ \! \! \! \! \!r0   