
    ih	                     ~    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y)    )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                       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    | j                   r| j                  S | j                  S )zString buffer of memory.)return_messagesbuffer_as_messagesbuffer_as_strselfs    [/var/www/html/dev/engine/venv/lib/python3.12/site-packages/langchain/memory/token_buffer.pybufferz$ConversationTokenBufferMemory.buffer   s#     +/*>*>t&&VDDVDV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$   s0     !%%**nn
 	
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                 2    | j                   | j                  iS )zReturn history buffer.)r   r    )r   r(   s     r   load_memory_variablesz3ConversationTokenBufferMemory.load_memory_variables:   s    --r!   outputsNc                 b   t         |   ||       | j                  j                  }| j                  j                  |      }|| j                  kD  r^g }|| j                  kD  rL|j                  |j                  d             | j                  j                  |      }|| j                  kD  rKyyy)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-!!**!XXBB6J 4 44M$t';';;$$VZZ]3%)XX%J%J6%R" %t';';; 5r!   )__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 
s 
 
 )D$5 ) ) !$s) ! !.DcN .tCH~ .
S4S> 
SDcN 
St 
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      sF    " " * < B 7 
	G	6SN 6S6Sr!   