o
    {qi                     @   sL   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 deZ	dS )    N)Any)
BaseMemory)field_validator)BaseChatMemoryc                   @   s   e Zd ZU dZee ed< 	 ededee dee fddZ	ededee dee fddZ
edee fd	d
Zdeeef deeef fddZdeeef deeef ddfddZdddZdS )CombinedMemoryz+Combining multiple memories' data together.memoriesvaluereturnc                 C   sF   t  }|D ]}||j}|rd| d}t||t |jO }q|S )NzThe same variables zL are found in multiplememory object, which is not allowed by CombinedMemory.)setintersectionmemory_variables
ValueError)clsr   Zall_variablesvaloverlapmsg r   `/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/langchain/memory/combined.pycheck_repeated_memory_variable   s   
z-CombinedMemory.check_repeated_memory_variablec                 C   s6   |D ]}t |tr|jdu rtjd| dd q|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   Z	input_keywarningswarn)r   r   r   r   r   r   check_input_key#   s   zCombinedMemory.check_input_keyc                 C   s"   	 g }| j D ]}||j q|S )z5All the memory variables that this instance provides.)r   extendr   )selfr   memoryr   r   r   r   1   s
   
zCombinedMemory.memory_variablesinputsc                 C   sT   i }| j D ]"}||}| D ]\}}||v r"d| d}t||||< qq|S )z Load all vars from sub-memories.zThe variable z# is repeated in the CombinedMemory.)r   load_memory_variablesitemsr   )r   r   Zmemory_datar   datakeyr   r   r   r   r   r   =   s   


z$CombinedMemory.load_memory_variablesoutputsNc                 C   s   | j D ]}||| qdS )z0Save context from this session for every memory.N)r   save_context)r   r   r#   r   r   r   r   r$   L   s   
zCombinedMemory.save_contextc                 C   s   | j D ]}|  qdS )z1Clear context from this session for every memory.N)r   clear)r   r   r   r   r   r%   R   s   

zCombinedMemory.clear)r	   N)__name__
__module____qualname____doc__listr   __annotations__r   classmethodr   r   propertystrr   dictr   r   r$   r%   r   r   r   r   r   
   s&   
 "&r   )
r   typingr   Zlangchain_core.memoryr   Zpydanticr   Zlangchain.memory.chat_memoryr   r   r   r   r   r   <module>   s    