refactor(history): reduce computational complexity when handling history
When updating chat history to be used in LLM request there are several instances where we do O(n^2) operations: scanning all messages to locate a tool "use" and for each use scan messages again to locate corresponding "result". Refactor the code to scan messages once collecting tool uses and results together, and then do 2nd scan to drop incomplete tool invocations and refresh "view" and "edit" results with the latest content. Also reduce number of pre-scan loops (where we discard partially generated messages or messages that are not interesting or too-old) by combining them when possible. This reduces time to scan initial 417 messages on my system (which result in 576 final messages) from 0.32 to 0.12 seconds.
This commit is contained in:
@@ -67,20 +67,6 @@ function M.get_tool_use_message(message, messages)
|
||||
end
|
||||
end
|
||||
|
||||
---@param tool_use_message avante.HistoryMessage | nil
|
||||
function M.is_edit_func_call_message(tool_use_message)
|
||||
local is_replace_func_call = false
|
||||
local is_str_replace_editor_func_call = false
|
||||
local is_str_replace_based_edit_tool_func_call = false
|
||||
local path = nil
|
||||
if tool_use_message and M.is_tool_use_message(tool_use_message) then
|
||||
local tool_use = tool_use_message.message.content[1]
|
||||
---@cast tool_use AvanteLLMToolUse
|
||||
return Utils.is_edit_func_call_tool_use(tool_use)
|
||||
end
|
||||
return is_replace_func_call, is_str_replace_editor_func_call, is_str_replace_based_edit_tool_func_call, path
|
||||
end
|
||||
|
||||
---Given a tool use message locate corresponding tool result message
|
||||
---@param message avante.HistoryMessage
|
||||
---@param messages avante.HistoryMessage[]
|
||||
|
||||
Reference in New Issue
Block a user