
    m
i                     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  G d de          Z	dS )    N)Any)field_validator)
BaseMemory)BaseChatMemoryc                   t   e Zd ZU dZee         ed<   	  ed          edee         dee         fd                        Z	 ed          edee         dee         fd                        Z
edee         fd            Zdeeef         deeef         fd	Zdeeef         d
eeef         ddfdZddZdS )CombinedMemoryz+Combining multiple memories' data together.memoriesvaluereturnc                     t                      }|D ]J}|                    |j                  }|rd| d}t          |          |t          |j                  z  }K|S )NzThe same variables zL are found in multiplememory object, which is not allowed by CombinedMemory.)setintersectionmemory_variables
ValueError)clsr
   all_variablesvaloverlapmsgs         C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langchain_classic/memory/combined.py_check_repeated_memory_variablez.CombinedMemory._check_repeated_memory_variable   s     #&%% 	7 	7C#001EFFG &M' M M M  !oo%S!5666MM    c                 z    |D ]7}t          |t                    r |j        t          j        d| d           8|S )zHCheck that if memories are of type BaseChatMemory that input keys exist.NzWWhen using CombinedMemory, input keys should be so the input is known.  Was not set on    )
stacklevel)
isinstancer   	input_keywarningswarn)r   r
   r   s      r   check_input_keyzCombinedMemory.check_input_key#   sd      	 	C#~.. 3=3H-'*- -  !	    r   c                 T    	 g }| j         D ]}|                    |j                   |S )z5All the memory variables that this instance provides.)r	   extendr   )selfr   memorys      r   r   zCombinedMemory.memory_variables1   s>     	:m 	= 	=F##F$;<<<<r   inputsc                     i }| j         D ]O}|                    |          }|                                D ]#\  }}||v rd| d}t          |          |||<   $P|S )z Load all vars from sub-memories.zThe variable z# is repeated in the CombinedMemory.)r	   load_memory_variablesitemsr   )r#   r%   memory_datar$   datakeyr
   r   s           r   r'   z$CombinedMemory.load_memory_variables=   s    &( m 	) 	)F//77D"jjll ) )
U+%%R#RRRC$S//)#(C  	) r   outputsNc                 F    | j         D ]}|                    ||           dS )z0Save context from this session for every memory.N)r	   save_context)r#   r%   r,   r$   s       r   r.   zCombinedMemory.save_contextL   s8     m 	1 	1F0000	1 	1r   c                 B    | j         D ]}|                                 dS )z1Clear context from this session for every memory.N)r	   clear)r#   r$   s     r   r0   zCombinedMemory.clearR   s,    m 	 	FLLNNNN	 	r   )r   N)__name__
__module____qualname____doc__listr   __annotations__r   classmethodr   r    propertystrr   dictr   r'   r.   r0    r   r   r   r   
   sv        55:@_Z  J 
j	   [ ! " _Z  
D$4 
j9I 
 
 
 [ ! 
 	 $s) 	  	  	  X	 DcN tCH~    14S> 1DcN 1t 1 1 1 1     r   r   )
r   typingr   pydanticr   langchain_classic.base_memoryr   $langchain_classic.memory.chat_memoryr   r   r;   r   r   <module>r@      s           $ $ $ $ $ $ 4 4 4 4 4 4 ? ? ? ? ? ?K K K K KZ K K K K Kr   