a
    ag	                     @   sj   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ edddd	G d
d deZdS )    )AnyDictList)
deprecated)BaseLanguageModel)BaseMessageget_buffer_string)BaseChatMemoryz0.3.1z1.0.0z_Please see the migration guide at: https://python.langchain.com/docs/versions/migrating_memory/)ZsinceZremovalmessagec                       s   e Zd ZU dZdZeed< dZeed< eed< dZ	eed< d	Z
eed
< eedddZeedddZeee dddZeee dddZeeef eeef dddZeeef eeef dd fddZ  ZS )ConversationTokenBufferMemoryzConversation chat memory with token limit.

    Keeps only the most recent messages in the conversation under the constraint
    that the total number of tokens in the conversation does not exceed a certain limit.
    ZHumanhuman_prefixZAI	ai_prefixllmhistory
memory_keyi  max_token_limit)returnc                 C   s   | j r| jS | jS )zString buffer of memory.)Zreturn_messagesbuffer_as_messagesbuffer_as_strself r   k/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain/memory/token_buffer.pybuffer   s    z$ConversationTokenBufferMemory.bufferc                 C   s   t | jj| j| jdS )z@Exposes the buffer as a string in case return_messages is False.)r   r   )r   chat_memorymessagesr   r   r   r   r   r   r   $   s
    z+ConversationTokenBufferMemory.buffer_as_strc                 C   s   | j jS )zIExposes the buffer as a list of messages in case return_messages is True.)r   r   r   r   r   r   r   -   s    z0ConversationTokenBufferMemory.buffer_as_messagesc                 C   s   | j gS )zMWill always return list of memory variables.

        :meta private:
        )r   r   r   r   r   memory_variables2   s    z.ConversationTokenBufferMemory.memory_variables)inputsr   c                 C   s   | j | jiS )zReturn history buffer.)r   r   )r   r   r   r   r   load_memory_variables:   s    z3ConversationTokenBufferMemory.load_memory_variablesN)r   outputsr   c                    s\   t  || | jj}| j|}|| jkrXg }|| jkrX||d | j|}q0dS )z6Save context from this conversation to buffer. Pruned.r   N)	supersave_contextr   r   r   Zget_num_tokens_from_messagesr   appendpop)r   r   r   r   Zcurr_buffer_lengthZpruned_memory	__class__r   r   r!   >   s    

z*ConversationTokenBufferMemory.save_context)__name__
__module____qualname____doc__r   str__annotations__r   r   r   r   intpropertyr   r   r   r   r   r   r   r   r   r!   __classcell__r   r   r$   r   r   
   s    
	 r   N)typingr   r   r   Zlangchain_core._apir   Zlangchain_core.language_modelsr   Zlangchain_core.messagesr   r   Zlangchain.memory.chat_memoryr	   r   r   r   r   r   <module>   s   