
    k
i?                    z   d dl mZ d dlZd dlZd dlZd dlmZ 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 d dlmZmZmZmZmZ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&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4 dZ5 ej6        e7          Z8 G d de0e e"f                   Z9dS )    )annotationsN)OrderedDict)contextmanager)datetime)AnyDictIteratorListOptionalSequenceTuplecast)RunnableConfig)WRITES_IDX_MAPChannelVersions
CheckpointCheckpointMetadataCheckpointTuplePendingWriteget_checkpoint_id)TASKS)Redis)SearchIndex)FilterQuery)NumTag)RedisConnectionFactory)ULID)CHECKPOINT_PREFIXCHECKPOINT_WRITE_PREFIXREDIS_KEY_SEPARATORBaseRedisSaver)from_storage_safe_strto_storage_safe_idto_storage_safe_str  c                  J    e Zd ZdZdZdZ	 dMdddddeeddN fdZe	e
	 dMdddddeeddOd                        ZdPd Zdddd!dQd(ZdRd*Z	 	 	 dSdTd+ZdUd,ZdUd-Z	 dVdWd3ZdXd8Z	 dMdYd;ZdZd=Zd[d>Zed[d?            Zd\dAZed[dB            Zd]dCZdDddEd^dJZd_dLZ xZS )`ShallowRedisSaverzRedis implementation that only stores the most recent checkpoint.

    Supports standard Redis URLs (redis://), SSL (rediss://), and
    Sentinel URLs (redis+sentinel://host:26379/service_name/db).
    r&   d   N)redis_clientconnection_argsttlkey_cache_max_sizechannel_cache_max_sizecheckpoint_prefixcheckpoint_write_prefix	redis_urlOptional[str]r*   Optional[Redis]r+   Optional[dict[str, Any]]r,   r-   Optional[int]r.   r/   strr0   returnNonec                   t                                          ||||||           t                      | _        |p| j        | _        t                      | _        |p| j        | _        t          | _
        d S )N)r1   r*   r+   r,   r/   r0   )super__init__r   
_key_cacheDEFAULT_KEY_CACHE_MAX_SIZE_key_cache_max_size_channel_cacheDEFAULT_CHANNEL_CACHE_MAX_SIZE_channel_cache_max_sizer!   
_separator)
selfr1   r*   r+   r,   r-   r.   r/   r0   	__class__s
            C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langgraph/checkpoint/redis/shallow.pyr;   zShallowRedisSaver.__init__;   s     	%+/$; 	 	
 	
 	
 2=#5#X9X 5@]]"Id&I 	$
 .    Iterator[ShallowRedisSaver]c          
   #    K   d}		  | ||||||||          }	|	V  |	rV|	j         rQ|	j                                         t          |	j        dd          r$|	j        j                                         dS dS dS dS # |	rU|	j         rO|	j                                         t          |	j        dd          r!|	j        j                                         w w w w xY w)z(Create a new ShallowRedisSaver instance.N)r1   r*   r+   r,   r-   r.   r/   r0   connection_pool)_owns_its_client_redisclosegetattrrI   
disconnect)
clsr1   r*   r+   r,   r-   r.   r/   r0   savers
             rE   from_conn_stringz"ShallowRedisSaver.from_conn_string\   s/      .2	>C#) /#5'="3(?	 	 	E KKK >/ >""$$$5<):DAA >L0;;=====	> > > >> >  >/ >""$$$5<):DAA >L0;;====	> >>s   A; ;ACconfigr   
checkpointr   metadatar   new_versionsr   c                p   |d                                          }|                    d                    d                    }|                    d          }|                    d          }|                                 }	d|||d         di}
d}|d         rH	 t          j        |d                   }|j        }n%# t          $ r |                     |          }Y nw xY w|                               }t          |t                    rt          j        |          n|}|                    di           |	d<   ||rt          |          nd	t          |          |d         ||                     |	          |d
}t!          fddD                       rd         |d<   d         |d<   |                     ||          }| j                            d          5 }|                                                    |d|           |                                 ddd           n# 1 swxY w Y   | j        r{d| j        v rrt/          | j                            d          dz            }	 | j                            ||           n+# t          $ r t2                              d|           Y nw xY w|
S )z,Store checkpoint with inline channel values.configurablerun_id	thread_idcheckpoint_nsidrY   rZ   checkpoint_idNchannel_values )rY   rX   rZ   r]   checkpoint_tsrS   rT   c              3      K   | ]}|v V  	d S N ).0keyrT   s     rE   	<genexpr>z(ShallowRedisSaver.put.<locals>.<genexpr>   s'      ==3sh======rF   )sourcesteprg   rh   Ftransaction$default_ttl<   z)Failed to apply TTL to checkpoint key: %s)copypopgetr   from_str	timestamp	Exception_extract_fallback_timestamp_dump_metadata
isinstancer6   jsonloadsr$   r%   _dump_checkpointall)_make_shallow_redis_checkpoint_key_cachedrK   pipelinesetexecute
ttl_configintexpireloggerwarning)rC   rR   rS   rT   rU   rW   rX   rY   rZ   rn   next_configr`   ulid_objmetadata_strmetadata_dictcheckpoint_datacheckpoint_keyr|   ttl_secondss      `               rE   putzShallowRedisSaver.put   sM    n-2244!!(HLL,B,BCC $$[11	$((99  &!.!+D!1 
 d 	MM=D)9:: ( 2 M M M !% @ @ L LM **844(2<(E(EWDJ|$$$< 	
 ",0@"!E!E #4:B(0000??'-*//55%	
 	
 ====*<===== 	7(0(:OH%&.v&6OF#GG}
 
 [!!e!44 	MMOO_EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 ? 	}??do11-@@2EFFK"">;????   ?    $ s6   !B> >C C >H))H-0H-/J %J32J3)filterbeforelimitOptional[RunnableConfig]r   Optional[Dict[str, Any]]r   r   Iterator[CheckpointTuple]c          	   #    K   g }|r|                     t          d          t          |d         d                   k               |d                             d          x}r3|                     t          d          t          |          k               |d                             d          x}r3|                     t          d          t	          |          k               |r|                                D ]\  }}	|dk    r'|                     t          d          |	k               2|dk    r'|                     t          d          |	k               _|dk    r4|                     t          d          t          |	          k               |dk    r4|                     t          d          t          |	          k               t          d|           |rdt          |          }
|
rS	 t          j
        |
          }|j        }|                     t          d          |k                n# t          $ r Y nw xY w|r|d	         nd
}|dd         D ]}||z  }t          |g d|pdd          }| j                            |          }|j        D ]]}t#          t$          t'          |dd                    }t#          t$          t'          |dd                    }t)          j        |d                   }|                    di           }|                     |          }t'          |dd          }t/          |t$                    rt)          j        |          n|}d |                                D             }t#          t0          |          }|                     |d         |g           }d|||d         di}|                     |||d                   }t7          |||d|          V  _dS )zList checkpoints from Redis.rY   rW   rX   rZ   rg   rh   zUnsupported filter key: r`   r   *   N)rY   rZ   $.checkpoint
$.metadata'  )r]   DESC)filter_expressionreturn_fieldsnum_resultssort_byr_   r   r^   r   z{}c                    i | ]G\  }}|                     d d          t          |t                    r|                     d d          n|HS  r_   replacerv   r6   rd   kvs      rE   
<dictcomp>z*ShallowRedisSaver.list.<locals>.<dictcomp>9  sa     " " " Aq 		(B''/9!S/A/AHAIIh+++q" " "rF   r[   r\   rR   rS   rT   parent_configpending_writes)appendr   r$   rp   r%   itemsr   
ValueErrorr   r   rq   rr   rs   r   checkpoints_indexsearchdocsr   r6   rM   rw   rx   _deserialize_channel_valuesrv   r   _load_checkpoint_load_pending_writesr   )rC   rR   r   r   r   r   rX   rZ   r   r   before_checkpoint_idbefore_ulid	before_tscombined_filterexprqueryresultsdocrY   rS   r^   raw_metadatar   sanitized_metadatarT   checkpoint_paramconfig_paramr   s                               rE   listzShallowRedisSaver.list   s       
	$$K  %f^&<[&IJJK    /33H===v V!((X:LV:T:T)TUUU &~ 6 : :? K KK} !((((,?,N,NN    	E 
E 
E1==%,,S]]a-?@@@@&[[%,,S[[A-=>>>>+%%%,,S-=-=ASTUAVAV-VWWWW(]]%,,S]]>PQR>S>S-STTTT$%C%C%CDDD 
	#4V#<#< # "&-0D"E"EK + 5I%,,S-A-AI-MNNNN    D
 3DL+A..%abb) 	$ 	$Dt#OO -   -

 

 

 (//66 < 5	 5	CS'#{B"?"?@@I gc?B&G&GHHMC$788J .8^^<Lb-Q-QN!==nMMN #3d;;L lC00"
<(((! " " *//11	" " " .0BCCH  $44N#    !*%2%5d%;! !,L "66=*:4*@ N "#+!"-      _5	 5	s   5AH7 7
IIOptional[CheckpointTuple]c                   |d         d         }|d                              dd          }|                     ||          }| j                                                             |          }|rt	          |t
                    sdS | j        r| j                             d          ru| j                             dd          }t          |dz            }	 | j                            ||           n+# t          $ r t                              d	|           Y nw xY w|                     d
i           }t	          |t                    rt          j        |          }|                     di           }	|                     |	          }	|                     di           }
t	          |
t                    rt          j        |
          }
d |
                                D             }|                     t          j        |          |	g           }|                     |||d                   }t'          d|||d         di|t)          t*          |          d|          S )z*Get checkpoint with inline channel values.rW   rY   rZ   r_   Nrefresh_on_readrl   rm   z+Failed to refresh TTL on checkpoint key: %srS   r^   rT   c                    i | ]G\  }}|                     d d          t          |t                    r|                     d d          n|HS r   r   r   s      rE   r   z/ShallowRedisSaver.get_tuple.<locals>.<dictcomp>  sa     
 
 
 1 IIh##+5a+=+=D		(B'''1
 
 
rF   r[   r\   r   )rp   r{   rK   rw   rv   dictr   r   r   rs   r   r   r6   rx   r   r   r   dumpsr   r   r   r   )rC   rR   rY   rZ   r   r   default_ttl_minutesr   rS   r^   rT   r   r   r   s                 rE   	get_tuplezShallowRedisSaver.get_tuple]  s   >*;7	~.22?BGG GG}
 
 +**,,00@@ 	j$&G&G 	4 ? 	t223DEE 	"&/"5"5mR"H"H1B677K"">;????   A>     %((r::
j#&& 	0J//J *48H")M)M99.II #&&z266h$$ 	,z(++H
 
 !((	
 
 
  00Jz""
 
 22}&6t&<
 
 !*%2%/%5! ! (,.@AA)
 
 
 	
s   C1 1%DDc                r    |du | _         |pt          j        |fi || _        |                                  dS )zConfigure the Redis client.N)rJ   r   get_redis_connectionrK   set_client_info)rC   r1   r*   r+   s       rE   configure_clientz"ShallowRedisSaver.configure_client  sW     !- 4" 
&<&Q'
 '
('
 '

 	rF   c                    t          j        | j        | j                  | _        t          j        | j        | j                  | _        d S )N)r*   )r   	from_dictcheckpoints_schemarK   r   writes_schemacheckpoint_writes_indexrC   s    rE   create_indexesz ShallowRedisSaver.create_indexes  sR    !,!6#$+"
 "
 "
 (3'<T[(
 (
 (
$$$rF   c                r    | j                             d           | j                            d           dS )z Initialize the indices in Redis.F)	overwriteN)r   creater   r   s    rE   setupzShallowRedisSaver.setup  s<    %%%666$++e+<<<<<rF   r_   writesSequence[tuple[str, Any]]task_id	task_pathc                   |d         d         }|d                              dd          }|d         d         }g }t          |          D ]y\  }	\  }
}| j                            |          \  }}|t	          |          |||t          j         |
|	          |
||                     |          d	}|                    |           zt	          |          }d| d| d	}g }|D ]6}|                     |||||d
                   }|                    |           7| j	        
                    d          5 }t          |          D ]6\  }	}||	         }|                                                    |d|           7d t          |          D             }|                    ||           |                    d          }|D ]}t          |t                     r|	 ddd           n# 1 swxY w Y   | j        rd| j        v rt%          | j                             d          dz            }	 | j	                            ||           n-# t           $ r  t(                              d|d           Y nw xY w|D ]O}	 | j	                            ||           # t           $ r  t(                              d|d           Y Hw xY wdS dS dS )ak  Store intermediate writes linked to a checkpoint with checkpoint-level registry.

        Args:
            config: Configuration of the related checkpoint.
            writes: List of writes to store, each as (channel, value) pair.
            task_id: Identifier for the task creating the writes.
            task_path: Optional path info for the task.
        rW   rY   rZ   r_   r]   )	rY   rZ   r]   r   r   idxchanneltypeblobwrite_registry:::shallowr   Fri   rk   c                    i | ]\  }}||	S rc   rc   )rd   r   re   s      rE   r   z0ShallowRedisSaver.put_writes.<locals>.<dictcomp>  s    KKKcCKKKrF   )raise_on_errorNrl   rm   z-Failed to apply TTL to write registry key: %sT)exc_infoz/Failed to apply TTL to checkpoint write key: %s)rp   	enumerateserdedumps_typedr%   r   _encode_blobr   (_make_redis_checkpoint_writes_key_cachedrK   r|   rw   r}   zaddr~   rv   rs   r   r   r   r   r   )rC   rR   r   r   r   rY   rZ   r]   writes_objectsr   r   valuetype_r   	write_objsafe_checkpoint_nsthread_write_registry_key
write_keysre   r|   zadd_mappingr   resultr   s                           rE   
put_writeszShallowRedisSaver.put_writes  s    >*;7	~.22?BGG~.? %.v%6%6 	- 	-!C!'5*0077KE4&!4]!C!C!."&%)'377"))  I !!),,,, 1??FiFF*<FFF 	"
 
' 	# 	#I??=-)EBR C c""""
 [!!e!44 	! #,N";"; 9 9Y o##Ci8888 LKYz5J5JKKKLMM3\BBB &&e&<<G " ! !fi00 ! L!!	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!( ? 	}??do11-@@2EFFK""#<kJJJJ   C-!       "  K&&sK8888    NNI!% #     	 	?? s7   2B(G''G+.G+-I	 	'I32I3;J'K KrY   rZ   r]   List[PendingWrite]c                b   |g S t          |          }d| d| d}| j                            |dd          }|sg S | j                            d          5 }|D ]T}t	          |t
                    r|                                n|}	|                                                    |	           U|	                                }
ddd           n# 1 swxY w Y   i }|
D ]7}|r3|                    d	d
          }|                    dd          }||||f<   8t          j        | j        |          S )zBLoad pending writes efficiently using thread-level write registry.Nr   r   r   r   Fri   r   r_   r   )r%   rK   zranger|   rv   bytesdecoderw   rp   r~   r"   _load_writesr   )rC   rY   rZ   r]   r   r   r   r|   re   key_strr   writes_dict
write_datar   r   s                  rE   r   z&ShallowRedisSaver._load_pending_writes#  s     I
 1??FiFF*<FFF 	"
 [''(A1bII
 	I [!!e!44 	)! - -*4S%*@*@I#**,,,c##G,,,,&&((G	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) >@! 	9 	9J 9$..B77 nnUA...8WcN+ *4:{CCCs   A,CCCchannel_versionsdict[str, Any]c                z   |                      ||          }| j                                                            |d          }|si S t	          |t
                    r|d         n|}|                    di           }ddlm}	 |                     |r# |	t          t          t          f         |          ni           S )z?Retrieve channel_values dictionary from inline checkpoint data.r   r   r^   )r   )r{   rK   rw   rp   rv   r   typingr   r   r   r6   r   )
rC   rY   rZ   r]   r   r   r   rS   r^   r   s
             rE   get_channel_valuesz$ShallowRedisSaver.get_channel_valuesM  s     GG}
 

 +**,,00PP 	I #-_d"C"CXOA 	 $(8"== 	 //4BJDDc3h000
 
 	
rF   List[Tuple[str, bytes]]c                @   t          t          d          |k    t          d          t          |          k    z  t          d          t          k    z  g dd          }| j                            |          }t          |j        d           }fd	|D             S )
a3  Load pending sends for a parent checkpoint.

        Args:
            thread_id: The thread ID
            checkpoint_ns: The checkpoint namespace
            parent_checkpoint_id: The ID of the parent checkpoint

        Returns:
            List of (type, blob) tuples representing pending sends
        rY   rZ   r   )r   $.blobr   r   r   r)   r   r   r   c                f    t          | dd          t          | dd          t          | dd          fS )Nr   r_   r   r   r   rM   )xs    rE   <lambda>z7ShallowRedisSaver._load_pending_sends.<locals>.<lambda>  s6    ;++9b))5!$$ rF   )re   c                z    g | ]7}t          |d t          |dd                    x$t          |dd          f8S )r  r   Nr   r_   r	  )rd   r   r   s     rE   
<listcomp>z9ShallowRedisSaver._load_pending_sends.<locals>.<listcomp>  sW     
 
 
XwsFD/I/IJJJW S&"%%t,WWWrF   )r   r   r%   r   r   r   sortedr   )rC   rY   rZ   parent_writes_queryparent_writes_resultssorted_writesr   s         @rE   _load_pending_sendsz%ShallowRedisSaver._load_pending_sendsn  s      *";//9<?##':='I'IIK9~~&( LKK
 
 
 !% < C CDW X X !& 
 
 

 
 
 
$
 
 
 	
rF   c                8   d| d| }|| j         v r| j                             |           nbt          | j                   | j        k    r| j                             d           | j                            | j        ||g          | j         |<   | j         |         S )zSCreate a cached key for shallow checkpoints using only thread_id and checkpoint_ns.zshallow_checkpoint:r   Flast)r<   move_to_endlenr>   popitemrB   join_checkpoint_prefix)rC   rY   rZ   	cache_keys       rE   r{   z;ShallowRedisSaver._make_shallow_redis_checkpoint_key_cached  s     F)EEmEE	''O''	2222 4?##t'???''U'333)-)=)=()]C* *DOI& y))rF   c                :    t          j        t          | |g          S )zLCreate a key for shallow checkpoints using only thread_id and checkpoint_ns.)r!   r  r   rY   rZ   s     rE   "_make_shallow_redis_checkpoint_keyz4ShallowRedisSaver._make_shallow_redis_checkpoint_key  s     #'):I}(UVVVrF   r   c           
     8   d| d| d| d| d| 
}|| j         v r| j                             |           nYt          | j                   | j        k    r| j                             d           |                     |||||          | j         |<   | j         |         S )z*Create a cached key for checkpoint writes.zwrites:r   Fr  )r<   r  r  r>   r  !_make_redis_checkpoint_writes_key)rC   rY   rZ   r]   r   r   r  s          rE   r   z:ShallowRedisSaver._make_redis_checkpoint_writes_key_cached  s     RiQQ-QQ-QQ'QQCQQ 	 ''O''	2222 4?##t'???''U'333)-)O)O=-#* *DOI& y))rF   c                    t          j        t          t          t	          |                     t          |          g          dz   S )zECreate a pattern to match all writes keys for a thread and namespace.z:*)r!   r  r    r6   r$   r%   r  s     rE   1_make_shallow_redis_checkpoint_writes_key_patternzCShallowRedisSaver._make_shallow_redis_checkpoint_writes_key_pattern  sJ      $+*95566'66  		
rF   c                   t          |          }t          t          d          |k    ddgd          }| j                            |          }g }|j        D ]K}t          |dd          }t          |          }t          |dd          }	|                    |||	f           L|r| j	        
                    d          5 }
|D ]\  }}}	|                     ||          }|
                    |           d	| d
| d}| j	                            |dd          }|D ]B}t          |t                    r|                                n|}|
                    |           C|
                    |           d| d
| d}|
                    |           |
                                 ddd           dS # 1 swxY w Y   dS dS )zDelete all checkpoints and writes associated with a specific thread ID.

        Args:
            thread_id: The thread ID whose checkpoints should be deleted.
        rY   rZ   r]   r   r  r_   Fri   r   r   r   r   r   zcurrent_checkpoint:N)r$   r   r   r   r   r   rM   r#   r   rK   r|   r{   deleter   rv   r   r   r~   )rC   rY   storage_safe_thread_idcheckpoint_querycheckpoint_resultsr   r   safe_nsraw_nsr]   r|   r   r   r   	write_keywrite_key_strcurrent_checkpoint_keys                    rE   delete_threadzShallowRedisSaver.delete_thread  s    "4I!>!> '!+..2HH*O<
 
 
 "3::;KLL %* 	E 	ECc?B77G*733F#C"==M""FG]#CDDDD  !	#%%%%88  #H6E < <2FG]%)%S%S!6& &N OON333 H)GGgGGG .
 "&!3!34MqRT!U!UJ%/ 7 7	  *)U;;+I,,...!* &
 !6666 OO$=>>> LiKK'KKK + OO$:;;;;  """A #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #  #!	# !	#s   C&F55F9<F9keep_latest)strategy	keep_last
thread_idsSequence[str]r/  r0  c                   ||dk    rd}nd}|st          d          |dk     rt          d|           |dk    rdS |D ]}|                     |           dS )a  Prune checkpoints for the given threads.

        ``ShallowRedisSaver`` stores at most one checkpoint per namespace by
        design, so ``strategy="keep_latest"`` (or ``keep_last >= 1``) is
        always a no-op.  ``strategy="delete"`` (or ``keep_last=0``) removes
        all checkpoints for each thread (equivalent to ``delete_thread``).

        Args:
            thread_ids: Thread IDs to prune.
            strategy: Pruning strategy.  ``"keep_latest"`` is a no-op for
                shallow savers (default).  ``"delete"`` removes all.
            keep_last: Optional override.  Any value >= 1 is a no-op.
                Pass ``0`` to delete all.
        Nr$  r   r   z+``thread_ids`` must be a non-empty sequencez ``keep_last`` must be >= 0, got )r   r-  )rC   r1  r/  r0  rY   s        rE   prunezShallowRedisSaver.prune  s    , 8##			  	LJKKKq==K	KKLLL>>F# 	* 	*Iy))))	* 	*rF   floatc                t   |                     d          }|rt          |t                    rp	 t          j        |                    dd                    }|                                t          z  S # t          $ r t          j	                    t          z  cY S w xY w|S t          j	                    t          z  S )ai  Extract timestamp from checkpoint's ts field or use current time.

        This is used when the checkpoint_id is not a valid ULID (e.g., UUIDv6 format).
        See Issue #136 for details.

        Args:
            checkpoint: The checkpoint object containing an optional ts field.

        Returns:
            Timestamp in milliseconds since epoch.
        tsZz+00:00)
rp   rv   r6   r   fromisoformatr   rr   MILLISECONDS_PER_SECONDrs   time)rC   rS   ts_valuedts       rE   rt   z-ShallowRedisSaver._extract_fallback_timestampF  s     >>$'' 		 (C((  A!/0@0@h0O0OPPB<<>>,CCC  A A A9;;)@@@@@A  y{{444s   AA2 2%BBrb   )r1   r2   r*   r3   r+   r4   r,   r4   r-   r5   r.   r5   r/   r6   r0   r6   r7   r8   )r1   r2   r*   r3   r+   r4   r,   r4   r-   r5   r.   r5   r/   r6   r0   r6   r7   rG   )
rR   r   rS   r   rT   r   rU   r   r7   r   )
rR   r   r   r   r   r   r   r5   r7   r   )rR   r   r7   r   )NNN)r1   r2   r*   r3   r+   r4   r7   r8   )r7   r8   )r_   )
rR   r   r   r   r   r6   r   r6   r7   r8   )rY   r6   rZ   r6   r]   r6   r7   r   )
rY   r6   rZ   r6   r]   r6   r   r   r7   r   )rY   r6   rZ   r6   r7   r  )rY   r6   rZ   r6   r7   r6   )rY   r6   rZ   r6   r]   r6   r   r6   r   r5   r7   r6   )rY   r6   r7   r8   )r1  r2  r/  r6   r0  r5   r7   r8   )rS   r   r7   r5  )__name__
__module____qualname____doc__r=   r@   r   r    r;   classmethodr   rQ   r   r   r   r   r   r   r   r   r  r  r{   staticmethodr  r   r"  r-  r4  rt   __classcell__)rD   s   @rE   r(   r(   0   s         "&%(" $(. )-48(,,004!2'>. . . . . . . .B  $(> )-48(,,004!2'>> > > > > ^ [>B^ ^ ^ ^H ,0+/#| | | | | ||H
 H
 H
 H
X $((,48	    
 
 
 
= = = = ^ ^ ^ ^ ^@(D (D (D (D^ 6:
 
 
 
 
B*
 *
 *
 *
X* * * *$ W W W \W* * * *2 
 
 
 \
B# B# B# B#P &#'&* &* &* &* &* &*P5 5 5 5 5 5 5 5rF   r(   ):
__future__r   rw   loggingr;  collectionsr   
contextlibr   r   r  r   r   r	   r
   r   r   r   r   langchain_core.runnablesr   langgraph.checkpoint.baser   r   r   r   r   r   r   langgraph.constantsr   redisr   redisvl.indexr   redisvl.queryr   redisvl.query.filterr   r   redisvl.redis.connectionr   ulidr   langgraph.checkpoint.redis.baser   r    r!   r"   langgraph.checkpoint.redis.utilr#   r$   r%   r:  	getLoggerr>  r   r(   rc   rF   rE   <module>rU     sh   " " " " " "    # # # # # # % % % % % %       M M M M M M M M M M M M M M M M M M M M 3 3 3 3 3 3                  & % % % % %       % % % % % % % % % % % % ) ) ) ) ) ) ) ) ; ; ; ; ; ;                             
	8	$	$m5 m5 m5 m5 m5uk'9: m5 m5 m5 m5 m5rF   