feat(llm): support local LLM (#86)

Signed-off-by: Aaron Pham <contact@aarnphm.xyz>
This commit is contained in:
Aaron Pham
2024-08-19 08:35:36 -04:00
committed by GitHub
parent 330d214c14
commit 02eb39ae48
3 changed files with 67 additions and 5 deletions

View File

@@ -28,16 +28,23 @@ local E = {
},
}
E = setmetatable(E, {
setmetatable(E, {
---@param k Provider
__index = function(_, k)
local builtins = E.env[k]
if builtins then
if Config.options[k]["local"] then
return true
end
return os.getenv(builtins) and true or false
end
---@type AvanteProvider | nil
local external = Config.vendors[k]
if external then
if external["local"] then
return true
end
return os.getenv(external.api_key_name) and true or false
end
end,
@@ -46,6 +53,7 @@ E = setmetatable(E, {
---@private
E._once = false
---@param provider Provider
E.is_default = function(provider)
return E.env[provider] and true or false
end
@@ -60,6 +68,7 @@ E.key = function(provider)
return E.env[provider]
end
---@type AvanteProvider | nil
local external = Config.vendors[provider]
if external then
return external.api_key_name
@@ -68,8 +77,22 @@ E.key = function(provider)
end
end
---@param provider Provider
E.is_local = function(provider)
if Config.options[provider] then
return Config.options[provider]["local"]
elseif Config.vendors[provider] then
return Config.vendors[provider]["local"]
else
return false
end
end
---@param provider? Provider
E.value = function(provider)
if E.is_local(provider or Config.provider) then
return "dummy"
end
return os.getenv(E.key(provider or Config.provider))
end
@@ -88,7 +111,7 @@ E.setup = function(var, refresh)
vim.fn.setenv(var, value)
else
if not E[Config.provider] then
Util.warn("Failed to set " .. var .. ". Avante won't work as expected", { once = true, title = "Avante" })
Utils.warn("Failed to set " .. var .. ". Avante won't work as expected", { once = true, title = "Avante" })
end
end
end
@@ -208,9 +231,22 @@ Remember: Accurate line numbers are CRITICAL. The range start_line to end_line m
---@field on_complete fun(err: string|nil): any
---@alias AvanteResponseParser fun(data_stream: string, event_state: string, opts: ResponseParser): nil
---
---@class AvanteProvider
---@class AvanteDefaultBaseProvider
---@field endpoint string
---@field local? boolean
---
---@class AvanteSupportedProvider: AvanteDefaultBaseProvider
---@field model string
---@field temperature number
---@field max_tokens number
---
---@class AvanteAzureProvider: AvanteDefaultBaseProvider
---@field deployment string
---@field api_version string
---@field temperature number
---@field max_tokens number
---
---@class AvanteProvider: AvanteDefaultBaseProvider
---@field api_key_name string
---@field parse_response_data AvanteResponseParser
---@field parse_curl_args fun(opts: AvanteProvider, code_opts: AvantePromptOptions): AvanteCurlOutput