
    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    ]/var/www/html/eduruby.in/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,!....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_variablesC   s     ''5577%%+((1K1K(L1N $f,F &L,!....L
 .. 8s   BBA5Bvaluesc                 p    |d   j                   }ddh}|t        |      k7  rd| d| d}t        |      |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_keysmsgs        r   validate_prompt_input_variablesz?ConversationSummaryBufferMemory.validate_prompt_input_variablesU   s[     "(+;;"K0C 011L#$$9-K  S/!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   rC   z,ConversationSummaryBufferMemory.save_contextb   s    VW-

r   c                 v   K   t         |   ||       d{    | j                          d{    y7 7 w)z=Asynchronously save context from this conversation to buffer.N)rB   asave_contextaprunerE   s      r   rH   z-ConversationSummaryBufferMemory.asave_contextg   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   rD   z%ConversationSummaryBufferMemory.prunep   s    !!**!XXBB6J 4 44M$t';';;$$VZZ]3%)XX%J%J6%R" %t';';; *.)A)A***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*   rK   rL   r   rM   rN   apredict_new_summaryr   rP   s       r   rI   z&ConversationSummaryBufferMemory.aprune~   s     !!**!XXBB6J 4 44M$t';';;$$VZZ]3%)XX%J%J6%R" %t';';; 04/H/H**0 *D& 5
*s   BCC>C
?Cc                 0    t         |           d| _        y)zClear memory contents.r   N)rB   clearr   r   rF   s    r   rV   z%ConversationSummaryBufferMemory.clear   s    %'"r   c                 L   K   t         |           d{    d| _        y7 w)z%Asynchronously clear memory contents.Nr   )rB   aclearr   rW   s    r   rY   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?   rC   rH   rD   rI   rV   rY   __classcell__)rF   s   @r   r   r      sh     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 
S#X c3h 
	(
( (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>rl      sH     * B ) 7 4 
	G	A(no A(A(r   