From a7052aca0bdfb93e524f0536ac80e6c542962f47 Mon Sep 17 00:00:00 2001 From: Peter Cardenas <16930781+PeterCardenas@users.noreply.github.com> Date: Mon, 6 Oct 2025 03:21:50 -0700 Subject: [PATCH] feat: allow switching between acp providers with AvanteSwitchProvider (#2746) --- lua/avante/providers/init.lua | 10 +++++++--- plugin/avante.lua | 11 +++++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lua/avante/providers/init.lua b/lua/avante/providers/init.lua index d210eb6..d331297 100644 --- a/lua/avante/providers/init.lua +++ b/lua/avante/providers/init.lua @@ -229,9 +229,13 @@ end function M.refresh(provider_name) require("avante.config").override({ provider = provider_name }) - ---@type AvanteProviderFunctor | AvanteBedrockProviderFunctor - local p = M[Config.provider] - E.setup({ provider = p, refresh = true }) + if Config.acp_providers[provider_name] then + Config.provider = provider_name + else + ---@type AvanteProviderFunctor | AvanteBedrockProviderFunctor + local p = M[Config.provider] + E.setup({ provider = p, refresh = true }) + end Utils.info("Switch to provider: " .. provider_name, { once = true, title = "Avante" }) end diff --git a/plugin/avante.lua b/plugin/avante.lua index 161d25a..adf8327 100644 --- a/plugin/avante.lua +++ b/plugin/avante.lua @@ -128,8 +128,15 @@ cmd("SwitchProvider", function(opts) require("avante.api").switch_provider(vim.t desc = "avante: switch provider", complete = function(_, line, _) local prefix = line:match("AvanteSwitchProvider%s*(.*)$") or "" - ---@param key string - return vim.tbl_filter(function(key) return key:find(prefix, 1, true) == 1 end, vim.tbl_keys(Config.providers)) + local providers = vim.tbl_filter( + ---@param key string + function(key) return key:find(prefix, 1, true) == 1 end, + vim.tbl_keys(Config.providers) + ) + for acp_provider_name, _ in pairs(Config.acp_providers) do + if acp_provider_name:find(prefix, 1, true) == 1 then providers[#providers + 1] = acp_provider_name end + end + return providers end, }) cmd(