From f27115f7c053d1d8e4b2af4b7506210fffc51c95 Mon Sep 17 00:00:00 2001 From: Elvis Claros Castro Date: Thu, 9 Jan 2025 10:33:28 -0300 Subject: =?UTF-8?q?Feat:=20agrego=20m=C3=A1s=20plugins?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/plugins/codecompanion.lua | 146 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 135 insertions(+), 11 deletions(-) (limited to 'lua/plugins/codecompanion.lua') diff --git a/lua/plugins/codecompanion.lua b/lua/plugins/codecompanion.lua index a98a7af..324f4d2 100644 --- a/lua/plugins/codecompanion.lua +++ b/lua/plugins/codecompanion.lua @@ -1,15 +1,139 @@ +local IS_DEV = false return { - "olimorris/codecompanion.nvim", - dependencies = { - "nvim-lua/plenary.nvim", + { "nvim-treesitter/nvim-treesitter", - "hrsh7th/nvim-cmp", -- Optional: For using slash commands and variables in the chat buffer - "nvim-telescope/telescope.nvim", -- Optional: For using slash commands - { - "MeanderingProgrammer/render-markdown.nvim", - ft = { "markdown", "codecompanion" }, - }, -- Optional: For prettier markdown rendering - { "stevearc/dressing.nvim", opts = {} }, -- Optional: Improves `vim.ui.select` + opts = { ensure_installed = { "yaml", "markdown" } }, + }, + { + dir = IS_DEV and "~/Projects/research/codecompanion.nvim" or nil, + "olimorris/codecompanion.nvim", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-treesitter/nvim-treesitter", + "ibhagwan/fzf-lua", -- For fzf provider, file or buffer picker + "jellydn/spinner.nvim", -- Show loading spinner when request is started + }, + opts = { + adapters = { + ollama = function() + return require("codecompanion.adapters").extend("ollama", { + name = "tinyllama", + env = { + url = "http://127.0.0.1:11434", + -- api_key = "", + }, + headers = { + ["Content-Type"] = "application/json", + -- ["Authorization"] = "Bearer ${api_key}", + }, + parameters = { + sync = true, + }, + schema = { + model = { + default = "tinyllama:1.1b", + }, + }, + }) + end, + anthropic = function() + return require("codecompanion.adapters").extend("anthropic", { + env = { + api_key = "cmd:echo $ANTHROPIC_API_KEY", + }, + schema = { + model = { + default = "claude-3-opus-20240229", + }, + }, + }) + end, + copilot = function() + return require("codecompanion.adapters").extend("copilot", { + schema = { + model = { + default = "claude-3.5-sonnet", + }, + }, + }) + end, + gemini = function() + return require("codecompanion.adapters").extend("gemini", { + env = { + api_key = "cmd:op read op://personal/Gemini_API/credential --no-newline", + }, + }) + end, + openai = function() + return require("codecompanion.adapters").extend("openai", { + env = { + api_key = "cmd:echo $OPENAI_API_KEY", + chat_url = "/v1/chat/completions", + url = "https://api.openai.com", + }, + schema = { + model = { + default = function() + return "gpt-4o-mini" + end, + }, + }, + }) + end, + openai_compatible = function() + return require("codecompanion.adapters").extend("openai_compatible", { + env = { + api_key = "cmd:echo $OPENAI_API_KEY", + chat_url = "/v1/chat/completions", + url = "http://127.0.0.1:8080", + }, + headers = { + ["Content-Type"] = "application/json", + }, + schema = { + model = { + default = function() + return "davinci" + end, + }, + }, + }) + end, + xai = function() + return require("codecompanion.adapters").extend("xai", { + env = { + api_key = "cmd:op read op://personal/xAI_API/credential --no-newline", + }, + }) + end, + }, + strategies = { + chat = { + adapter = "copilot", + -- roles = { llm = " Copilot Chat", user = "IT Man" }, + }, + inline = { adapter = "copilot" }, + agent = { adapter = "copilot" }, + }, + }, + config = function(_, options) + require("codecompanion").setup(options) + + -- Show loading spinner when request is started + local spinner = require("spinner") + local group = vim.api.nvim_create_augroup("CodeCompanionHooks", {}) + vim.api.nvim_create_autocmd({ "User" }, { + pattern = "CodeCompanionRequest*", + group = group, + callback = function(request) + if request.match == "CodeCompanionRequestStarted" then + spinner.show() + end + if request.match == "CodeCompanionRequestFinished" then + spinner.hide() + end + end, + }) + end, }, - config = true, } -- cgit v1.2.3