From bd6ce346c10e9f84d7489c4bfd9ac42960ffe7b7 Mon Sep 17 00:00:00 2001 From: Aaron Pham Date: Tue, 22 Oct 2024 04:37:17 -0400 Subject: [PATCH] fix(copilot): cached tokens to avoid rate limits (closes #557) (#746) --- lua/avante/providers/copilot.lua | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lua/avante/providers/copilot.lua b/lua/avante/providers/copilot.lua index fc7f2b3..eba07c7 100644 --- a/lua/avante/providers/copilot.lua +++ b/lua/avante/providers/copilot.lua @@ -35,6 +35,8 @@ local O = require("avante.providers").openai local H = {} +local copilot_path = vim.fn.stdpath("data") .. "/avante/github-copilot.json" + ---@class OAuthToken ---@field user string ---@field oauth_token string @@ -100,6 +102,8 @@ H.refresh_token = function() on_error = function(err) error("Failed to get response: " .. vim.inspect(err)) end, callback = function(output) M.state.github_token = vim.json.decode(output.body) + local file = Path:new(copilot_path) + file:write(vim.json.encode(M.state.github_token), "w") if not vim.g.avante_login then vim.g.avante_login = true end end, }) @@ -149,10 +153,16 @@ M.parse_curl_args = function(provider, code_opts) end M.setup = function() + local copilot_token_file = Path:new(copilot_path) + if not M.state then - M.state = { github_token = nil, oauth_token = H.get_oauth_token() } - H.refresh_token() + M.state = { + github_token = copilot_token_file:exists() and vim.json.decode(copilot_token_file:read()) or nil, + oauth_token = H.get_oauth_token(), + } end + H.refresh_token() + require("avante.tokenizers").setup(M.tokenizer_id) vim.g.avante_login = true end