
    h                       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y)    )annotations)Any)
deprecated)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                  |    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y)SummarizerMixinzMixin for summarizer.Humanstrhuman_prefixAI	ai_prefixr   llmr   promptztype[BaseMessage]summary_message_clsc                    t        || j                  | j                        }t        | j                  | j
                        }|j                  ||      S N)r   r   )r   r   )summary	new_lines)r
   r   r   r   r   r   predictselfmessagesexisting_summaryr!   chains        V/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langchain/memory/summary.pypredict_new_summaryz#SummarizerMixin.predict_new_summary#   sK    
 &**nn
	 TXXdkk:}}%5}KK    c                   K   t        || j                  | j                        }t        | j                  | j
                        }|j                  ||       d {   S 7 wr   )r
   r   r   r   r   r   apredictr#   s        r(   apredict_new_summaryz$SummarizerMixin.apredict_new_summary1   sU     
 &**nn
	 TXXdkk:^^,<	^RRRRs   AA#A!A#N)r%   zlist[BaseMessage]r&   r   returnr   )__name__
__module____qualname____doc__r   __annotations__r   r   r   r	   r   r)   r-    r*   r(   r   r      s      L#Is	!/F/-:*:L#L L 
	LS#S S 
	Sr*   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_stepc                    | d||d|}t        dt        |j                  j                        |      D ]=  }|j	                  |j                  j                  |||z    |j
                        |_        ? |S )N)r   chat_memoryr   r4   )rangelenr>   r%   r)   r8   )clsr   r>   r<   kwargsobjis          r(   from_messagesz'ConversationSummaryMemory.from_messagesS   sx     =c{=f=q#coo667H 	A00((Q-?@

CJ	
 
r*   c                    | j                   gS )zMWill always return list of memory variables.

        :meta private:
        )r:   )r$   s    r(   memory_variablesz*ConversationSummaryMemory.memory_variablesd   s       r*   c                    | j                   r| j                  | j                        g}n| j                  }| j                  |iS )zReturn history buffer.)content)return_messagesr   r8   r:   )r$   inputsr8   s      r(   load_memory_variablesz/ConversationSummaryMemory.load_memory_variablesl   s=    33DKK3HIF[[F((r*   c                p    |d   j                   }ddh}|t        |      k7  rd| d| d}t        |      |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   valuesprompt_variablesexpected_keysmsgs        r(   validate_prompt_input_variablesz9ConversationSummaryMemory.validate_prompt_input_variablest   s[     "(+;;"K0C 011L#$$9-K  S/!r*   c                    t         |   ||       | j                  | j                  j                  dd | j
                        | _        y)z.Save context from this conversation to buffer.N)supersave_contextr)   r>   r%   r8   )r$   rK   outputs	__class__s      r(   rZ   z&ConversationSummaryMemory.save_context   sA    VW-..%%bc*KK
r*   c                0    t         |           d| _        y)zClear memory contents.r7   N)rY   clearr8   )r$   r\   s    r(   r^   zConversationSummaryMemory.clear   s    r*   )
r   r   r>   r   r<   intrB   r   r.   r6   )r.   z	list[str])rK   dict[str, Any]r.   r`   )rR   dictr.   ra   )rK   r`   r[   zdict[str, str]r.   None)r.   rb   )r/   r0   r1   r2   r8   r3   r:   classmethodrE   propertyrG   rL   r   rV   rZ   r^   __classcell__)r\   s   @r(   r6   r6   @   s     FCJ   ,
   
#   ! !) 
 

 r*   r6   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   langchain.chains.llmr   langchain.memory.chat_memoryr   langchain.memory.promptr   r   r6   r4   r*   r(   <module>rr      s    "  * > < Q Q 5 )  ) 7 2 
	d	#Si #S#SL 
	G	D DDr*   