From e7ffb7649928756cde8de042edbce638e4572070 Mon Sep 17 00:00:00 2001 From: yetone Date: Tue, 25 Feb 2025 13:52:13 +0800 Subject: [PATCH] fix: reuse parse_messages and remove parse_response_data and have a good function name for check env exists (#1386) --- lua/avante/providers/copilot.lua | 34 +------------------------------- lua/avante/providers/init.lua | 12 ++++++----- lua/avante/types.lua | 16 ++------------- 3 files changed, 10 insertions(+), 52 deletions(-) diff --git a/lua/avante/providers/copilot.lua b/lua/avante/providers/copilot.lua index aeedba5..988ab04 100644 --- a/lua/avante/providers/copilot.lua +++ b/lua/avante/providers/copilot.lua @@ -209,39 +209,7 @@ M.role_map = { assistant = "assistant", } -function M.parse_messages(opts) - local messages = { - { role = "system", content = opts.system_prompt }, - } - vim - .iter(opts.messages) - :each(function(msg) table.insert(messages, { role = M.role_map[msg.role], content = msg.content }) end) - - if opts.tool_histories then - for _, tool_history in ipairs(opts.tool_histories) do - table.insert(messages, { - role = M.role_map["assistant"], - tool_calls = { - { - id = tool_history.tool_use.id, - type = "function", - ["function"] = { - name = tool_history.tool_use.name, - arguments = tool_history.tool_use.input_json, - }, - }, - }, - }) - local result_content = tool_history.tool_result.content or "" - table.insert(messages, { - role = "tool", - tool_call_id = tool_history.tool_result.tool_use_id, - content = tool_history.tool_result.is_error and "Error: " .. result_content or result_content, - }) - end - end - return messages -end +M.parse_messages = OpenAI.parse_messages M.parse_response = OpenAI.parse_response diff --git a/lua/avante/providers/init.lua b/lua/avante/providers/init.lua index 870d7a4..ff6927c 100644 --- a/lua/avante/providers/init.lua +++ b/lua/avante/providers/init.lua @@ -113,7 +113,7 @@ function E.setup(opts) vim.fn.setenv(var, value) vim.g.avante_login = true else - if not opts.provider.has() then + if not opts.provider.is_env_set() then Utils.warn("Failed to set " .. var .. ". Avante won't work as expected", { once = true }) end end @@ -137,7 +137,7 @@ function E.setup(opts) "noice", } - if not vim.tbl_contains(exclude_filetypes, vim.bo.filetype) and not opts.provider.has() then + if not vim.tbl_contains(exclude_filetypes, vim.bo.filetype) and not opts.provider.is_env_set() then DressingState.winid = api.nvim_get_current_win() vim.ui.input({ default = "", prompt = "Enter " .. var .. ": " }, on_confirm) for _, winid in ipairs(api.nvim_list_wins()) do @@ -203,7 +203,9 @@ M = setmetatable(M, { ---@diagnostic disable: undefined-field,no-unknown,inject-field if Config.vendors[k] ~= nil then - Opts.parse_response = Opts.parse_response_data + if Opts.parse_response_data ~= nil then + Utils.error("parse_response_data is not supported for avante.nvim vendors") + end if Opts.__inherited_from ~= nil then local BaseOpts = M.get_config(Opts.__inherited_from) local ok, module = pcall(require, "avante.providers." .. Opts.__inherited_from) @@ -223,9 +225,9 @@ M = setmetatable(M, { -- default to gpt-4o as tokenizer if t[k].tokenizer_id == nil then t[k].tokenizer_id = "gpt-4o" end - if t[k].use_xml_format == nil then t[k].use_xml_format = false end + if t[k].use_xml_format == nil then t[k].use_xml_format = true end - if t[k].has == nil then t[k].has = function() return E.parse_envvar(t[k]) ~= nil end end + if t[k].is_env_set == nil then t[k].is_env_set = function() return E.parse_envvar(t[k]) ~= nil end end if t[k].setup == nil then local provider_conf = M.parse_config(t[k]) diff --git a/lua/avante/types.lua b/lua/avante/types.lua index a5debcb..e8dea6b 100644 --- a/lua/avante/types.lua +++ b/lua/avante/types.lua @@ -243,7 +243,6 @@ vim.g.avante_login = vim.g.avante_login ---@alias AvanteLLMConfigHandler fun(opts: AvanteSupportedProvider): AvanteDefaultBaseProvider, table --- ---@class AvanteProvider: AvanteSupportedProvider ----@field parse_response_data AvanteResponseParser ---@field parse_curl_args? AvanteCurlArgsParser ---@field parse_stream_data? AvanteStreamParser ---@field parse_api_key? fun(): string | nil @@ -254,7 +253,7 @@ vim.g.avante_login = vim.g.avante_login ---@field parse_response AvanteResponseParser ---@field parse_curl_args AvanteCurlArgsParser ---@field setup fun(): nil ----@field has fun(): boolean +---@field is_env_set fun(): boolean ---@field api_key_name string ---@field tokenizer_id string | "gpt-4o" ---@field use_xml_format boolean @@ -263,18 +262,7 @@ vim.g.avante_login = vim.g.avante_login ---@field parse_stream_data? AvanteStreamParser ---@field on_error? fun(result: table): nil --- ----@class AvanteBedrockProviderFunctor ----@field parse_response AvanteResponseParser ----@field parse_curl_args AvanteCurlArgsParser ----@field setup fun(): nil ----@field has fun(): boolean ----@field api_key_name string ----@field tokenizer_id string | "gpt-4o" ----@field use_xml_format boolean ----@field model? string ----@field parse_api_key fun(): string | nil ----@field parse_stream_data? AvanteStreamParser ----@field on_error? fun(result: table): nil +---@class AvanteBedrockProviderFunctor: AvanteProviderFunctor ---@field load_model_handler fun(): AvanteBedrockModelHandler ---@field build_bedrock_payload? fun(prompt_opts: AvantePromptOptions, body_opts: table): table ---