
    gh	                         d dl 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)
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    Z/var/www/FlaskApp/flask-venv/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   listr   r   r%   dictr(   r,   __classcell__)r2   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   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   