U
    h#                     @  s   d dl mZ d dlmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZ d dlmZ d dl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dG dd deZG dd deeZdS )    )annotations)AnyDictListType)
deprecated)BaseChatMessageHistory)BaseLanguageModel)BaseMessageSystemMessageget_buffer_string)BasePromptTemplate)	BaseModel)pre_init)LLMChain)BaseChatMemory)SUMMARY_PROMPTz0.2.12z1.0zRefer here for how to incorporate summaries of conversation history: https://langchain-ai.github.io/langgraph/how-tos/memory/add-summary-conversation-history/)ZsinceZremovalmessagec                   @  sn   e Zd ZU dZdZded< dZded< ded< eZd	ed
< e	Z
ded< ddddddZddddddZdS )SummarizerMixinzMixin for summarizer.ZHumanstrhuman_prefixZAI	ai_prefixr	   llmr   promptzType[BaseMessage]summary_message_clszList[BaseMessage])messagesexisting_summaryreturnc                 C  s0   t || j| jd}t| j| jd}|j||dS N)r   r   )r   r   )summary	new_lines)r   r   r   r   r   r   Zpredictselfr   r   r    chain r$   </tmp/pip-unpacked-wheel-bo69hh5q/langchain/memory/summary.pypredict_new_summary#   s    z#SummarizerMixin.predict_new_summaryc                   s6   t || j| jd}t| j| jd}|j||dI d H S r   )r   r   r   r   r   r   Zapredictr!   r$   r$   r%   apredict_new_summary/   s    z$SummarizerMixin.apredict_new_summaryN)__name__
__module____qualname____doc__r   __annotations__r   r   r   r   r   r&   r'   r$   r$   r$   r%   r      s   
	r   c                      s   e Zd ZU dZdZded< dZded< eddd	d
ddd dddZe	ddddZ
dddddZedddddZdddd fdd Zdd fd!d"Z  ZS )#ConversationSummaryMemoryz'Conversation summarizer to chat memory. r   bufferhistory
memory_key   )summarize_stepr	   r   intr   )r   chat_memoryr3   kwargsr   c                K  sR   | f ||d|}t dt|jj|D ]$}||jj|||  |j|_q(|S )N)r   r5   r   )rangelenr5   r   r&   r/   )clsr   r5   r3   r6   objir$   r$   r%   from_messagesB   s    	 z'ConversationSummaryMemory.from_messagesz	List[str])r   c                 C  s   | j gS )zMWill always return list of memory variables.

        :meta private:
        )r1   r"   r$   r$   r%   memory_variablesR   s    z*ConversationSummaryMemory.memory_variableszDict[str, Any])inputsr   c                 C  s(   | j r| j| jdg}n| j}| j|iS )zReturn history buffer.)content)Zreturn_messagesr   r/   r1   )r"   r?   r/   r$   r$   r%   load_memory_variablesZ   s    z/ConversationSummaryMemory.load_memory_variablesr   )valuesr   c                 C  s8   |d j }ddh}|t|kr4td| d| d|S )z4Validate that prompt input variables are consistent.r   r   r    z:Got unexpected prompt input variables. The prompt expects z, but it should have .)Zinput_variablesset
ValueError)r9   rB   Zprompt_variablesZexpected_keysr$   r$   r%   validate_prompt_input_variablesb   s    
z9ConversationSummaryMemory.validate_prompt_input_variableszDict[str, str]None)r?   outputsr   c                   s.   t  || | | jjdd | j| _dS )z.Save context from this conversation to buffer.N)supersave_contextr&   r5   r   r/   )r"   r?   rH   	__class__r$   r%   rK   n   s
     z&ConversationSummaryMemory.save_contextc                   s   t    d| _dS )zClear memory contents.r.   N)rJ   clearr/   r=   rL   r$   r%   rN   u   s    
zConversationSummaryMemory.clear)r(   r)   r*   r+   r/   r,   r1   classmethodr<   propertyr>   rA   r   rF   rK   rN   __classcell__r$   r$   rL   r%   r-   <   s   
r-   N)
__future__r   typingr   r   r   r   Zlangchain_core._apir   Zlangchain_core.chat_historyr   Zlangchain_core.language_modelsr	   Zlangchain_core.messagesr
   r   r   Zlangchain_core.promptsr   Zlangchain_core.pydantic_v1r   Zlangchain_core.utilsr   Zlangchain.chains.llmr   Zlangchain.memory.chat_memoryr   Zlangchain.memory.promptr   r   r-   r$   r$   r$   r%   <module>   s$   "