lua/llm/config.lua (98 lines of code) (raw):

---@class llm_config local default_config = { api_token = nil, model = "bigcode/starcoder2-15b", backend = "huggingface", url = nil, tokens_to_clear = { "<|endoftext|>" }, ---@class llm_config_request_body request_body = { parameters = { max_new_tokens = 60, temperature = 0.2, top_p = 0.95, }, }, ---@class llm_config_fim fim = { enabled = true, prefix = "<fim_prefix>", middle = "<fim_middle>", suffix = "<fim_suffix>", }, debounce_ms = 150, accept_keymap = "<Tab>", dismiss_keymap = "<S-Tab>", tls_skip_verify_insecure = false, ---@class llm_config_lsp lsp = { bin_path = nil, host = nil, port = nil, cmd_env = nil, version = "0.5.3", }, tokenizer = nil, context_window = 1024, enable_suggestions_on_startup = true, ---@type string|table enable_suggestions_on_files = "*", disable_url_path_completion = false, } local default_request_bodies = { ollama = { options = { temperature = 0.2, top_p = 0.95, }, }, openai = { temperature = 0.2, top_p = 0.95, }, } local M = { config = nil, } function M.get_token() local api_token = os.getenv("LLM_NVIM_HF_API_TOKEN") if api_token == nil then local default_home = "" if vim.fn.has("win32") == 1 then default_home = os.getenv("USERPROFILE") .. "/.cache" else default_home = os.getenv("HOME") .. "/.cache" end local hf_cache_home = os.getenv("HF_HOME") or (default_home .. "/huggingface") local f = io.open(hf_cache_home .. "/token", "r") if not f then api_token = nil else api_token = string.gsub(f:read("*a"), "[\n\r]", "") f:close() end end return api_token end function M.setup(opts) if M.config then vim.notify("[LLM] config is already set", vim.log.levels.WARN) return M.config end local config = vim.tbl_deep_extend("force", default_config, opts or {}) if config.backend ~= "huggingface" and config.backend ~= "tgi" then local def_req_body = default_request_bodies[config.backend] or {} if opts and opts.request_body ~= nil then config.request_body = vim.tbl_deep_extend("force", def_req_body, opts.request_body) else config.request_body = def_req_body end end if config.api_token == nil then config.api_token = M.get_token() end M.config = config return M.config end function M.get() if not M.config then error("[LLM] not initialized") end return M.config end return M