a
    ~gb                     @  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/)since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.Humanstrhuman_prefix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   predictselfr!   r"   r&   chain r+   ]/var/www/html/emsaiapi.evdpl.com/venv/lib/python3.9/site-packages/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   apredictr(   r+   r+   r,   apredict_new_summary1   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   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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 )#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
   intr   )r   chat_memoryr;   kwargsr#   c                K  sR   | f ||d|}t dt|jj|D ]$}||jj|||  |j|_q(|S )N)r   r=   r   )rangelenr=   r!   r-   r7   )clsr   r=   r;   r>   objir+   r+   r,   from_messagesQ   s    	z'ConversationSummaryMemory.from_messagesz	List[str])r#   c                 C  s   | j gS )zMWill always return list of memory variables.

        :meta private:
        )r9   r)   r+   r+   r,   memory_variablesa   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)return_messagesr    r7   r9   )r)   rG   r7   r+   r+   r,   load_memory_variablesi   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 .)input_variablesset
ValueError)rA   rK   Zprompt_variablesexpected_keysr+   r+   r,   validate_prompt_input_variablesq   s    
z9ConversationSummaryMemory.validate_prompt_input_variableszDict[str, str]None)rG   outputsr#   c                   s.   t  || | | jjdd | j| _dS )z.Save context from this conversation to buffer.N)supersave_contextr-   r=   r!   r7   )r)   rG   rS   	__class__r+   r,   rV   }   s    z&ConversationSummaryMemory.save_contextc                   s   t    d| _dS )zClear memory contents.r6   N)rU   clearr7   rE   rW   r+   r,   rY      s    
zConversationSummaryMemory.clear)r0   r1   r2   r3   r7   r4   r9   classmethodrD   propertyrF   rJ   r   rQ   rV   rY   __classcell__r+   r+   rW   r,   r5   >   s   
	r5   N)$
__future__r   typingr   r   r   r   langchain_core._apir   langchain_core.cachesr   langchain_core.callbacksr	   langchain_core.chat_historyr
   langchain_core.language_modelsr   langchain_core.messagesr   r   r   langchain_core.promptsr   langchain_core.utilsr   pydanticr   langchain.chains.llmr   langchain.memory.chat_memoryr   langchain.memory.promptr   r   r5   model_rebuildr+   r+   r+   r,   <module>   s4   "D