
    @'h$)                     f   d Z ddlZddlZddlZddlmZ ddlmZmZm	Z	m
Z
mZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ  ede      Zded	efd
Z G d de      Z de!e   d	e"e
e!e#      e!e   f   fdZ$dejJ                  e"ejL                  ef      dejN                  e   d	dfdZ(y)z7Utilities for batching operations in a background task.    N)Iterable)AnyCallableLiteralOptionalTypeVarUnion)NOT_PROVIDED	BaseStoreGetOpItemListNamespacesOpMatchConditionNamespacePathNotProvidedOpPutOpResult
SearchItemSearchOp_ensure_refresh_ensure_ttl_validate_namespaceF)boundfuncreturnc           	      l     t        j                         dddt        dt        dt        f fd       }|S )NstoreAsyncBatchedBaseStoreargskwargsr   c                    j                   }	 t        j                         }|| j                  u r=|r	d| d| dnd}t        j                  d| j
                  j                    d| d      	  | g|i |S # t        $ r Y w xY w)NzSpecifically, replace `store.z(...)` with `await store.az(...)zBFor example, replace `store.get(...)` with `await store.aget(...)`zSynchronous calls to z detected in the main event loop. This can lead to deadlocks or performance issues. Please use the asynchronous interface for main thread operations.  )__name__asyncioget_running_loop_loopInvalidStateError	__class__RuntimeError)r   r!   r"   method_namecurrent_loopreplacement_strr   s         a/home/kushmeetdev/Regenta/Chatbot/venv/lib/python3.12/site-packages/langgraph/store/base/batch.pywrapperz_check_loop.<locals>.wrapper    s    ==	"335Lu{{* # 4K=@Z[fZgglm]  
 //+EOO,D,D+E FY ''q*  + E+D+F++  		s   AA; ;	BB)	functoolswrapsr   )r   r0   s   ` r/   _check_loopr3      sB    __T,. ,s ,c ,c , ,( N    c                   \    e Zd ZdZdZd+ fdZd+dZdddeed	f   d
ede	e
   de	e   fdZdddddddeed	f   de	e   de	eeef      dedede	e
   dee   fdZ	 d,eddeed	f   d
edeeef   de	eed   ee   f      dee	e   df   ddfdZdeed	f   d
eddfdZddddddd e	e   d!e	e   d"e	e   dededeeed	f      fd#Zed$ee   dee   fd%       Zedddeed	f   d
ede	e
   de	e   fd&       Z edddddddeed	f   de	e   de	eeef      dedede	e
   dee   fd'       Z!e	 d,eddeed	f   d
edeeef   de	eed   ee   f      dee	e   df   ddfd(       Z"edeed	f   d
eddfd)       Z#eddddddd e	e   d!e	e   d"e	e   dededeeed	f      fd*       Z$ xZ%S )-r    z2Efficiently batch operations in a background task.)r(   _aqueue_taskr   Nc                    t         |           t        j                         | _        t        j
                         | _        | j                  j                  t        | j                  t        j                  |                   | _        y N)super__init__r&   r'   r(   Queuer6   create_task_runweakrefrefr7   )selfr*   s    r/   r;   zAsyncBatchedBaseStore.__init__=   sU    --/
AHZZ++Dw{{4?P,QR
r4   c                 X    	 | j                   j                          y # t        $ r Y y w xY wr9   )r7   cancelr+   )rA   s    r/   __del__zAsyncBatchedBaseStore.__del__C   s)    	JJ 		s    	))refresh_ttl	namespace.keyrF   c                  K   | j                   j                         rJ | j                  j                         }| j                  j                  |t        ||t        | j                  |            f       | d {   S 7 wNrE   )	r7   doner(   create_futurer6   
put_nowaitr   r   
ttl_config)rA   rG   rH   rF   futs        r/   agetzAsyncBatchedBaseStore.agetI   sp      ::??$$$jj&&( / M		
 yys   A9B;B <B
   r   queryfilterlimitoffsetrF   namespace_prefixrS   rT   rU   rV   c                 K   | j                   j                         rJ | j                  j                         }| j                  j                  |t        |||||t        | j                  |            f       | d {   S 7 wrJ   )	r7   rK   r(   rL   r6   rM   r   r   rN   )rA   rW   rS   rT   rU   rV   rF   rO   s           r/   asearchzAsyncBatchedBaseStore.asearch^   sy      ::??$$$jj&&($ / M
	
 yys   A<B>B?BttlvalueindexFr[   r   c                "  K   | j                   j                         rJ t        |       | j                  j	                         }| j
                  j                  |t        ||||t        | j                  |            f       | d {   S 7 w)NrZ   )
r7   rK   r   r(   rL   r6   rM   r   r   rN   )rA   rG   rH   r\   r]   r[   rO   s          r/   aputzAsyncBatchedBaseStore.aputz   s{      ::??$$$I&jj&&(sE5k$//SV6W	
 yys   BBB	Bc                    K   | j                   j                         rJ | j                  j                         }| j                  j                  |t        ||d       f       | d {   S 7 wr9   )r7   rK   r(   rL   r6   rM   r   )rA   rG   rH   rO   s       r/   adeletezAsyncBatchedBaseStore.adelete   sX     
 ::??$$$jj&&(eIsD&A BCyys   A$A-&A+'A-d   prefixsuffix	max_depthrU   rV   rd   re   rf   c                t  K   | j                   j                         rJ | j                  j                         }g }|r|j	                  t        d|             |r|j	                  t        d|             t        t        |      |||      }| j                  j                  ||f       | d {   S 7 w)Nrd   )
match_typepathre   )match_conditionsrf   rU   rV   )
r7   rK   r(   rL   appendr   r   tupler6   rM   )	rA   rd   re   rf   rU   rV   rO   rj   ops	            r/   alist_namespacesz&AsyncBatchedBaseStore.alist_namespaces   s      ::??$$$jj&&(##NhV$TU##NhV$TU"#34	
 	b	*yys   B/B81B62B8opsc                 |    t        j                  | j                  |      | j                        j	                         S r9   )r&   run_coroutine_threadsafeabatchr(   result)rA   ro   s     r/   batchzAsyncBatchedBaseStore.batch   s+    //C0@$**MTTVVr4   c                    t        j                  | j                  |||      | j                        j	                         S )N)rH   rF   )r&   rq   rP   r(   rs   )rA   rG   rH   rF   s       r/   getzAsyncBatchedBaseStore.get   s6     //IIiSkIBDJJ

&(	r4   c         
          t        j                  | j                  ||||||      | j                        j	                         S )NrR   )r&   rq   rY   r(   rs   )rA   rW   rS   rT   rU   rV   rF   s          r/   searchzAsyncBatchedBaseStore.search   sL     //LL '   JJ

 &(
	r4   c                    t        |       t        j                  | j                  ||||t	        | j
                  |            | j                        j                          y )N)rH   r\   r]   r[   )r   r&   rq   r_   r   rN   r(   rs   )rA   rG   rH   r\   r]   r[   s         r/   putzAsyncBatchedBaseStore.put   sW     	I&((II5   JJ		
 &(r4   c                     t        j                  | j                  ||      | j                        j	                          y )N)rH   )r&   rq   ra   r(   rs   )rA   rG   rH   s      r/   deletezAsyncBatchedBaseStore.delete   s/     	((LLL,djj	

&(r4   c          	          t        j                  | j                  |||||      | j                        j	                         S )Nrc   )r&   rq   rn   r(   rs   )rA   rd   re   rf   rU   rV   s         r/   list_namespacesz%AsyncBatchedBaseStore.list_namespaces   sK     //!!# "  JJ	
 &(		r4   )r   Nr9   )&r%   
__module____qualname____doc__	__slots__r;   rD   rl   strr   boolr   rP   dictr   intlistr   rY   r
   r	   r   floatr_   ra   r   rn   r3   r   r   r   rt   rv   rx   rz   r|   r~   __classcell__)r*   s   @r/   r    r    8   s>   <-IS '+c? 
 d^ 
$4  $+/&*S/
 } c3h(   d^ 
j	B =A 6Bc?  CH~	
 gend3i789 8E?M12 
,c?  
	 +/*.#' ' '	
 C=   
eCHo	4 W" W$v, W W  '+	c?	 	
 d^	 
$	 	   $+/&*S/
 } c3h(   d^ 
j	 .  =A 6Bc?  CH~	
 gend3i789 8E?M12 
 * c?  
	   +/*.#' ' '	
 C=   
eCHo	 r4   r    valuesc                    t        |       dk  rdt        |       fS g }g }i }| D ]  }t        |t        t        t
        f      r"	 |j                  |j                  |             @t        |t              rr|j                  |j                  f}||v r||   }|||<   |j                  |       t        |      ||<   |j                  t        |             |j                  |       |j                  t        |             |j                  |        ||fS # t        $ r/ |j                  t        |             |j                  |       Y *w xY w)a  Dedupe operations while preserving order for results.

    Args:
        values: List of operations to dedupe

    Returns:
        Tuple of (listen indices, deduped operations)
        where listen indices map deduped operation results back to original positions
       N)lenr   
isinstancer   r   r   rk   r]   
ValueErrorr   rG   rH   )r   deduppedlistenputsrm   putkeyixs          r/   _dedupe_opsr     s-    6{aT&\!!HF35D  b5(,<=>$hnnR01 E"llBFF+F~&\!b!"8}Vc(m,# MM#h-(OOB+ . 8'  $c(m,#$s    D4EEaqueuer   c                   K   | j                          d {   x}r |       x}r	 |g}	 | j                         x}r$|j                  |       | j                         x}r$|D cg c]  }|d   	 }}|D cg c]  }|d   	 }}	 t        |      \  }}|j                  |       d {   }	||D 
cg c]  }
|	|
   	 }	}
t        ||	      D ]  \  }}|j                  |        	 ~ny | j                          d {   x}ry y 7 # t        j                  $ r Y w xY wc c}w c c}w 7 c c}
w # t        $ r"}|D ]  }|j                  |        Y d }~rd }~ww xY w# ~w xY w7 iw)Nr   r   )rv   
get_nowaitrk   r&   
QueueEmptyr   rr   zip
set_result	Exceptionset_exception)r   r   itemsitemsfutsr   r   r   resultsr   rO   rs   es                 r/   r>   r>   =  s     

$
$$
$<1<"("3"3"55$5T* #)"3"3"55$5
 -22DQ22.34d$q'44-'26':$FH$%HHX$66G)9?"@272;"@"@ (+4'9 /Vv./ ? 

$
$$
$$ ))  34 7"@
 ! -# -))!,--
 ; %s   E)DE)E! 5D	 !E! %D"1E! 7D'E! "D3 (D,)
D3 3D.?'D3 &E! 'E)=E'>E)E)	DE! DE! ,D3 .D3 3	E<EE! EE! !E$$E)))r   r&   r1   r?   collections.abcr   typingr   r   r   r   r   r	   langgraph.store.baser
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r3   r    r   rl   r   r   r<   FutureReferenceTyper>    r4   r/   <module>r      s    =    $ C C    & Cx a A 2WI Wt(R (U8DI+>R+H%I (V#MM% 234#  +# 
#r4   