perf: use envvar whenever possible, and use cmd only as fallback (#228)
Signed-off-by: Aaron Pham <contact@aarnphm.xyz>
This commit is contained in:
parent
85101c1410
commit
a1aed57c60
@ -213,13 +213,15 @@ end
|
|||||||
M.BASE_PROVIDER_KEYS = {
|
M.BASE_PROVIDER_KEYS = {
|
||||||
"endpoint",
|
"endpoint",
|
||||||
"model",
|
"model",
|
||||||
"local",
|
|
||||||
"deployment",
|
"deployment",
|
||||||
"api_version",
|
"api_version",
|
||||||
"proxy",
|
"proxy",
|
||||||
"allow_insecure",
|
"allow_insecure",
|
||||||
"api_key_name",
|
"api_key_name",
|
||||||
"timeout",
|
"timeout",
|
||||||
|
-- internal
|
||||||
|
"local",
|
||||||
|
"_shellenv",
|
||||||
}
|
}
|
||||||
|
|
||||||
---@return {width: integer, height: integer}
|
---@return {width: integer, height: integer}
|
||||||
|
@ -47,6 +47,7 @@ local Dressing = require("avante.ui.dressing")
|
|||||||
---@field proxy? string
|
---@field proxy? string
|
||||||
---@field allow_insecure? boolean
|
---@field allow_insecure? boolean
|
||||||
---@field api_key_name? string
|
---@field api_key_name? string
|
||||||
|
---@field _shellenv? string
|
||||||
---
|
---
|
||||||
---@class AvanteSupportedProvider: AvanteDefaultBaseProvider
|
---@class AvanteSupportedProvider: AvanteDefaultBaseProvider
|
||||||
---@field temperature? number
|
---@field temperature? number
|
||||||
@ -108,7 +109,19 @@ E.parse_envvar = function(Opts)
|
|||||||
local cmd = api_key_name:match("^cmd:(.*)")
|
local cmd = api_key_name:match("^cmd:(.*)")
|
||||||
|
|
||||||
local key = nil
|
local key = nil
|
||||||
|
|
||||||
if cmd ~= nil then
|
if cmd ~= nil then
|
||||||
|
-- NOTE: in case api_key_name is cmd, and users still set envvar
|
||||||
|
-- We will try to get envvar first
|
||||||
|
if Opts._shellenv ~= nil and Opts._shellenv ~= M.AVANTE_INTERNAL_KEY then
|
||||||
|
key = os.getenv(Opts._shellenv)
|
||||||
|
if key ~= nil then
|
||||||
|
E.cache[Opts._shellenv] = key
|
||||||
|
E.cache[api_key_name] = key
|
||||||
|
end
|
||||||
|
return key
|
||||||
|
end
|
||||||
|
|
||||||
local result = vim.system(vim.split(cmd, " ", { trimempty = true }), { text = true }):wait()
|
local result = vim.system(vim.split(cmd, " ", { trimempty = true }), { text = true }):wait()
|
||||||
key = vim.split(result.stdout, "\n")[1]
|
key = vim.split(result.stdout, "\n")[1]
|
||||||
else
|
else
|
||||||
@ -210,7 +223,12 @@ M = setmetatable(M, {
|
|||||||
Opts.parse_response = Opts.parse_response_data
|
Opts.parse_response = Opts.parse_response_data
|
||||||
t[k] = Opts
|
t[k] = Opts
|
||||||
else
|
else
|
||||||
t[k] = vim.tbl_deep_extend("keep", Opts, require("avante.providers." .. k))
|
local ok, module = pcall(require, "avante.providers." .. k)
|
||||||
|
if not ok then
|
||||||
|
error("Failed to load provider: " .. k)
|
||||||
|
end
|
||||||
|
Opts._shellenv = module.api_key_name ~= M.AVANTE_INTERNAL_KEY and module.api_key_name or nil
|
||||||
|
t[k] = vim.tbl_deep_extend("keep", Opts, module)
|
||||||
end
|
end
|
||||||
|
|
||||||
t[k].parse_api_key = function()
|
t[k].parse_api_key = function()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user