diff --git a/lua/avante/llm_tools/bash.lua b/lua/avante/llm_tools/bash.lua index b3101e3..b532dcf 100644 --- a/lua/avante/llm_tools/bash.lua +++ b/lua/avante/llm_tools/bash.lua @@ -2,14 +2,21 @@ local Path = require("plenary.path") local Utils = require("avante.utils") local Helpers = require("avante.llm_tools.helpers") local Base = require("avante.llm_tools.base") +local Config = require("avante.config") +local Providers = require("avante.providers") ---@class AvanteLLMTool local M = setmetatable({}, Base) M.name = "bash" -M.description = - [[Executes a given bash command in a persistent shell session with optional timeout, ensuring proper handling and security measures. +M.get_description = function() + local provider = Providers[Config.provider] + if Config.provider:match("copilot") and provider.model and provider.model:match("gpt") then + return [[Executes a given bash command in a persistent shell session with optional timeout, ensuring proper handling and security measures.]] + end + + return [[Executes a given bash command in a persistent shell session with optional timeout, ensuring proper handling and security measures. Before executing the command, please follow these steps: @@ -154,6 +161,7 @@ EOF Important: - Return an empty response - the user will see the gh output directly - Never update git config]] +end ---@type AvanteLLMToolParam M.param = { diff --git a/lua/avante/providers/claude.lua b/lua/avante/providers/claude.lua index d591aca..7830d57 100644 --- a/lua/avante/providers/claude.lua +++ b/lua/avante/providers/claude.lua @@ -37,7 +37,7 @@ function M:transform_tool(tool) local input_schema_properties, required = Utils.llm_tool_param_fields_to_json_schema(tool.param.fields) return { name = tool.name, - description = tool.description, + description = tool.get_description and tool.get_description() or tool.description, input_schema = { type = "object", properties = input_schema_properties, diff --git a/lua/avante/providers/openai.lua b/lua/avante/providers/openai.lua index a66b641..9b9bbd5 100644 --- a/lua/avante/providers/openai.lua +++ b/lua/avante/providers/openai.lua @@ -34,7 +34,7 @@ function M:transform_tool(tool) type = "function", ["function"] = { name = tool.name, - description = tool.description, + description = tool.get_description and tool.get_description() or tool.description, parameters = parameters, }, } diff --git a/lua/avante/types.lua b/lua/avante/types.lua index 0cec64b..e6eed1a 100644 --- a/lua/avante/types.lua +++ b/lua/avante/types.lua @@ -345,7 +345,8 @@ vim.g.avante_login = vim.g.avante_login --- ---@class AvanteLLMTool ---@field name string ----@field description string +---@field description? string +---@field get_description? fun(): string ---@field func? AvanteLLMToolFunc ---@field param AvanteLLMToolParam ---@field returns AvanteLLMToolReturn[] @@ -360,7 +361,8 @@ vim.g.avante_login = vim.g.avante_login ---@class AvanteLLMToolParamField ---@field name string ----@field description string +---@field description? string +---@field get_description? fun(): string ---@field type 'string' | 'integer' | 'boolean' | 'object' ---@field fields? AvanteLLMToolParamField[] ---@field optional? boolean diff --git a/lua/avante/utils/init.lua b/lua/avante/utils/init.lua index 4be1c83..015a96d 100644 --- a/lua/avante/utils/init.lua +++ b/lua/avante/utils/init.lua @@ -1208,14 +1208,14 @@ function M.llm_tool_param_fields_to_json_schema(fields) local properties_, required_ = M.llm_tool_param_fields_to_json_schema(field.fields) properties[field.name] = { type = field.type, - description = field.description, + description = field.get_description and field.get_description() or field.description, properties = properties_, required = required_, } else properties[field.name] = { type = field.type, - description = field.description, + description = field.get_description and field.get_description() or field.description, } end if not field.optional then table.insert(required, field.name) end