
    9i>                        d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	Z	ddl
Z
ddlmZ eez  ez  Z G d d      Z G d	 d
      ZddZddZy)zCAdapted from httpx_sse to split lines on 
, , 
 per the SSE spec.    )annotationsN)AsyncIteratorIterator)cast)
StreamPartc                  (    e Zd ZdZddZddZddZy)	BytesLineDecoderz
    Handles incrementally reading lines from text.

    Has the same behaviour as the stdllib bytes splitlines,
    but handling the input iteratively.
    c                0    t               | _        d| _        y NF)	bytearraybuffertrailing_crselfs    [/var/www/html/backtest/airagagent/rag_env/lib/python3.12/site-packages/langgraph_sdk/sse.py__init__zBytesLineDecoder.__init__   s    k!&    c                J   d}| j                   rd|z   }d| _         |j                  d      rd| _         |d d }|sg S |d   |v }t        t        t           |j                               }t        |      dk(  r"|s | j                  j                  |d          g S | j                  rT| j                  j                  |d          t        t        t           | j                  g|dd        }t               | _        |s)| j                  j                  |j                                |S )Ns   
   FT   r   )r   endswithr   list	BytesLike
splitlineslenr   extendr   pop)r   textNEWLINE_CHARStrailing_newlineliness        r   decodezBytesLineDecoder.decode   s    4<D$D==#D9D I8}4T)_doo&78u:?#3KKuQx(I;; KKuQx(i4;;*Cqr*CDE#+DK KKuyy{+r   c                    | j                   s| j                  sg S | j                   g}t               | _         d| _        |S r   )r   r   r   )r   r"   s     r   flushzBytesLineDecoder.flushD   s7    {{4#3#3Ik r   NreturnNone)r   bytesr'   list[BytesLike])r'   r*   )__name__
__module____qualname____doc__r   r#   r%    r   r   r	   r	      s    '%Nr   r	   c                  .    e Zd ZddZedd       ZddZy)
SSEDecoderc                L    d| _         t               | _        d| _        d | _        y )N )_eventr   _data_last_event_id_retryr   s    r   r   zSSEDecoder.__init__O   s!    [
 "&r   c                "    | j                   xs dS )z/Return the last event identifier that was seen.N)r6   r   s    r   last_event_idzSSEDecoder.last_event_idU   s     ""*d*r   c                   |s| j                   s%| j                  s| j                  s| j                  y t	        | j                   | j                  rt        j                  | j                        nd       }d| _         t               | _        d | _        |S |j                  d      ry |j                  d      \  }}}|j                  d      r|dd  }|dk(  r|j                         | _         y |dk(  r| j                  j                  |       y |dk(  rd	|v r	 y |j                         | _        y |d
k(  r8t        j                  t        t              5  t!        |      | _        d d d        y 	 y # 1 sw Y   y xY w)N)eventdatar3      :    r   s   events   datas   id    s   retry)r4   r5   r6   r7   r   orjsonloadsr   
startswith	partitionr#   r   
contextlibsuppress	TypeError
ValueErrorint)r   linesse	fieldname_values         r   r#   zSSEDecoder.decode[   s_    KK

++KK'kk15V\\$**-C DK"DJDKJ??4 "nnT2	1eD!!"IE ,,.DK  '!JJe$  %~  ',lln#  ("$$Y
; )!%j)
  )
 s   E..E7Nr&   )r'   z
str | None)rI   r)   r'   zStreamPart | None)r+   r,   r-   r   propertyr9   r#   r/   r   r   r1   r1   N   s     ' + +
/r   r1   c                  K   t               }| j                         2 3 d {   }|j                  |      D ]  }| 	 %7  6 |j                         D ]  }| 	 y wN)r	   aiter_bytesr#   r%   responsedecoderchunkrI   s       r   aiter_lines_rawrV      sh      G++-  eNN5) 	DJ	-  
s%   A AAAA AA c              #     K   t               }| j                         D ]  }|j                  |      D ]  }|   |j                         D ]  }|  y wrP   )r	   
iter_bytesr#   r%   rR   s       r   iter_lines_rawrY      s_      G$$& NN5) 	DJ	  
s   AA)rS   httpx.Responser'   zAsyncIterator[BytesLike])rS   rZ   r'   zIterator[BytesLike])r.   
__future__r   rD   collections.abcr   r   typingr   httpxr@   langgraph_sdk.schemar   r)   r   
memoryviewr   r	   r1   rV   rY   r/   r   r   <module>ra      sL    M "  3    +I
*	: :z< <~r   