
    Ng	                         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	           G 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/)sinceremovalmessagec                   L    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            Zedefd            Z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 fdZ x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.
    Humanhuman_prefixAI	ai_prefixllmhistory
memory_keyi  max_token_limitreturnc                 ,    | j         r| j        n| j        S )zString buffer of memory.)return_messagesbuffer_as_messagesbuffer_as_strselfs    Y/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/memory/token_buffer.pybufferz$ConversationTokenBufferMemory.buffer   s     +/*>Vt&&DDVV    c                 N    t          | j        j        | j        | j                  S )z@Exposes the buffer as a string in case return_messages is False.)r   r   )r	   chat_memorymessagesr   r   r   s    r   r   z+ConversationTokenBufferMemory.buffer_as_str$   s/     !%*n
 
 
 	
r!   c                     | j         j        S )zIExposes the buffer as a list of messages in case return_messages is True.)r#   r$   r   s    r   r   z0ConversationTokenBufferMemory.buffer_as_messages-   s     ((r!   c                     | j         gS )zMWill always return list of memory variables.

        :meta private:
        )r   r   s    r   memory_variablesz.ConversationTokenBufferMemory.memory_variables2   s       r!   inputsc                     | j         | j        iS )zReturn history buffer.)r   r    )r   r(   s     r   load_memory_variablesz3ConversationTokenBufferMemory.load_memory_variables:   s    --r!   outputsNc                 j   t                                          ||           | j        j        }| j                            |          }|| j        k    r\g }|| j        k    rQ|                    |                    d                     | j                            |          }|| j        k    MdS dS dS )z6Save context from this conversation to buffer. Pruned.r   N)	supersave_contextr#   r$   r   get_num_tokens_from_messagesr   appendpop)r   r(   r+   r    curr_buffer_lengthpruned_memory	__class__s         r   r.   z*ConversationTokenBufferMemory.save_context>   s    VW---!*!XBB6JJ 444M$t';;;$$VZZ]]333%)X%J%J6%R%R" %t';;;;; 54;;r!   )__name__
__module____qualname____doc__r   str__annotations__r   r   r   r   intpropertyr   r    r   r   r   r   r'   r   r*   r.   __classcell__)r4   s   @r   r   r   
   s           L#Is	JOSW W W W XW 
s 
 
 
 X
 )D$5 ) ) ) X) !$s) ! ! ! X!.DcN .tCH~ . . . .
S4S> 
SDcN 
St 
S 
S 
S 
S 
S 
S 
S 
S 
S 
Sr!   r   N)typingr   r   r   langchain_core._apir   langchain_core.language_modelsr   langchain_core.messagesr   r	   langchain.memory.chat_memoryr
   r    r!   r   <module>rD      s    " " " " " " " " " " * * * * * * < < < < < < B B B B B B B B 7 7 7 7 7 7 
	G	  6S 6S 6S 6S 6SN 6S 6S 6S 6S 6Sr!   