From de1e6a42129d82971d4db0709eb6db2a183355e9 Mon Sep 17 00:00:00 2001 From: Peter Cardenas <16930781+PeterCardenas@users.noreply.github.com> Date: Sun, 2 Mar 2025 23:06:13 -0800 Subject: [PATCH] feat: add custom tools config (#1461) * chore: add string literal types for tool params, and returns * feat: add custom tools config --- lua/avante/config.lua | 3 +++ lua/avante/llm_tools.lua | 4 +++- lua/avante/types.lua | 9 ++++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lua/avante/config.lua b/lua/avante/config.lua index 1ab652980..711363248 100644 --- a/lua/avante/config.lua +++ b/lua/avante/config.lua @@ -17,6 +17,7 @@ local Utils = require("avante.utils") ---@class avante.CoreConfig: avante.Config local M = {} ---@class avante.Config +---@field custom_tools AvanteLLMToolPublic[] M._defaults = { debug = false, ---@alias Provider "claude" | "openai" | "azure" | "gemini" | "vertex" | "cohere" | "copilot" | string @@ -409,6 +410,8 @@ M._defaults = { throttle = 600, }, disabled_tools = {}, ---@type string[] + ---@type AvanteLLMToolPublic[] + custom_tools = {}, } ---@type avante.Config diff --git a/lua/avante/llm_tools.lua b/lua/avante/llm_tools.lua index 635de4dba..94583961f 100644 --- a/lua/avante/llm_tools.lua +++ b/lua/avante/llm_tools.lua @@ -573,8 +573,10 @@ end ---@return AvanteLLMTool[] function M.get_tools() + ---@type AvanteLLMTool[] + local unfiltered_tools = vim.list_extend(vim.list_extend({}, M._tools), Config.custom_tools) return vim - .iter(M._tools) + .iter(unfiltered_tools) :filter(function(tool) ---@param tool AvanteLLMTool -- Always disable tools that are explicitly disabled if vim.tbl_contains(Config.disabled_tools, tool.name) then return false end diff --git a/lua/avante/types.lua b/lua/avante/types.lua index fc214b49d..a44eda15b 100644 --- a/lua/avante/types.lua +++ b/lua/avante/types.lua @@ -328,18 +328,21 @@ vim.g.avante_login = vim.g.avante_login ---@field returns AvanteLLMToolReturn[] ---@field enabled? fun(): boolean +---@class AvanteLLMToolPublic : AvanteLLMTool +---@field func AvanteLLMToolFunc + ---@class AvanteLLMToolParam ----@field type string +---@field type 'table' ---@field fields AvanteLLMToolParamField[] ---@class AvanteLLMToolParamField ---@field name string ---@field description string ----@field type string +---@field type 'string' | 'integer' ---@field optional? boolean ---@class AvanteLLMToolReturn ---@field name string ---@field description string ----@field type string +---@field type 'string' | 'string[]' | 'boolean' ---@field optional? boolean