
    h	                     v    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y)    )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                       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/eduruby.in/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   listr   r   r%   dictr(   r,   __classcell__)r2   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   langchain_core._apir   langchain_core.language_modelsr   langchain_core.messagesr   r   langchain.memory.chat_memoryr   r    r   r   <module>rD      sC     * < B 7 
	G	6SN 6S6Sr   