
    h                     R    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	y)    N)Any)
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 ]H  }|j                  |j                        }|rd| d}t        |      |t        |j                        z  }J |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         W/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain/memory/combined.pycheck_repeated_memory_variablez-CombinedMemory.check_repeated_memory_variable   ss     #&% 	7C#001E1EFG)' 3M M  !o%S!5!566M	7     c                     |D ]:  }t        |t              s|j                  !t        j                  d| 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    )
stacklevel)
isinstancer   	input_keywarningswarn)r   r
   r   s      r   check_input_keyzCombinedMemory.check_input_key#   sM      	C#~.3==3H''*e-  !		 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_variables1   s<     	:mm 	=F##F$;$;<	=  r   inputsc                     i }| j                   D ]E  }|j                  |      }|j                         D ]  \  }}||v rd| d}t        |      |||<   ! G |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=   sx    &( mm 	)F//7D"jjl )
U+%)#.QRC$S/)#(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_contextL   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.clearR   s    mm 	FLLN	r   )r   N)__name__
__module____qualname____doc__listr   __annotations__r   classmethodr   r    propertystrr   dictr   r'   r.   r0    r   r   r   r   
   s    5:@Z J 
j	  !" Z 
D$4 
j9I 
  !
 	 $s) 	  	 DcN tCH~ 14S> 1DcN 1t 1r   r   )
r   typingr   langchain_core.memoryr   pydanticr   langchain.memory.chat_memoryr   r   r;   r   r   <module>r@      s"      , $ 7KZ Kr   