diff options
Diffstat (limited to 'lua/plugins/codecompanion.lua')
| -rw-r--r-- | lua/plugins/codecompanion.lua | 260 |
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", |