o
    Zh	                     @   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defddZedefddZ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 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   T/var/www/html/lang_env/lib/python3.10/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inputsc                 C   s   | j | jiS )zReturn history buffer.)r   r   )r   r   r   r   r   load_memory_variables:   s   z3ConversationTokenBufferMemory.load_memory_variablesoutputsNc                    sl   t  || | jj}| j|}|| jkr2g }|| jkr4||d | j|}|| jksdS dS d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"   
 	"2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    