
    ~iX                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
mZmZmZ d dlmZmZmZ d dlmZ ddlmZ dd	lmZ d dlZdd
lmZ ddlmZ ddlmZ ddlm Z m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2 ddgZ3 G d de           Z4 G d de!          Z5 G d de6          Z7 G d de          Z8 G d de6          Z9dS )    )annotationsN)defaultdict)TimeoutURLClientAsyncClient)DictTupleOptional)ApiException   )ArkAPIError)	BaseModel)	resources)beta)batch)SyncAPIClientAsyncAPIClient)	DEFAULT_MAX_RETRIESBASE_URL!_DEFAULT_ADVISORY_REFRESH_TIMEOUT"_DEFAULT_MANDATORY_REFRESH_TIMEOUT_DEFAULT_STS_TIMEOUT_DEFAULT_RESOURCE_TYPE_PRESETENDPOINT_RESOURCE_TYPEDEFAULT_TIMEOUT_BOT_RESOURCE_TYPE)Stream)key_agreement_clientget_cert_info)ModelBreakerArkAsyncArkc            	          e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   	 ded<   ded<   ded<   ded <   ed!d!d!d"eed!d#dB fd4ZdCdDd7ZdEd9Z	dFd;Z
edGd=            ZdHd@ZdIdAZ xZS )Jr"   z	beta.Betar   zresources.Chatchatzresources.BotChatbot_chatzresources.Embeddings
embeddingszresources.Tokenizationtokenizationzresources.Contextcontextzresources.MultimodalEmbeddingsmultimodal_embeddingszresources.ContentGenerationcontent_generationzresources.Imagesimageszresources.BatchChat
batch_chatzresources.Responses	responseszresources.InputItemsinput_itemszbatch.Batchr   dict[str, ModelBreaker]model_breaker_mapzthreading.Lockmodel_breaker_lockzresources.FilesfilesN
cn-beijing)base_urlakskapi_keyregiontimeoutmax_retrieshttp_clientr5   	str | URLr6   
str | Noner7   r8   r9   strr:   float | Timeout | Noner;   intr<   Client | NonereturnNonec                  |t           j                            d          }|t           j                            d          }|t           j                            d          }|| _        || _        || _        || _        || _        |||
J d            t                      	                    ||||d           t          | _        d| _        d| _        t          j        |           | _        t!          j        |           | _        t!          j        |           | _        t!          j        |           | _        t!          j        |           | _        t!          j        |           | _        t!          j        |           | _        t!          j        |           | _        t!          j        |           | _         t!          j!        |           | _"        t!          j#        |           | _$        t!          j%        |           | _&        tO          j(        |           | _'        tS          tT                    | _+        tY          j-                    | _.        t!          j/        |           | _0        dS )u<  init ark client, this client is thread unsafe. If need to use in multi thread, init a new `Ark` client in
        each thread

            Args:
                ak: access key id
                sk: secret access key
                api_key: api key，this api key will not be refreshed
                timeout: timeout of client. default httpx.Timeout(timeout=60.0, connect=60.0)
                max_retries: times of retry when request failed. default 1
                http_client: specify customized http_client
            Returns:
                ark client
        NVOLC_ACCESSKEYVOLC_SECRETKEYARK_API_KEY$you need to support api_key or ak&skr5   r;   r:   r<   custom_query)1osenvironget	_base_urlr6   r7   r8   r9   super__init__r   _default_stream_cls_sts_token_manager_certificate_managerr   Betar   Chatr%   BotChatr&   
Embeddingsr'   Tokenizationr(   Contextr)   MultimodalEmbeddingsr*   ContentGenerationr+   Imagesr,   	BatchChatr-   	Responsesr.   
InputItemsr/   r   Batchr   r!   r1   	threadingLockr2   Filesr3   )
selfr5   r6   r7   r8   r9   r:   r;   r<   	__class__s
            h/root/.openclaw/workspace/.venvs/ark-sdk/lib/python3.11/site-packages/volcenginesdkarkruntime/_client.pyrQ   zArk.__init__G   s   2 : 011B: 011B?jnn]33G!#BNN2 =KNN 	## 	 	
 	
 	
 $* :>BF!IdOO	N4((	!)$//#.t44%2488 (..%.%CD%I%I""+"=d"C"C&t,,#-d33",T22$/55[&&
!,\!:!:"+."2"2_T**


    endpoint_idproject_namec                `   | j         B| j        | j        t          d          t	          | j        | j        | j                  | _         |                     |          }|t          k    r)||                                dk    rt          d          | j         	                    |||          S )N-must set ak and sk before get endpoint token. z5must set project_name when get preset endpoint token.resource_typerj   )
rS   r6   r7   r   StsTokenManagerr9    get_resource_type_by_endpoint_idr   striprN   )re   ri   rj   ro   s       rg   _get_endpoint_sts_tokenzArk._get_endpoint_sts_token   s    "*w$'/!CE E E&5$+'/ '/D#!BB;OO999|?SWcWiWiWkWkoqWqWqGI I I&**;mbn*ooorh   r   c                0   | j         vt          j                            d          }| j        | j        || j        t          d          t          | j        | j        | j	        | j
        | j                  | _         | j                             |          S NE2E_CERTIFICATE_PATHzxmust set (api_key) or (ak and sk)                                   or (E2E_CERTIFICATE_PATH) before get endpoint token.rT   rL   rM   rN   r6   r7   r8   r   E2ECertificateManagerr9   rO   re   ri   	cert_paths      rg   _get_endpoint_certificatezArk._get_endpoint_certificate        $,
'=>>IDGO%L(!X   )>$+t~t|) )D% (,,[999rh   bot_idc                    | j         B| j        | j        t          d          t	          | j        | j        | j                  | _         | j                             |d          S Nrl   bot)ro   rS   r6   r7   r   rp   r9   rN   re   r}   s     rg   _get_bot_sts_tokenzArk._get_bot_sts_token   k    "*w$'/!CE E E&5$+'/ '/D#&**6*GGGrh   dict[str, str]c                    | j         }dd| iS NAuthorizationzBearer r8   re   r8   s     rg   auth_headerszArk.auth_headers       ,!47!4!455rh   
model_namer!   c                ^    | j         5  | j        |         cd d d            S # 1 swxY w Y   d S Nr2   r1   re   r   s     rg   get_model_breakerzArk.get_model_breaker   sz    $ 	6 	6)*5	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   "&&c                    |                     d          rt          S |                     d          rt          S |                     d          rt          S t          S )Nzep-m-zep-zbot-)
startswithr   r   r   re   ri   s     rg   rq   z$Ark.get_resource_type_by_endpoint_id   s\    !!'** 	100!!%(( 	*))!!&)) 	&%%,,rh   )r5   r=   r6   r>   r7   r>   r8   r>   r9   r?   r:   r@   r;   rA   r<   rB   rC   rD   r   )ri   r?   rj   r?   ri   r?   rC   r   r}   r?   rC   r   r   r?   rC   r!   )ri   r?   rC   r?   )__name__
__module____qualname____annotations__r   r   r   rQ   rs   r{   r   propertyr   r   rq   __classcell__rf   s   @rg   r"   r"   4   s        OOO$$$$((((99993333####""""%%%%@....&&&&
 '""*9.%)D+ D+ D+ D+ D+ D+ D+ D+Np p p p p: : : :&H H H H 6 6 6 X66 6 6 6- - - - - - - -rh   c            	          e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   	 ded<   ded<   ded<   ded <   d!d!d!ed"eed!d#d@ fd4ZdAd6ZdBd8Z	dCd:Z
edDd<            ZdEd?Z xZS )Fr#   zbeta.AsyncBetar   zresources.AsyncChatr%   zresources.AsyncBotChatr&   zresources.AsyncEmbeddingsr'   zresources.AsyncTokenizationr(   zresources.AsyncContextr)   z#resources.AsyncMultimodalEmbeddingsr*   z resources.AsyncContentGenerationr+   zresources.AsyncImagesr,   zresources.AsyncBatchChatr-   zresources.AsyncResponsesr.   zresources.AsyncInputItemsr/   zbatch.AsyncBatchr   r0   r1   zasyncio.Lockr2   zresources.AsyncFilesr3   Nr4   )r6   r7   r8   r5   r9   r:   r;   r<   r6   r>   r7   r8   r5   r=   r9   r?   r:   r@   r;   rA   r<   AsyncClient | NonerC   rD   c                  |t           j                            d          }|t           j                            d          }|t           j                            d          }|| _        || _        || _        || _        || _        |||
J d            t                      	                    ||||d           t          | _        d| _        d| _        t          j        |           | _        t!          j        |           | _        t!          j        |           | _        t!          j        |           | _        t!          j        |           | _        t!          j        |           | _        t!          j        |           | _        t!          j        |           | _        t!          j        |           | _         t!          j!        |           | _"        t!          j#        |           | _$        t!          j%        |           | _&        tO          j(        |           | _'        tS          tT                    | _+        tY          j-                    | _.        t!          j/        |           | _0        dS )u  init async ark client, this client is thread unsafe

        Args:
            ak: access key id
            sk: secret access key
            api_key: api key，this api key will not be refreshed
            timeout: timeout of client. default httpx.Timeout(timeout=60.0, connect=60.0)
            max_retries: times of retry when request failed. default 1
            http_client: specify customized http_client
        Returns:
            async ark client
        NrF   rG   rH   rI   rJ   )1rL   rM   rN   rO   r6   r7   r8   r9   rP   rQ   r   rR   rS   rT   r   	AsyncBetar   	AsyncChatr%   AsyncBotChatr&   AsyncEmbeddingsr'   AsyncTokenizationr(   AsyncContextr)   AsyncMultimodalEmbeddingsr*   AsyncContentGenerationr+   AsyncImagesr,   AsyncBatchChatr-   AsyncResponsesr.   AsyncInputItemsr/   r   
AsyncBatchr   r!   r1   asynciorc   r2   
AsyncFilesr3   )
re   r6   r7   r8   r5   r9   r:   r;   r<   rf   s
            rg   rQ   zAsyncArk.__init__   s   2 : 011B: 011B?jnn]33G!#BNN2 =KNN 	## 	 	
 	
 	
 $* :>BF!N4((	'--	!.t44#3D99%7== -d33%.%H%N%N""+"B4"H"H+D11#2488"1$77$4T::%d++
!,\!:!:"),..)$//


rh   ri   c                    | j         B| j        | j        t          d          t	          | j        | j        | j                  | _         | j                             |          S )Nrl   r   r   s     rg   rs   z AsyncArk._get_endpoint_sts_token%  sf    "*w$'/!CE E E&5$+'/ '/D#&**;777rh   r}   c                    | j         B| j        | j        t          d          t	          | j        | j        | j                  | _         | j                             |d          S r   r   r   s     rg   r   zAsyncArk._get_bot_sts_token.  r   rh   r   c                0   | j         vt          j                            d          }| j        | j        || j        t          d          t          | j        | j        | j	        | j
        | j                  | _         | j                             |          S ru   rw   ry   s      rg   r{   z"AsyncArk._get_endpoint_certificate7  r|   rh   r   c                    | j         }dd| iS r   r   r   s     rg   r   zAsyncArk.auth_headersJ  r   rh   r   r!   c                   K   | j         4 d {V  | j        |         cd d d           d {V  S # 1 d {V swxY w Y   d S r   r   r   s     rg   r   zAsyncArk.get_model_breakerO  s      * 	6 	6 	6 	6 	6 	6 	6 	6)*5	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6s   0
::)r6   r>   r7   r>   r8   r>   r5   r=   r9   r?   r:   r@   r;   rA   r<   r   rC   rD   )ri   r?   r   r   r   r   )r   r   r   r   r   r   r   rQ   rs   r   r{   r   r   r   r   r   s   @rg   r#   r#      s        $$$$))))----####>>>>8888!!!!((((''''****@....$$$$
 "&"*9.*.D0 D0 D0 D0 D0 D0 D0 D0N8 8 8 8H H H H: : : :& 6 6 6 X66 6 6 6 6 6 6 6rh   c                  z    e Zd ZU eZded<   eZded<   ddZdddZ	e
ded	fddZed	fddZed	fd dZed	fd!dZd	S )"rp   rA   _advisory_refresh_timeout_mandatory_refresh_timeoutr6   r?   r7   r9   c                ,   t          d           | _        t          j                    | _        dd l}|                                }||_        ||_        ||_	        d|_
        |j                            |           t          j                    | _        d S )Nc                     dS )N)rm   r    r   rh   rg   <lambda>z*StsTokenManager.__init__.<locals>.<lambda>^  s    G rh   r   https)r   _endpoint_sts_tokensrb   rc   _refresh_lockvolcenginesdkcoreConfigurationr6   r7   r9   schemaset_defaultvolcenginesdkarkARKApiapi_instance)re   r6   r7   r9   r   configurations         rg   rQ   zStsTokenManager.__init__\  s    @KOA
 A
! '^--    )7799%&'33MBBB,355rh   Nep
refresh_in
int | NonerC   boolc                j    || j         }| j        |         d         t          j                    z
  |k     S )Nr   )r   r   time)re   r   r   s      rg   _need_refreshzStsTokenManager._need_refreshm  s3    7J(,Q/$)++=
JJrh   Fttlis_mandatoryro   rj   c                   || j         dz  k     r*t          d                    | j         dz                      	 |                     ||||          \  }}||f| j        |<   d S # t
          $ rV}|r"t          d                    |                    t          j        d                    |                     Y d }~d S d }~ww xY w)N   z#ttl should not be under {} seconds.rn   zload api key cause error: e={})r   r   format_load_api_keyr   r   loggingerror)	re   r   r   r   ro   rj   r8   expired_timees	            rg   _protected_refreshz"StsTokenManager._protected_refreshs  s	    /!3335<<2Q6   		J$($6$6C}< %7 % %!G\ .5l,CD%b))) 	J 	J 	J J!"B"I"I!"L"LMMM>EEaHHIIIIIIIII		Js   (A$ $
C.AB??Cc                   |                      || j                  sd S | j                            d          r|                      || j                  sd S 	 |                      || j                  }|                     ||||           	 | j                                         d S # | j                                         w xY w|                      || j                  rd| j        5  |                      || j                  s	 d d d            d S |                     |d||           d d d            d S # 1 swxY w Y   d S d S )NF)r   ro   rj   T)r   r   r   acquirer   r   release)re   r   ro   rj   is_mandatory_refreshs        rg   _refreshzStsTokenManager._refresh  s   !!"d&DEE 	F%%e,, 	%%b$*HII 
-'+'9'97( ($ ''%9eq (    "**,,,,,"**,,,,D$CDD 	#  ))"d.MNN         ''TUa (   	                 	 	s$   4B& &C&D6D66D:=D:c                X    |                      |||           | j        |         d         S )Nrn   r   )r   r   )re   r   ro   rj   s       rg   rN   zStsTokenManager.get  s7    b#/ 	 	1 	1 	1(,Q//rh   duration_secondsTuple[str, int]c                    t          j        |||g          }||                                dk    r||_        | j                            |          }|j        |j        fS )N)r   ro   resource_idsrm   )r   GetApiKeyRequestrr   rj   r   get_api_keyr8   r   )re   r   r   ro   rj   get_api_key_requestresps          rg   r   zStsTokenManager._load_api_key  s{     /?-'
 
 

 #(:(:(<(<(B(B/;,373D3P3P4
 4
 |T...rh   )r6   r?   r7   r?   r9   r?   r   )r   r?   r   r   rC   r   )
r   r?   r   rA   r   r   ro   r?   rj   r?   )r   r?   ro   r?   rj   r?   )r   r?   ro   r?   rj   r?   rC   r?   )
r   r?   r   rA   ro   r?   rj   r?   rC   r   )r   r   r   r   r   r   r   r   rQ   r   r   r   r   r   rN   r   r   rh   rg   rp   rp   T  s         &GFFFF 'IHHHH6 6 6 6"K K K K K ("3 J J J J J4 6Lae     8 1G\` 0 0 0 0 0 4 / / / / / / /rh   rp   c                  *    e Zd ZU dZded<   	 ded<   dS )CertificateResponseNzOptional[Dict[str, str]]r   r?   Certificate)r   r   r   r   r   r   rh   rg   r   r     s2         &*E**** ""rh   r   c                  R    e Zd Zedfdd
ZddZddZddZddZddZ	d Z
ddZdS )rx   Nr6   r?   r7   r9   r5   r=   r8   r>   c                .   i | _         |                                  dd l}|                                }||_        ||_        ||_        d|_        |j                            |           t          j
                    | _        t          j                            d          | _        d| _        |d| _        nt#          ||          | _        d| _        d| j        i| _        d| _        t          j                            d	          d
k    r	d| _        d S d S )Nr   r   rv   TF)r5   r8   z/e2e/get/certificatezX-Session-TokenVOLC_ARK_ENCRYPTIONAICC)rT   _init_local_cert_cacher   r   r6   r7   r9   r   r   r   r   r   rL   rM   rN   rz   _ark_client_enabledr"   client_e2e_uri_x_session_token_aicc_enabled)re   r6   r7   r9   r5   r8   r   r   s           rg   rQ   zE2ECertificateManager.__init__  s'    FH! 	##%%% 	!   )7799%&'33MBBB,355 (>?? $( ?',D$$!  DK /!2DM B":>>/00F::!%D ;:rh   rC   c                    t          | j        d          5 }|                                }d d d            n# 1 swxY w Y   |S )Nr)openrz   read)re   fcert_pems      rg   _load_cert_by_cert_pathz-E2ECertificateManager._load_cert_by_cert_path  sx    $.#&& 	 !vvxxH	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   7;;r   c                    t          j        |          }| j        rt          j        |d          }	 | j                            |          }n$# t
          $ r}t          d|z            d }~ww xY w|j        S )N)idAICCv0.1)r   typez7Getting model vendor encryption certificate failed: %s
)r   GetEndpointCertificateRequestr   r   get_endpoint_certificater   r   pca_instance_certificate)re   r    get_endpoint_certificate_requestr   r   s        rg   _load_cert_by_ak_skz)E2ECertificateManager._load_cert_by_ak_sk  s    :bAAA 	)  	 >
, , , -		!::4  D
  	 	 	JQN  	
 ,,s   A 
A0A++A0c                   	 d|i}| j         rd|d<   | j                            | j        d| j        i|t
                    }n$# t          $ r}t          d|z            d }~ww xY w|j        t          d|j        z            |j	        S )Nmodelr   r  headers)optionsbodycast_tozGetting Certificate failed: %s
)
r   r   postr   r   r   	Exceptionr   r   r   )re   r   req_bodyr   r   s        rg   _sync_load_cert_by_authz-E2ECertificateManager._sync_load_cert_by_auth  s    	F}H! .#- ;##"D$9:+	 $  DD  	F 	F 	F@1DEEE	F:!@4:MNNNs   ?A 
A#AA#r   c                    t           j                            | j        | d          }t	          |d          5 }|                    |           d d d            d S # 1 swxY w Y   d S )N.pemw)rL   pathjoin_cert_storage_pathr   write)re   r   r   cert_file_pathr   s        rg   _save_cert_to_filez(E2ECertificateManager._save_cert_to_file$  s    d&="{{{KK.#&& 	!GGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA #A c                6   t           j                            | j        | d          }t           j                            |          rt           j                            |          }t          j                    }||z
  }|| j        k    r{d }t          |d          5 }|	                                }d d d            n# 1 swxY w Y   t          |          \  }}	}
|dk    s|	dk    r	| j        s|S |dk    r|	dk    r	| j        r|S t          j        |           d S )Nr  r   rm   )rL   r  r  r  existsgetmtimer   _cert_expiration_secondsr   r   r    r   remove)re   r   r  last_modified_timecurrent_timetime_differencer   r   ringkey_s              rg   _load_cert_locallyz(E2ECertificateManager._load_cert_locally)  sF   d&="{{{KK7>>.)) 	&!#!1!1.!A!A9;;L*-??O$"???.#.. (! vvxxH( ( ( ( ( ( ( ( ( ( ( ( ( ( (,X66c1BJJ#))T5G)#O2::#))0B)#OIn%%%ts   B==CCc                N   t           j                            d          | _        d| _        t           j                            | j                  sU	 t          j        | j                   d S # t          $ r Y d S t          $ r }t          d| j        d|d          d }~ww xY wd S )Nz~/.ark/certificatesi u z'failed to create certificate directory z: 
)
rL   r  
expanduserr  r  r  makedirsFileExistsErrorr  r   )re   r   s     rg   r   z,E2ECertificateManager._init_local_cert_cache<  s    "$'"4"45J"K"K(9%w~~d566 		D344444"      !k...3  		 		s   A, ,
B"9	B"BB"r   c                   || j         v r,| j         |                                         s| j         |         S |                     |          }|d| j        |                                 }n2| j        r|                     |          }n|                     |          }|                     ||           t          |          }|| j         |<   |S )N)certificate_pem_string)
rT   need_reloadr%  rz   r   r   r  r  r  r   )re   r   r   r   s       rg   rN   zE2ECertificateManager.getK  s    ***43LR3P3\3\3^3^*,R00**2..~)7799) 877;;33B77##B111%XFFF(.!"%rh   )
r6   r?   r7   r?   r9   r?   r5   r=   r8   r>   )rC   r?   )r   r?   rC   r?   )r   r?   r   r?   )r   r?   rC   r>   )r   r?   rC   r   )r   r   r   r   rQ   r   r  r  r  r%  r   rN   r   rh   rg   rx   rx     s         '")& )& )& )& )&V   
- - - -,       $   
   &       rh   rx   ):
__future__r   r   r   rL   rb   r   collectionsr   httpxr   r   r   r   typingr	   r
   r   volcenginesdkcore.restr   _exceptionsr   _modelsr   r   rm   r   resources.betar   resources.batchr   _base_clientr   r   
_constantsr   r   r   r   r   r   r   r   r   
_streamingr   _utils._key_agreementr   r    _utils._model_breakerr!   __all__r"   r#   objectrp   r   rx   r   rh   rg   <module>r>     s   # " " " " "   				      # # # # # # 3 3 3 3 3 3 3 3 3 3 3 3 ( ( ( ( ( ( ( ( ( ( / / / / / / $ $ $ $ $ $                             " " " " " " 7 7 7 7 7 7 7 7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
       F F F F F F F F / / / / / /*
T- T- T- T- T-- T- T- T-nF6 F6 F6 F6 F6~ F6 F6 F6Rl/ l/ l/ l/ l/f l/ l/ l/^# # # # #) # # #N N N N NF N N N N Nrh   