§
    šŠtjÓ  ã                   óþ   — d dl mZmZmZmZ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mZmZ 	 d dlmZ d d	lmZ d d
lmZmZ d dlmZ  G d„ de¦  «        ZdS # e $ r  G d„ d¦  «        ZY dS w xY w)é    )Ú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                   ó  ‡ — e Zd ZU dZdZeed<   dZeed<   dZ	eed<    e
e¬¦  «        Zeed	<   eZeed
<   eZeed<   eed<   eZee         ed<   	 dZeed<   deeef         deeef         fd„Zedee         fd„¦   «         Zdeeef         defd„Zdeeef         defd„Zdedee         fd„Z deeef         dee         fd„Z!dedee"         fd„Z#deeef         ddfd„Z$deeef         deeef         ddfˆ fd„Z%dˆ fd„Z&ˆ xZ'S ) ÚConversationKGMemoryz¶Knowledge 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                 óZ  ‡ — ‰                       |¦  «        }g }|D ]O}‰ j                             |¦  «        }|r1d|› dd                     |¦  «        › d�}|                     |¦  «         ŒP|s‰ j        rg nd}n+‰ j        rˆ fd„|D ¦   «         }nd                     |¦  «        }‰ j        |iS )zReturn history buffer.zOn z: z. ú.Ú c                 ó<   •— g | ]}‰                      |¬ ¦  «        ‘ŒS ))Úcontent)r$   )Ú.0ÚtextÚselfs     €ú[/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/memory/kg.pyú
<listcomp>z>ConversationKGMemory.load_memory_variables.<locals>.<listcomp>:   s7   ø€ ð ð ð Ø?C�D×,Ò,°TÐ,Ñ:Ô:ðð ð ó    ú
)Ú_get_current_entitiesr    Úget_entity_knowledgeÚjoinÚappendÚreturn_messagesr&   )r0   r'   ÚentitiesÚsummary_stringsÚentityÚ	knowledgeÚsummaryÚcontexts   `       r1   Úload_memory_variablesz*ConversationKGMemory.load_memory_variables,   sð   ø€ à×1Ò1°&Ñ9Ô9ˆHà ˆOØ"ð 4ð 4�Ø œG×8Ò8¸Ñ@Ô@�	Øð 4ØE FÐEÐE¨d¯iªi¸	Ñ.BÔ.BÐEÐEÐE�GØ#×*Ò*¨7Ñ3Ô3Ð3øà"ð 5Ø $Ô 4Ð<˜"˜"¸"��ØÔ%ð 5ðð ð ð ØGVðñ ô ��ð Ÿ)š) OÑ4Ô4�à”O WÐ-Ð-r3   c                 ó   — | j         gS )z,Will always return list of memory variables.)r&   )r0   s    r1   Úmemory_variablesz%ConversationKGMemory.memory_variablesB   s   € ð ”OÐ$Ð$r3   c                 óH   — | j         €t          || j        ¦  «        S | j         S )z!Get the input key for the prompt.)Ú	input_keyr   rB   )r0   r'   s     r1   Ú_get_prompt_input_keyz*ConversationKGMemory._get_prompt_input_keyG   s%   € àŒ~Ð%Ý+¨F°DÔ4IÑJÔJÐJØ”>Ð!r3   Úoutputsc                 óÚ   — | j         €^t          |¦  «        dk    r$t          d|                     ¦   «         › �¦  «        ‚t	          |                     ¦   «         ¦  «        d         S | j         S )z"Get the output key for the prompt.Né   zOne output key expected, got r   )Ú
output_keyÚlenÚ
ValueErrorÚkeysÚlist)r0   rF   s     r1   Ú_get_prompt_output_keyz+ConversationKGMemory._get_prompt_output_keyM   s]   € àŒÐ&Ý�w‘<”< 1Ò$Ð$Ý$Ð%UÀWÇ\Â\Á^Ä^Ð%UÐ%UÑVÔVÐVÝ˜GŸLšL™NœNÑ+Ô+¨AÔ.Ð.Ø”?Ð"r3   Úinput_stringc                 óò   — t          | j        | j        ¬¦  «        }t          | j        j        | j         dz  d …         | j        | j        ¬¦  «        }| 	                    ||¬¦  «        }t          |¦  «        S )N©r#   Úpromptr   ©r   r   )r%   Úinput)r   r#   r"   r   Úchat_memoryÚmessagesr   r   r   Úpredictr   )r0   rO   ÚchainÚbuffer_stringÚoutputs        r1   Úget_current_entitiesz)ConversationKGMemory.get_current_entitiesU   s‚   € Ý ¤°$Ô2OÐPÑPÔPˆEÝ-ØÔ Ô)¨4¬6¨'°A©+¨-¨-Ô8Ø!Ô.Øœ.ðñ ô ˆMð
 —]’]Ø%Ø"ð #ñ ô ˆFõ   Ñ'Ô'Ð'r3   c                 ób   — |                       |¦  «        }|                      ||         ¦  «        S )z-Get the current entities in the conversation.)rE   r[   )r0   r'   Úprompt_input_keys      r1   r5   z*ConversationKGMemory._get_current_entitiesb   s0   € à#×9Ò9¸&ÑAÔAÐØ×,Ò,¨VÐ4DÔ-EÑFÔFÐFr3   c                 óø   — t          | j        | j        ¬¦  «        }t          | j        j        | j         dz  d …         | j        | j        ¬¦  «        }| 	                    ||d¬¦  «        }t          |¦  «        }|S )NrQ   r   rS   T)r%   rT   Úverbose)r   r#   r!   r   rU   rV   r   r   r   rW   r   )r0   rO   rX   rY   rZ   r=   s         r1   Úget_knowledge_tripletsz+ConversationKGMemory.get_knowledge_tripletsg   sŠ   € Ý ¤°$Ô2RÐSÑSÔSˆEÝ-ØÔ Ô)¨4¬6¨'°A©+¨-¨-Ô8Ø!Ô.Øœ.ðñ ô ˆMð
 —]’]Ø%Ø"Øð #ñ ô ˆFõ
 & fÑ-Ô-ˆIØÐr3   Nc                 ó¤   — |                       |¦  «        }|                      ||         ¦  «        }|D ]}| j                             |¦  «         ŒdS )z=Get and update knowledge graph from the conversation history.N)rE   r`   r    Ú
add_triple)r0   r'   r]   r=   Útriples        r1   Ú_get_and_update_kgz'ConversationKGMemory._get_and_update_kgv   sa   € à#×9Ò9¸&ÑAÔAÐØ×3Ò3°FÐ;KÔ4LÑMÔMˆIØ#ð +ð +�Ø”×"Ò" 6Ñ*Ô*Ð*Ð*ð+ð +r3   c                 óv   •— t          ¦   «                              ||¦  «         |                      |¦  «         dS )z.Save context from this conversation to buffer.N)ÚsuperÚsave_contextrd   )r0   r'   rF   Ú	__class__s      €r1   rg   z!ConversationKGMemory.save_context}   s7   ø€ å‰GŒG× Ò  ¨Ñ1Ô1Ð1Ø×#Ò# FÑ+Ô+Ð+Ð+Ð+r3   c                 óz   •— t          ¦   «                              ¦   «          | j                             ¦   «          dS )zClear memory contents.N)rf   Úclearr    )r0   rh   s    €r1   rj   zConversationKGMemory.clear‚   s'   ø€ å‰GŒG�MŠM‰OŒOˆOØŒG�MŠM‰OŒOˆOˆOˆOr3   )r(   N)(Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚintÚ__annotations__r   Ústrr   r   r   r    r   r!   r   r   r"   r   r
   r$   r   r	   r&   r   r   r@   Úpropertyr   rB   rE   rN   r[   r5   r   r`   rd   rg   rj   Ú__classcell__)rh   s   @r1   r   r      s›  ø€ € € € € € ð	ð 	ð ˆˆ3ˆ
ˆ
‰
Ø#ˆ�cÐ#Ð#Ñ#Øˆ	�3ÐÐÑØ"' %Ð8KÐ"LÑ"LÔ"LˆÐÐLÐLÑLà.ð 	$Ð%7ð 	
ð 	
ñ 	
ð 8PÐ Ð"4ÐOÐOÑOØÐÐÑØ1>Ð˜T +Ô.Ð>Ð>Ñ>ØFØ#ˆ
�CÐ#Ð#Ñ#ð	.°°S¸#°X´ð 	.À4ÈÈSÈÄ>ð 	.ð 	.ð 	.ð 	.ð, 
ð	% d¨3¤ið 	%ð 	%ð 	%ñ 
Œð	%ð	"°°S¸#°X´ð 	"À3ð 	"ð 	"ð 	"ð 	"ð	#°$°s¸C°x´.ð 	#ÀSð 	#ð 	#ð 	#ð 	#ð	(°Sð 	(¸TÀ#¼Yð 	(ð 	(ð 	(ð 	(ð	G°°S¸#°X´ð 	GÀ4ÈÄ9ð 	Gð 	Gð 	Gð 	Gð
	°sð 	¸tÀOÔ?Tð 	ð 	ð 	ð 	ð	+¨T°#°s°(¬^ð 	+Àð 	+ð 	+ð 	+ð 	+ð	, t¨C°¨H¤~ð 	,ÀÀSÈ#ÀXÄð 	,ÐSWð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð
	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r3   r   c                   ó   — e Zd ZdS )r   N)rk   rl   rm   © r3   r1   r   r   ‰   s   € € € € € Øˆr3   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_classic.chains.llmr   Ú$langchain_classic.memory.chat_memoryr   Úlangchain_classic.memory.promptr   r   Úlangchain_classic.memory.utilsr   r   ÚImportErrorru   r3   r1   ú<module>r‚      sÁ  ðØ /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à <Ð <Ð <Ð <Ð <Ð <Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø Ð Ð Ð Ð Ð à :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð ð ð{Ø5Ð5Ð5Ð5Ð5Ð5ØCÐCÐCÐCÐCÐCðð ð ð ð ð ð ð ð DÐCÐCÐCÐCÐCðmð mð mð mð m˜~ñ mô mð mð mð møð^ ð ð ð ðð ð ð ð ñ ô ð ð ð ð ðøøøs   ¼(A& Á&A<Á;A<