
    ~i                         d dl mZ ddlmZ ddlmZmZ ddlmZm	Z	 d dl
Z
d dlZd dlZd dlm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mZ d!dZd"dZd#dZd$dZd Zd Z d Z!d%d Z"dS )&    )annotations   )ARK_E2E_ENCRYPTION_HEADER)StreamAsyncStream)ChatCompletionChatCompletionChunkN)deepcopy)urlparse)UnionIterableCallableIteratorAsyncIterator)aes_gcm_decrypt_base64_stringaes_gcm_decrypt_base64_listdecrypt_validatekeybytesnoncerespStream[ChatCompletionChunk]returnIterator[ChatCompletionChunk]c              #     K   |D ]t}|j         gt          |j                   D ]R\  }}|j        <|j        j        0|j        dk    r%t          | ||j        j                  |j        _        ||j         |<   S|V  ud S Ncontent_filterchoices	enumeratedeltacontentfinish_reasonr   r   r   r   chunkindexchoices         u/root/.openclaw/workspace/.venvs/ark-sdk/lib/python3.11/site-packages/volcenginesdkarkruntime/resources/encryption.py_decrypt_chunkr)      s         =$!*5=!9!9 	. 	.vL,,8,0@@@+HUFL$8, ,FL( (.e$$      AsyncStream[ChatCompletionChunk]"AsyncIterator[ChatCompletionChunk]c                 K   |2 3 d {V }|j         gt          |j                   D ]R\  }}|j        <|j        j        0|j        dk    r%t          | ||j        j                  |j        _        ||j         |<   S|W V  {6 d S r   r   r$   s         r(   _async_decrypt_chunkr.   /   s              e=$!*5=!9!9 	. 	.vL,,8,0@@@+HUFL$8, ,FL( (.e$$ tts   B 2Union[ChatCompletion, Stream[ChatCompletionChunk]],ChatCompletion | Stream[ChatCompletionChunk]c                   t          |t                    r|j        t          |j                  D ]\  }}|j        |j        dk    r|j        j        u	 t          | ||j        j                  }n# t          $ r d}Y nw xY w|dk    st          |j        j                  st          | ||j        j                  }||j        _        ||j        |<   |S t          j        t          | ||                    S Nr    )
isinstancer   r   r    messager#   r"   r   	Exceptionr   r   r   _make_stream_from_iteratorr)   r   r   r   r&   r'   r"   s         r(   _decryptr9   A   s    $'' S<#!*4<!8!8 - -vN.,0@@@.:%"?(># # % % % %"$%"}},<V^=S,T,T}"=(># # .5FN*&,U##0UD1Q1QRRRs   A11B ?B 1ChatCompletion | AsyncStream[ChatCompletionChunk]c                  K   t          |t                    r|j        t          |j                  D ]\  }}|j        |j        dk    r|j        j        u	 t          | ||j        j                  }n# t          $ r d}Y nw xY w|dk    st          |j        j                  st          | ||j        j                  }||j        _        ||j        |<   |S t          j        t          | ||                    S r2   )r4   r   r   r    r5   r#   r"   r   r6   r   r   r   r7   r.   r8   s         r(   _async_decryptr<   ]   s#     
 $'' 
<#!*4<!8!8 - -vN.,0@@@.:%"?(># # % % % %"$%"}},<V^=S,T,T}"=(># # .5FN*&,U##5 eT22
 
 	
s   A33BBc                      fd}|S )Nc                 f    t          | |          \  }}} | i |}|rt          |||          }|S N)_content_encryptionr9   argskwargs
is_encrypt_crypto_key_crypto_noncer   funcs         r(   wrapperz$with_e2e_encryption.<locals>.wrapper~   sK    1DT61R1R.
KtT$V$$ 	>K==Dr*    rG   rH   s   ` r(   with_e2e_encryptionrK   }   #         Nr*   c                      fd}|S )Nc                    K   t          | |          \  }}} | i | d {V }|rt          |||           d {V }|S r?   )r@   r<   rA   s         r(   rH   z*async_with_e2e_encryption.<locals>.wrapper   st      1DT61R1R.
KT4*6******** 	J']DIIIIIIIIDr*   rI   rJ   s   ` r(   async_with_e2e_encryptionrO      rL   r*   c                  
 t          |           dk    sJ |                    d          r|                    d          ni }|&|                    t          d           dk    r|                    dd          }t          |d                   }| d         j        }|                    |                                          \  
}||d<   t          |
fd           d	                                i}t          j
                            d
          dk    r&                                \  }}	d|d<   |	|d<   ||d<   t          j        |          |d<   i ||d<   ||d<   d
fS dS )Nr   extra_headerstruemodelr3   messageszX-Session-Tokenc                2                         |           S r?   )encrypt_string_with_key)xrE   rF   clients    r(   <lambda>z%_content_encryption.<locals>.<lambda>   s    f44[-QRSS r*   
ExpireTimeVOLC_ARK_ENCRYPTIONAICCzAICCv0.1VersionKeyIDRingIDzX-Encrypt-InfoT)FNN)lengetr   r
   _client_get_endpoint_certificategenerate_ecies_key_pair_process_messagesget_cert_expiration_timeosenvironget_cert_ring_key_idjsondumps)rB   rC   rQ   rS   rT   
ark_clientsession_tokeninforing_idkey_idrE   rF   rX   s             @@@r(   r@   r@      s   t99q====39::o3N3NVFJJ///TVM!7>>&HHZZ,,F:.//!W_
55e<<4:4R4R4T4T1]M+8'(SSSSSS	
 	
 	
 f==??@:>>/00F::$99;;OGV(DO"DM$DN*.*T*:*:&'"3]"3%z[-//r*   fCallable[[str], str]c           
        | D ]}|                     dd           |                     d          }t          |t                    r ||          |d<   St          |t                    r.|D ](}|                     dd           dk    r ||d                   |d<   2|                     dd           dk    rt	          |d         d                   }|j        dk    r! ||d         d                   |d         d<   |j        dk    s|j        dk    rt          j        d	           t          d
	                    |                    |                     dd           dk    rt          d	                    t          |                              t          d	                    t          |                     d                                        d S )Nr"   typetext	image_urlurldatahttphttpszYencryption is not supported for image url, please use base64 image if you want encryptionz3encryption is not supported for image url scheme {}	video_urlz/encryption is not supported for content type {})ra   r4   strr   r   schemewarningswarn	TypeErrorformatrt   )rT   rq   r5   current_contentpartparse_results         r(   re   re      s    ( (;;y$''3%kk)44O/3// %%&Q%7%7	""OX66 #+  Dxx--77'(qfV&$//;>>'/[0A%0H'I'I'.&8878qk9J59Q7R7RD-e44(/699+2g==$M!Q   
 #, U \ \$0!" !"# # 
 &$//;>>'MTT $T

   1<  ELLW[[3344   G 4( (r*   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r+   r   r,   )r   r   r   r   r   r/   r   r0   )r   r   r   r   r   r:   r   r:   )rq   rr   )#
__future__r   
_constantsr   
_streamingr   r   
types.chatr   r	   rg   rj   r~   copyr
   urllib.parser   typingr   r   r   r   r   _utils._key_agreementr   r   r   r)   r.   r9   r<   rK   rO   r@   re   rI   r*   r(   <module>r      s   " " " " " " 2 2 2 2 2 2 , , , , , , , ,       
 
			         ! ! ! ! ! !                         $   $S S S S8
 
 
 
@      <) ) ) ) ) )r*   