
    (Gg&)                    T   U d dl m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 d dlmZmZmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lm Z  d dl!m"Z" d dl#m$Z$ d dl%m&Z&m'Z' eee(ee(   f   e)geee*e(ef   f   f   Z+ G d de&      Z, e       Z-de.d<    G d de      Z/y)    )annotations)cached_property)AnyAsyncIteratorCallableIteratorMappingOptionalSequenceUnion)RunnableRunnableConfigRunnablePassthroughRunnableSerializable)InputOthercoerce_to_runnable)ConfigurableFieldSpec)CONFCONFIG_KEY_READ)PregelProtocol)RetryPolicy)find_subgraph_pregel)ChannelWrite)merge_configs)RunnableCallableRunnableSeqc                       e Zd ZU dZded<   dZded<   dZded	<   edd
       Zdddd	 	 	 	 	 	 	 	 	 d fdZ		 ddd	 	 	 	 	 d fdZ
ddZddZeddd	 	 	 	 	 	 	 	 	 dd       Z xZS )ChannelReadzImplements the logic for reading state from CONFIG_KEY_READ.
    Usable both as a runnable as well as a static method to call imperatively.Union[str, list[str]]channelFboolfreshNOptional[Callable[[Any], Any]]mapperc                4    t        t        t        d d d       gS )N)idnamedescriptiondefault
annotation)r   r   )selfs    r/home/kushmeetdev/apache_webroot/langgraph_flaskproject/venv/lib/python3.12/site-packages/langgraph/pregel/read.pyconfig_specszChannelRead.config_specs-   s%     ""$ 
 	
    )r#   r%   tagsc                   t         |   | j                  | j                  |d d       || _        || _        || _        y )NT)funcafuncr0   r(   func_accepts_config)super__init___read_areadr#   r%   r!   )r,   r!   r#   r%   r0   	__class__s        r-   r6   zChannelRead.__init__9   sE     	++ $ 	 	
 
r/   r(   c                   |rnJt        | j                  t              rd| j                   d}nddj                  | j                         d}t        |   ||      S )NzChannelRead<>,r:   )
isinstancer!   strjoinr5   get_name)r,   suffixr(   r9   s      r-   rA   zChannelRead.get_nameL   s\     c*!$,,q1D!#((4<<"8!9;DwT22r/   c                h    | j                  || j                  | j                  | j                        S N)selectr#   r%   do_readr!   r#   r%   r,   _configs      r-   r7   zChannelRead._readW   s-    ||4<<tzz$++  
 	
r/   c                p   K   | j                  || j                  | j                  | j                        S wrD   rF   rH   s      r-   r8   zChannelRead._aread\   s1     ||4<<tzz$++  
 	
s   46)r#   r%   c                   	 | t            t           }|r | |||            S  |||      S # t        $ r t        d      w xY w)NzWNot configured with a read functionMake sure to call in the context of a Pregel process)r   r   KeyErrorRuntimeError)rJ   rE   r#   r%   reads        r-   rG   zChannelRead.do_reada   s]    	$Tl?;D $vu-..&&  	G 	s	   , A)returnzlist[ConfigurableFieldSpec])
r!   r    r#   r"   r%   r$   r0   Optional[list[str]]rP   NoneN)rB   Optional[str]r(   rT   rP   r?   )rI   r   rJ   r   rP   r   )
rJ   r   rE   r    r#   r"   r%   r$   rP   r   )__name__
__module____qualname____doc____annotations__r#   r%   propertyr.   r6   rA   r7   r8   staticmethodrG   __classcell__)r9   s   @r-   r   r   #   s    R #"E4-1F*1	
 	
 15$(& 	
 / " 
( '+	3EI	3#	35B	3		3



 
 15'' &' 	'
 /' 
' 'r/   r   r   DEFAULT_BOUNDc                     e Zd ZU dZded<   	 ded<   	 ded<   	 ded	<   	 d
ed<   	 ded<   	 ded<   	 ded<   	 ded<   	 dddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d#dZd$dZed%d       Zed&d       Z	d'dZ
	 	 	 	 d(dZdd	 	 	 	 	 d)dZ	 	 	 	 d*dZ	 d+	 	 	 	 	 	 	 d,dZ	 d+	 	 	 	 	 	 	 d,d Z	 d+	 	 	 	 	 	 	 d-d!Z	 d+	 	 	 	 	 	 	 d.d"Zy)/
PregelNodezA node in a Pregel graph. This won't be invoked as a runnable by the graph
    itself, but instead acts as a container for the components necessary to make
    a PregelExecutableTask for a node.#Union[list[str], Mapping[str, str]]channelsz	list[str]triggersr$   r%   list[Runnable]writerszRunnable[Any, Any]boundOptional[RetryPolicy]retry_policyzOptional[Sequence[str]]r0   Optional[Mapping[str, Any]]metadatazSequence[PregelProtocol]	subgraphsN)r%   rd   r0   ri   re   rg   rj   c       	        X   || _         t        |      | _        || _        |xs g | _        ||nt
        | _        || _        || _        || _	        |	|	| _
        y | j                  t
        ur)	 t        | j                        }
|
r	|
g| _
        y g | _
        y g | _
        y # t        $ r d }
Y (w xY wrS   )ra   listrb   r%   rd   r]   re   rg   r0   ri   rj   r   	Exception)r,   ra   rb   r%   rd   r0   ri   re   rg   rj   subgraphs              r-   r6   zPregelNode.__init__   s     !X}"#/U]
(	  &DNZZ}, /

; "*!#DN    s   +B B)(B)c                8    i | j                   |}t        di |S )N )__dict__r_   )r,   updateattrss      r-   copyzPregelNode.copy   s#    +4==+F+"E""r/   c                   | j                   j                         }t        |      dkD  rt        |d   t              rt        |d   t              rt	        |d   j
                  |d   j
                  z   |d   j                        |d<   |j                          t        |      dkD  r't        |d   t              rt        |d   t              r|S )zJGet writers with optimizations applied. Dedupes consecutive ChannelWrites.   )writesr0   )rd   rt   lenr>   r   ry   r0   popr,   rd   s     r-   flat_writerszPregelNode.flat_writers   s     ,,##%L172;572;5 'r{))GBK,>,>>R[%%GBK KKM L172;572;5 r/   c                
   | j                   }| j                  t        u r|sy| j                  t        u rt        |      dk(  r|d   S | j                  t        u rt	        | S |rt	        | j                  g| S | j                  S )z3Get a runnable that combines `bound` and `writers`.Nrv   r   )r}   re   r]   rz   r   r|   s     r-   nodezPregelNode.node   sy     ##::&wZZ=(S\Q->1:ZZ=(((tzz4G44::r/   c           
        t        |t              st        |t              sJ d       t        | j                  t              sJ d       | j                  t	        i | j                  |D ci c]  }|| c}            S c c}w )Nz channels must be a list or tuplez-all channels must be named when using .join())ra   rr   )r>   rl   tuplera   dictrt   )r,   ra   chans      r-   r@   zPregelNode.join   s    (D)Ze.
 	.-	. 
 MM4
 	;:	; 
 yymm.67dtTz7  
 	
 8s   *
Bc                n   t        |t              r?t        j                  |      r*| j	                  t        g | j                  |            S | j                  t        u r%| j	                  t        t        |                  S | j	                  t        t        | j                  |                  S )N)rd   r   )re   )r>   r   r   	is_writerrt   r   rd   re   r]   r   r   r,   others     r-   __or__zPregelNode.__or__   s     eX&<+A+A%+H99D1G4<<1G1G$H9IIZZ=(99D/A%/H$I9JJ99D{4::u/M$N9OOr/   r:   c                   |D ]  }| |z  } 	 | S rS   rp   )r,   r(   othersr   s       r-   pipezPregelNode.pipe  s!    
  	 E%<D	 r/   c                    t               rS   )NotImplementedErrorr   s     r-   __ror__zPregelNode.__ror__  s     "##r/   c                     | j                   j                  |t        | j                  | j                  d|      fi |S N)ri   r0   )re   invoker   ri   r0   r,   inputrJ   kwargss       r-   r   zPregelNode.invoke  sA     !tzz  t}}diiH&Q
 
 	
r/   c                   K    | j                   j                  |t        | j                  | j                  d|      fi | d {   S 7 wr   )re   ainvoker   ri   r0   r   s       r-   r   zPregelNode.ainvoke%  sO      (TZZ''t}}diiH&Q
 
 
 	
 
s   AAA
Ac              +     K    | j                   j                  |t        | j                  | j                  d|      fi |E d {    y 7 wr   )re   streamr   ri   r0   r   s       r-   r   zPregelNode.stream1  sJ      %4::$$t}}diiH&Q
 
 	
 	
s   AAAAc                  K    | j                   j                  |t        | j                  | j                  d|      fi |2 3 d {   }| 7 
6 y wr   )re   astreamr   ri   r0   )r,   r   rJ   r   items        r-   r   zPregelNode.astream=  s^      -$**,,t}}diiH&Q
 
 	 	$
 J	 
s*   A AAAA
AAA)ra   r`   rb   Sequence[str]r%   r$   rd   zOptional[list[Runnable]]r0   rQ   ri   rh   re   Optional[Runnable[Any, Any]]rg   rf   rj   z"Optional[Sequence[PregelProtocol]]rP   rR   )rr   zdict[str, Any]rP   r_   )rP   rc   )rP   r   )ra   r   rP   r_   )r   zpUnion[Runnable[Any, Other], Callable[[Any], Other], Mapping[str, Runnable[Any, Other] | Callable[[Any], Other]]]rP   r_   )r   z-Runnable[Any, Other] | Callable[[Any], Other]r(   rT   rP   z RunnableSerializable[Any, Other])r   zvUnion[Runnable[Other, Any], Callable[[Any], Other], Mapping[str, Union[Runnable[Other, Any], Callable[[Other], Any]]]]rP   r   rS   )r   r   rJ   Optional[RunnableConfig]r   Optional[Any]rP   r   )r   r   rJ   r   r   r   rP   zIterator[Any])r   r   rJ   r   r   r   rP   zAsyncIterator[Any])rU   rV   rW   rX   rY   r6   rt   r   r}   r   r@   r   r   r   r   r   r   r   rp   r/   r-   r_   r_   y   s9   * 21'
  +*IP  ('9
!!1))5''% 26,0$(04.2.28<!  6!   	! 
 /!  *!  "!  .!  ,!  ,!  6!  
! F#  "  
 P
P 
P$ #>  
*	$
$ 
$ ,0



 )

  	


 


 ,0



 )

  	


 


 ,0



 )

  	


 


 ,0 )  	
 
r/   r_   N)0
__future__r   	functoolsr   typingr   r   r   r   r	   r
   r   r   langchain_core.runnablesr   r   r   r   langchain_core.runnables.baser   r   r   langchain_core.runnables.utilsr   langgraph.constantsr   r   langgraph.pregel.protocolr   langgraph.pregel.retryr   langgraph.pregel.utilsr   langgraph.pregel.writer   langgraph.utils.configr   langgraph.utils.runnabler   r   r?   r"   r   	READ_TYPEr   r]   rY   r_   rp   r/   r-   <module>r      s    " %	 	 	  K J @ 5 4 . 7 / 0 BeC#./6c4S>>Q8RRS	P'" P'f &9%:" :O Or/   