refactor(sidebar): use helpers when working with history
Do not poke directly into avante.HistoryMessage instances, use appropriate helpers instead.
This commit is contained in:
@@ -35,10 +35,6 @@ function M.get_tool_use_data(message)
|
||||
end
|
||||
end
|
||||
|
||||
---@param message avante.HistoryMessage
|
||||
---@return boolean
|
||||
function M.is_tool_use_message(message) return M.get_tool_use_data(message) ~= nil end
|
||||
|
||||
---If message is a "tool result" message returns results of the tool invocation.
|
||||
---@param message avante.HistoryMessage
|
||||
---@return AvanteLLMToolResult | nil
|
||||
@@ -66,38 +62,43 @@ function M.get_tool_result(id, messages)
|
||||
end
|
||||
end
|
||||
|
||||
---Given a tool invocation ID locate corresponding tool use message
|
||||
---@param id string
|
||||
---@param messages avante.HistoryMessage[]
|
||||
---@return avante.HistoryMessage | nil
|
||||
function M.get_tool_use_message(id, messages)
|
||||
for idx = #messages, 1, -1 do
|
||||
local msg = messages[idx]
|
||||
local use = M.get_tool_use_data(msg)
|
||||
if use and use.id == id then return msg end
|
||||
end
|
||||
end
|
||||
|
||||
---Given a tool invocation ID locate corresponding tool result message
|
||||
---@param id string
|
||||
---@param messages avante.HistoryMessage[]
|
||||
---@return avante.HistoryMessage | nil
|
||||
function M.get_tool_result_message(id, messages)
|
||||
for idx = #messages, 1, -1 do
|
||||
local msg = messages[idx]
|
||||
local result = M.get_tool_result_data(msg)
|
||||
if result and result.tool_use_id == id then return msg end
|
||||
end
|
||||
end
|
||||
|
||||
---@param message avante.HistoryMessage
|
||||
---@return boolean
|
||||
function M.is_thinking_message(message)
|
||||
local content = message.message.content
|
||||
return type(content) == "table" and (content[1].type == "thinking" or content[1].type == "redacted_thinking")
|
||||
end
|
||||
|
||||
---@param message avante.HistoryMessage
|
||||
---@return boolean
|
||||
function M.is_tool_result_message(message) return M.get_tool_result_data(message) ~= nil end
|
||||
|
||||
---Given a tool result message locate corresponding tool use message
|
||||
---@param message avante.HistoryMessage
|
||||
---@param messages avante.HistoryMessage[]
|
||||
---@return avante.HistoryMessage | nil
|
||||
function M.get_tool_use_message(message, messages)
|
||||
local result = M.get_tool_result_data(message)
|
||||
if result then
|
||||
for idx = #messages, 1, -1 do
|
||||
local msg = messages[idx]
|
||||
local use = M.get_tool_use_data(msg)
|
||||
if use and use.id == result.tool_use_id then return msg end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---Given a tool use message locate corresponding tool result message
|
||||
---@param message avante.HistoryMessage
|
||||
---@param messages avante.HistoryMessage[]
|
||||
---@return avante.HistoryMessage | nil
|
||||
function M.get_tool_result_message(message, messages)
|
||||
local use = M.get_tool_use_data(message)
|
||||
if use then
|
||||
for idx = #messages, 1, -1 do
|
||||
local msg = messages[idx]
|
||||
local result = M.get_tool_result_data(msg)
|
||||
if result and result.tool_use_id == use.id then return msg end
|
||||
end
|
||||
end
|
||||
end
|
||||
---@return boolean
|
||||
function M.is_tool_use_message(message) return M.get_tool_use_data(message) ~= nil end
|
||||
|
||||
return M
|
||||
|
||||
@@ -104,7 +104,7 @@ local function message_content_item_to_lines(item, message, messages)
|
||||
elseif item.type == "tool_use" then
|
||||
local ok, llm_tool = pcall(require, "avante.llm_tools." .. item.name)
|
||||
if ok then
|
||||
local tool_result_message = Helpers.get_tool_result_message(message, messages)
|
||||
local tool_result_message = Helpers.get_tool_result_message(item.id, messages)
|
||||
---@cast llm_tool AvanteLLMTool
|
||||
if llm_tool.on_render then
|
||||
return llm_tool.on_render(item.input, {
|
||||
|
||||
Reference in New Issue
Block a user