aboutsummaryrefslogtreecommitdiffstats
path: root/lua/plugins/codecompanion.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/plugins/codecompanion.lua')
-rw-r--r--lua/plugins/codecompanion.lua260
1 files changed, 102 insertions, 158 deletions
diff --git a/lua/plugins/codecompanion.lua b/lua/plugins/codecompanion.lua
index e5f087f..ddd209b 100644
--- a/lua/plugins/codecompanion.lua
+++ b/lua/plugins/codecompanion.lua
@@ -1,27 +1,3 @@
--- Choose default model from a list of preferred models. Fall back to first
--- available.
-local function preferred_model_picker(preferred)
- return function(self)
- if self == nil then
- -- Debug:render() calls Adapter.schema.model.default() but doesn't pass
- -- in `self`. Just return an empty string in this case.
- return ""
- end
-
- local choices = self.schema.model.choices(self)
-
- for _, best in ipairs(preferred) do
- for _, choice in ipairs(choices) do
- if choice:find(best, 1, true) then
- return choice
- end
- end
- end
-
- return choices[1]
- end
-end
-
local IS_DEV = false
return {
{
@@ -53,148 +29,112 @@ return {
opts = {
log_level = "TRACE", -- or "DEBUG"
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 = preferred_model_picker {
- "qwen2.5-coder:14b",
- "qwen2.5-coder:7b",
- "qwen2.5-coder:3b",
- "qwen2.5-coder:1.5b",
- "qwen2.5-coder:0.5b",
+ http = {
+ 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 = "qwen2.5-coder:0.5b",
},
},
- },
- })
- 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,
+ anthropic = function()
+ return require("codecompanion.adapters").extend("anthropic", {
+ env = {
+ api_key = "cmd:echo $ANTHROPIC_API_KEY",
},
- },
- })
- end,
- copilot = function()
- return require("codecompanion.adapters").extend("copilot", {
- schema = {
- model = {
- default = "gpt-4.1",
+ schema = {
+ model = {
+ default = "claude-3-opus-20240229",
+ },
},
- },
- })
- 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,
+ copilot = function()
+ return require("codecompanion.adapters").extend("copilot", {
+ schema = {
+ model = {
+ default = "gpt-4.1",
+ },
},
- },
- })
- 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:8012",
- },
- headers = {
- ["Content-Type"] = "application/json",
- },
- schema = {
- model = {
- default = function()
- return "davinci"
- end,
+ })
+ end,
+ gemini = function()
+ return require("codecompanion.adapters").extend("gemini", {
+ env = {
+ api_key = "cmd:op read op://personal/Gemini_API/credential --no-newline",
},
- },
- })
- end,
- xai = function()
- return require("codecompanion.adapters").extend("xai", {
- env = {
- api_key = "cmd:op read op://personal/xAI_API/credential --no-newline",
- },
- })
- end,
- deepseek = function()
- return require("codecompanion.adapters").extend("openai_compatible", {
- env = {
- api_key = "cmd:echo $AZ_DS_API_KEY",
- url = "https://DeepSeek-R1-ajfsk.eastus2.models.ai.azure.com",
- },
- schema = {
- model = {
- default = "deepseek-chat",
+ })
+ 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",
},
- },
- })
- end,
- -- deepseek = function()
- -- return require("codecompanion.adapters").extend("deepseek", {
- -- env = {
- -- api_key = "cmd:echo $OPENAI_API_KEY",
- -- chat_url = "/v1/chat/completions",
- -- url = "http://127.0.0.1:8012",
- -- },
- -- headers = {
- -- ["Content-Type"] = "application/json",
- -- },
- -- schema = {
- -- model = {
- -- default = function()
- -- return "davinci"
- -- end,
- -- },
- -- },
- -- })
- -- end,
- azure_openai = function()
- return require("codecompanion.adapters").extend("azure_openai", {
- env = {
- api_key = "cmd:echo $AZ_DS_API_KEY",
- endpoint = "https://DeepSeek-R1-nphob.eastus2.models.ai.azure.com",
- },
- schema = {
- model = {
- default = "DeepSeek-R1-nphob",
+ schema = {
+ model = {
+ default = function()
+ return "gpt-4o-mini"
+ end,
+ },
},
- },
- })
- 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:8012",
+ },
+ 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,
+ azure_openai = function()
+ return require("codecompanion.adapters").extend("azure_openai", {
+ env = {
+ api_key = "cmd:echo $AZ_DS_API_KEY",
+ endpoint = "https://DeepSeek-R1-nphob.eastus2.models.ai.azure.com",
+ },
+ schema = {
+ model = {
+ default = "DeepSeek-R1-nphob",
+ },
+ },
+ })
+ end,
+ },
},
display = {
diff = {
@@ -208,11 +148,15 @@ return {
},
inline = { adapter = "copilot" },
agent = { adapter = "copilot" },
+ cmd = { adapter = "copilot" },
},
},
config = function(_, options)
require("codecompanion").setup(options)
require("codecompanion").setup {
+ opts = {
+ language = "English",
+ },
extensions = {
mcphub = {
callback = "mcphub.extensions.codecompanion",