a
    agb                     @  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                   @  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&   f/var/www/html/cobodadashboardai.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   Z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_memoryr5   kwargsr   c                K  sR   | f ||d|}t dt|jj|D ]$}||jj|||  |j|_q(|S )N)r   r7   r   )rangelenr7   r   r(   r1   )clsr   r7   r5   r8   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:
        )r3   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)Zreturn_messagesr   r1   r3   )r$   rA   r1   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 .)Zinput_variablesset
ValueError)r;   rD   Zprompt_variablesZexpected_keysr&   r&   r'   validate_prompt_input_variablesq   s    
z9ConversationSummaryMemory.validate_prompt_input_variableszDict[str, str]None)rA   outputsr   c                   s.   t  || | | jjdd | j| _dS )z.Save context from this conversation to buffer.N)supersave_contextr(   r7   r   r1   )r$   rA   rJ   	__class__r&   r'   rM   }   s    z&ConversationSummaryMemory.save_contextc                   s   t    d| _dS )zClear memory contents.r0   N)rL   clearr1   r?   rN   r&   r'   rP      s    
zConversationSummaryMemory.clear)r*   r+   r,   r-   r1   r.   r3   classmethodr>   propertyr@   rC   r   rH   rM   rP   __classcell__r&   r&   rN   r'   r/   >   s   
	r/   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   r/   Zmodel_rebuildr&   r&   r&   r'   <module>   s4   "D