
    A'hP                    :   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 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jA                          y)    )annotations)Any)
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                  |    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        _/home/kushmeetdev/Regenta/Chatbot/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      sz      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   r6   )rangelenr@   r'   r+   r:   )clsr   r@   r>   kwargsobjis          r*   from_messagesz'ConversationSummaryMemory.from_messagesQ   sw     =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_variablesa   s       r,   c                    | j                   r| j                  | j                        g}n| j                  }| j                  |iS )zReturn history buffer.)content)return_messagesr   r:   r<   )r&   inputsr:   s      r*   load_memory_variablesz/ConversationSummaryMemory.load_memory_variablesi   s=    33DKK3HIF[[F((r,   c                l    |d   j                   }ddh}|t        |      k7  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)rC   valuesprompt_variablesexpected_keyss       r*   validate_prompt_input_variablesz9ConversationSummaryMemory.validate_prompt_input_variablesq   sY     "(+;;"K0C 011L#$$9-K  r,   c                    t         |   ||       | j                  | j                  j                  dd | j
                        | _        y)z.Save context from this conversation to buffer.N)supersave_contextr+   r@   r'   r:   )r&   rM   outputs	__class__s      r*   r[   z&ConversationSummaryMemory.save_context}   s@    VW-..%%bc*DKK
r,   c                0    t         |           d| _        y)zClear memory contents.r9   N)rZ   clearr:   )r&   r]   s    r*   r_   zConversationSummaryMemory.clear   s    r,   )
r   r	   r@   r   r>   intrD   r   r0   r8   )r0   z	list[str])rM   dict[str, Any]r0   ra   )rT   dictr0   rb   )rM   ra   r\   zdict[str, str]r0   None)r0   rc   )r1   r2   r3   r4   r:   r5   r<   classmethodrG   propertyrI   rN   r   rW   r[   r_   __classcell__)r]   s   @r*   r8   r8   >   s     FCJ   ,
   
#  ! !) 	 	
 r,   r8   N)!
__future__r   typingr   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   r8   model_rebuildr6   r,   r*   <module>rv      s    "  * 8 ; > < Q Q 5 )  ) 7 2 
	d	Si SSD 
	G	A AAH  ' ' )r,   