
    Ng                     f    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dS )    N)AnyDictListSet)
BaseMemory)field_validator)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 ]H}|                    |j                  }|rt          d| d          |t          |j                  z  }I|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        U/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/memory/combined.pycheck_repeated_memory_variablez-CombinedMemory.check_repeated_memory_variable   s    
 #&%% 	7 	7C#001EFFG  M' M M M   S!5666MM    c                 v    |D ]5}t          |t                    r|j        t          j        d|            6|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 )
isinstancer	   	input_keywarningswarn)r   r   r   s      r   check_input_keyzCombinedMemory.check_input_key!   s[      	 	C#~.. =(M1+.1 1  
 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_variables/   s>     	:m 	= 	=F##F$;<<<<r   inputsc                     i }| j         D ]M}|                    |          }|                                D ]!\  }}||v rt          d| d          |||<   "N|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    &( m 	) 	)F//77D"jjll ) )
U+%%$PPPP   $)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_contextK   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.clearQ   s,    m 	 	FLLNNNN	 	r   )r   N)__name__
__module____qualname____doc__r   r   __annotations__r   classmethodr   r    propertystrr   r   r   r'   r.   r0    r   r   r   r   
   st        55:@_Z  $	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   r   r   r   langchain_core.memoryr   pydanticr   langchain.memory.chat_memoryr	   r   r9   r   r   <module>r>      s     ' ' ' ' ' ' ' ' ' ' ' ' , , , , , , $ $ $ $ $ $ 7 7 7 7 7 7J J J J JZ J J J J Jr   