o
    ØRWjy  ã                   @  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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) ddl*m+Z+ ddl,m-Z-m.Z. e/g d¢ƒZ0e	g e1f Z2e	g df Z3edeej4ej5f d�Z6edee(e e)e f d�Z7d 8g d¢¡Z9d)dd„Z:d*dd „Z;G d!d"„ d"e+ƒZ<G d#d$„ d$e.e6e7f ƒZ=G d%d&„ d&e=ej4e(e f eƒZ>G d'd(„ d(e=ej5e)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)Ú	_Provider)Ú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                   s   ˆ   ¡ ‰ t‡ fdd„| D ƒƒS )Nc                 3  s   � | ]	}|  ¡ ˆ kV  qd S ©N)Úlower)Ú.0Úkey©r)   © ú_/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/openai/lib/azure.pyÚ	<genexpr>1   s   € z_has_header.<locals>.<genexpr>)r.   Úany)r(   r)   r2   r1   r3   Ú_has_header/   s   r6   c                 C  s   t | dƒp	t | dƒS )NÚAuthorizationúapi-key)r6   )r(   r2   r2   r3   Ú_has_auth_header4   s   r9   c                      s   e Zd Zd‡ fdd„Z‡  ZS )ÚMutuallyExclusiveAuthErrorr+   ÚNonec                   s   t ƒ  d¡ d S )Nz€The `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__r2   r3   r=   9   s   ÿz#MutuallyExclusiveAuthError.__init__)r+   r;   )Ú__name__Ú
__module__Ú__qualname__r=   Ú__classcell__r2   r2   r?   r3   r:   8   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   rJ   Ú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/rI   )
ÚurlÚ_deployments_endpointsr   Ú	json_dataÚgetr*   Úbase_urlÚpathr<   Ú_build_request)r>   rK   rJ   rN   r?   r2   r3   rU   C   s
   zBaseAzureClient._build_requestrO   r*   ú	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 )zïAdjust 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)rH   rF   rP   ÚhttpxÚURLÚis_relative_urlrY   ÚrstripÚlstripÚ	copy_withr<   Ú_prepare_url)r>   rO   Ú	merge_urlÚmerge_raw_pathr?   r2   r3   r`   Q   s   
ÿzBaseAzureClient._prepare_url)rK   r   rJ   rL   r+   rM   )rO   r*   r+   rV   )rA   rB   rC   Ú__annotations__r   rU   r`   rD   r2   r2   r?   r3   rE   ?   s   
 ürE   c                      s`  e Zd ZedddddddddeeddddddœdPd#d$„ƒZedddddddddeeddddddœdQd%d$„ƒZeddddddddeedddddd&œdRd(d$„ƒZdddddddddddddeedddddd)œdS‡ fd-d$„Zedddeddddddddededddddi d.œdT‡ fd8d9„ƒZeZ	dUd:d;„Z
edVd?d@„ƒZedWdDdE„ƒZedXdHdI„ƒZdYdNdO„Z‡  ZS )ZÚ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*   re   rG   rf   rg   ústr | Callable[[], str] | Nonerh   ri   rj   úAzureADTokenProvider | Nonerk   rl   rm   ústr | httpx.URL | Nonern   ú!float | Timeout | None | NotGivenro   rL   rp   úMapping[str, str] | Nonerq   úMapping[str, object] | Nonerr   úhttpx.Client | Noners   r,   rt   r+   r;   c                C  ó   d S r-   r2   )r>   ru   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   r2   r2   r3   r=   e   ó   zAzureOpenAI.__init__c                C  r}   r-   r2   )r>   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   r2   r2   r3   r=   |   ó   )rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   rS   c                C  r}   r-   r2   )r>   rS   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   r2   r2   r3   r=   ’   r   )rf   ru   re   rg   rh   Úworkload_identityri   rj   rk   Úprojectrl   rm   rS   rn   ro   rp   rq   rr   rs   rt   r€   úWorkloadIdentity | Noner�   c                  sp  |du r
t j d¡}|du rt j d¡}|r&|du r&|du r&|du r&tdƒ‚|du r0t j d¡}|du r8tdƒ‚|du rAd|i}ni |¥d|i¥}|du rw|du rWt j d¡}|du r_td	ƒ‚|durn| d
¡› d|› �}n| d
¡› d�}n|durtdƒ‚|du r…t}tƒ j|||	|
||||||||||d� || _	|| _
|| _|r¦|nd| _|r³t |¡| _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_TOKENú¯Missing 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_ENDPOINTúuMust provide one of the `base_url` or `azure_endpoint` arguments, or the `AZURE_OPENAI_ENDPOINT` environment variableú/ú/openai/deployments/ú/openaiú2base_url and azure_endpoint are mutually exclusive©rg   rh   rk   r�   rl   rS   rn   ro   rp   rq   rr   rm   rs   rt   ©ÚosÚenvironrR   r   Ú
ValueErrorr]   ÚAPI_KEY_SENTINELr<   r=   Ú_api_versionÚ_azure_ad_tokenÚ_azure_ad_token_providerrH   rZ   r[   rF   )r>   rf   ru   re   rg   rh   r€   ri   rj   rk   r�   rl   rm   rS   rn   ro   rp   rq   rr   rs   rt   r?   r2   r3   r=   ¨   óh   -ÿÿ
ÿò©rg   rh   r€   Úproviderrk   r�   rl   rm   rf   ri   rj   rS   rn   rr   ro   rp   Úset_default_headersrq   Úset_default_queryrt   Ú_extra_kwargsrš   ú_Provider | None | NotGivenúint | NotGivenr›   rœ   úbool | Noner�   úMapping[str, Any]r   c                  ó¤   t |tƒs	tdƒ‚tƒ jdi d|“d|“d|“d|“d|“d|“d|“d	|“d
|“d|“d|“d|“d|“d|“d|“d|“d|	pC| j|
pG| j|pK| jdœ|¥“ŽS )ú~
        Create a new client instance re-using the same options given to the current client with optional overriding.
        zFConfigure `provider` on `OpenAI`, not on `AzureOpenAI.with_options()`.rg   rh   r€   rk   r�   rl   rm   rS   rn   rr   ro   rp   r›   rq   rœ   rt   r�   ©rf   ri   rj   Nr2   ©Ú
isinstancer   r   r<   Úcopyr•   r–   r—   ©r>   rg   rh   r€   rš   rk   r�   rl   rm   rf   ri   rj   rS   rn   rr   ro   rp   r›   rq   rœ   rt   r�   r?   r2   r3   r§     óT   
ÿþýüûúùø	÷
öõôóòñðýüï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—   r¦   r*   r“   ©r>   rš   Útokenr2   r2   r3   Ú_get_azure_ad_tokenS  s   
ÿzAzureOpenAI._get_azure_ad_tokenÚsecurityr   údict[str, str]c                 C  ó8   | j d urdd| j › �iS | jr| jtkrd| jiS i S ©Nr7   úBearer r8   ©r–   rg   r”   ©r>   r®   r2   r2   r3   Ú_auth_headersb  ó
   

zAzureOpenAI._auth_headersr(   r   Úcustom_headersc                 C  ó   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"©r9   Ú	TypeError©r>   r(   r·   r2   r2   r3   Ú_validate_headersl  ó
   ÿzAzureOpenAI._validate_headersrK   r   c                 C  sš   t |jƒr
i |j¥ni }t|ƒ}||_|  ¡ }|d ur)t|dƒs'd|› �|d< |S | jr=| jtkr=t|dƒs;| j|d< |S t|ƒsFt| jƒrI	 |S t	dƒ‚©Nr7   r²   r8   zUnable to handle auth©
r   r(   r   r­   r6   rg   r”   r9   rp   r“   ©r>   rK   r(   ri   r2   r2   r3   Ú_prepare_optionsu  s    

÷

úþzAzureOpenAI._prepare_optionsrN   Ú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)rˆ   Ú
deploymentz<missing API key>r8   r7   r²   rW   s	   /realtimerX   z	/realtimeÚwss)Úscheme)Úparams©r•   rH   rg   r­   rm   rZ   r[   rY   r]   r_   r`   ©
r>   rN   rÃ   Úauth_headersÚqueryr¬   rS   rb   Úrealtime_urlrO   r2   r2   r3   Ú_configure_realtime‹  s(   ÿý

zAzureOpenAI._configure_realtime)$ru   r*   re   rG   rf   rG   rg   rv   rh   rG   ri   rG   rj   rw   rk   rG   rl   rG   rm   rx   rn   ry   ro   rL   rp   rz   rq   r{   rr   r|   rs   r,   rt   r,   r+   r;   )"re   rG   rf   rG   rg   rv   rh   rG   ri   rG   rj   rw   rk   rG   rl   rG   rm   rx   rn   ry   ro   rL   rp   rz   rq   r{   rr   r|   rs   r,   rt   r,   r+   r;   )"rS   r*   rf   rG   rg   rv   rh   rG   ri   rG   rj   rw   rk   rG   rl   rG   rm   rx   rn   ry   ro   rL   rp   rz   rq   r{   rr   r|   rs   r,   rt   r,   r+   r;   )*rf   rG   ru   rG   re   rG   rg   rv   rh   rG   r€   r‚   ri   rG   rj   rw   rk   rG   r�   rG   rl   rG   rm   rx   rS   rG   rn   ry   ro   rL   rp   rz   rq   r{   rr   r|   rs   r,   rt   r,   r+   r;   ),rg   rv   rh   rG   r€   r‚   rš   rž   rk   rG   r�   rG   rl   rG   rm   rx   rf   rG   ri   rG   rj   rw   rS   rx   rn   ry   rr   r|   ro   rŸ   rp   rz   r›   rz   rq   r{   rœ   r{   rt   r    r�   r¡   r+   r   ©r+   rG   ©r®   r   r+   r¯   ©r(   r   r·   r   r+   r;   ©rK   r   r+   r   ©rN   r*   rÃ   r   r+   rÄ   ©rA   rB   rC   r
   r   r    r=   r   r§   Úwith_optionsr­   rµ   r½   rÂ   rÏ   rD   r2   r2   r?   r3   rd   d   sÖ    íîîépé8
	rd   c                      sf  e Zd ZeddddddddddeeddddddœdPd$d%„ƒZeddddddddddeeddddddœdQd&d%„ƒZedddddddddeedddddd'œdRd)d%„ƒZdddddddddddddeedddddd*œdS‡ fd-d%„Zedddeddddddddededddddi d.œdT‡ fd8d9„ƒZeZ	dUd:d;„Z
edVd?d@„ƒZedWdDdE„ƒZedXdHdI„ƒZdYdNdO„Z‡  ZS )ZÚAsyncAzureOpenAINFT)re   rf   rg   rh   ri   rj   rk   r�   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   r*   re   rG   rf   rg   ú)str | Callable[[], Awaitable[str]] | Nonerh   ri   rj   ú AsyncAzureADTokenProvider | Nonerk   r�   rl   rm   rx   rn   ry   ro   rL   rp   rz   rq   r{   rr   úhttpx.AsyncClient | Noners   r,   rt   r+   r;   c                C  r}   r-   r2   )r>   ru   re   rf   rg   rh   ri   rj   rk   r�   rl   rm   rn   ro   rp   rq   rr   rs   rt   r2   r2   r3   r=   ¦  s   zAsyncAzureOpenAI.__init__c                C  r}   r-   r2   )r>   re   rf   rg   rh   ri   rj   rk   r�   rl   rm   rn   ro   rp   rq   rr   rs   rt   r2   r2   r3   r=   ¾  r~   )rf   rg   rh   ri   rj   rk   r�   rl   rm   rn   ro   rp   rq   rr   rs   rt   rS   c                C  r}   r-   r2   )r>   rS   rf   rg   rh   ri   rj   rk   r�   rl   rm   rn   ro   rp   rq   rr   rs   rt   r2   r2   r3   r=   Õ  r~   )ru   re   rf   rg   rh   r€   ri   rj   rk   r�   rl   rS   rm   rn   ro   rp   rq   rr   rs   rt   r€   r‚   c                  sp  |du r
t j d¡}|du rt j d¡}|r&|du r&|du r&|du r&tdƒ‚|du r0t j d¡}|du r8tdƒ‚|du rAd|i}ni |¥d|i¥}|du rw|du rWt j d¡}|du r_td	ƒ‚|durn| d
¡› d|› �}n| d
¡› d�}n|durtdƒ‚|du r…t}tƒ j|||	|
||||||||||d� || _	|| _
|| _|r¦|nd| _|r³t |¡| _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.
        Nrƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   )r>   ru   re   rf   rg   rh   r€   ri   rj   rk   r�   rl   rS   rm   rn   ro   rp   rq   rr   rs   rt   r?   r2   r3   r=   ì  r˜   r™   rš   rž   rŸ   r›   rœ   r    r�   r¡   r   c                  r¢   )r£   zPConfigure `provider` on `AsyncOpenAI`, not on `AsyncAzureOpenAI.with_options()`.rg   rh   r€   rk   r�   rl   rm   rS   rn   rr   ro   rp   r›   rq   rœ   rt   r�   r¤   Nr2   r¥   r¨   r?   r2   r3   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   r*   r“   r«   r2   r2   r3   r­   —  s   €


ÿz$AsyncAzureOpenAI._get_azure_ad_tokenr®   r   r¯   c                 C  r°   r±   r³   r´   r2   r2   r3   rµ   ¨  r¶   zAsyncAzureOpenAI._auth_headersr(   r   r·   c                 C  r¸   r¹   rº   r¼   r2   r2   r3   r½   ²  r¾   z"AsyncAzureOpenAI._validate_headersrK   r   c                 Ã  s¢   �t |jƒri |j¥ni }t|ƒ}||_|  ¡ I d H }|d ur-t|dƒs+d|› �|d< |S | jrA| jtkrAt|dƒs?| j|d< |S t|ƒsJt| jƒrM	 |S t	dƒ‚r¿   rÀ   rÁ   r2   r2   r3   rÂ   »  s"   €

÷

úþz!AsyncAzureOpenAI._prepare_optionsrN   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Ë   r2   r2   r3   rÏ   Ñ  s*   €ÿý

z$AsyncAzureOpenAI._configure_realtime)&ru   r*   re   rG   rf   rG   rg   rØ   rh   rG   ri   rG   rj   rÙ   rk   rG   r�   rG   rl   rG   rm   rx   rn   ry   ro   rL   rp   rz   rq   r{   rr   rÚ   rs   r,   rt   r,   r+   r;   )$re   rG   rf   rG   rg   rØ   rh   rG   ri   rG   rj   rÙ   rk   rG   r�   rG   rl   rG   rm   rx   rn   ry   ro   rL   rp   rz   rq   r{   rr   rÚ   rs   r,   rt   r,   r+   r;   )$rS   r*   rf   rG   rg   rØ   rh   rG   ri   rG   rj   rÙ   rk   rG   r�   rG   rl   rG   rm   rx   rn   ry   ro   rL   rp   rz   rq   r{   rr   rÚ   rs   r,   rt   r,   r+   r;   )*ru   rG   re   rG   rf   rG   rg   rØ   rh   rG   r€   r‚   ri   rG   rj   rÙ   rk   rG   r�   rG   rl   rG   rS   rG   rm   rx   rn   ry   ro   rL   rp   rz   rq   r{   rr   rÚ   rs   r,   rt   r,   r+   r;   ),rg   rØ   rh   rG   r€   r‚   rš   rž   rk   rG   r�   rG   rl   rG   rm   rx   rf   rG   ri   rG   rj   rÙ   rS   rx   rn   ry   rr   rÚ   ro   rŸ   rp   rz   r›   rz   rq   r{   rœ   r{   rt   r    r�   r¡   r+   r   rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   r2   r2   r?   r3   r×   ¥  sÜ    ìííépé8
	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   rZ   Úauthr   Ú_typesr   r   r   r   r   r   Ú_utilsr   r   Ú_clientr   r   Ú_compatr   Ú_modelsr   r   Ú	_providerr   Ú
_streamingr   r   Ú_exceptionsr   Ú_base_clientr    r!   ÚsetrP   r*   ÚAzureADTokenProviderÚAsyncAzureADTokenProviderÚClientÚAsyncClientr"   r$   Újoinr”   r6   r9   r:   rE   rd   r×   r2   r2   r2   r3   Ú<module>   s@    ( ÿ

 %  $C