return { 'frankroeder/parrot.nvim', version = '2.3.0', dependencies = { 'ibhagwan/fzf-lua', 'nvim-lua/plenary.nvim' }, opts = { providers = { anthropic = { name = 'anthropic', endpoint = 'https://api.anthropic.com/v1/messages', model_endpoint = 'https://api.anthropic.com/v1/models', api_key = { '/usr/local/bin/sops', "--config", "/dev/null", "-d", vim.fn.expand("$HOME") .. "/.claude-api" }, headers = function(self) return { ['Content-Type'] = "application/json", ['x-api-key'] = self.api_key, ['anthropic-version'] = "2023-06-01", } end, params = { chat = { max_tokens = 4096 }, command = { max_tokens = 4096 }, }, models = { 'claude-opus-4-1-20250805', 'claude-sonnet-4-5-20250929', }, preprocess_payload = function(payload) for _, message in ipairs(payload.messages) do message.content = message.content:gsub('^%s*(.-)%s*$', "%1") end if payload.messages[1] and payload.messages[1].role == 'system' then -- remove the first message that serves as the system prompt as anthropic -- expects the system prompt to be part of the API call body and not the messages payload.system = payload.messages[1].content table.remove(payload.messages, 1) end return payload end, } } } }