feat: custom slash commands (#1826)
This commit is contained in:
@@ -155,13 +155,6 @@ end
|
||||
---@param opts AvanteGeneratePromptsOptions
|
||||
---@return AvantePromptOptions
|
||||
function M.generate_prompts(opts)
|
||||
if opts.prompt_opts then
|
||||
local prompt_opts = vim.tbl_deep_extend("force", opts.prompt_opts, {
|
||||
tool_histories = opts.tool_histories,
|
||||
})
|
||||
---@cast prompt_opts AvantePromptOptions
|
||||
return prompt_opts
|
||||
end
|
||||
local provider = opts.provider or Providers[Config.provider]
|
||||
local mode = opts.mode or "planning"
|
||||
---@type AvanteProviderFunctor | AvanteBedrockProviderFunctor
|
||||
@@ -170,6 +163,9 @@ function M.generate_prompts(opts)
|
||||
|
||||
-- Check if the instructions contains an image path
|
||||
local image_paths = {}
|
||||
if opts.prompt_opts and opts.prompt_opts.image_paths then
|
||||
image_paths = vim.list_extend(image_paths, opts.prompt_opts.image_paths)
|
||||
end
|
||||
local instructions = opts.instructions
|
||||
if instructions and instructions:match("image: ") then
|
||||
local lines = vim.split(opts.instructions, "\n")
|
||||
@@ -201,7 +197,12 @@ function M.generate_prompts(opts)
|
||||
memory = opts.memory,
|
||||
}
|
||||
|
||||
local system_prompt = Path.prompts.render_mode(mode, template_opts)
|
||||
local system_prompt
|
||||
if opts.prompt_opts and opts.prompt_opts.system_prompt then
|
||||
system_prompt = opts.prompt_opts.system_prompt
|
||||
else
|
||||
system_prompt = Path.prompts.render_mode(mode, template_opts)
|
||||
end
|
||||
|
||||
if Config.system_prompt ~= nil then
|
||||
local custom_system_prompt = Config.system_prompt
|
||||
@@ -213,6 +214,9 @@ function M.generate_prompts(opts)
|
||||
|
||||
---@type AvanteLLMMessage[]
|
||||
local messages = {}
|
||||
if opts.prompt_opts and opts.prompt_opts.messages then
|
||||
messages = vim.list_extend(messages, opts.prompt_opts.messages)
|
||||
end
|
||||
|
||||
if opts.project_context ~= nil and opts.project_context ~= "" and opts.project_context ~= "null" then
|
||||
local project_context = Path.prompts.render_file("_project.avanterules", template_opts)
|
||||
@@ -243,6 +247,10 @@ function M.generate_prompts(opts)
|
||||
end
|
||||
|
||||
local dropped_history_messages = {}
|
||||
if opts.prompt_opts and opts.prompt_opts.dropped_history_messages then
|
||||
dropped_history_messages = vim.list_extend(dropped_history_messages, opts.prompt_opts.dropped_history_messages)
|
||||
end
|
||||
|
||||
if opts.history_messages then
|
||||
if Config.history.max_tokens > 0 then remaining_tokens = math.min(Config.history.max_tokens, remaining_tokens) end
|
||||
-- Traverse the history in reverse, keeping only the latest history until the remaining tokens are exhausted and the first message role is "user"
|
||||
@@ -290,13 +298,23 @@ Merge all changes from the <update> snippet into the <code> below.
|
||||
opts.session_ctx.system_prompt = system_prompt
|
||||
opts.session_ctx.messages = messages
|
||||
|
||||
local tools = {}
|
||||
if opts.tools then tools = vim.list_extend(tools, opts.tools) end
|
||||
if opts.prompt_opts and opts.prompt_opts.tools then tools = vim.list_extend(tools, opts.prompt_opts.tools) end
|
||||
|
||||
local tool_histories = {}
|
||||
if opts.tool_histories then tool_histories = vim.list_extend(tool_histories, opts.tool_histories) end
|
||||
if opts.prompt_opts and opts.prompt_opts.tool_histories then
|
||||
tool_histories = vim.list_extend(tool_histories, opts.prompt_opts.tool_histories)
|
||||
end
|
||||
|
||||
---@type AvantePromptOptions
|
||||
return {
|
||||
system_prompt = system_prompt,
|
||||
messages = messages,
|
||||
image_paths = image_paths,
|
||||
tools = opts.tools,
|
||||
tool_histories = opts.tool_histories,
|
||||
tools = tools,
|
||||
tool_histories = tool_histories,
|
||||
dropped_history_messages = dropped_history_messages,
|
||||
}
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user