
    <i'                        S r SSKJr  SSKJrJr  SSKJr  SSKrSSK	r	SSK
Jr  \\\\4   r " S S5      r " S	 S
5      rSS jrSS jrg)zCAdapted from httpx_sse to split lines on 
, , 
 per the SSE spec.    )annotations)AsyncIteratorIterator)UnionN)
StreamPartc                  6    \ rS rSrSrSS jrS	S jrS
S jrSrg)BytesLineDecoder   z
Handles incrementally reading lines from text.

Has the same behaviour as the stdllib bytes splitlines,
but handling the input iteratively.
c                0    [        5       U l        SU l        g NF)	bytearraybuffertrailing_crselfs    a/home/dmtnaga/Documents/work/airagagent/rag_env/lib/python3.13/site-packages/langgraph_sdk/sse.py__init__BytesLineDecoder.__init__   s    k!&    c                8   SnU R                   (       a  SU-   nSU l         UR                  S5      (       a  SU l         US S nU(       d  / $ US   U;   nUR                  5       n[        U5      S:X  a'  U(       d   U R                  R                  US   5        / $ U R                  (       a@  U R                  R                  US   5        U R                  /USS  -   n[        5       U l        U(       d)  U R                  R                  UR                  5       5        U$ )Ns   
   FT   r   )r   endswith
splitlineslenr   extendr   pop)r   textNEWLINE_CHARStrailing_newlineliness        r   decodeBytesLineDecoder.decode   s     4<D$D==#D9D I8}4!u:?#3KKuQx(I;; KKuQx([[ME!"I-E#+DK KKuyy{+r   c                    U R                   (       d  U R                  (       d  / $ U R                   /n[        5       U l         SU l        U$ r   )r   r   r   )r   r"   s     r   flushBytesLineDecoder.flushC   s7    {{4#3#3Ik r   )r   r   NreturnNone)r   bytesr)   list[BytesLike])r)   r,   )	__name__
__module____qualname____firstlineno____doc__r   r#   r&   __static_attributes__ r   r   r	   r	      s    '%Nr   r	   c                  <    \ rS rSrSS jr\SS j5       rS	S jrSrg)

SSEDecoderM   c                L    SU l         [        5       U l        SU l        S U l        g )N )_eventr   _data_last_event_id_retryr   s    r   r   SSEDecoder.__init__N   s!    [
 "&r   c                ,    U R                   =(       d    S$ )z/Return the last event identifier that was seen.N)r;   r   s    r   last_event_idSSEDecoder.last_event_idT   s     ""*d*r   c                   U(       d  U R                   (       d0  U R                  (       d  U R                  (       d  U R                  c  g [	        U R                   U R                  (       a   [
        R                  " U R                  5      OS S9nSU l         [        5       U l        S U l        U$ UR                  S5      (       a  g UR                  S5      u  p4nUR                  S5      (       a  USS  nUS:X  a  UR                  5       U l         g US:X  a  U R                  R                  U5        g US:X  a  S	U;   a   g UR                  5       U l         g US
:X  a   [        U5      U l        g  g ! [        [        4 a     g f = f)N)eventdatar8      :    r   s   events   datas   id    s   retry)r9   r:   r;   r<   r   orjsonloadsr   
startswith	partitionr#   r   int	TypeError
ValueError)r   linesse	fieldname_values         r   r#   SSEDecoder.decodeZ   sa    KK

++KK'kk15V\\$**-C DK"DJDKJ??4  "nnT2	eD!!!"IE ,,.DK   '!JJe$  %~  ',lln#  ("!%j   z*  s   E0 0FF)r:   r9   r;   r<   Nr(   )r)   z
str | None)rN   r+   r)   zStreamPart | None)	r-   r.   r/   r0   r   propertyr?   r#   r2   r3   r   r   r5   r5   M   s     ' + +
1r   r5   c                  #    [        5       nU R                  5         S h  vN nUR                  U5       H  nU7v   M
     M(   N#
 UR                  5        H  nU7v   M
     g 7fN)r	   aiter_bytesr#   r&   responsedecoderchunkrN   s       r   aiter_lines_rawr\      sW      G++- eNN5)DJ *- 
  s%   A%AAA A%AA%c              #     #    [        5       nU R                  5        H  nUR                  U5       H  nUv   M	     M!     UR                  5        H  nUv   M	     g 7frV   )r	   
iter_bytesr#   r&   rX   s       r   iter_lines_rawr_      sO      G$$&NN5)DJ * ' 
  s   AA)rY   httpx.Responser)   zAsyncIterator[BytesLike])rY   r`   r)   zIterator[BytesLike])r1   
__future__r   collections.abcr   r   typingr   httpxrG   langgraph_sdk.schemar   r+   r   
memoryview	BytesLiker	   r5   r\   r_   r3   r   r   <module>rh      sK    M " 3    +%J./	: :z> >Br   