
    9|h                     ^    d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZ  G d de      Zy)    N)AnyDictListSet)
BaseMemory)field_validator)BaseChatMemoryc                      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y)CombinedMemoryz+Combining multiple memories' data together.memoriesvaluereturnc                     t               }|D ]F  }|j                  |j                        }|rt        d| d      |t        |j                        z  }H |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overlaps        X/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain/memory/combined.pycheck_repeated_memory_variablez-CombinedMemory.check_repeated_memory_variable   sq    
 #&% 	7C#001E1EFG )' 3M M  S!5!566M	7     c                     |D ]8  }t        |t              s|j                  !t        j                  d|        : |S )zHCheck that if memories are of type BaseChatMemory that input keys exist.zWWhen using CombinedMemory, input keys should be so the input is known.  Was not set on )
isinstancer	   	input_keywarningswarn)r   r   r   s      r   check_input_keyzCombinedMemory.check_input_key!   sI      	C#~.==(MM++.%1	 r   c                 d    	 g }| j                   D ]  }|j                  |j                          |S )z5All the memory variables that this instance provides.)r   extendr   )selfr   memorys      r   r   zCombinedMemory.memory_variables/   s<     	:mm 	=F##F$;$;<	=  r   inputsc                     i }| j                   D ]C  }|j                  |      }|j                         D ]  \  }}||v rt        d| d      |||<    E |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   s          r   r'   z$CombinedMemory.load_memory_variables;   s{    &( mm 	)F//7D"jjl )
U+%$'u,OP  $)C )	) r   outputsNc                 J    | j                   D ]  }|j                  ||        y)z0Save context from this session for every memory.N)r   save_context)r#   r%   r,   r$   s       r   r.   zCombinedMemory.save_contextK   s'     mm 	1F0	1r   c                 F    | j                   D ]  }|j                           y)z1Clear context from this session for every memory.N)r   clear)r#   r$   s     r   r0   zCombinedMemory.clearQ   s    mm 	FLLN	r   )r   N)__name__
__module____qualname____doc__r   r   __annotations__r   classmethodr   r    propertystrr   r   r   r'   r.   r0    r   r   r   r   
   s    5:@Z $	j	  ! Z 
D$4 
j9I 
  !
 	 $s) 	  	 DcN tCH~  14S> 1DcN 1t 1r   r   )r   typingr   r   r   r   langchain_core.memoryr   pydanticr   langchain.memory.chat_memoryr	   r   r9   r   r   <module>r>      s%     ' ' , $ 7JZ Jr   