Ë
    Fü´j=  ã                  óæ  — U 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
 d dlmZ d dlmZmZmZmZ d dlZddlmZ ddlmZmZ dd	lmZmZmZ dd
lmZ dZdZdZ dddœZ! G d„ de	«      Z" G d„ de	«      Z#e#Z$de%d<    G d„ de	«      Z& ede#e&«      Z'ddœ	 	 	 	 	 	 	 d'd„Z(	 d(	 	 	 d)d„Z)	 d*dddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d+d „Z*	 d,ddd!œ	 	 	 	 	 	 	 d-d"„Z+ G d#„ d$ee'   «      Z, G d%„ d&e,e#   «      Z-y).é    )ÚannotationsN)ÚAnyÚGenericÚTypeVarÚCallableÚ	TypedDictÚcast)ÚPath)ÚLiteralÚ	TypeAliasÚNotRequiredÚoverrideé   )Úis_dict)ÚDefaultHttpx2ClientÚ_loaded_legacy_httpx)Ú
OAuthErrorÚOpenAIErrorÚSubjectTokenProviderError)Ú	to_threadz/urn:ietf:params:oauth:grant-type:token-exchangez#https://auth.openai.com/oauth/tokeni°  z$urn:ietf:params:oauth:token-type:jwtz)urn:ietf:params:oauth:token-type:id_token)ÚjwtÚidc                  ó"   — e Zd ZU ded<   ded<   y)ÚSubjectTokenProviderzLiteral['jwt', 'id']Ú
token_typezCallable[[], str]Ú	get_tokenN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úS/root/workspace/ytshorts/venv/lib/python3.12/site-packages/openai/auth/_workload.pyr   r      s   … Ø$Ó$Ø Ô r"   r   c                  ó@   — e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   y	)
ÚWorkloadIdentityz(Identity provider resource id in WIFAPI.ÚstrÚidentity_provider_idÚservice_account_idr   ÚproviderúNotRequired[float]Úrefresh_buffer_secondsN©r   r   r   Ú__doc__r    r!   r"   r#   r%   r%      s&   … Ù2àÓàGØÓàEØ"Ó"àØ.Ô.r"   r%   r   ÚSubjectTokenWorkloadIdentityc                  ó:   — e Zd ZU dZded<   ded<   ded<   ded<   y	)
ÚX509WorkloadIdentityzJAuthenticate with the client certificate configured on the HTTP transport.zLiteral['x509']Útyper&   r'   r(   r*   r+   Nr,   r!   r"   r#   r0   r0   1   s   … ÙTà
ÓØÓØÓØ.Ô.r"   r0   Ú_WorkloadIdentityT)r+   c                ó    — d| |dœ}|�||d<   |S )zHConfigure X.509 workload identity without handling certificate material.Úx509)r1   r'   r(   r+   r!   )r'   r(   r+   Úidentitys       r#   Úx509_workload_identityr6   =   s,   € ð Ø 4Ø0ñ&€Hð
 Ð)Ø-CˆÐ)Ñ*Ø€Or"   c                ó   ‡ — dˆ fd„}d|dœS )aK  
    Get a subject token provider for Kubernetes clusters with Workload Identity configured.

    Cloud providers typically mount the subject token as a file in the container.

    Args:
        token_file_path: path to the mounted service account token file. Defaults to `/var/run/secrets/kubernetes.io/serviceaccount/token`.
    c                 óò   •— 	 t        ‰d«      5 } | j                  «       j                  «       }|st        d‰› d�«      ‚|cd d d «       S # 1 sw Y   y xY w# t        $ r}t        d‰› d|› �«      |‚d }~ww xY w)NÚrzThe token file at z
 is empty.z!Failed to read the token file at z: )ÚopenÚreadÚstripr   Ú	Exception)ÚfÚtokenÚeÚtoken_file_paths      €r#   r   z5k8s_service_account_token_provider.<locals>.get_tokenZ   s�   ø€ ð	oÜ�o sÓ+ð ¨qØŸ™›Ÿ™Ó(�ÙÜ3Ð6HÈÐHYÐYcÐ4dÓeÐeØ÷	÷ ò ûô
 ò 	oÜ+Ð.OÐP_ÐO`Ð`bÐcdÐbeÐ,fÓgÐmnÐnûð	oús4   ƒA �1A
Á 	A Á
AÁA ÁA Á	A6ÁA1Á1A6r   ©r   r   ©Úreturnr&   r!   )rA   r   s   ` r#   Ú"k8s_service_account_token_providerrE   N   s   ø€ õoð  ¨iÑ8Ð8r"   z
2018-02-01ç      $@)Ú	object_idÚ	client_idÚ
msi_res_idÚapi_versionÚtimeoutÚhttp_clientc               ó2   ‡ ‡‡‡‡‡‡— dˆˆˆˆˆˆ ˆfd„}d|dœS )a�  
    Get a subject token provider for Azure Managed Identities.

    See: https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token#get-a-token-using-http

    Args:
        resource: the resource URI to request a token for. Defaults to `https://management.azure.com/` (Azure Resource Manager).
        object_id: the object ID of the managed identity to use, when multiple are assigned.
        client_id: the client ID of the managed identity to use, when multiple are assigned.
        msi_res_id: the ARM resource ID of the managed identity to use, when multiple are assigned.
        api_version: the Azure IMDS API version. Defaults to `2018-02-01`.
        timeout: the request timeout in seconds. Defaults to 10.0.
        http_client: optional httpx2.Client instance to use for requests. If not provided, a new client will be created for each request.
    c                 óþ  •— 	 d} ‰‰dœ}‰�‰|d<   ‰�‰|d<   ‰
�‰
|d<   ‰	�‰	j                  | |ddi‰¬«      }n4t        j                  «       5 }|j                  | |ddi‰¬«      }d d d «       j                  rt	        d	|j
                  › �|¬
«      ‚|j                  «       }|j                  d«      }|st	        d|¬
«      ‚t        t        |«      S # 1 sw Y   ŒoxY w# t        $ r}t	        d|› �«      |‚d }~ww xY w)Nz5http://169.254.169.254/metadata/identity/oauth2/token)zapi-versionÚresourcerG   rH   rI   ÚMetadataÚtrue©ÚparamsÚheadersrK   z4Failed to fetch Azure subject token from IMDS: HTTP ©ÚresponseÚaccess_tokenz3Azure IMDS response did not include an access_tokenz/Failed to fetch Azure subject token from IMDS: )
ÚgetÚhttpx2ÚClientÚis_errorr   Ústatus_codeÚjsonr	   r&   r=   )ÚurlrS   rV   ÚclientÚdatar?   r@   rJ   rH   rL   rI   rG   rO   rK   s          €€€€€€€r#   r   z8azure_managed_identity_token_provider.<locals>.get_token€   sC  ø€ ð	jØIˆCØ5@ÈhÑ%WˆFØÐ$Ø&/��{Ñ#ØÐ$Ø&/��{Ñ#ØÐ%Ø'1��|Ñ$àÐ&Ø&Ÿ?™?¨3°vÈ
ÐTZÐG[Ðel˜?Óm‘ä—]‘]“_ð m¨Ø%Ÿz™z¨#°fÀzÐSYÐFZÐdk˜zÓl�H÷mð × Ò Ü/ØJÈ8×K_ÑK_ÐJ`ÐaØ%ôð ð —=‘=“?ˆDØ—H‘H˜^Ó,ˆEÙÜ/ØIÐT\ôð ô œ˜UÓ#Ð#÷mð mûô ò 	jÜ+Ð.]Ð^_Ð]`Ð,aÓbÐhiÐiûð	jús1   ƒA
C ÁCÁ%A-C ÃCÃC Ã	C<Ã(C7Ã7C<r   rB   rC   r!   )rO   rG   rH   rI   rJ   rK   rL   r   s   ``````` r#   Ú%azure_managed_identity_token_providerra   g   s   þ€ ÷2jó jð@  ¨iÑ8Ð8r"   )rK   rL   c               ó"   ‡ ‡‡— dˆ ˆˆfd„}d|dœS )a6  
    Get a subject token provider for GCP VM instances using the instance metadata server.

    See: https://cloud.google.com/compute/docs/instances/verifying-instance-identity

    Args:
        audience: the unique URI agreed upon by both the instance and the system verifying
            the instance's identity. Defaults to `https://api.openai.com/v1`.
        timeout: the request timeout in seconds. Defaults to 10.0.
        http_client: optional httpx2.Client instance to use for requests. If not provided, a new client will be created for each request.
    c                 ó¨  •— 	 d} d‰i}‰�‰j                  | |ddi‰¬«      }n4t        j                  «       5 }|j                  | |ddi‰¬«      }d d d «       j                  rt	        d|j
                  › �|¬«      ‚|j                  j                  «       }|st	        d|¬«      ‚|S # 1 sw Y   ŒZxY w# t        $ r}t	        d	|› �«      |‚d }~ww xY w)
Nz]http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identityÚaudiencezMetadata-FlavorÚGooglerR   z=Failed to fetch GCP subject token from metadata server: HTTP rU   z+GCP metadata server returned an empty tokenz8Failed to fetch GCP subject token from metadata server: )	rX   rY   rZ   r[   r   r\   Útextr<   r=   )	r^   rS   rV   r_   r?   r@   rd   rL   rK   s	         €€€r#   r   z(gcp_id_token_provider.<locals>.get_tokenµ   s  ø€ ð	sØqˆCØ  (Ð+ˆFàÐ&Ø&Ÿ?™?¨3°vÐHYÐ[cÐGdÐnu˜?Óv‘ä—]‘]“_ð v¨Ø%Ÿz™z¨#°fÐGXÐZbÐFcÐmt˜zÓu�H÷vð × Ò Ü/ØSÐT\×ThÑThÐSiÐjØ%ôð ð —M‘M×'Ñ'Ó)ˆEÙÜ/Ð0]ÐhpÔqÐqØˆL÷vð vûô ò 	sÜ+Ð.fÐghÐfiÐ,jÓkÐqrÐrûð	sús/   ƒ4B4 ·B(ÁAB4 Â(B1Â-B4 Â4	CÂ=CÃCr   rB   rC   r!   )rd   rK   rL   r   s   ``` r#   Úgcp_id_token_providerrg   £   s   ú€ ÷$sð. ¨YÑ7Ð7r"   c                  óœ   — e Zd Zeddœ	 	 	 	 	 	 	 dd„Zdd„Zdd„Zddd„Zdd„Zdd	„Z	dd
„Z
dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zy) Ú_WorkloadIdentityAuthT©Útoken_exchange_urlÚ_use_httpx2c               óî   — || _         || _        || _        d | _        d | _        d | _        d | _        d| _        t        j                  «       | _
        t        j                  | j                  «      | _        y ©NF)Úworkload_identityrk   rl   Ú_follow_redirectsÚ_cached_tokenÚ"_cached_token_expires_at_monotonicÚ"_cached_token_refresh_at_monotonicÚ_refreshingÚ	threadingÚLockÚ_lockÚ	ConditionÚ
_condition)Úselfro   rk   rl   s       r#   Ú__init__z_WorkloadIdentityAuth.__init__Ð   si   € ð 6GˆÔØ"4ˆÔØ&ˆÔØ.2ˆÔà)-ˆÔØ@DˆÔ/Ø@DˆÔ/Ø!&ˆÔÜ—^‘^Ó%ˆŒ
Ü#×-Ñ-¨d¯j©jÓ9ˆ�r"   c                óæ  — | j                   5  | j                  rG| j                  «       r7| j                  j	                  «        | j                  r| j                  «       rŒ7| j                  «       s3| j                  «       s#t        t        | j                  «      cd d d «       S | j                  rs| j                  r'| j                  j	                  «        | j                  rŒ'| j                  }| j                  «       rt        d«      ‚t        t        |«      cd d d «       S d| _        d d d «       	 | j                  «        | j                   5  | j                  «       rt        d«      ‚t        t        | j                  «      cd d d «       | j                   5  d| _        | j                  j                  «        d d d «       S # 1 sw Y   Œ›xY w# 1 sw Y   S xY w# 1 sw Y   nxY w	 | j                   5  d| _        | j                  j                  «        d d d «       y # 1 sw Y   y xY w# | j                   5  d| _        | j                  j                  «        d d d «       w # 1 sw Y   w xY wxY w)Nz)Token is unusable after refresh completedTF)rw   rt   Ú_token_unusablery   ÚwaitÚ_needs_refreshr	   r&   rq   ÚRuntimeErrorÚ_perform_refreshÚ
notify_all©rz   r?   s     r#   r   z_WorkloadIdentityAuth.get_tokenã   sþ  € Ø�Z‰Zñ 	$Ø×"Ò" t×';Ñ';Ô'=Ø—‘×$Ñ$Ô&ð ×"Ò" t×';Ñ';Õ'=ð ×'Ñ'Ô)°$×2EÑ2EÔ2GÜœC ×!3Ñ!3Ó4÷	$ñ 	$ð ×ÒØ×&Ò&Ø—O‘O×(Ñ(Ô*ð ×&Ó&à×*Ñ*�Ø×'Ñ'Ô)Ü&Ð'RÓSÐSÜœC Ó'÷	$ñ 	$ð  $ˆDÔ÷	$ð"		-Ø×!Ñ!Ô#Ø—‘ñ 5Ø×'Ñ'Ô)Ü&Ð'RÓSÐSÜœC ×!3Ñ!3Ó4÷5ð 5ð
 —‘ñ -Ø#(�Ô Ø—‘×*Ñ*Ô,÷-ð -÷1	$ð 	$ú÷0-ð -ú÷5ð 5úð 5ð
 —‘ñ -Ø#(�Ô Ø—‘×*Ñ*Ô,÷-÷ -ñ -û�—‘ñ -Ø#(�Ô Ø—‘×*Ñ*Ô,÷-÷ -ñ -ýsx   �AGÁ!9GÂ$>GÃ#6GÄ#GÄ3H, Å5GÆ	H, Æ"GÇGÇG	ÇG%Ç!H, Ç5"H È H)È,I0È9"I$É	I0É$I-É)I0c              ƒ  óH   K  — t        | j                  «      ƒ d {  –—† S 7 Œ­w©N)r   r   ©rz   s    r#   Úget_token_asyncz%_WorkloadIdentityAuth.get_token_async   s   è ø€ Ü˜tŸ~™~Ó.×.Ð.Ð.ús   ‚"› œ"Nc                ó¦   — | j                   5  |�| j                  |k7  r
	 d d d «       y d | _        d | _        d | _        d d d «       y # 1 sw Y   y xY wr…   )rw   rq   rr   rs   rƒ   s     r#   Úinvalidate_tokenz&_WorkloadIdentityAuth.invalidate_token  sX   € Ø�Z‰Zñ 	;ØÐ  T×%7Ñ%7¸5Ò%@Ø÷	;ð 	;ð "&ˆDÔØ6:ˆDÔ3Ø6:ˆDÔ3÷	;÷ 	;ñ 	;ús   �A©AÁAc                óF   — | j                  «       }| j                  |«       y r…   )Ú_fetch_token_from_exchangeÚ_store_token)rz   Ú
token_datas     r#   r�   z&_WorkloadIdentityAuth._perform_refresh  s   € Ø×4Ñ4Ó6ˆ
Ø×Ñ˜*Õ%r"   c                óÒ   — t        j                  «       }|d   }| j                  5  |d   | _        ||z   | _        || j                  |«      z   | _        d d d «       y # 1 sw Y   y xY w)NÚ
expires_inrW   )ÚtimeÚ	monotonicrw   rq   rr   Ú_refresh_delay_secondsrs   )rz   r�   Únowr�   s       r#   rŒ   z"_WorkloadIdentityAuth._store_token  sk   € Ü�n‰nÓˆØ Ñ-ˆ
à�Z‰Zñ 	dØ!+¨NÑ!;ˆDÔØ69¸JÑ6FˆDÔ3Ø69¸D×<WÑ<WÐXbÓ<cÑ6cˆDÔ3÷	d÷ 	dñ 	dús   ¦.AÁA&c                ó   — t        d«      ‚)Nz>Workload identity authentication must implement token exchange)ÚNotImplementedErrorr†   s    r#   r‹   z0_WorkloadIdentityAuth._fetch_token_from_exchange  s   € Ü!Ð"bÓcÐcr"   c                óÌ  — 	 |j                   r|j                  «       nd }|j                  dv rt	        ||¬«      ‚|j
                  rv|€t        d«      ‚t        |«      st        d«      ‚|j                  d«      }|j                  d«      }t        |t        «      r|st        d«      ‚|| j                  |«      dœS t        d	|j                  › �«      ‚# t        $ r d }Y ŒÂw xY w)
N)i�  i‘  i“  )rV   Úbodyz4Token exchange succeeded but response body was emptyz@Token exchange succeeded but response body was not a JSON objectrW   r�   z<Token exchange response did not include a valid access_token)rW   r�   z"Token exchange failed with status )Úcontentr]   Ú
ValueErrorr\   r   Ú
is_successr   r   rX   Ú
isinstancer&   Ú_validate_expires_in)rz   rV   r—   rW   r�   s        r#   Ú_handle_token_responsez,_WorkloadIdentityAuth._handle_token_response  så   € ð	Ø&.×&6Ò&6�8—=‘=”?¸DˆDð ×Ñ ?Ñ2Ü h°TÔ:Ð:à×ÒØˆ|Ü!Ð"XÓYÐYÜ˜4”=Ü!Ð"dÓeÐeØŸ8™8 NÓ3ˆLØŸ™ ,Ó/ˆJÜ˜l¬CÔ0¹Ü!Ð"`ÓaÐaØ$0À×@YÑ@YÐZdÓ@eÑfÐfäØ0°×1EÑ1EÐ0FÐGó
ð 	
øô# ò 	ØŠDð	ús   ‚C ÃC#Ã"C#c                óZ   — t        |t        t        f«      st        d«      ‚t        |«      S )Nz:Token exchange response did not include a valid expires_in)r›   ÚintÚfloatr   )rz   r�   s     r#   rœ   z*_WorkloadIdentityAuth._validate_expires_in3  s'   € Ü˜*¤s¬E lÔ3ÜÐZÓ[Ð[Ü�ZÓ Ð r"   c                óB   — | j                   d u xs | j                  «       S r…   )rq   Ú_token_expiredr†   s    r#   r}   z%_WorkloadIdentityAuth._token_unusable8  s!   € Ø×!Ñ! TÐ)ÒB¨T×-@Ñ-@Ó-BÐBr"   c                ó^   — | j                   €yt        j                  «       | j                   k\  S )NT)rr   r�   r‘   r†   s    r#   r¢   z$_WorkloadIdentityAuth._token_expired;  s)   € Ø×2Ñ2Ð:ØÜ�~‰~Ó 4×#JÑ#JÑJÐJr"   c                ó^   — | j                   €yt        j                  «       | j                   k\  S rn   )rs   r�   r‘   r†   s    r#   r   z$_WorkloadIdentityAuth._needs_refresh@  s)   € Ø×2Ñ2Ð:ØÜ�~‰~Ó 4×#JÑ#JÑJÐJr"   c                ó~   — | j                   j                  dt        «      }t        ||dz  «      }t	        ||z
  d«      S )Nr+   r   g        )ro   rX   ÚDEFAULT_REFRESH_BUFFER_SECONDSÚminÚmax)rz   r�   Úconfigured_bufferÚeffective_buffers       r#   r’   z,_WorkloadIdentityAuth._refresh_delay_secondsE  sB   € Ø ×2Ñ2×6Ñ6Ð7OÔQoÓpÐÜÐ0°*¸q±.ÓAÐÜ�:Ð 0Ñ0°#Ó6Ð6r"   c                 ó   — ~y)ú>Preserve the established subject-token request retry behavior.Tr!   ©rz   Úrequests     r#   Ú_can_retry_requestz(_WorkloadIdentityAuth._can_retry_requestJ  s   € àØr"   c                 ó   — ~y)r¬   Nr!   r­   s     r#   Ú_prepare_retry_requestz,_WorkloadIdentityAuth._prepare_retry_requestO  s   € ár"   )ro   r2   rk   r&   rl   ÚboolrD   ÚNonerC   r…   )r?   ú
str | NonerD   r³   )rD   r³   )r�   údict[str, Any]rD   r³   ©rD   rµ   )rV   zhttpx2.ResponserD   rµ   )r�   ÚobjectrD   r    )rD   r²   )r�   r    rD   r    )r®   úhttpx2.RequestrD   r²   )r®   r¸   rD   r³   )r   r   r   ÚDEFAULT_TOKEN_EXCHANGE_URLr{   r   r‡   r‰   r�   rŒ   r‹   r�   rœ   r}   r¢   r   r’   r¯   r±   r!   r"   r#   ri   ri   Ï   s‚   „ ð
 #=Ø ñ:ð .ð:ð  ð	:ð
 ð:ð 
ó:ó&-ó:/ô;ó&ódódó
ó0!ó
CóKó
Kó
7ó
ô
r"   ri   c                  óP   ‡ — e Zd Zeddœ	 	 	 	 	 	 	 dˆ fd„Zedd„«       Zdd„Zˆ xZS )	ÚWorkloadIdentityAuthTrj   c               ó*   •— t         ‰| �  |||¬«       y )N)ro   rk   rl   )Úsuperr{   )rz   ro   rk   rl   Ú	__class__s       €r#   r{   zWorkloadIdentityAuth.__init__U  s    ø€ ô 	‰ÑØ/Ø1Ø#ð 	õ 	
r"   c           
     ó  — | j                  «       }| j                  d   d   }t        j                  |«      }|€2t	        d|›ddj                  t        j                  «       «      › �«      ‚| j                  s
t        «       nd }|�|j                  «       nt        d¬«      }|5 }|j                  | j                  t        ||| j                  d   | j                  d	   d
œd¬«      }| j                  |«      cd d d «       S # 1 sw Y   y xY w)Nr)   r   zUnsupported token type: z. Supported types: z, F)Úfollow_redirectsr'   r(   )Ú
grant_typeÚsubject_tokenÚsubject_token_typer'   r(   rF   )r]   rK   )Ú_get_subject_tokenro   ÚSUBJECT_TOKEN_TYPESrX   r   ÚjoinÚkeysrl   r   rZ   r   Úpostrk   ÚTOKEN_EXCHANGE_GRANT_TYPEr�   )rz   rÂ   r   rÃ   Úlegacy_httpxÚexchange_clientr_   rV   s           r#   r‹   z/WorkloadIdentityAuth._fetch_token_from_exchangeb  s  € à×/Ñ/Ó1ˆØ×+Ñ+¨JÑ7¸ÑEˆ
Ü0×4Ñ4°ZÓ@ÐØÐ%ÜØ*¨:¨.Ð8KÈDÏIÉIÔVi×VnÑVnÓVpÓLqÐKrÐsóð ð 6:×5EÒ5EÔ+Ô-È4ˆà%1Ð%=ˆL×ÑÔ!ÔCVÐhmÔCnð 	ð ð 	9 Ø—{‘{Ø×'Ñ'ä";Ø%2Ø*<Ø,0×,BÑ,BÐCYÑ,ZØ*.×*@Ñ*@ÐAUÑ*Vñð ð #ó 
ˆHð ×.Ñ.¨xÓ8÷	9÷ 	9ò 	9ús   Â$ADÄD
c                óR   — | j                   d   } |d   «       }|st        d«      ‚|S )Nr)   r   z>The workload identity provider returned an empty subject token)ro   r   )rz   r)   rÂ   s      r#   rÄ   z'WorkloadIdentityAuth._get_subject_token~  s6   € Ø×)Ñ)¨*Ñ5ˆØ-˜ Ñ-Ó/ˆÙÜÐ^Ó_Ð_ØÐr"   )ro   r%   rk   r&   rl   r²   rD   r³   r¶   rC   )	r   r   r   r¹   r{   r   r‹   rÄ   Ú__classcell__)r¾   s   @r#   r»   r»   T  sQ   ø„ ð
 #=Ø ñ
ð ,ð
ð  ð	
ð
 ð
ð 
õ
ð ò9ó ð9÷6r"   r»   )r'   r&   r(   r&   r+   zfloat | NonerD   r0   )z3/var/run/secrets/kubernetes.io/serviceaccount/token)rA   z
str | PathrD   r   )zhttps://management.azure.com/)rO   r&   rG   r´   rH   r´   rI   r´   rJ   r&   rK   r    rL   úhttpx2.Client | NonerD   r   )zhttps://api.openai.com/v1)rd   r&   rK   r    rL   rÎ   rD   r   ).Ú
__future__r   r�   ru   Útypingr   r   r   r   r   r	   Úpathlibr
   Útyping_extensionsr   r   r   r   rY   Ú_utilsr   Ú_httpx2r   r   Ú_exceptionsr   r   r   Ú_utils._syncr   rÉ   r¹   r¦   rÅ   r   r%   r.   r    r0   r2   r6   rE   ra   rg   ri   r»   r!   r"   r#   ú<module>r×      s¹  ðÞ "ã Û ß C× CÝ ß GÓ Gã å ß ?ß LÑ LÝ $àMÐ ØBÐ Ø!%Ð ð 2Ø
5ñÐ ô!˜9ô !ô
/�yô /ð +;Ð ˜iÓ :ô/˜9ô /ñ Ð1Ð3CÐEYÓZÐ ð ,0ñ	àðð ðð )ð	ð
 óð$ #Xð9Øð9àó9ð4 4ð99ð !Ø Ø!Ø#ØØ(,ñ99Øð99ð ð99ð ð	99ð
 ð99ð ð99ð ð99ð &ð99ð ó99ðz 0ð)8ð Ø(,ñ	)8Øð)8ð ð)8ð &ð	)8ð
 ó)8ôXB˜GÐ$6Ñ7ô BôJ/Ð0Ð1AÑBõ /r"   