§
    è˜ºhÓ  ã                   óÊ   — 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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mZ d dlmZ  G d„ de¦  «        ZdS )é    )ÚAnyÚDictÚListÚTypeÚUnion)ÚNetworkxEntityGraph)ÚKnowledgeTripleÚget_entitiesÚparse_triples)ÚBaseLanguageModel)ÚBaseMessageÚSystemMessageÚget_buffer_string)ÚBasePromptTemplate)ÚField)Ú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/services/rag-service/venv/lib/python3.11/site-packages/langchain/memory/kg.pyú
<listcomp>z>ConversationKGMemory.load_memory_variables.<locals>.<listcomp>7   s7   ø€ ð ð ð Ø;?�×(Ò(°Ð(Ñ6Ô6ðð ð ó    ú
)Ú_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ð   ø€ à×-Ò-¨fÑ5Ô5ˆàˆØð 	0ð 	0ˆFØœ×4Ò4°VÑ<Ô<ˆIØð 0ØA ÐAÐA¨$¯)ª)°IÑ*>Ô*>ÐAÐAÐA�Ø×&Ò& wÑ/Ô/Ð/øàð 	1Ø Ô0Ð8�b�b°bˆGˆGØÔ!ð 	1ðð ð ð ØCRðñ ô ˆGˆGð —i’i Ñ0Ô0ˆGà” Ð)Ð)r3   c                 ó   — | j         gS )zMWill always return list of memory variables.

        :meta private:
        )r&   )r0   s    r1   Úmemory_variablesz%ConversationKGMemory.memory_variables?   s   € ð ”Ð Ð 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%   € àŒ>Ð!Ý'¨°Ô0EÑFÔFÐFØŒ~Ð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]   € àŒ?Ð"Ý�7‰|Œ|˜qÒ Ð Ý Ð!QÀÇÂÁÄÐ!QÐ!QÑRÔRÐRÝ˜Ÿš™œÑ'Ô'¨Ô*Ð*ØŒÐ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‚   € Ý˜TœX¨dÔ.KÐLÑLÔLˆÝ)ØÔÔ% t¤v g°¡k m mÔ4ØÔ*Ø”nð
ñ 
ô 
ˆð
 —’Ø!Øð ñ 
ô 
ˆõ ˜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   € à×5Ò5°fÑ=Ô=ÐØ×(Ò(¨Ð0@Ô)AÑBÔBÐBr3   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Š   € Ý˜TœX¨dÔ.NÐOÑOÔOˆÝ)ØÔÔ% t¤v g°¡k m mÔ4ØÔ*Ø”nð
ñ 
ô 
ˆð
 —’Ø!ØØð ñ 
ô 
ˆõ
 " &Ñ)Ô)ˆ	ØÐ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   € à×5Ò5°fÑ=Ô=ÐØ×/Ò/°Ð7GÔ0HÑIÔIˆ	Øð 	'ð 	'ˆFØŒG×Ò˜vÑ&Ô&Ð&Ð&ð	'ð 	'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   ø€ å‰Œ×Ò˜V WÑ-Ô-Ð-Ø×Ò Ñ'Ô'Ð'Ð'Ð'r3   c                 óz   •— t          ¦   «                              ¦   «          | j                             ¦   «          dS )zClear memory contents.N)rf   Úclearr    )r0   rh   s    €r1   rj   zConversationKGMemory.clear‚   s'   ø€ å‰Œ�Š‰ŒˆØŒ�Š‰Œˆˆˆr3   )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�  ø€ € € € € € ðð ð €A€s€J€J�JØ€L�#ÐÐÑØ€IˆsÐÐÑØ#˜eÐ4GÐHÑHÔH€BÐÐHÐHÑHØ6XÐÐ!3ÐXÐXÑXØ3KÐÐ0ÐKÐKÑKØ	ÐÐÑØ-:Ð˜˜kÔ*Ð:Ð:Ñ:ØBØ€J�ÐÐÑð*¨D°°c°¬Nð *¸tÀCÈÀH¼~ð *ð *ð *ð *ð, ð! $ s¤)ð !ð !ð !ñ „Xð!ð¨D°°c°¬Nð ¸sð ð ð ð ð¨d°3¸°8¬nð Àð ð ð ð ð$°ð $¸¸c¼ð $ð $ð $ð $ðC¨D°°c°¬Nð C¸tÀC¼yð Cð Cð Cð Cð
°3ð ¸4ÀÔ;Pð ð ð ð ð'¨¨c°3¨h¬ð '¸Dð 'ð 'ð 'ð 'ð( 4¨¨S¨¤>ð (¸DÀÀcÀ¼Nð (Ètð (ð (ð (ð (ð (ð (ð
ð ð ð ð ð ð ð ð ð r3   r   N) Útypingr   r   r   r   r   Úlangchain_community.graphsr   Ú)langchain_community.graphs.networkx_graphr	   r
   r   Úlangchain_core.language_modelsr   Úlangchain_core.messagesr   r   r   Úlangchain_core.promptsr   Úlangchain_core.pydantic_v1r   Úlangchain.chains.llmr   Úlangchain.memory.chat_memoryr   Úlangchain.memory.promptr   r   Úlangchain.memory.utilsr   r   © r3   r1   ú<module>r€      sg  ðØ /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð ð ð
 =Ð <Ð <Ð <Ð <Ð <Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,à )Ð )Ð )Ð )Ð )Ð )Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7ðð ð ð ð ð ð ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7ðnð nð nð nð n˜>ñ nô nð nð nð nr3   