
    Ngb                    t   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           G d de                      Z! eddd           G 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                  f    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ZddZdS )SummarizerMixinzMixin for summarizer.Humanstrhuman_prefixAI	ai_prefixr   llmr   promptzType[BaseMessage]summary_message_clsmessagesList[BaseMessage]existing_summaryreturnc                    t          || j        | j                  }t          | j        | j                  }|                    ||          S N)r   r   )r    r!   )summary	new_lines)r   r   r   r   r    r!   predictselfr#   r%   r*   chains        T/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain/memory/summary.pypredict_new_summaryz#SummarizerMixin.predict_new_summary%   sU     &*n
 
 
	 TXdk:::}}%5}KKK    c                   K   t          || j        | j                  }t          | j        | j                  }|                    ||           d {V S r(   )r   r   r   r   r    r!   apredictr,   s        r/   apredict_new_summaryz$SummarizerMixin.apredict_new_summary1   sk       &*n
 
 
	 TXdk:::^^,<	^RRRRRRRRRr1   N)r#   r$   r%   r   r&   r   )__name__
__module____qualname____doc__r   __annotations__r   r   r!   r   r"   r0   r4    r1   r/   r   r      s           LI!/F////-:::::
L 
L 
L 
L
S 
S 
S 
S 
S 
Sr1   r   z0.3.1z1.0.0z_Please see the migration guide at: https://python.langchain.com/docs/versions/migrating_memory/c                       e Zd ZU dZdZded<   dZded<   eddd d            Ze	d!d            Z
d"dZed#d            Zd$ fdZd% fdZ x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   rB   intkwargsr   r&   c                    | d||d|}t          dt          |j        j                  |          D ]7}|                    |j        j        |||z            |j                  |_        8|S )N)r    rC   r   r:   )rangelenrC   r#   r0   r>   )clsr    rC   rB   rE   objis          r/   from_messagesz'ConversationSummaryMemory.from_messagesQ   s     c=c{==f==q#co677HH 	 	A00(Q-?)?@#* CJJ 
r1   	List[str]c                    | j         gS )zMWill always return list of memory variables.

        :meta private:
        )r@   )r-   s    r/   memory_variablesz*ConversationSummaryMemory.memory_variablesa   s       r1   inputsDict[str, Any]c                j    | j         r|                     | j                  g}n| j        }| j        |iS )zReturn history buffer.)content)return_messagesr"   r>   r@   )r-   rP   r>   s      r/   load_memory_variablesz/ConversationSummaryMemory.load_memory_variablesi   s>     	!33DK3HHIFF[F((r1   valuesr   c                z    |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 .)input_variablesset
ValueError)rI   rV   prompt_variablesexpected_keyss       r/   validate_prompt_input_variablesz9ConversationSummaryMemory.validate_prompt_input_variablesq   ss     "(+;"K0C 01111K#K K:GK K K   r1   outputsDict[str, str]Nonec                    t                                          ||           |                     | j        j        dd         | j                  | _        dS )z.Save context from this conversation to buffer.N)supersave_contextr0   rC   r#   r>   )r-   rP   r_   	__class__s      r/   re   z&ConversationSummaryMemory.save_context}   sN    VW---..%bcc*DK
 
r1   c                V    t                                                       d| _        dS )zClear memory contents.r=   N)rd   clearr>   )r-   rf   s    r/   rh   zConversationSummaryMemory.clear   s    r1   )
r    r   rC   r   rB   rD   rE   r   r&   r<   )r&   rM   )rP   rQ   r&   rQ   )rV   r   r&   r   )rP   rQ   r_   r`   r&   ra   )r&   ra   )r5   r6   r7   r8   r>   r9   r@   classmethodrL   propertyrO   rU   r   r^   re   rh   __classcell__)rf   s   @r/   r<   r<   >   s          FJ       [ ! ! ! X!) ) ) ) 	 	 	 X	
 
 
 
 
 
         r1   r<   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   r<   model_rebuildr:   r1   r/   <module>r{      s   " " " " " " ( ( ( ( ( ( ( ( ( ( ( ( * * * * * * 8 8 8 8 8 8 ; ; ; ; ; ; > > > > > > < < < < < < Q Q Q Q Q Q Q Q Q Q 5 5 5 5 5 5 ) ) ) ) ) )       ) ) ) ) ) ) 7 7 7 7 7 7 2 2 2 2 2 2 
	d	  S S S S Si S S SD 
	G	  A A A A A A A AH  ' ' ) ) ) ) )r1   