§
    ™Štj   ã                  ó¬   — d Z ddlmZ ddlZddl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mZ ddlmZ ddlmZmZ dd	lmZmZ eZ G d
„ d¦  «        ZdS )aµ  HTTP/SSE transport for the v3 thread-centric protocol.

Direct port of `libs/sdk/src/client/stream/transport/http.ts`.

`ProtocolSseTransport` is bound to a single `thread_id` at construction. Commands
go to `POST /threads/{thread_id}/commands` (JSON in, JSON out). Each
`open_event_stream(params)` opens an independent filtered SSE connection at
`POST /threads/{thread_id}/stream/events` with the `SubscribeParams` in the
request body.
é    )ÚannotationsN)ÚAsyncIteratorÚMapping)ÚAnyÚcast)ÚEvent)Ú_quote_path_param)ÚBytesLineDecoderÚ
SSEDecoder)ÚEventStreamHandleÚbuild_event_stream_bodyc                  ó>   — e Zd ZdZdddddœdd„Zdd„Zdd„Zdd„ZdS )ÚProtocolSseTransportzñv3 protocol transport bound to a single `thread_id`.

    Commands go to `POST /threads/{thread_id}/commands` (JSON in, JSON out).
    `open_event_stream` opens filtered SSE streams against
    `POST /threads/{thread_id}/stream/events`.
    Ni   )Úcommands_pathÚstream_pathÚheadersÚmax_queue_sizeÚclientúhttpx.AsyncClientÚ	thread_idÚstrr   ú
str | Noner   r   úMapping[str, str] | Noner   ÚintÚreturnÚNonec               óø   — || _         || _        |pdt          |¦  «        › d�| _        |pdt          |¦  «        › d�| _        t          |pi ¦  «        | _        || _        d| _        t          ¦   «         | _
        d S )Nz	/threads/z	/commandsz/stream/eventsF)Ú_clientr   r	   Ú_commands_urlÚ_stream_urlÚdictÚ_default_headersÚ_max_queue_sizeÚ_closedÚsetÚ_event_streams)Úselfr   r   r   r   r   r   s          úa/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langgraph_sdk/stream/transport/http.pyÚ__init__zProtocolSseTransport.__init__)   s•   € ð ˆŒØ"ˆŒàÐPÐPÕ):¸9Ñ)EÔ)EÐPÐPÐPð 	Ôð ÐSÐSÕ'8¸Ñ'CÔ'CÐSÐSÐSð 	Ôõ 15°W°]ÀÑ0CÔ0CˆÔØ-ˆÔØˆŒÝ7:±u´uˆÔÐÐó    Úcommandúdict[str, Any]údict[str, Any] | Nonec              ƒ  ó  K  — | j         rt          d¦  «        ‚i | j        ¥ddi¥}| j                             | j        t          j        |¦  «        |¬¦  «        ƒ d{V —†}|                     ¦   «          |j	        dv rdS |j
        st          d¦  «        ‚	 t          j        |j
        ¦  «        }n'# t          j        $ r}t          d¦  «        |‚d}~ww xY wt          |t          ¦  «        rd|vrt          d¦  «        ‚|S )	a1  POST a command. Returns the response JSON, or `None` for 202/204.

        Raises:
            httpx.HTTPStatusError: server returned >= 400.
            RuntimeError: the transport has been closed via `close()`.
            RuntimeError: server returned a response missing the protocol envelope.
        úProtocol transport is closed.úcontent-typeúapplication/json©Úcontentr   N)éÊ   éÌ   z1Protocol command did not return a valid response.Úid)r$   ÚRuntimeErrorr"   r   Úpostr   ÚorjsonÚdumpsÚraise_for_statusÚstatus_coder3   ÚloadsÚJSONDecodeErrorÚ
isinstancer!   )r'   r+   Úmerged_headersÚresponseÚpayloadÚerrs         r(   Úsend_commandz!ProtocolSseTransport.send_command@   sR  è è € ð Œ<ð 	@ÝÐ>Ñ?Ô?Ð?àV˜DÔ1ÐV°>ÐCUÐVÐVˆØœ×*Ò*ØÔÝ”L Ñ)Ô)Ø"ð +ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð
 	×!Ò!Ñ#Ô#Ð#ØÔ :Ð-Ð-Ø�4ØÔð 	TÝÐRÑSÔSÐSð	Ý”l 8Ô#3Ñ4Ô4ˆGˆGøÝÔ%ð 	ð 	ð 	ÝØCñô àðøøøøð	øøøõ ˜'¥4Ñ(Ô(ð 	T¨D¸Ð,?Ð,?ÝÐRÑSÔSÐSØˆs   ÂB0 Â0CÂ?CÃCÚparamsr   c                ó   ‡ ‡‡‡‡‡	‡
— ‰ j         rt          d¦  «        ‚t          j        ¦   «         }|                     ¦   «         Š	|                     ¦   «         Št          j        ‰ j        ¬¦  «        Št          j        ¦   «         Šd
ˆˆˆˆˆ	ˆ fd„}t          j         |¦   «         ¦  «        Š
‰ j	         
                    ‰
¦  «         ‰
                     ‰ j	        j        ¦  «         dˆˆfd„}d
ˆˆˆ
fd„}t           |¦   «         ‰	‰|¬	¦  «        S )a!  Open an independent filtered SSE event stream.

        Posts `params` as a SubscribeParams body to `/threads/{thread_id}/stream/events`.
        Returns an `EventStreamHandle` whose `events` async iterator yields typed
        `Event` dicts as the server emits them. `handle.ready` resolves on a 2xx
        response (rejects on HTTP error or transport failure before headers).

        Reconnect: pass `params["since"]` to filter outbound seqs server-side. The
        cursor goes in the request body, not as a `Last-Event-ID` header.
        r/   )Úmaxsizer   r   c            	   “  óz  •K  — 	 i ‰j         ¥ddddœ¥} ‰j                             d‰j        t	          j        t          ‰
¦  «        ¦  «        | ¬¦  «        4 ƒd {V —†	 }|                     ¦   «          ‰                     ¦   «         s‰ 	                    d ¦  «         t          ¦   «         }t          ¦   «         }|                     ¦   «         2 3 d {V —†}‰                     ¦   «         r n‡|                     |¦  «        D ]o}|                     t          |¦  «        ¦  «        }|€Œ't!          |j        t$          ¦  «        r.‰                     t)          d|j        ¦  «        ¦  «        ƒ d {V —† ŒpŒ£6 ‰                     ¦   «         sâ|                     ¦   «         D ]n}|                     t          |¦  «        ¦  «        }|�Ht!          |j        t$          ¦  «        r.‰                     t)          d|j        ¦  «        ¦  «        ƒ d {V —† Œo|                     d¦  «        }|�Ht!          |j        t$          ¦  «        r.‰                     t)          d|j        ¦  «        ¦  «        ƒ d {V —† d d d ¦  «        ƒd {V —† n# 1 ƒd {V —†swxY w Y   n¥# t,          j        $ r/}‰	                     ¦   «         s‰	 	                    |¦  «         ‚ d }~wt0          $ r\}‰                     ¦   «         s‰                     |¦  «         ‰	                     ¦   «         s‰	 	                    |¦  «         Y d }~nd }~ww xY w‰	                     ¦   «         s‰	 	                    d ¦  «         ‰                     d ¦  «        ƒ d {V —† d S # ‰	                     ¦   «         s‰	 	                    d ¦  «         ‰                     d ¦  «        ƒ d {V —† w xY w)	Nr1   ztext/event-streamzno-store)r0   Úacceptzcache-controlÚPOSTr2   r   r*   )r"   r   Ústreamr    r9   r:   r   r;   ÚdoneÚ
set_resultr
   r   Úaiter_bytesÚis_setÚdecodeÚbytesr?   Údatar!   Úputr   ÚflushÚasyncioÚCancelledErrorÚBaseExceptionÚset_exception)Ússe_headersrA   Úline_decoderÚsse_decoderÚchunkÚlineÚpartrC   Úcancel_eventrL   rE   ÚqueueÚreadyr'   s           €€€€€€r(   Úpumpz4ProtocolSseTransport.open_event_stream.<locals>.pumpt   s°  øè è € ð1&ðØÔ+ðà$6Ø1Ø%/ð	ð ð �ð  œ<×.Ò.ØØÔ$Ý"œLÕ)@ÀÑ)HÔ)HÑIÔIØ'ð	 /ñ ô ð Fð Fð Fð Fð Fð Fð Fð Fð
 Ø×-Ò-Ñ/Ô/Ð/Ø Ÿ:š:™<œ<ð /Ø×(Ò(¨Ñ.Ô.Ð.Ý#3Ñ#5Ô#5�LÝ",¡,¤,�KØ'/×';Ò';Ñ'=Ô'=ð Jð Jð Jð Jð Jð Jð J˜eØ'×.Ò.Ñ0Ô0ð "Ø!˜EØ$0×$7Ò$7¸Ñ$>Ô$>ð Jð J˜DØ#.×#5Ò#5µe¸D±k´kÑ#BÔ#B˜DØ#˜|Ø (Ý)¨$¬)µTÑ:Ô:ð JØ&+§i¢iµ°W¸d¼iÑ0HÔ0HÑ&IÔ&IÐ IÐ IÐ IÐ IÐ IÐ IÐ IøðJð (>ð (×.Ò.Ñ0Ô0ð FØ$0×$6Ò$6Ñ$8Ô$8ð Jð J˜DØ#.×#5Ò#5µe¸D±k´kÑ#BÔ#B˜DØ#Ð/µJ¸t¼yÍ$Ñ4OÔ4OÐ/Ø&+§i¢iµ°W¸d¼iÑ0HÔ0HÑ&IÔ&IÐ IÐ IÐ IÐ IÐ IÐ IÐ IøØ*×1Ò1°#Ñ6Ô6˜ØÐ+µ
¸4¼9ÅdÑ0KÔ0KÐ+Ø"'§)¢)­D°¸$¼)Ñ,DÔ,DÑ"EÔ"EÐEÐEÐEÐEÐEÐEÐEð9Fð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Føøõ: Ô)ð ð ð Ø—y’y‘{”{ð )Ø—O’O CÑ(Ô(Ð(ØøøøøÝ ð )ð )ð )Ø—z’z‘|”|ð -Ø×'Ò'¨Ñ,Ô,Ð,Ø—y’y‘{”{ð )Ø—O’O CÑ(Ô(Ð(øøøøøøøøøð	)øøøð —y’y‘{”{ð *Ø—O’O DÑ)Ô)Ð)Ø—i’i ‘o”oÐ%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%øð —y’y‘{”{ð *Ø—O’O DÑ)Ô)Ð)Ø—i’i ‘o”oÐ%Ð%Ð%Ð%Ð%Ð%Ð%Ð%øøøsp   …AJ	 ÁA.I7ÃE.ÃFI7É%J	 É7
JÊJ	 ÊJÊJ	 ÊM4 Ê	L+Ê*KËL+ËAL&Ì!M4 Ì&L+Ì+M4 Í4AN:úAsyncIterator[Event]c                óz   •K  — 	 ‰                      ¦   «         ƒ d {V —†} | �‰                     ¦   «         rd S | W V — Œ8©N)ÚgetrO   )Úitemr_   r`   s    €€r(   Úaiterz5ProtocolSseTransport.open_event_stream.<locals>.aiter¬   sU   øè è € ðØ"ŸYšY™[œ[Ð(Ð(Ð(Ð(Ð(Ð(�Ø�< <×#6Ò#6Ñ#8Ô#8�<Ø�FØ�
�
�
�
ð	r*   c               “  ó  •K  — ‰                       ¦   «          ‰                     d ¦  «         ‰                     ¦   «          t          j        t
          j        t          ¦  «        5  ‰ƒ d {V —† d d d ¦  «         d S # 1 swxY w Y   d S re   )r%   Ú
put_nowaitÚcancelÚ
contextlibÚsuppressrU   rV   Ú	Exception)r_   r`   Útasks   €€€r(   Úclosez5ProtocolSseTransport.open_event_stream.<locals>.close³   sÅ   øè è € Ø×ÒÑÔÐà×Ò˜TÑ"Ô"Ð"Ø�KŠK‰MŒMˆMÝÔ$¥WÔ%;½YÑGÔGð ð Ø�
�
�
�
�
�
�
ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   Á%	A;Á;A?ÂA?)Úeventsra   rL   rp   ©r   r   )r   rc   )r$   r7   rU   Úget_running_loopÚcreate_futureÚQueuer#   r   Úcreate_taskr&   ÚaddÚadd_done_callbackÚdiscardr   )r'   rE   Úlooprb   rh   rp   r_   rL   r`   ra   ro   s   ``    @@@@@r(   Úopen_event_streamz&ProtocolSseTransport.open_event_stream`   s`  øøøøøøø€ ð Œ<ð 	@ÝÐ>Ñ?Ô?Ð?åÔ'Ñ)Ô)ˆØ&*×&8Ò&8Ñ&:Ô&:ˆØ59×5GÒ5GÑ5IÔ5IˆÝ-4¬]À4ÔCWÐ-XÑ-XÔ-XˆÝ”}‘”ˆð2	&ð 2	&ð 2	&ð 2	&ð 2	&ð 2	&ð 2	&ð 2	&ð 2	&ð 2	&ð 2	&õh Ô" 4 4¡6¤6Ñ*Ô*ˆØÔ×Ò Ñ%Ô%Ð%Ø×Ò˜tÔ2Ô:Ñ;Ô;Ð;ð	ð 	ð 	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ !¨¨©¬°uÀ4ÈuÐUÑUÔUÐUr*   c              ƒ  ó4  K  — | j         rdS d| _         t          | j        ¦  «        }|D ]}|                     ¦   «          Œ|rVt	          j        t          t          j        ¦  «        5  t          j	        |ddiŽƒ d{V —† ddd¦  «         dS # 1 swxY w Y   dS dS )zHCancel any open event streams and mark the transport closed. Idempotent.NTÚreturn_exceptions)
r$   Úlistr&   rk   rl   rm   rn   rU   rV   Úgather)r'   Útasksro   s      r(   rp   zProtocolSseTransport.close½   s  è è € àŒ<ð 	ØˆFØˆŒÝ�TÔ(Ñ)Ô)ˆØð 	ð 	ˆDØ�KŠK‰MŒMˆMˆMØð 	EÝÔ$¥YµÔ0FÑGÔGð Eð EÝ”n eÐD¸tÐDÐDÐDÐDÐDÐDÐDÐDÐDðEð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð Eð Eð Eð	Eð 	Es   Á&BÂBÂB)r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r+   r,   r   r-   )rE   r,   r   r   rr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r)   rD   r{   rp   © r*   r(   r   r   !   s–   € € € € € ðð ð %)Ø"&Ø,0Ø"ð=ð =ð =ð =ð =ð =ð.ð ð ð ð@[Vð [Vð [Vð [Vðz
Eð 
Eð 
Eð 
Eð 
Eð 
Er*   r   )r„   Ú
__future__r   rU   rl   Úcollections.abcr   r   Útypingr   r   Úhttpxr9   Úlangchain_protocolr   Úlanggraph_sdk._shared.utilitiesr	   Úlanggraph_sdk.sser
   r   Ú#langgraph_sdk.stream.transport.baser   r   Ú_build_event_stream_bodyr   r…   r*   r(   ú<module>r�      s,  ðð	ð 	ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ð Ð Ð Ð à €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $à =Ð =Ð =Ð =Ð =Ð =Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð
 3Ð ðfEð fEð fEð fEð fEñ fEô fEð fEð fEð fEr*   