o
    Zhb                     @  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 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!eddddG dd dee!Z"e"#  dS )    )annotations)AnyDictListType)
deprecated)	BaseCache)	Callbacks)BaseChatMessageHistory)BaseLanguageModel)BaseMessageSystemMessageget_buffer_string)BasePromptTemplate)pre_init)	BaseModel)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                   @  s^   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ZdddZdS )SummarizerMixinzMixin for summarizer.ZHumanstrhuman_prefixZAI	ai_prefixr   llmr   promptzType[BaseMessage]summary_message_clsmessagesList[BaseMessage]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'   O/var/www/html/lang_env/lib/python3.10/site-packages/langchain/memory/summary.pypredict_new_summary%   s   z#SummarizerMixin.predict_new_summaryc                   s8   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_summary1   s   z$SummarizerMixin.apredict_new_summaryN)r   r   r   r   r    r   )__name__
__module____qualname____doc__r   __annotations__r   r   r   r   r   r)   r*   r'   r'   r'   r(   r      s   
 	
r   z0.3.1z1.0.0z_Please see the migration guide at: https://python.langchain.com/docs/versions/migrating_memory/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Ze	d'ddZ
d(ddZed)ddZd* fd"d#Zd+ fd$d%Z  ZS ),ConversationSummaryMemoryzContinually summarizes the conversation history.

    The summary is updated after each conversation turn.
    The implementations returns a summary of the conversation history which
    can be used to provide context to the model.
     r   bufferhistory
memory_key   )summarize_stepr   r   chat_memoryr
   r6   intkwargsr   r    c                K  sR   | d||d|}t dt|jj|D ]}||jj|||  |j|_q|S )N)r   r7   r   r'   )rangelenr7   r   r)   r2   )clsr   r7   r6   r9   objir'   r'   r(   from_messagesQ   s   	z'ConversationSummaryMemory.from_messages	List[str]c                 C  s   | j gS )zMWill always return list of memory variables.

        :meta private:
        )r4   r%   r'   r'   r(   memory_variablesa   s   z*ConversationSummaryMemory.memory_variablesinputsDict[str, Any]c                 C  s(   | j r| j| jdg}n| j}| j|iS )zReturn history buffer.)content)Zreturn_messagesr   r2   r4   )r%   rC   r2   r'   r'   r(   load_memory_variablesi   s   
z/ConversationSummaryMemory.load_memory_variablesvaluesr   c                 C  s8   |d j }ddh}|t|krt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)r<   rG   Zprompt_variablesZexpected_keysr'   r'   r(   validate_prompt_input_variablesq   s   
z9ConversationSummaryMemory.validate_prompt_input_variablesoutputsDict[str, str]Nonec                   s.   t  || | | jjdd | j| _dS )z.Save context from this conversation to buffer.N)supersave_contextr)   r7   r   r2   )r%   rC   rL   	__class__r'   r(   rQ   }   s   
z&ConversationSummaryMemory.save_contextc                   s   t    d| _dS )zClear memory contents.r1   N)rP   clearr2   rA   rR   r'   r(   rT      s   

zConversationSummaryMemory.clear)
r   r   r7   r
   r6   r8   r9   r   r    r0   )r    r@   )rC   rD   r    rD   )rG   r   r    r   )rC   rD   rL   rM   r    rN   )r    rN   )r+   r,   r-   r.   r2   r/   r4   classmethodr?   propertyrB   rF   r   rK   rQ   rT   __classcell__r'   r'   rR   r(   r0   >   s   
 	
r0   N)$
__future__r   typingr   r   r   r   Zlangchain_core._apir   Zlangchain_core.cachesr   Zlangchain_core.callbacksr	   Zlangchain_core.chat_historyr
   Zlangchain_core.language_modelsr   Zlangchain_core.messagesr   r   r   Zlangchain_core.promptsr   Zlangchain_core.utilsr   Zpydanticr   Zlangchain.chains.llmr   Zlangchain.memory.chat_memoryr   Zlangchain.memory.promptr   r   r0   Zmodel_rebuildr'   r'   r'   r(   <module>   s6    "D