
    3fi.                         d dl 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 d dlmZ  edd	d
       G d dee             Zy)    )Any)
deprecated)BaseMessageget_buffer_string)pre_init)override)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   z  fd	       Zdeee   z  fd
Ze
dee   fd       Zedeeef   deeef   fd       Ze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    e/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/langchain_classic/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 )z,Will always return list of memory variables.)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_variables/   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_variablesB   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 limit.r   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)z:Asynchronously prune buffer if it exceeds max token limit.r   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   propertylistr   r   r    r   r   dictr   r   r   r   r?   rC   rH   rD   rI   rV   rY   __classcell__)rF   s   @r   r   r      s|     OS!#3#J?d;// ? ?1sT+%66 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   langchain_core._apir   langchain_core.messagesr   r   langchain_core.utilsr   typing_extensionsr   $langchain_classic.memory.chat_memoryr	    langchain_classic.memory.summaryr
   r    r   r   <module>rm      sK     * B ) & ? < 
	G	@(no @(@(r   