refactor: refactor planning prompts to resolve line number issues and indentation issues (#382)
This commit is contained in:
@@ -7,54 +7,24 @@ local M = {}
|
||||
|
||||
M.api_key_name = "ANTHROPIC_API_KEY"
|
||||
|
||||
M.parse_message = function(opts)
|
||||
local code_prompt_obj = {
|
||||
type = "text",
|
||||
text = string.format("<code>```%s\n%s```</code>", opts.code_lang, opts.code_content),
|
||||
}
|
||||
---@param prompt_opts AvantePromptOptions
|
||||
M.parse_message = function(prompt_opts)
|
||||
local message_content = {}
|
||||
|
||||
if Utils.tokens.calculate_tokens(code_prompt_obj.text) > 1024 then
|
||||
code_prompt_obj.cache_control = { type = "ephemeral" }
|
||||
end
|
||||
|
||||
if opts.selected_code_content then
|
||||
code_prompt_obj.text = string.format("<code_context>```%s\n%s```</code_context>", opts.code_lang, opts.code_content)
|
||||
end
|
||||
|
||||
local message_content = {
|
||||
code_prompt_obj,
|
||||
}
|
||||
|
||||
if opts.selected_code_content then
|
||||
local selected_code_obj = {
|
||||
type = "text",
|
||||
text = string.format("<code>```%s\n%s```</code>", opts.code_lang, opts.selected_code_content),
|
||||
}
|
||||
|
||||
if Utils.tokens.calculate_tokens(selected_code_obj.text) > 1024 then
|
||||
selected_code_obj.cache_control = { type = "ephemeral" }
|
||||
if Clipboard.support_paste_image() and prompt_opts.image_paths then
|
||||
for _, image_path in ipairs(prompt_opts.image_paths) do
|
||||
table.insert(message_content, {
|
||||
type = "image",
|
||||
source = {
|
||||
type = "base64",
|
||||
media_type = "image/png",
|
||||
data = Clipboard.get_base64_content(image_path),
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
table.insert(message_content, selected_code_obj)
|
||||
end
|
||||
|
||||
if Clipboard.support_paste_image() and opts.image_path then
|
||||
table.insert(message_content, {
|
||||
type = "image",
|
||||
source = {
|
||||
type = "base64",
|
||||
media_type = "image/png",
|
||||
data = Clipboard.get_base64_content(opts.image_path),
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
table.insert(message_content, {
|
||||
type = "text",
|
||||
text = string.format("<question>%s</question>", opts.question),
|
||||
})
|
||||
|
||||
local user_prompt = opts.base_prompt
|
||||
local user_prompt = prompt_opts.user_prompt
|
||||
|
||||
local user_prompt_obj = {
|
||||
type = "text",
|
||||
@@ -91,9 +61,9 @@ M.parse_response = function(data_stream, event_state, opts)
|
||||
end
|
||||
|
||||
---@param provider AvanteProviderFunctor
|
||||
---@param code_opts AvantePromptOptions
|
||||
---@param prompt_opts AvantePromptOptions
|
||||
---@return table
|
||||
M.parse_curl_args = function(provider, code_opts)
|
||||
M.parse_curl_args = function(provider, prompt_opts)
|
||||
local base, body_opts = P.parse_config(provider)
|
||||
|
||||
local headers = {
|
||||
@@ -112,7 +82,14 @@ M.parse_curl_args = function(provider, code_opts)
|
||||
headers = headers,
|
||||
body = vim.tbl_deep_extend("force", {
|
||||
model = base.model,
|
||||
messages = M.parse_message(code_opts),
|
||||
system = {
|
||||
{
|
||||
type = "text",
|
||||
text = prompt_opts.system_prompt,
|
||||
cache_control = { type = "ephemeral" },
|
||||
},
|
||||
},
|
||||
messages = M.parse_message(prompt_opts),
|
||||
stream = true,
|
||||
}, body_opts),
|
||||
}
|
||||
|
||||
@@ -31,37 +31,9 @@ local M = {}
|
||||
M.api_key_name = "CO_API_KEY"
|
||||
|
||||
M.parse_message = function(opts)
|
||||
local user_prompt = opts.base_prompt
|
||||
.. "\n\nCODE:\n"
|
||||
.. "```"
|
||||
.. opts.code_lang
|
||||
.. "\n"
|
||||
.. opts.code_content
|
||||
.. "\n```"
|
||||
.. "\n\nQUESTION:\n"
|
||||
.. opts.question
|
||||
|
||||
if opts.selected_code_content ~= nil then
|
||||
user_prompt = opts.base_prompt
|
||||
.. "\n\nCODE CONTEXT:\n"
|
||||
.. "```"
|
||||
.. opts.code_lang
|
||||
.. "\n"
|
||||
.. opts.code_content
|
||||
.. "\n```"
|
||||
.. "\n\nCODE:\n"
|
||||
.. "```"
|
||||
.. opts.code_lang
|
||||
.. "\n"
|
||||
.. opts.selected_code_content
|
||||
.. "\n```"
|
||||
.. "\n\nQUESTION:\n"
|
||||
.. opts.question
|
||||
end
|
||||
|
||||
return {
|
||||
preamble = opts.system_prompt,
|
||||
message = user_prompt,
|
||||
message = opts.user_prompt,
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
@@ -8,41 +8,24 @@ local M = {}
|
||||
M.api_key_name = "GEMINI_API_KEY"
|
||||
|
||||
M.parse_message = function(opts)
|
||||
local code_prompt_obj = {
|
||||
text = string.format("<code>```%s\n%s```</code>", opts.code_lang, opts.code_content),
|
||||
}
|
||||
local message_content = {}
|
||||
|
||||
if opts.selected_code_content then
|
||||
code_prompt_obj.text = string.format("<code_context>```%s\n%s```</code_context>", opts.code_lang, opts.code_content)
|
||||
end
|
||||
if Clipboard.support_paste_image() and opts.image_paths then
|
||||
for _, image_path in ipairs(opts.image_paths) do
|
||||
local image_data = {
|
||||
inline_data = {
|
||||
mime_type = "image/png",
|
||||
data = Clipboard.get_base64_content(image_path),
|
||||
},
|
||||
}
|
||||
|
||||
-- parts ready
|
||||
local message_content = {
|
||||
code_prompt_obj,
|
||||
}
|
||||
|
||||
if opts.selected_code_content then
|
||||
local selected_code_obj = {
|
||||
text = string.format("<code>```%s\n%s```</code>", opts.code_lang, opts.selected_code_content),
|
||||
}
|
||||
|
||||
table.insert(message_content, selected_code_obj)
|
||||
end
|
||||
|
||||
if Clipboard.support_paste_image() and opts.image_path then
|
||||
local image_data = {
|
||||
inline_data = {
|
||||
mime_type = "image/png",
|
||||
data = Clipboard.get_base64_content(opts.image_path),
|
||||
},
|
||||
}
|
||||
|
||||
table.insert(message_content, image_data)
|
||||
table.insert(message_content, image_data)
|
||||
end
|
||||
end
|
||||
|
||||
-- insert a part into parts
|
||||
table.insert(message_content, {
|
||||
text = string.format("<question>%s</question>", opts.question),
|
||||
text = opts.user_prompt,
|
||||
})
|
||||
|
||||
return {
|
||||
@@ -50,7 +33,7 @@ M.parse_message = function(opts)
|
||||
role = "user",
|
||||
parts = {
|
||||
{
|
||||
text = opts.system_prompt .. "\n" .. opts.base_prompt,
|
||||
text = opts.system_prompt,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -9,13 +9,9 @@ local Dressing = require("avante.ui.dressing")
|
||||
---@field on_complete AvanteCompleteParser
|
||||
---
|
||||
---@class AvantePromptOptions: table<[string], string>
|
||||
---@field base_prompt AvanteBasePrompt
|
||||
---@field system_prompt AvanteSystemPrompt
|
||||
---@field question string
|
||||
---@field image_path? string
|
||||
---@field code_lang string
|
||||
---@field code_content string
|
||||
---@field selected_code_content? string
|
||||
---@field system_prompt string
|
||||
---@field user_prompt string
|
||||
---@field image_paths? string[]
|
||||
---
|
||||
---@class AvanteBaseMessage
|
||||
---@field role "user" | "system"
|
||||
@@ -34,7 +30,7 @@ local Dressing = require("avante.ui.dressing")
|
||||
---@alias AvanteMessageParser fun(opts: AvantePromptOptions): AvanteChatMessage[]
|
||||
---
|
||||
---@class AvanteCurlOutput: {url: string, proxy: string, insecure: boolean, body: table<string, any> | string, headers: table<string, string>}
|
||||
---@alias AvanteCurlArgsParser fun(opts: AvanteProvider, code_opts: AvantePromptOptions): AvanteCurlOutput
|
||||
---@alias AvanteCurlArgsParser fun(opts: AvanteProvider | AvanteProviderFunctor, code_opts: AvantePromptOptions): AvanteCurlOutput
|
||||
---
|
||||
---@class ResponseParser
|
||||
---@field on_chunk fun(chunk: string): any
|
||||
@@ -337,7 +333,7 @@ M.commands = function()
|
||||
})
|
||||
end
|
||||
|
||||
---@param opts AvanteProvider | AvanteSupportedProvider
|
||||
---@param opts AvanteProvider | AvanteSupportedProvider | AvanteProviderFunctor
|
||||
---@return AvanteDefaultBaseProvider, table<string, any>
|
||||
M.parse_config = function(opts)
|
||||
---@type AvanteDefaultBaseProvider
|
||||
|
||||
@@ -27,53 +27,22 @@ local M = {}
|
||||
|
||||
M.api_key_name = "OPENAI_API_KEY"
|
||||
|
||||
---@param opts AvantePromptOptions
|
||||
M.get_user_message = function(opts)
|
||||
local user_prompt = opts.base_prompt
|
||||
.. "\n\nCODE:\n"
|
||||
.. "```"
|
||||
.. opts.code_lang
|
||||
.. "\n"
|
||||
.. opts.code_content
|
||||
.. "\n```"
|
||||
.. "\n\nQUESTION:\n"
|
||||
.. opts.question
|
||||
|
||||
if opts.selected_code_content ~= nil then
|
||||
user_prompt = opts.base_prompt
|
||||
.. "\n\nCODE CONTEXT:\n"
|
||||
.. "```"
|
||||
.. opts.code_lang
|
||||
.. "\n"
|
||||
.. opts.code_content
|
||||
.. "\n```"
|
||||
.. "\n\nCODE:\n"
|
||||
.. "```"
|
||||
.. opts.code_lang
|
||||
.. "\n"
|
||||
.. opts.selected_code_content
|
||||
.. "\n```"
|
||||
.. "\n\nQUESTION:\n"
|
||||
.. opts.question
|
||||
end
|
||||
|
||||
return user_prompt
|
||||
end
|
||||
|
||||
M.parse_message = function(opts)
|
||||
---@type string | OpenAIMessage[]
|
||||
local user_content
|
||||
if Config.behaviour.support_paste_from_clipboard and opts.image_path then
|
||||
if Config.behaviour.support_paste_from_clipboard and opts.image_paths then
|
||||
user_content = {}
|
||||
table.insert(user_content, {
|
||||
type = "image_url",
|
||||
image_url = {
|
||||
url = "data:image/png;base64," .. Clipboard.get_base64_content(opts.image_path),
|
||||
},
|
||||
})
|
||||
table.insert(user_content, { type = "text", text = M.get_user_message(opts) })
|
||||
for _, image_path in ipairs(opts.image_paths) do
|
||||
table.insert(user_content, {
|
||||
type = "image_url",
|
||||
image_url = {
|
||||
url = "data:image/png;base64," .. Clipboard.get_base64_content(image_path),
|
||||
},
|
||||
})
|
||||
end
|
||||
table.insert(user_content, { type = "text", text = opts.user_prompt })
|
||||
else
|
||||
user_content = M.get_user_message(opts)
|
||||
user_content = opts.user_prompt
|
||||
end
|
||||
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user