o
    àejJy  ã                   @  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# 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/m0Z0 e1g d¢ƒZ2e	g e3f Z4e	g df Z5edeej6ej7f d�Z8edee*e e+e f d�Z9d :g d¢¡Z;d*dd„Z<d+d d!„Z=G d"d#„ d#e-ƒZ>G d$d%„ d%e0e8e9f ƒZ?G d&d'„ d'e?ej6e*e f eƒZ@G d(d)„ d)e?ej7e+e f eƒZAd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)Únormalize_httpx_url)Ú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*   © úP/var/www/html/choboyeo/PHP/venv/lib/python3.10/site-packages/openai/lib/azure.pyÚ	<genexpr>2   s   € z_has_header.<locals>.<genexpr>)r/   Úany)r)   r*   r3   r2   r4   Ú_has_header0   s   r7   c                 C  s   t | dƒp	t | dƒS )NÚAuthorizationúapi-key)r7   )r)   r3   r3   r4   Ú_has_auth_header5   s   r:   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__r3   r4   r>   :   s   ÿz#MutuallyExclusiveAuthError.__init__)r,   r<   )Ú__name__Ú
__module__Ú__qualname__r>   Ú__classcell__r3   r3   r@   r4   r;   9   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   rK   Ú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/rJ   )
ÚurlÚ_deployments_endpointsr   Ú	json_dataÚgetr+   Úbase_urlÚpathr=   Ú_build_request)r?   rL   rK   rO   r@   r3   r4   rV   D   s
   zBaseAzureClient._build_requestrP   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)rI   rG   rQ   ÚhttpxÚURLÚis_relative_urlrZ   ÚrstripÚlstripÚ	copy_withr=   Ú_prepare_url)r?   rP   Ú	merge_urlÚmerge_raw_pathr@   r3   r4   ra   R   s   
ÿzBaseAzureClient._prepare_url)rL   r   rK   rM   r,   rN   )rP   r+   r,   rW   )rB   rC   rD   Ú__annotations__r   rV   ra   rE   r3   r3   r@   r4   rF   @   s   
 ürF   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+   rf   rH   rg   rh   ústr | Callable[[], str] | Noneri   rj   rk   úAzureADTokenProvider | Nonerl   rm   rn   ústr | httpx.URL | Nonero   ú!float | Timeout | None | NotGivenrp   rM   rq   úMapping[str, str] | Nonerr   úMapping[str, object] | Noners   úhttpx.Client | Nonert   r-   ru   r,   r<   c                C  ó   d S r.   r3   )r?   rv   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   r3   r3   r4   r>   f   ó   zAzureOpenAI.__init__c                C  r~   r.   r3   )r?   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   r3   r3   r4   r>   }   ó   )rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rT   c                C  r~   r.   r3   )r?   rT   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   r3   r3   r4   r>   “   r€   )rg   rv   rf   rh   ri   Úworkload_identityrj   rk   rl   Úprojectrm   rn   rT   ro   rp   rq   rr   rs   rt   ru   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©rh   ri   rl   r‚   rm   rT   ro   rp   rq   rr   rs   rn   rt   ru   ©ÚosÚenvironrS   r    Ú
ValueErrorr^   ÚAPI_KEY_SENTINELr=   r>   Ú_api_versionÚ_azure_ad_tokenÚ_azure_ad_token_providerrI   r[   r\   rG   )r?   rg   rv   rf   rh   ri   r�   rj   rk   rl   r‚   rm   rn   rT   ro   rp   rq   rr   rs   rt   ru   r@   r3   r4   r>   ©   óh   -ÿÿ
ÿò©rh   ri   r�   Úproviderrl   r‚   rm   rn   rg   rj   rk   rT   ro   rs   rp   rq   Úset_default_headersrr   Úset_default_queryru   Ú_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()`.rh   ri   r�   rl   r‚   rm   rn   rT   ro   rs   rp   rq   rœ   rr   r�   ru   rž   ©rg   rj   rk   Nr3   ©Ú
isinstancer   r    r=   Úcopyr–   r—   r˜   ©r?   rh   ri   r�   r›   rl   r‚   rm   rn   rg   rj   rk   rT   ro   rs   rp   rq   rœ   rr   r�   ru   rž   r@   r3   r4   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›   Útokenr3   r3   r4   Ú_get_azure_ad_tokenT  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 ©Nr8   úBearer r9   ©r—   rh   r•   ©r?   r¯   r3   r3   r4   Ú_auth_headersc  ó
   

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"©r:   Ú	TypeError©r?   r)   r¸   r3   r3   r4   Ú_validate_headersm  ó
   ÿzAzureOpenAI._validate_headersrL   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ƒ‚©Nr8   r³   r9   zUnable to handle auth©
r   r)   r   r®   r7   rh   r•   r:   rq   r”   ©r?   rL   r)   rj   r3   r3   r4   Ú_prepare_optionsv  s    

÷

úþzAzureOpenAI._prepare_optionsrO   Ú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rCt| jƒ}|j d¡d }|j|d�}n|  	d	¡}|jd
d�}|ji |¥d�}	|	|fS ©N)r‰   Ú
deploymentz<missing API key>r9   r8   r³   rX   s	   /realtimerY   z	/realtimeÚwss)Úscheme)Úparams©
r–   rI   rh   r®   rn   r   rZ   r^   r`   ra   ©
r?   rO   rÄ   Úauth_headersÚqueryr­   rT   rc   Úrealtime_urlrP   r3   r3   r4   Ú_configure_realtimeŒ  s(   ÿý


zAzureOpenAI._configure_realtime)$rv   r+   rf   rH   rg   rH   rh   rw   ri   rH   rj   rH   rk   rx   rl   rH   rm   rH   rn   ry   ro   rz   rp   rM   rq   r{   rr   r|   rs   r}   rt   r-   ru   r-   r,   r<   )"rf   rH   rg   rH   rh   rw   ri   rH   rj   rH   rk   rx   rl   rH   rm   rH   rn   ry   ro   rz   rp   rM   rq   r{   rr   r|   rs   r}   rt   r-   ru   r-   r,   r<   )"rT   r+   rg   rH   rh   rw   ri   rH   rj   rH   rk   rx   rl   rH   rm   rH   rn   ry   ro   rz   rp   rM   rq   r{   rr   r|   rs   r}   rt   r-   ru   r-   r,   r<   )*rg   rH   rv   rH   rf   rH   rh   rw   ri   rH   r�   rƒ   rj   rH   rk   rx   rl   rH   r‚   rH   rm   rH   rn   ry   rT   rH   ro   rz   rp   rM   rq   r{   rr   r|   rs   r}   rt   r-   ru   r-   r,   r<   ),rh   rw   ri   rH   r�   rƒ   r›   rŸ   rl   rH   r‚   rH   rm   rH   rn   ry   rg   rH   rj   rH   rk   rx   rT   ry   ro   rz   rs   r}   rp   r    rq   r{   rœ   r{   rr   r|   r�   r|   ru   r¡   rž   r¢   r,   r   ©r,   rH   ©r¯   r   r,   r°   ©r)   r   r¸   r   r,   r<   ©rL   r   r,   r   ©rO   r+   rÄ   r   r,   rÅ   ©rB   rC   rD   r
   r   r!   r>   r   r¨   Úwith_optionsr®   r¶   r¾   rÃ   rÐ   rE   r3   r3   r@   r4   re   e   sÖ    íîîépé8
	re   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)rf   rg   rh   ri   rj   rk   rl   r‚   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   r+   rf   rH   rg   rh   ú)str | Callable[[], Awaitable[str]] | Noneri   rj   rk   ú AsyncAzureADTokenProvider | Nonerl   r‚   rm   rn   ry   ro   rz   rp   rM   rq   r{   rr   r|   rs   úhttpx.AsyncClient | Nonert   r-   ru   r,   r<   c                C  r~   r.   r3   )r?   rv   rf   rg   rh   ri   rj   rk   rl   r‚   rm   rn   ro   rp   rq   rr   rs   rt   ru   r3   r3   r4   r>   §  s   zAsyncAzureOpenAI.__init__c                C  r~   r.   r3   )r?   rf   rg   rh   ri   rj   rk   rl   r‚   rm   rn   ro   rp   rq   rr   rs   rt   ru   r3   r3   r4   r>   ¿  r   )rg   rh   ri   rj   rk   rl   r‚   rm   rn   ro   rp   rq   rr   rs   rt   ru   rT   c                C  r~   r.   r3   )r?   rT   rg   rh   ri   rj   rk   rl   r‚   rm   rn   ro   rp   rq   rr   rs   rt   ru   r3   r3   r4   r>   Ö  r   )rv   rf   rg   rh   ri   r�   rj   rk   rl   r‚   rm   rT   rn   ro   rp   rq   rr   rs   rt   ru   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?   rv   rf   rg   rh   ri   r�   rj   rk   rl   r‚   rm   rT   rn   ro   rp   rq   rr   rs   rt   ru   r@   r3   r4   r>   í  r™   rš   r›   rŸ   r    rœ   r�   r¡   rž   r¢   r   c                  r£   )r¤   zPConfigure `provider` on `AsyncOpenAI`, not on `AsyncAzureOpenAI.with_options()`.rh   ri   r�   rl   r‚   rm   rn   rT   ro   rs   rp   rq   rœ   rr   r�   ru   rž   r¥   Nr3   r¦   r©   r@   r3   r4   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¬   r3   r3   r4   r®   ˜  s   €


ÿz$AsyncAzureOpenAI._get_azure_ad_tokenr¯   r   r°   c                 C  r±   r²   r´   rµ   r3   r3   r4   r¶   ©  r·   zAsyncAzureOpenAI._auth_headersr)   r   r¸   c                 C  r¹   rº   r»   r½   r3   r3   r4   r¾   ³  r¿   z"AsyncAzureOpenAI._validate_headersrL   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Â   r3   r3   r4   rÃ   ¼  s"   €

÷

úþz!AsyncAzureOpenAI._prepare_optionsrO   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rGt| jƒ}|j d¡d }|j|d�}n|  	d	¡}|jd
d�}|ji |¥d�}	|	|fS rÆ   rË   rÌ   r3   r3   r4   rÐ   Ò  s*   €ÿý


z$AsyncAzureOpenAI._configure_realtime)&rv   r+   rf   rH   rg   rH   rh   rÙ   ri   rH   rj   rH   rk   rÚ   rl   rH   r‚   rH   rm   rH   rn   ry   ro   rz   rp   rM   rq   r{   rr   r|   rs   rÛ   rt   r-   ru   r-   r,   r<   )$rf   rH   rg   rH   rh   rÙ   ri   rH   rj   rH   rk   rÚ   rl   rH   r‚   rH   rm   rH   rn   ry   ro   rz   rp   rM   rq   r{   rr   r|   rs   rÛ   rt   r-   ru   r-   r,   r<   )$rT   r+   rg   rH   rh   rÙ   ri   rH   rj   rH   rk   rÚ   rl   rH   r‚   rH   rm   rH   rn   ry   ro   rz   rp   rM   rq   r{   rr   r|   rs   rÛ   rt   r-   ru   r-   r,   r<   )*rv   rH   rf   rH   rg   rH   rh   rÙ   ri   rH   r�   rƒ   rj   rH   rk   rÚ   rl   rH   r‚   rH   rm   rH   rT   rH   rn   ry   ro   rz   rp   rM   rq   r{   rr   r|   rs   rÛ   rt   r-   ru   r-   r,   r<   ),rh   rÙ   ri   rH   r�   rƒ   r›   rŸ   rl   rH   r‚   rH   rm   rH   rn   ry   rg   rH   rj   rH   rk   rÚ   rT   ry   ro   rz   rs   rÛ   rp   r    rq   r{   rœ   r{   rr   r|   r�   r|   ru   r¡   rž   r¢   r,   r   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   r3   r3   r@   r4   rØ   ¦  sÜ    ìííépé8
	rØ   )r)   r   r*   r+   r,   r-   )r)   r   r,   r-   )BÚ
__future__r   r’   rÜ   Útypingr   r   r   r   r   r   r	   r
   Útyping_extensionsr   r   r[   Úauthr   Ú_typesr   r   r   r   r   r   Ú_utilsr   r   Ú_clientr   r   Ú_compatr   Ú_httpx2r   Ú_modelsr   r   Ú	_providerr   Ú
_streamingr   r   Ú_exceptionsr    Ú_base_clientr!   r"   ÚsetrQ   r+   ÚAzureADTokenProviderÚAsyncAzureADTokenProviderÚClientÚAsyncClientr#   r%   Újoinr•   r7   r:   r;   rF   re   rØ   r3   r3   r3   r4   Ú<module>   sB    ( ÿ

 %  $C