跳转至

Retrieve

labridge.tools.memory.chat.retrieve

labridge.tools.memory.chat.retrieve.ChatMemoryRetrieverTool

Bases: RetrieverBaseTool

This tool is used to retrieve in the permanent chat memory of a user or a chat group.

PARAMETER DESCRIPTION
chat_memory_retriever

The chat memory retriever.

TYPE: ChatMemoryRetriever DEFAULT: None

metadata_mode

The metadata mode, defaults to MetadataMode.LLM.

TYPE: MetadataMode DEFAULT: LLM

Source code in labridge\tools\memory\chat\retrieve.py
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
class ChatMemoryRetrieverTool(RetrieverBaseTool):
	r"""
	This tool is used to retrieve in the permanent chat memory of a user or a chat group.

	Args:
		chat_memory_retriever (ChatMemoryRetriever): The chat memory retriever.
		metadata_mode (MetadataMode): The metadata mode, defaults to `MetadataMode.LLM`.
	"""
	def __init__(
		self,
		chat_memory_retriever: ChatMemoryRetriever = None,
		metadata_mode: MetadataMode = MetadataMode.LLM,
	):
		self.metadata_mode = metadata_mode

		chat_memory_retriever = chat_memory_retriever or ChatMemoryRetriever()
		super().__init__(
			retriever=chat_memory_retriever,
			name=ChatMemoryRetrieverTool.__name__,
			retrieve_fn=ChatMemoryRetriever.retrieve,
		)

	def get_ref_info(self, nodes: List[NodeWithScore]) -> List[RefInfoBase]:
		r""" Get the reference infos from the retrieved nodes. """
		return []

	def log(self, log_dict) -> ToolLog:
		r""" tool log """
		item = log_dict["item_to_be_retrieved"]
		memory_id = log_dict["memory_id"]
		start_date = log_dict["start_date"]
		end_date = log_dict["end_date"]
		log_string = (
			f"Using {self.metadata.name} to retrieve '{item}' in the chat history memory with memory_id: '{memory_id}'\n"
			f"Retrieve date is ranging from {start_date} to {end_date}\n"
		)

		log_to_user = None
		log_to_system = {
			TOOL_OP_DESCRIPTION: log_string,
			TOOL_REFERENCES: None,
		}
		return ToolLog(
			tool_name=self.metadata.name,
			log_to_user=log_to_user,
			log_to_system=log_to_system,
		)

	def _retrieve(self, retrieve_kwargs: dict) -> List[NodeWithScore]:
		r""" Use the retriever to retrieve relevant nodes. """
		nodes = self._retriever.retrieve(**retrieve_kwargs)
		return nodes

	async def _aretrieve(self, retrieve_kwargs: dict) -> List[NodeWithScore]:
		r""" Asynchronously use the retriever to retrieve relevant nodes. """
		nodes = await self._retriever.aretrieve(**retrieve_kwargs)
		return nodes

	def _nodes_to_tool_output(self, nodes: List[NodeWithScore]) -> Tuple[str, dict]:
		r""" output the retrieved contents in a specific format. """
		if nodes:
			output = f"Have retrieved relevant conversations in the chat memory\n\n"
			contents = []
			for idx, node in enumerate(nodes):
				node_content = (
					f"Conversation {idx + 1}:\n"
					f"{node.node.get_content(metadata_mode=self.metadata_mode)}"
				)
				contents.append(node_content.strip())
			output += "\n\n".join(contents)
		else:
			output = "No Relevant chat history found."

		output_log = dict()
		return output, output_log

labridge.tools.memory.chat.retrieve.ChatMemoryRetrieverTool.get_ref_info(nodes)

Get the reference infos from the retrieved nodes.

Source code in labridge\tools\memory\chat\retrieve.py
42
43
44
def get_ref_info(self, nodes: List[NodeWithScore]) -> List[RefInfoBase]:
	r""" Get the reference infos from the retrieved nodes. """
	return []

labridge.tools.memory.chat.retrieve.ChatMemoryRetrieverTool.log(log_dict)

tool log

Source code in labridge\tools\memory\chat\retrieve.py
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
def log(self, log_dict) -> ToolLog:
	r""" tool log """
	item = log_dict["item_to_be_retrieved"]
	memory_id = log_dict["memory_id"]
	start_date = log_dict["start_date"]
	end_date = log_dict["end_date"]
	log_string = (
		f"Using {self.metadata.name} to retrieve '{item}' in the chat history memory with memory_id: '{memory_id}'\n"
		f"Retrieve date is ranging from {start_date} to {end_date}\n"
	)

	log_to_user = None
	log_to_system = {
		TOOL_OP_DESCRIPTION: log_string,
		TOOL_REFERENCES: None,
	}
	return ToolLog(
		tool_name=self.metadata.name,
		log_to_user=log_to_user,
		log_to_system=log_to_system,
	)