
    E0jU                     b   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 d dl	m
Z
mZmZmZmZ  ej        d          Z G d d          Z G d d	e          Z G d
 de          Z G d d          Z G d d          Z G d de          Z G d de          ZeefZ G d d          ZdS )    N)Event)BytesIOStringIO)AnyBinaryIO	GeneratorAsyncGeneratorDictz#(?P<name>[^:]*):?( ?(?P<value>.*))?c                   0    e Zd ZddZddZd Zd Zd ZdS )	
BaseStream   c                     || _         d S N)sizeselfr   s     ^/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/darabonba/utils/stream.py__init__zBaseStream.__init__   s    			    c                      t          d          )Nzread method must be overriddenNotImplementedErrorr   s     r   readzBaseStream.read   s    !"BCCCr   c                      t          d          )Nz!__len__ method must be overriddenr   r   s    r   __len__zBaseStream.__len__   s    !"EFFFr   c                      t          d          )Nz"__next__ method must be overriddenr   r   s    r   __next__zBaseStream.__next__   s    !"FGGGr   c                     | S r    r   s    r   __iter__zBaseStream.__iter__   s    r   Nr   )__name__
__module____qualname__r   r   r   r   r!   r    r   r   r   r      ss           D D D DG G GH H H    r   r   c                       e Zd Zd ZdS )_ReadableMcc                 N    t          |d          rt          |d          rdS d S d S )Nr   r!   Thasattrr   instances     r   __instancecheck__z_ReadableMc.__instancecheck__   s>    8V$$ 	:)F)F 	4	 	 	 	r   Nr#   r$   r%   r-   r    r   r   r'   r'      #            r   r'   c                       e Zd ZdS )READABLENr#   r$   r%   r    r   r   r1   r1   $           Dr   r1   )	metaclassc                   2    e Zd Zd Zd Zd Zd ZdefdZdS )SyncSSEResponseWrapperc                 0    || _         || _        d| _        d S NF)sessionresponse_closedr   r9   r:   s      r   r   zSyncSSEResponseWrapper.__init__(   s     r   c                     | j         s;| j                                         | j                                         d| _         d S d S NTr;   r:   closer9   r   s    r   r@   zSyncSSEResponseWrapper.close-   sI    | 	 M!!!L   DLLL	  	 r   c                 *    |                                  S r   _read_chunksr   s    r   r!   zSyncSSEResponseWrapper.__iter__3         """r   c              #      K   	 | j                             d          D ]}|V  	 |                                  d S # |                                  w xY w)N    
chunk_size)r:   iter_contentr@   r   chunks     r   rC   z#SyncSSEResponseWrapper._read_chunks6   sb      	33t3DD   JJLLLLLDJJLLLLs	   "= Areturnc                 v    	 | j         j        |                                  S # |                                  w xY wr   )r:   contentr@   r   s    r   r   zSyncSSEResponseWrapper.read=   s0    	=(JJLLLLDJJLLLLs   " 8N)	r#   r$   r%   r   r@   r!   rC   bytesr   r    r   r   r6   r6   '   sk          
     # # #  e      r   r6   c                   P    e Zd Zdej        dej        fdZd Zd Zd Z	de
fdZd	S )
SSEResponseWrapperr9   r:   c                 >    || _         || _        d| _        d | _        d S r8   )r9   r:   r;   _content_cacher<   s      r   r   zSSEResponseWrapper.__init__D   s%     "r   c                    K   | j         sA| j                                         | j                                         d {V  d| _         d S d S r>   r?   r   s    r   r@   zSSEResponseWrapper.closeJ   s_      | 	 M!!!,$$&&&&&&&&&DLLL	  	 r   c                 *    |                                  S r   rB   r   s    r   	__aiter__zSSEResponseWrapper.__aiter__P   rD   r   c                   K   	 | j         j                            d          2 3 d {V }|W V  6 	 |                                  d {V  d S # |                                  d {V  w xY w)NrF   )r:   rN   iter_chunkedr@   rJ   s     r   rC   zSSEResponseWrapper._read_chunksS   s      	#}4AA$GG       e  HG **,,$**,,s   A 0A A*rL   c                    K   | j         | j         S 	 | j                                         d {V }|| _         ||                                  d {V  S # |                                  d {V  w xY wr   )rS   r:   r   r@   )r   rN   s     r   r   zSSEResponseWrapper.readZ   s      *&&	 M..00000000G")D**,,$**,,s   'A A0N)r#   r$   r%   aiohttpClientSessionClientResponser   r@   rV   rC   rO   r   r    r   r   rQ   rQ   C   s        # 5 #AW # # # #     # # #  	E 	 	 	 	 	 	r   rQ   c                       e Zd Zd ZdS )_WriteableMcc                 *    t          |d          rdS d S )NwriteTr)   r+   s     r   r-   z_WriteableMc.__instancecheck__f   s#    8W%% 	4	 	r   Nr.   r    r   r   r^   r^   e   r/   r   r^   c                       e Zd ZdS )WRITABLENr2   r    r   r   rb   rb   k   r3   r   rb   c                      e Zd ZddZedd            Zededefd            Zedede	fd            Z
edefd	            Zedefd
            Zede	fd            Zede	fd            Zedefd            Zedefd            Zedeeddf         fd            Zedeedf         fd            ZddZd ZddZede	defd            Zede	defd            Zededeeee	f         df         fd            Zedeeee	f         df         fd            Z ede!deeee	f         ddf         fd            Z"edeeee	f         ddf         fd            Z#dS )StreamNc                 *    ||nd| _         d| _        d S )Nr   r   )datapositionr   rf   s     r   r   zStream.__init__s   s     ,DD#	r   r   c              #   F   K   	 |                      |          }|r|V  nd S r   )r   )fr   parts      r   __read_partzStream.__read_partw   s7      	66$<<D 



	r   valrL   c                     t          | t                    r| S t          | t                    r|                     d          S t          |           S )zT
        Convert a bytes to string(utf8)
        @return: the return string
        utf-8)
isinstancestrrO   decoderm   s    r   __to_stringzStream.__to_string   sJ     c3 	JU## 	::g&&&s88Or   c                 n    	 t          j        |           S # t          $ r t          d|  d          w xY w)zL
        Parse it by JSON format
        @return: the parsed result
        z2Failed to parse the value as json format, Value: "z".)jsonloads
ValueErrorRuntimeErrorrs   s    r   __parse_jsonzStream.__parse_json   sP    	]:c??" 	] 	] 	][TW[[[\\\	]s    4c                    t          | t                    r|                                 S t          | t                    r'd}t                              | d          D ]}||z  }|S t          | t                    r| S t          | d          S )
        Read data from a readable stream, and compose it to a bytes
        @param stream: the readable stream
        @return: the bytes result
        r   r   ro   encoding)rp   r6   r   r1   rd   _Stream__read_partrO   )streambrk   s      r   read_as_byteszStream.read_as_bytes   s     f455 
	3;;== )) 	3A**6488  T	H&& 	3M'2222r   c                    K   t          | t                    r| S t          | t                    rt          | d          S |                                  d{V S )r|   ro   r}   N)rp   rO   rq   r   r   s    r   read_as_bytes_asynczStream.read_as_bytes_async   sd       fe$$ 	'M$$ 	''2222&&&&&&&r   c                 f    t                               t                               |                     S )
        Read data from a readable stream, and parse it by JSON format
        @param stream: the readable stream
        @return: the parsed result
        )rd   _Stream__parse_jsonread_as_stringr   s    r   read_as_jsonzStream.read_as_json   s&     ""6#8#8#@#@AAAr   c                 v   K   t                               t                               |            d{V           S )r   N)rd   r   read_as_string_asyncr   s    r   read_as_json_asynczStream.read_as_json_async   sC       ""--f55555555
 
 	
r   c                 j    t                               |           }t                               |          S )
        Read data from a readable stream, and compose it to a string
        @param stream: the readable stream
        @return: the string result
        )rd   r   _Stream__to_stringr   buffs     r   r   zStream.read_as_string   s+     ##F++!!$'''r   c                 z   K   t                               |            d{V }t                               |          S )r   N)rd   r   r   r   s     r   r   zStream.read_as_string_async   sA       //77777777!!$'''r   c           	   #   P  K   t          | t                    rt                              |           D ]c}t	          |                    d          |                    d          |                    d          |                    d                    V  ddS t          | d          rt                              |           D ]c}t	          |                    d          |                    d          |                    d          |                    d                    V  ddS t                              |           D ]c}t	          |                    d          |                    d          |                    d          |                    d                    V  ddS )zC
        Read events from SSE stream (synchronous version)
        idrf   eventretryr   rf   r   r   rI   N)rp   r6   rd   _parse_sse_stream_syncr   getr*   $_parse_sse_stream_from_response_syncr   r   s     r   read_as_ssezStream.read_as_sse   s     
 f455 	.66v>> . .yy6**))G,,))G,,	. . . . . . .. . V^,, 	.DDVLL . .yy6**))G,,))G,,	. . . . . . .. .  66v>> . .yy6**))G,,))G,,	. . . . . . .. .r   c           	     z  K   t          | t                    rt                              |           2 3 d{V }t	          |                    d          |                    d          |                    d          |                    d                    W V  j6 dS t          | d          rt                              |           2 3 d{V }t	          |                    d          |                    d          |                    d          |                    d                    W V  j6 dS t                              |           2 3 d{V }t	          |                    d          |                    d          |                    d          |                    d                    W V  j6 dS )z-
        Read events from SSE stream
        Nr   rf   r   r   r   rN   )rp   rQ   rd   _parse_sse_streamr   r   r*   _parse_sse_stream_from_responser   s     r   read_as_sse_asynczStream.read_as_sse_async  s&     
 f011 	0%77?? 0 0 0 0 0 0 0e4 99V,, 99W--!IIg..	0 0 0 0 0 0 0 0  @?? VY'' 	0%EEfMM 0 0 0 0 0 0 0e4 99V,, 99W--!IIg..	0 0 0 0 0 0 0 0  NMM  &77?? 0 0 0 0 0 0 0e4 99V,, 99W--!IIg..	0 0 0 0 0 0 0 0  @??s   B	D3F:c                     || j         | j        d          S | j        }t          ||z   t          | j                             }|| _        | j         ||         S r   )rf   rg   minlen)r   r   startends       r   r   zStream.read  sT    <9T]^^,,%$,DI//ys##r   c                 j    t          |t          t          f          r	|| _        d S t	          d          )NzData should be bytes or string.)rp   rO   rq   rf   	TypeErrorrh   s     r   r`   zStream.write'  s2    dUCL)) 	?DIII=>>>r   c                     t          |t                    st          d          	 |                     |          }|sd S |                    |           /)Nz.Output stream should be an instance of Stream.)rp   rd   r   r   r`   )r   output_streambuffer_sizerK   s       r   pipezStream.pipe-  s`    -00 	NLMMM	'IIk**E &&&		'r   valuec                     t          | t                    r|                     d          } t          | t                    rt	          |           } n$t          | t
                    st          d          | S )zv
        Assert a value, if it is a readable, return it, otherwise throws
        @return: the readable value
        ro   zThe value is not a readable)rp   rq   encoderO   r   r1   rx   r   s    r   to_readablezStream.to_readable7  sl     eS!! 	*LL))EeU## 	=ENNEEE8,, 	=;<<<r   c                     t          | t                    rt          |           } nIt          | t                    rt	          |           } n$t          | t
                    st          d          | S )zx
        Assert a value, if it is a writeable, return it, otherwise throws
        @return: the writeable value
        zThe value is not a writeable)rp   rq   r   rO   r   rb   rx   r   s    r   to_writeablezStream.to_writeableH  sh     eS!! 	>UOOEEu%% 	>ENNEEE8,, 	><===r   wrapperc                0  K   d}t                      }d} t          j        d                      }| 2 3 d{V }	 |                    |          }n'# t          $ r |                    dd          }Y nw xY wt          |          t          |          z   |k    rddl}|                    d           ||z  }d	|v r|                    d	d
          \  }}|	                    d          }|
                                s6|j        .|j        |j        pd|j        |j        dW V  t                      }}|                    d          rd|v rt                               |          }	|	r|	                    d          
                                }
|	                    d          
                                }|
dk    r||_        n|
dk    r||_        nx|
dk    r#|j        ||_        nc|xj        d	|z   z  c_        nO|
dk    r&	 t'          |          |_        n3# t(          $ r Y n'w xY wn"|j        ||_        n|xj        d	|z   z  c_        d	|v #6 |
                                r)|j        $|j        |j        pd|j        |j        dW V  dS dS dS )z)
        Analyze SSE stream data
         i   ro   Nreplace)errorsr   z)SSE stream data too large, skipping chunk
   messager   r   rf   r   :namer   r   r   rf   r   )r   codecsgetincrementaldecoderrr   UnicodeDecodeErrorr   loggingwarningsplitrstripstriprf   r   r   r   
startswithsse_line_patternmatchgroupintrx   )r   buffercurrent_eventMAX_BUFFER_SIZEdecrK   	chunk_strr   liner   r   r   s               r   r   zStream._parse_sse_streamY  sK     
 %3f*73355" 7	: 7	: 7	: 7	: 7	: 7	: 7	:%DJJu--		% D D D!LLLCC			D 6{{S^^+o== KLLLiF&..%||D!44f{{4((zz|| 	$)5"/"2%2%8%EI$1$6%2%8	      ).??3'' $;;,22488E %${{62288:: %G 4 4 : : < <7??27M//!T\\/4M,,!V^^,195: 2 2 - 2 2dUl B 2 2 2!W__%69%jj 3 3#- % % % $% %)1-1**%**dTk9**U &.. #r <<>> 	m0<#&&,9	%*&,	       	 	<<s(   IA!A54A5H
H)(H)c                |  K   d}t                      }| j                            d          2 3 d {V }	 |                    d          }n# t          $ r Y *w xY w||z  }d|v r|                    dd          \  }}|                    d          }|                                s6|j        .|j	        |j
        pd|j        |j        dW V  t                      }}|                    d	          rd	|v rt                              |          }|r|                    d
                                          }|                    d                                          }|dk    r||_
        n|dk    r||_	        nx|dk    r#|j        ||_        nc|xj        d|z   z  c_        nO|dk    r&	 t!          |          |_        n3# t"          $ r Y n'w xY wn"|j        ||_        n|xj        d|z   z  c_        d|v 6 |                                r)|j        $|j	        |j
        pd|j        |j        dW V  d S d S d S )Nr   rF   ro   r   r   r   r   r   r   r   r   r   r   rf   r   )r   rN   rX   rr   r   r   r   r   rf   r   r   r   r   r   r   r   r   rx   	r:   r   r   rK   r   r   r   r   r   s	            r   r   z&Stream._parse_sse_stream_from_response  s     #+88>> 2	: 2	: 2	: 2	: 2	: 2	: 2	:%!LL11		%    iF&..%||D!44f{{4((zz|| 	$)5"/"2%2%8%EI$1$6%2%8	      ).??3'' $;;,22488E %${{62288:: %G 4 4 : : < <7??27M//!T\\/4M,,!V^^,195: 2 2 - 2 2dUl B 2 2 2!W__%69%jj 3 3#- % % % $% %)1-1**%**dTk9**U &.. ?h <<>> 	m0<#&&,9	%*&,	       	 	<<s(   G<A
AA-G
GGc              #   >  K   d}t                      }| D ]}	 |                    d          }n# t          $ r Y &w xY w||z  }d|v r|                    dd          \  }}|                    d          }|                                s5|j        -|j        |j        pd|j        |j	        dV  t                      }||
                    d	          rd	|v rt                              |          }|r|                    d
                                          }|                    d                                          }|dk    r||_        n|dk    r||_        nx|dk    r#|j        ||_        nc|xj        d|z   z  c_        nO|dk    r&	 t          |          |_	        n3# t          $ r Y n'w xY wn"|j        ||_        n|xj        d|z   z  c_        d|v |                                r(|j        #|j        |j        pd|j        |j	        dV  dS dS dS )z?
        Analyze SSE stream data (synchronous version)
        r   ro   r   r   r   Nr   r   r   r   r   r   r   rf   r   )r   rr   r   r   r   r   rf   r   r   r   r   r   r   r   r   rx   )	r   r   r   rK   r   r   r   r   r   s	            r   r   zStream._parse_sse_stream_sync  s     
  6	: 6	:E!LL11		%    iF &..%||D!44f{{4((zz|| 	$)5"/"2%2%8%EI$1$6%2%8	     ). ??3'' $;;,22488E %${{62288:: %G 4 4 : : < <7??27M//!T\\/4M,,!V^^,195: 2 2 - 2 2dUl B 2 2 2!W__%69%jj 3 3#- % % % $% %)1-1**%**dTk9**W &..Z <<>> 	m0<#&&,9	%*&,	      	 	<<s   /
<<F%%
F21F2c              #   f  K   d}t                      }|                     d          D ]}	 |                    d          }n# t          $ r Y &w xY w||z  }d|v r|                    dd          \  }}|                    d          }|                                s5|j        -|j        |j	        pd	|j        |j
        d
V  t                      }||                    d          rd|v rt                              |          }|r|                    d                                          }|                    d                                          }|dk    r||_	        n|dk    r||_        nx|dk    r#|j        ||_        nc|xj        d|z   z  c_        nO|dk    r&	 t          |          |_
        n3# t           $ r Y n'w xY wn"|j        ||_        n|xj        d|z   z  c_        d|v |                                r(|j        #|j        |j	        pd	|j        |j
        d
V  dS dS dS )zV
        Parse SSE stream from requests response object (synchronous version)
        r   rF   rG   ro   r   r   r   Nr   r   r   r   r   r   r   rf   r   )r   rI   rr   r   r   r   r   rf   r   r   r   r   r   r   r   r   rx   r   s	            r   r   z+Stream._parse_sse_stream_from_response_sync.  s     
 **d*;; 2	: 2	:E!LL11		%    iF&..%||D!44f{{4((zz|| 	$)5"/"2%2%8%EI$1$6%2%8	     ).??3'' $;;,22488E %${{62288:: %G 4 4 : : < <7??27M//!T\\/4M,,!V^^,195: 2 2 - 2 2dUl B 2 2 2!W__%69%jj 3 3#- % % % $% %)1-1**%**dTk9**U &..X <<>> 	m0<#&&,9	%*&,	      	 	<<s#   A
AA$F99
GGr   r"   )$r#   r$   r%   r   staticmethodr   rO   rq   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   r   r`   r   r   r   rb   r   rQ   r
   r   r   r6   r   r   r    r   r   rd   rd   q   s              \ 	   \ 
]
]	
] 
] 
] \
] 3 3 3 3 \3$ 'U ' ' ' \' B B B B \B 
C 
 
 
 \
 (# ( ( ( \( (c ( ( ( \( .yd):; . . . \.6 0>%++F 0 0 0 \06$ $ $ $? ? ?' ' ' ' 	   \  	   \  I); ItTWY\T\~_cOc@d I I I \IV >>$sTWx.Z^J^;_ > > > \>@ E(> E9TRUWZRZ^]acgMgCh E E E \EN A)DcNTXZ^D^:_ A A A \A A Ar   rd   )rv   rerZ   r   darabonba.eventr   ior   r   typingr   r   r   r	   r
   compiler   r   typer'   r1   r6   rQ   r^   rb   STREAM_CLASSrd   r    r   r   <module>r      s    				   ! ! ! ! ! !                 A A A A A A A A A A A A A A 2:CDD        "    $   	 	 	 	 	 	 	 	 	       8               D    4   	 	 	 	 	 	 	 	 	 (#         r   