
    ihb                    F   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"jG                          y)    )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                  |    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/dev/engine/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.   r2    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   r9   )rangelenrC   r*   r.   r=   )clsr    rC   rA   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)rF   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.   rC   r*   r=   )r)   rP   outputs	__class__s      r-   r^   z&ConversationSummaryMemory.save_context}   s@    VW-..%%bc*DKK
r/   c                0    t         |           d| _        y)zClear memory contents.r<   N)r]   clearr=   )r)   r`   s    r-   rb   zConversationSummaryMemory.clear   s    r/   )
r    r   rC   r   rA   intrG   r   r3   r;   )r3   z	List[str])rP   Dict[str, Any]r3   rd   )rW   r   r3   r   )rP   rd   r_   zDict[str, str]r3   None)r3   re   )r4   r5   r6   r7   r=   r8   r?   classmethodrJ   propertyrL   rQ   r   rZ   r^   rb   __classcell__)r`   s   @r-   r;   r;   >   s     FCJ   ,
   
#  ! !) 	 	
 r/   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_rebuildr9   r/   r-   <module>rx      s    " ( ( * 8 ; > < Q Q 5 )  ) 7 2 
	d	Si SSD 
	G	A AAH  ' ' )r/   