
    9|h                         d dl mZmZ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DictList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/test/engine/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)clsr4   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$   rA   	__class__s      r   rD   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)rC   asave_contextaprunerF   s      r   rI   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   rE   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,   rL   rM   r   rN   rO   apredict_new_summaryr   rQ   s       r   rJ   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)rC   clearr   r   rG   s    r   rW   z%ConversationSummaryBufferMemory.clear   s    %'"r   c                 L   K   t         |           d{    d| _        y7 w)z%Asynchronously clear memory contents.Nr   )rC   aclearr   rX   s    r   rZ   z&ConversationSummaryBufferMemory.aclear   s$     gn%'" 	s   $"$)r   N)__name__
__module____qualname____doc__r   int__annotations__r   strr   propertyr   r   r   r   r"   r!   r   r   r   r    r
   r@   rD   rI   rE   rJ   rW   rZ   __classcell__)rG   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   r   r   langchain_core._apir   langchain_core.messagesr   r	   langchain_core.utilsr
   langchain.memory.chat_memoryr   langchain.memory.summaryr   r    r   r   <module>rk      sK    ) ) * B ) 7 4 
	G	x(no x(x(r   