
    dh                         S SK JrJrJrJr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JrJr   S SKJr  S S	KJr  S S
KJrJr  S SKJr   " S S\5      rg! \  a     " S S5      r gf = f)    )AnyDictListTypeUnion)BaseLanguageModel)BaseMessageSystemMessageget_buffer_string)BasePromptTemplate)Field)NetworkxEntityGraph)KnowledgeTripleget_entitiesparse_triples)LLMChain)BaseChatMemory)ENTITY_EXTRACTION_PROMPT"KNOWLEDGE_TRIPLE_EXTRACTION_PROMPT)get_prompt_input_keyc                     ^  \ rS rSr% SrSr\\S'   Sr\	\S'   Sr
\	\S'   \" \S	9r\\S
'   \r\\S'   \r\\S'   \\S'   \r\\   \S'    Sr\	\S'   S\\	\4   S\\	\4   4S jr\S\\	   4S j5       rS\\	\4   S\	4S jrS\\	\4   S\	4S jr S\	S\\	   4S jr!S\\	\4   S\\	   4S jr"S\	S\\#   4S jr$S\\	\4   SS4S jr%S\\	\4   S\\	\	4   SS4U 4S jjr&S!U 4S jjr'S r(U =r)$ )"ConversationKGMemory   zKnowledge graph conversation memory.

Integrates with external knowledge graph to store and retrieve
information about knowledge triples in the conversation.
   kHumanhuman_prefixAI	ai_prefix)default_factorykgknowledge_extraction_promptentity_extraction_promptllmsummary_message_clshistory
memory_keyinputsreturnc                    U R                  U5      n/ nU HP  nU R                  R                  U5      nU(       d  M'  SU SSR                  U5       S3nUR	                  U5        MR     U(       d  U R
                  (       a  / OSnO@U R
                  (       a  U Vs/ sH  oR                  US9PM     nnOSR                  U5      nU R                  U0$ s  snf )zReturn history buffer.zOn z: z. . )content
)_get_current_entitiesr!   get_entity_knowledgejoinappendreturn_messagesr%   r'   )	selfr(   entitiessummary_stringsentity	knowledgesummarycontexttexts	            U/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/memory/kg.pyload_memory_variables*ConversationKGMemory.load_memory_variables,   s    11&9H O" GG88@	9 #F82dii	.B-C1EG#**73	 # # $ 4 4""%%GVGVt,,T,:   ))O4OOW--s   Cc                     U R                   /$ )z=Will always return list of memory variables.

:meta private:
)r'   )r4   s    r<   memory_variables%ConversationKGMemory.memory_variablesB   s     OO$$    c                 ^    U R                   c  [        XR                  5      $ U R                   $ )z!Get the input key for the prompt.)	input_keyr   r@   )r4   r(   s     r<   _get_prompt_input_key*ConversationKGMemory._get_prompt_input_keyJ   s'    ~~%+F4I4IJJ>>!rB   outputsc                     U R                   cG  [        U5      S:w  a  [        SUR                  5        35      e[	        UR                  5       5      S   $ U R                   $ )z"Get the output key for the prompt.   zOne output key expected, got r   )
output_keylen
ValueErrorkeyslist)r4   rG   s     r<   _get_prompt_output_key+ConversationKGMemory._get_prompt_output_keyP   sR    &w<1$$'DW\\^DT%UVVGLLN+A..??"rB   input_stringc                     [        U R                  U R                  S9n[        U R                  R
                  U R                  * S-  S  U R                  U R                  S9nUR                  UUS9n[        U5      $ )Nr$   promptr   r   r   )r&   input)r   r$   r#   r   chat_memorymessagesr   r   r   predictr   )r4   rQ   chainbuffer_stringoutputs        r<   get_current_entities)ConversationKGMemory.get_current_entitiesX   sz    $2O2OPE-  ))466'A+-8!....M
 ]]%" # F  ''rB   c                 J    U R                  U5      nU R                  X   5      $ )z-Get the current entities in the conversation.)rE   r]   )r4   r(   prompt_input_keys      r<   r/   *ConversationKGMemory._get_current_entitiese   s'    #99&A,,V-EFFrB   c                    [        U R                  U R                  S9n[        U R                  R
                  U R                  * S-  S  U R                  U R                  S9nUR                  UUSS9n[        U5      nU$ )NrS   r   rU   T)r&   rV   verbose)r   r$   r"   r   rW   rX   r   r   r   rY   r   )r4   rQ   rZ   r[   r\   r8   s         r<   get_knowledge_triplets+ConversationKGMemory.get_knowledge_tripletsj   s    $2R2RSE-  ))466'A+-8!....M
 ]]%" # F
 &f-IrB   Nc                     U R                  U5      nU R                  X   5      nU H  nU R                  R                  U5        M      g)z=Get and update knowledge graph from the conversation history.N)rE   rd   r!   
add_triple)r4   r(   r`   r8   triples        r<   _get_and_update_kg'ConversationKGMemory._get_and_update_kgy   sB    #99&A33F4LMI#""6* $rB   c                 F   > [         TU ]  X5        U R                  U5        g)z.Save context from this conversation to buffer.N)supersave_contextri   )r4   r(   rG   	__class__s      r<   rm   !ConversationKGMemory.save_context   s    G 1##F+rB   c                 V   > [         TU ]  5         U R                  R                  5         g)zClear memory contents.N)rl   clearr!   )r4   rn   s    r<   rq   ConversationKGMemory.clear   s    GMOGGMMOrB    )r)   N)*__name__
__module____qualname____firstlineno____doc__r   int__annotations__r   strr   r   r   r!   r   r"   r   r   r#   r   r
   r%   r   r	   r'   r   r   r=   propertyr   r@   rE   rO   r]   r/   r   rd   ri   rm   rq   __static_attributes____classcell__)rn   s   @r<   r   r      s   	 3
#c#	3"'8K"LL. 	$%7 	
 8P "4O1>T+.>F#
C#	.S#X 	.4S> 	., 
	%d3i 	% 
	%	"S#X 	"3 	"	#$sCx. 	#S 	#	(S 	(T#Y 	(	GS#X 	G49 	G
	s 	tO?T 		+T#s(^ 	+ 	+	,tCH~ 	,S#X 	,SW 	,
	 	rB   r   c                       \ rS rSrSrg)r      rs   N)rt   ru   rv   rw   r}   rs   rB   r<   r   r      s    rB   N)!typingr   r   r   r   r   langchain_core.language_modelsr   langchain_core.messagesr	   r
   r   langchain_core.promptsr   pydanticr   langchain_community.graphsr   )langchain_community.graphs.networkx_graphr   r   r   langchain.chains.llmr   langchain.memory.chat_memoryr   langchain.memory.promptr   r   langchain.memory.utilsr   r   ImportErrorrs   rB   r<   <module>r      sg    / / < Q Q 5  : ~-; <p~ pd   s   %A" "A54A5