From 0642905c8017daeb5fd2ca2892aae22a84721c33 Mon Sep 17 00:00:00 2001 From: yetone Date: Thu, 12 Sep 2024 14:23:00 +0800 Subject: [PATCH] feat: specific provider for auto-suggestions (#569) --- README.md | 1 + lua/avante/config.lua | 1 + lua/avante/llm.lua | 3 ++- lua/avante/suggestion.lua | 7 +++++-- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 461b7a0..fe1f00a 100644 --- a/README.md +++ b/README.md @@ -192,6 +192,7 @@ _See [config.lua#L9](./lua/avante/config.lua) for the full config_ { ---@alias Provider "claude" | "openai" | "azure" | "gemini" | "cohere" | "copilot" | string provider = "claude", -- Recommend using Claude + auto_suggestions_provider = "claude", -- Since auto-suggestions are a high-frequency operation and therefore expensive, it is recommended to specify an inexpensive provider or even a free provider: copilot claude = { endpoint = "https://api.anthropic.com", model = "claude-3-5-sonnet-20240620", diff --git a/lua/avante/config.lua b/lua/avante/config.lua index ebbc31e..c1689d7 100644 --- a/lua/avante/config.lua +++ b/lua/avante/config.lua @@ -11,6 +11,7 @@ M.defaults = { debug = false, ---@alias Provider "claude" | "openai" | "azure" | "gemini" | "cohere" | "copilot" | [string] provider = "claude", -- Only recommend using Claude + auto_suggestions_provider = "claude", ---@alias Tokenizer "tiktoken" | "hf" -- Used for counting tokens and encoding text. -- By default, we will use tiktoken. diff --git a/lua/avante/llm.lua b/lua/avante/llm.lua index 99bc70b..39e2f77 100644 --- a/lua/avante/llm.lua +++ b/lua/avante/llm.lua @@ -33,6 +33,7 @@ local group = api.nvim_create_augroup("avante_llm", { clear = true }) ---@field bufnr integer ---@field instructions string ---@field mode LlmMode +---@field provider AvanteProviderFunctor | nil ---@field on_chunk AvanteChunkParser ---@field on_complete AvanteCompleteParser @@ -40,7 +41,7 @@ local group = api.nvim_create_augroup("avante_llm", { clear = true }) M.stream = function(opts) local mode = opts.mode or "planning" ---@type AvanteProviderFunctor - local Provider = P[Config.provider] + local Provider = opts.provider or P[Config.provider] -- Check if the instructions contains an image path local image_paths = {} diff --git a/lua/avante/suggestion.lua b/lua/avante/suggestion.lua index d20d74a..896f7f0 100644 --- a/lua/avante/suggestion.lua +++ b/lua/avante/suggestion.lua @@ -2,7 +2,7 @@ local Utils = require("avante.utils") local Llm = require("avante.llm") local Highlights = require("avante.highlights") local Config = require("avante.config") -local Provider = require("avante.providers") +local Providers = require("avante.providers") local api = vim.api local fn = vim.fn @@ -37,7 +37,7 @@ function Suggestion:new(id) instance._contexts = {} if Config.behaviour.auto_suggestions then if not vim.g.avante_login or vim.g.avante_login == false then - api.nvim_exec_autocmds("User", { pattern = Provider.env.REQUEST_LOGIN_PATTERN }) + api.nvim_exec_autocmds("User", { pattern = Providers.env.REQUEST_LOGIN_PATTERN }) vim.g.avante_login = true end instance:setup_autocmds() @@ -65,7 +65,10 @@ function Suggestion:suggest() local full_response = "" + local provider = Providers[Config.auto_suggestions_provider] + Llm.stream({ + provider = provider, bufnr = bufnr, ask = true, file_content = code_content,