
    ~i:                       d dl m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
mZmZmZmZ d dlmZmZmZmZmZ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 erddlm Z m!Z!  e
d          Z" G d de	e"                   Z# G d de	e"                   Z$ G d d          Z% G d d          Z&e G d de                      Z'd!dZ(ddd"d Z)dS )#    )annotationsN)TracebackType)TYPE_CHECKINGAnyGenericTypeVarIteratorAsyncIteratorcastOptional)SelfProtocol	TypeGuardoverride
get_originruntime_checkable   )CLIENT_REQUEST_HEADER)extract_type_var_from_base)ArkAPIError)
is_mapping)ArkAsyncArk_Tc                      e Zd ZU dZded<   ded<   ddd$dZe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S ),StreamzJProvides the core interface to iterate over a synchronous stream response.httpx.ResponseresponseSSEBytesDecoder_decoderNiteratorcast_totype[_T]clientr   r"   Optional[Iterator[_T]] | NonereturnNonec                   |	|| _         d S || _        || _        || _        |                                | _        |                                 | _         d S N	_iteratorr   _cast_to_client_make_sse_decoderr    
__stream__selfr#   r   r%   r"   s        k/root/.openclaw/workspace/.venvs/ark-sdk/lib/python3.11/site-packages/volcenginesdkarkruntime/_streaming.py__init__zStream.__init__7   R     %DNNN$DM#DM!DL"4466DM!__..DNNN    Iterator[_T]
Stream[_T]c                (    t          d d d |          S N)r#   r   r%   r"   )r   clsr"   s     r3   _make_stream_from_iteratorz!Stream._make_stream_from_iteratorH   s    dT$RRRRr6   r   c                4    | j                                         S r*   )r,   __next__r2   s    r3   r?   zStream.__next__L   s    ~&&(((r6   c              #  &   K   | j         D ]}|V  d S r*   r,   r2   items     r3   __iter__zStream.__iter__O   s,      N 	 	DJJJJ	 	r6   Iterator[ServerSentEvent]c              #  x   K   | j                             | j                                                  E d {V  d S r*   )r    
iter_bytesr   r@   s    r3   _iter_eventszStream._iter_eventsS   sB      =++DM,D,D,F,FGGGGGGGGGGGr6   c              #    K   t          t          | j                  }| j        }| j        j        }|                                 }|r%| j        j                            t          d          nd }|D ]}|j
                            d          r n|j        2t          |j        t                    rt          |j                  dk    r|                                }t#          |          r|                    d          rwd }|                    d          }	t#          |	          r|	                    d          }|rt          |t                    sd}t%          || j        j        |d         |           ||||          V  |                                }|j        dk    rt#          |          r|                    d          rwd }|                    d          }	t#          |	          r|	                    d          }|rt          |t                    sd}t%          || j        j        |d         |           |||j        d	||          V  |D ]}
d S 
N z[DONE]r   errormessagez"An error occurred during streaming)rN   requestbody
request_id)datar#   r   )rR   eventr   r   r-   r   r.   _process_response_datarI   headersgetr   rR   
startswithrS   
isinstancestrlenjsonr   r   rO   r2   r#   r   process_datar"   rQ   sserR   rN   rM   _sses              r3   r0   zStream.__stream__V   s     sDM**=|:$$&&DLVDM!%%&;R@@@RV 	  -	 -	Cx""8,, y Z	3%?%? C	NNUVDVDVxxzzd## (9(9 "G HHW--E!%(( 7"'))I"6"6" G*Wc*B*B G"F% ' $ 5!']#-	    #lgQQQQQQQ xxzz9''Jt,<,<''ARAR'"G HHW--E!%(( 7"'))I"6"6" G*Wc*B*B G"F% ' $ 5!']#-	    #l"&;;#%        	 	D	 	r6   r   c                    | S r*    r@   s    r3   	__enter__zStream.__enter__   s    r6   exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                .    |                                   d S r*   closer2   rd   rf   rh   s       r3   __exit__zStream.__exit__   s     	

r6   c                8    | j                                          dS z
        Close the response and release the connection.

        Automatically called if the response body is read to completion.
        N)r   rl   r@   s    r3   rl   zStream.close   s     	r6   )
r#   r$   r   r   r%   r   r"   r&   r'   r(   )r"   r7   r'   r8   r'   r   )r'   r7   )r'   rF   r'   r   rd   re   rf   rg   rh   ri   r'   r(   r'   r(   )__name__
__module____qualname____doc____annotations__r4   classmethodr=   r?   rE   rI   r0   rc   rn   rl   rb   r6   r3   r   r   0   s        TT 37/ / / / / /" S S S [S) ) ) )   H H H H: : : :x           r6   r   c                      e Zd ZU dZded<   ded<   ddd$dZe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S ),AsyncStreamzLProvides the core interface to iterate over an asynchronous stream response.r   r   zSSEDecoder | SSEBytesDecoderr    Nr!   r#   r$   r%   r   r"   "Optional[AsyncIterator[_T]] | Noner'   r(   c                   |	|| _         d S || _        || _        || _        |                                | _        |                                 | _         d S r*   r+   r1   s        r3   r4   zAsyncStream.__init__   r5   r6   AsyncIterator[_T]AsyncStream[_T]c                (    t          d d d |          S r:   )r|   r;   s     r3   r=   z&AsyncStream._make_stream_from_iterator   s    4$thWWWWr6   r   c                D   K   | j                                          d {V S r*   )r,   	__anext__r@   s    r3   r   zAsyncStream.__anext__   s,      ^--/////////r6   c               4   K   | j         2 3 d {V }|W V  6 d S r*   rB   rC   s     r3   	__aiter__zAsyncStream.__aiter__   sF      . 	 	 	 	 	 	 	$JJJJJ )..s   AsyncIterator[ServerSentEvent]c                  K   | j                             | j                                                  2 3 d {V }|W V  6 d S r*   )r    aiter_bytesr   )r2   r_   s     r3   rI   zAsyncStream._iter_events   se      224=3L3L3N3NOO 	 	 	 	 	 	 	#IIIII POOs   Ac                 K   t          t          | j                  }| j        }| j        j        }|                                 }|r |j                            t          d          nd }|2 3 d {V }|j
                            d          r n|j        2t          |j        t                    rt          |j                  dk    r|                                }t#          |          r|                    d          rwd }|                    d          }	t#          |	          r|	                    d          }|rt          |t                    sd}t%          || j        j        |d         |           ||||          W V  |                                }|j        dk    rt#          |          r|                    d          rwd }|                    d          }	t#          |	          r|	                    d          }|rt          |t                    sd}t%          || j        j        |d         |           |||j        d	||          W V  6 |2 3 d {V }
6 d S rK   rT   r]   s              r3   r0   zAsyncStream.__stream__   s     sDM**=|:$$&&?GQH  !6;;;T 	 " -	 -	 -	 -	 -	 -	 -	#x""8,, y Z	3%?%? C	NNUVDVDVxxzzd## (9(9 "G HHW--E!%(( 7"'))I"6"6" G*Wc*B*B G"F% ' $ 5!']#-	    #lgQQQQQQQQ xxzz9''Jt,<,<''ARAR'"G HHW--E!%(( 7"'))I"6"6" G*Wc*B*B G"F% ' $ 5!']#-	    #l"&;;#%       S "` # 	 	 	 	 	 	 	$ #((s   *I!I)r   c                
   K   | S r*   rb   r@   s    r3   
__aenter__zAsyncStream.__aenter__	  s      r6   rd   re   rf   rg   rh   ri   c                >   K   |                                   d {V  d S r*   rk   rm   s       r3   	__aexit__zAsyncStream.__aexit__  s.       jjllr6   c                H   K   | j                                          d{V  dS rp   )r   acloser@   s    r3   rl   zAsyncStream.close  s4       m""$$$$$$$$$$$r6   )
r#   r$   r   r   r%   r   r"   r}   r'   r(   )r"   r   r'   r   rq   )r'   r   )r'   r   rr   rs   rt   )ru   rv   rw   rx   ry   r4   rz   r=   r   r   rI   r0   r   r   rl   rb   r6   r3   r|   r|      s        VV**** 8</ / / / / /" X X X [X0 0 0 0      : : : :x      % % % % % %r6   r|   c                      e Zd ZdddddddZedd            Zedd            Zedd            Zedd            ZddZ	e
dd            ZdS )ServerSentEventNrS   rR   idretryrS   
str | NonerR   r   r   
int | Noner'   r(   c               J    |d}|| _         || _        |pd | _        || _        d S )NrL   )_id_data_event_retry)r2   rS   rR   r   r   s        r3   r4   zServerSentEvent.__init__  s2     <D
mtr6   c                    | j         S r*   )r   r@   s    r3   rS   zServerSentEvent.event.  
    {r6   c                    | j         S r*   )r   r@   s    r3   r   zServerSentEvent.id2  s	    xr6   c                    | j         S r*   )r   r@   s    r3   r   zServerSentEvent.retry6  r   r6   rZ   c                    | j         S r*   )r   r@   s    r3   rR   zServerSentEvent.data:  s
    zr6   r   c                4    t          j        | j                  S r*   )r\   loadsrR   r@   s    r3   r\   zServerSentEvent.json>  s    z$)$$$r6   c           	     H    d| j          d| j         d| j         d| j         d	S )NzServerSentEvent(event=z, data=z, id=z, retry=)r   r@   s    r3   __repr__zServerSentEvent.__repr__A  s5    i
ii49ii47ii\`\fiiiir6   )
rS   r   rR   r   r   r   r   r   r'   r(   )r'   r   )r'   r   )r'   rZ   )r'   r   )ru   rv   rw   r4   propertyrS   r   r   rR   r\   r   r   rb   r6   r3   r   r     s         !           X    X    X    X% % % % j j j Xj j jr6   r   c                  h    e Zd ZU ded<   ded<   ded<   ded<   dd
ZddZddZddZddZddZ	dS )
SSEDecoderz	list[str]r   r   r   r   r   _last_event_idr'   r(   c                >    d | _         g | _        d | _        d | _        d S r*   )r   r   r   r   r@   s    r3   r4   zSSEDecoder.__init__L  s#    
"r6   r"   Iterator[bytes]rF   c              #     K   |                      |          D ]I}|                                D ]2}|                    d          }|                     |          }|r|V  3JdS )^Given an iterator that yields raw binary data, iterate over it & yield every event encounteredutf-8N)_iter_chunks
splitlinesdecoder2   r"   chunkraw_lineliner_   s         r3   rH   zSSEDecoder.iter_bytesR  s      &&x00 	 	E!,,..  w//kk$'' III		 	r6   c              #     K   d}|D ];}|                     d          D ]"}||z  }|                    d          r|V  d}#<|r|V  dS dS )^Given an iterator that yields raw binary data, iterate over it and yield individual SSE chunksr6   Tkeependss   s   

s   

Nr   endswithr2   r"   rR   r   r   s        r3   r   zSSEDecoder._iter_chunks\  s       	 	E(($(77  ==!@AA JJJD	
  	JJJJJ	 	r6   AsyncIterator[bytes]r   c                  K   |                      |          2 3 d{V }|                                D ]3}|                    d          }|                     |          }|r|W V  4P6 dS )r   Nr   )_aiter_chunksr   r   r   s         r3   r   zSSEDecoder.aiter_bytesh  s        --h77 	 	 	 	 	 	 	%!,,..  w//kk$'' IIII	 877s   A(c                  K   d}|2 3 d{V }|                     d          D ]#}||z  }|                    d          r|W V  d}$B6 |r|W V  dS dS )r   r6   NTr   r   r   r   s        r3   r   zSSEDecoder._aiter_chunkst  s       # 	 	 	 	 	 	 	%(($(77  ==!@AA JJJJD	 $  	JJJJJJ	 	s   A	r   rZ   ServerSentEvent | Nonec                r   |so| j         s| j        s| j        s	| j        d S t	          | j         d                    | j                  | j        | j                  }d | _         g | _        d | _        |S |                    d          rd S |                    d          \  }}}|                    d          r
|dd          }|dk    r|| _         nh|dk    r| j                            |           nG|dk    rd	|v rn<|| _        n4|d
k    r-	 t          |          | _        n# t          t          f$ r Y nw xY w	 d S )N
r   : r   rS   rR   r    r   )r   r   r   r   r   joinrX   	partitionappendint	TypeError
ValueError)r2   r   r_   	fieldname_values         r3   r   zSSEDecoder.decode  s    	K
 + K't!kYYtz**&k	  C DKDJDKJ??3 	4"nnS11	1eC   	!""IEDKK&  Je$$$$$u}}&+##'!!!%jjz*    ts   
D D32D3Nrt   r"   r   r'   rF   )r"   r   r'   r   r"   r   r'   r   )r"   r   r'   r   )r   rZ   r'   r   )
ru   rv   rw   ry   r4   rH   r   r   r   r   rb   r6   r3   r   r   F  s               
 
 
 

 
 
 
   1 1 1 1 1 1r6   r   c                      e Zd Zd
dZddZd	S )r   r"   r   r'   rF   c                    dS )r   Nrb   r2   r"   s     r3   rH   zSSEBytesDecoder.iter_bytes  s    r6   r   r   c                    dS )zdGiven an async iterator that yields raw binary data, iterate over it & yield every event encounteredNrb   r   s     r3   r   zSSEBytesDecoder.aiter_bytes  s	     	r6   Nr   r   )ru   rv   rw   rH   r   rb   r6   r3   r   r     s<                r6   r   typtyper'   ;TypeGuard[type[Stream[object]] | type[AsyncStream[object]]]c                    t          |           p| }t          j        |          ot          |t          t
          f          S )zaTypeGuard for determining whether or not the given type is a subclass of `Stream` / `AsyncStream`)r   inspectisclass
issubclassr   r|   )r   origins     r3   is_stream_class_typer     s8     __#F?6""Pz&6;:O'P'PPr6   )failure_message
stream_clsr   r   c          	     X    ddl m}m} t          | dt	          d||f          |          S )a  Given a type like `Stream[T]`, returns the generic type variable `T`.

    This also handles the case where a concrete subclass is given, e.g.
    ```py
    class MyStream(Stream[bytes]):
        ...

    extract_stream_chunk_type(MyStream) -> bytes
    ```
    r   )r   r|   r   ztuple[type, ...])indexgeneric_basesr   )_base_clientr   r|   r   r   )r   r   r   r|   s       r3   extract_stream_chunk_typer     sO     21111111%-/DEE'	   r6   )r   r   r'   r   )r   r   r   r   r'   r   )*
__future__r   r\   r   typesr   typingr   r   r   r   r	   r
   r   r   typing_extensionsr   r   r   r   r   r   httpx
_constantsr   _utilsr   _exceptionsr   _utils._utilsr   r.   r   r   r   r   r|   r   r   r   r   r   rb   r6   r3   <module>r      s   # " " " " "        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 - - - - - - . . . . . . $ $ $ $ $ $ % % % % % % '&&&&&&&&WT]]s s s s sWR[ s s slt% t% t% t% t%'"+ t% t% t%n&j &j &j &j &j &j &j &jRm m m m m m m m` 	 	 	 	 	h 	 	 	Q Q Q Q #'       r6   