
    A'h~                         d dl mZmZ d dlmZ d dlmZmZ d dlm	Z	 d dl
mZ d dlmZ  eddd	
       G d dee             Zy)    )AnyUnion)
deprecated)BaseMessageget_buffer_string)pre_init)BaseChatMemory)SummarizerMixinz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<   dZ	eed<   e
deeee   f   fd	       Zdeeee   f   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   fdZededefd       Zdeeef   deeef   ddf fdZdeeef   deeef   ddf fdZddZddZd fdZd fdZ xZS )ConversationSummaryBufferMemorya  Buffer with summarizer for storing conversation memory.

    Provides a running summary of the conversation together with 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.
    i  max_token_limit moving_summary_bufferhistory
memory_keyreturnc                 >    | j                  i       | j                     S )zString buffer of memory.)load_memory_variablesr   selfs    f/home/kushmeetdev/Regenta/Chatbot/venv/lib/python3.12/site-packages/langchain/memory/summary_buffer.pybufferz&ConversationSummaryBufferMemory.buffer   s     ))"-doo>>    c                 ^   K   | j                  i        d{   }|| j                     S 7 w)zAsync memory buffer.N)aload_memory_variablesr   )r   memory_variabless     r   abufferz'ConversationSummaryBufferMemory.abuffer$   s/     !%!<!<R!@@00 As   -+-c                     | j                   gS )zMWill always return list of memory variables.

        :meta private:
        )r   r   s    r   r   z0ConversationSummaryBufferMemory.memory_variables)   s       r   inputsc                    | j                   j                  }| j                  dk7  r"| j                  | j                        g}||z   }| j                  r|}n"t        || j                  | j                        }| j                  |iS )zReturn history buffer.r   contenthuman_prefix	ai_prefix)	chat_memorymessagesr   summary_message_clsreturn_messagesr   r'   r(   r   r   r"   r   first_messagesfinal_buffers        r   r   z5ConversationSummaryBufferMemory.load_memory_variables1   s    !!**%%+((1K1K(L1N $f,F &L,T%6%6$..L ..r   c                 2  K   | j                   j                          d{   }| j                  dk7  r"| j                  | j                        g}||z   }| j                  r|}n"t        || j                  | j                        }| j                  |iS 7 tw)zHAsynchronously return key-value pairs given the text input to the chain.Nr   r$   r&   )	r)   aget_messagesr   r+   r,   r   r'   r(   r   r-   s        r   r   z6ConversationSummaryBufferMemory.aload_memory_variablesA   s     ''5577%%+((1K1K(L1N $f,F &L,T%6%6$..L .. 8s   BBA5Bvaluesc                 l    |d   j                   }ddh}|t        |      k7  rt        d| d| d      |S )z4Validate that prompt input variables are consistent.promptsummary	new_linesz:Got unexpected prompt input variables. The prompt expects z, but it should have .)input_variablesset
ValueError)clsr2   prompt_variablesexpected_keyss       r   validate_prompt_input_variablesz?ConversationSummaryBufferMemory.validate_prompt_input_variablesQ   sY     "(+;;"K0C 011L#$$9-K  r   outputsNc                 F    t         |   ||       | j                          y)z.Save context from this conversation to buffer.N)supersave_contextpruner   r"   r?   	__class__s      r   rB   z,ConversationSummaryBufferMemory.save_context]   s    VW-

r   c                 v   K   t         |   ||       d{    | j                          d{    y7 7 w)z=Asynchronously save context from this conversation to buffer.N)rA   asave_contextaprunerD   s      r   rG   z-ConversationSummaryBufferMemory.asave_contextb   s6      g#FG444kkm 	5s   959799c                    | j                   j                  }| j                  j                  |      }|| j                  kD  r~g }|| j                  kD  rK|j                  |j                  d             | j                  j                  |      }|| j                  kD  rK| j                  || j                        | _        yy)z*Prune buffer if it exceeds max token limitr   N)	r)   r*   llmget_num_tokens_from_messagesr   appendpoppredict_new_summaryr   r   r   curr_buffer_lengthpruned_memorys       r   rC   z%ConversationSummaryBufferMemory.prunei   s    !!**!XXBB6J 4 44M$t';';;$$VZZ]3%)XX%J%J6%R" %t';';; *.)A)At99*D& 5r   c                   K   | j                   j                  }| j                  j                  |      }|| j                  kD  rg }|| j                  kD  rK|j                  |j                  d             | j                  j                  |      }|| j                  kD  rK| j                  || j                         d{   | _        yy7 w)z9Asynchronously prune buffer if it exceeds max token limitr   N)	r)   r*   rJ   rK   r   rL   rM   apredict_new_summaryr   rO   s       r   rH   z&ConversationSummaryBufferMemory.aprunev   s     !!**!XXBB6J 4 44M$t';';;$$VZZ]3%)XX%J%J6%R" %t';';; 04/H/Ht990 *D& 5
*s   BCC>C
?Cc                 0    t         |           d| _        y)zClear memory contents.r   N)rA   clearr   r   rE   s    r   rU   z%ConversationSummaryBufferMemory.clear   s    %'"r   c                 L   K   t         |           d{    d| _        y7 w)z%Asynchronously clear memory contents.Nr   )rA   aclearr   rV   s    r   rX   z&ConversationSummaryBufferMemory.aclear   s$     gn%'" 	s   $"$)r   N)__name__
__module____qualname____doc__r   int__annotations__r   strr   propertyr   listr   r   r    r   dictr   r   r   r   r>   rB   rG   rC   rH   rU   rX   __classcell__)rE   s   @r   r   r      sd     OS!#3#J?c4#445 ? ?1uS${*;%;< 1
 !$s) ! !/DcN /tCH~ / /4S> /d3PS8n /  	T 	d 	 	4S> DcN t 
38n/3CH~	(
( (r   r   N)typingr   r   langchain_core._apir   langchain_core.messagesr   r   langchain_core.utilsr   langchain.memory.chat_memoryr	   langchain.memory.summaryr
   r    r   r   <module>rk      sH     * B ) 7 4 
	G	x(no x(x(r   