
    KKi                       S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
JrJrJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  \" SSSS9 " S S\5      5       r\" SSSS9 " S S\\5      5       rg)    )annotations)Any)
deprecated)BaseChatMessageHistory)BaseLanguageModel)BaseMessageSystemMessageget_buffer_string)BasePromptTemplate)pre_init)	BaseModel)override)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                      \ rS rSr% SrSrS\S'   SrS\S'   S\S	'   \r	S
\S'   \
rS\S'         SS jr      SS jrSrg)SummarizerMixin   zMixin for summarizer.Humanstrhuman_prefixAI	ai_prefixr   llmr   promptztype[BaseMessage]summary_message_clsc                    [        UU R                  U R                  S9n[        U R                  U R
                  S9nUR                  X#S9$ )Predict a new summary based on the messages and existing summary.

Args:
    messages: List of messages to summarize.
    existing_summary: Existing summary to build upon.

Returns:
    A new summary string.
r   r   r   r   summary	new_lines)r
   r   r   r   r   r   predictselfmessagesexisting_summaryr&   chains        b/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/langchain_classic/memory/summary.pypredict_new_summary#SummarizerMixin.predict_new_summary$   sI     &**nn
	 TXXdkk:}}%5}KK    c                   #    [        UU R                  U R                  S9n[        U R                  U R
                  S9nUR                  X#S9I Sh  vN $  N7f)r!   r"   r#   r$   N)r
   r   r   r   r   r   apredictr(   s        r-   apredict_new_summary$SummarizerMixin.apredict_new_summary;   sR      &**nn
	 TXXdkk:^^,<^RRRRs   AAAA N)r*   zlist[BaseMessage]r+   r   returnr   )__name__
__module____qualname____firstlineno____doc__r   __annotations__r   r   r   r	   r   r.   r3   __static_attributes__r5   r0   r-   r   r      s      L#Is	!/F/-:*:L#L L 
	L.S#S S 
	Sr0   r   z0.3.1z1.0.0z_Please see the migration guide at: https://python.langchain.com/docs/versions/migrating_memory/c                     ^  \ rS rSr% SrSrS\S'   SrS\S'   \SS	.         SS
 jj5       r	\
SS j5       r\SS j5       r\SS j5       rSU 4S jjrSU 4S jjrSrU =r$ )ConversationSummaryMemoryS   zContinually 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_stepc                   U " SXS.UD6n[        S[        UR                  R                  5      U5       H=  nUR	                  UR                  R                  XfU-    UR
                  5      Ul        M?     U$ )a}  Create a ConversationSummaryMemory from a list of messages.

Args:
    llm: The language model to use for summarization.
    chat_memory: The chat history to summarize.
    summarize_step: Number of messages to summarize at a time.
    **kwargs: Additional keyword arguments to pass to the class.

Returns:
    An instance of ConversationSummaryMemory with the summarized history.
)r   chat_memoryr   r5   )rangelenrH   r*   r.   rB   )clsr   rH   rF   kwargsobjis          r-   from_messages'ConversationSummaryMemory.from_messagesf   sp    ( =c=f=q#coo667HA00((-?@

CJ I
 
r0   c                    U R                   /$ )z,Will always return list of memory variables.)rD   )r)   s    r-   memory_variables*ConversationSummaryMemory.memory_variables   s       r0   c                    U R                   (       a  U R                  U R                  S9/nOU R                  nU R                  U0$ )zReturn history buffer.)content)return_messagesr   rB   rD   )r)   inputsrB   s      r-   load_memory_variables/ConversationSummaryMemory.load_memory_variables   s?     33DKK3HIF[[F((r0   c                r    US   R                   nSS1nU[        U5      :w  a  SU SU S3n[        U5      eU$ )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)rK   valuesprompt_variablesexpected_keysmsgs        r-   validate_prompt_input_variables9ConversationSummaryMemory.validate_prompt_input_variables   s[     "(+;;"K0C 011L#$$9-K  S/!r0   c                   > [         TU ]  X5        U R                  U R                  R                  SS U R
                  5      U l        g)z.Save context from this conversation to buffer.N)supersave_contextr.   rH   r*   rB   )r)   rW   outputs	__class__s      r-   rh   &ConversationSummaryMemory.save_context   s?    V-..%%bc*KK
r0   c                0   > [         TU ]  5         SU l        g)zClear memory contents.rA   N)rg   clearrB   )r)   rj   s    r-   rm   ConversationSummaryMemory.clear   s    r0   )rB   )
r   r   rH   r   rF   intrL   r   r6   r?   )r6   z	list[str])rW   dict[str, Any]r6   rp   )r_   dictr6   rq   )rW   rp   ri   zdict[str, str]r6   None)r6   rr   )r7   r8   r9   r:   r;   rB   r<   rD   classmethodrO   propertyrR   r   rX   r   rc   rh   rm   r=   __classcell__)rj   s   @r-   r?   r?   S   s     FCJ   ,
   
# 6 ! ! ) ) 
 

 r0   r?   N)
__future__r   typingr   langchain_core._apir   langchain_core.chat_historyr   langchain_core.language_modelsr   langchain_core.messagesr   r	   r
   langchain_core.promptsr   langchain_core.utilsr   pydanticr   typing_extensionsr   langchain_classic.chains.llmr   $langchain_classic.memory.chat_memoryr   langchain_classic.memory.promptr   r   r?   r5   r0   r-   <module>r      s    "  * > < Q Q 5 )  & 1 ? : 
	d	5Si 5S5Sp 
	G	M MMr0   