Skip to content

Commit 1ee5a5e

Browse files
committed
Changes
1 parent 593eb95 commit 1ee5a5e

File tree

7 files changed

+60
-31
lines changed

7 files changed

+60
-31
lines changed

init/10-local:cody.lua

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
require "cody"
1+
local cody = require "cody"
2+
local c = cody.config
3+
c.autocomplete.enable = false

init/50-maps-misc.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ vim.keymap.set("i", "<c-y>", "<c-o><c-y>")
158158

159159
-- readline
160160
vim.keymap.set({"i", "c"}, "<c-a>", "<Home>")
161+
vim.keymap.set({"i", "c"}, "", "<c-w>")
161162

162163
-- Motions & Text Objects {{{1
163164

init/50-maps-misc.vim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ nnoremap <silent> [T <cmd>tabmove -1<cr>
6161
nnoremap <silent> ]T <cmd>tabmove +1<cr>
6262
6363
" quickfix browse
64-
nnoremap <silent> [c <cmd>cprev<cr>
65-
nnoremap <silent> ]c <cmd>cnext<cr>
64+
nnoremap <silent> [q <cmd>cprev<cr>
65+
nnoremap <silent> ]q <cmd>cnext<cr>
6666
nnoremap <silent> [l <cmd>lprev<cr>
6767
nnoremap <silent> ]l <cmd>lnext<cr>
6868
nnoremap <silent> ]d <cmd>lua vim.diagnostic.goto_next()<cr>

init/51-leader.lua

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,12 @@ vim.keymap.set("n", "<leader>os", [[<cmd>set spell! | set spell?<cr>]])
1515
vim.keymap.set("n", "<leader>on", [[<cmd>set relativenumber! | set relativenumber?<cr>]])
1616
vim.keymap.set("n", "<leader>od", [[<cmd>if &diff | diffoff | else | diffthis | endif | set diff?<cr>]])
1717
vim.keymap.set("n", "<leader>oq", [[<cmd>if getqflist({"winid":0}).winid | cclose | else | botright copen | endif<cr>]])
18-
vim.keymap.set("n", "<leader>oc", [[<cmd>if getloclist(0, {"winid":0}).winid | lclose | else | botright lopen | endif<cr>]])
19-
-- vim.keymap.set("n", "<leader>ol", function()
20-
-- if vim.fn.getqflist({ winid = 0 }).winid ~= 0 then
21-
-- vim.cmd("cclose")
22-
-- else
23-
-- require "vimrc.diagnostic".load_qf()
24-
-- vim.cmd("botright copen")
25-
-- end
26-
-- end)
18+
vim.keymap.set("n", "<leader>ol", [[<cmd>if getloclist(0, {"winid":0}).winid | lclose | else | botright lopen | endif<cr>]])
19+
vim.keymap.set("n", "<leader>oa", function()
20+
local cody = require "cody"
21+
cody.config.autocomplete.enable = not cody.config.autocomplete.enable
22+
print((cody.config.autocomplete.enable and " " or "no") .. "aicomplete")
23+
end)
2724

2825
-- Splits
2926
vim.keymap.set("n", "<leader>s", "<nop>")
@@ -55,7 +52,7 @@ vim.keymap.set("n", "<leader>fu", function()
5552
[""] = '"',
5653
}
5754
for k, v in pairs(reps) do
58-
vim.cmd("keepjumps keeppatterns %s/" .. k .. "/" .. v "/ge")
55+
vim.cmd("keepjumps keeppatterns %s/" .. k .. "/" .. v .. "/ge")
5956
end
6057
end)
6158

lua/cody/api.lua

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,11 @@ local function handle_syscomplete(context, results)
5858
end
5959
end
6060

61-
-- See https://github.com/sourcegraph/openapi for docs
61+
---@class cody.ApiResponse
62+
---@field wait fun(): table
63+
64+
--- See https://github.com/sourcegraph/openapi for docs
65+
---@return cody.ApiResponse
6266
function M.request(method, path, data, cb)
6367
if vim.env.SRC_ENDPOINT == nil or vim.env.SRC_ACCESS_TOKEN == nil then
6468
error("SRC_ENDPOINT and SRC_ACCESS_TOKEN must be set")

lua/cody/autocomplete.lua

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ local M = {}
66
---@return cody.PromptParams
77
local function gather_context(buf, linenr, colnr, tokens)
88
local path = vim.api.nvim_buf_get_name(buf)
9-
local context_bytes = tokens * config.chars_per_token * config.context_proportion
9+
local context_bytes = tokens * config.chars_per_token * config.autocomplete.context_proportion
1010

1111
-- Context around the cursor
1212
local affix_size = math.floor(context_bytes / 2)
@@ -30,16 +30,34 @@ local function gather_context(buf, linenr, colnr, tokens)
3030
}
3131
end
3232

33-
local function current_model_config()
34-
if not (vim.env.SRC_ENDPOINT and vim.env.SRC_ACCESS_TOKEN) then
35-
return nil
33+
---@return string|nil name
34+
---@return cody.ModelConfig|nil mc
35+
function M.get_model(setdefault)
36+
if not (vim.env.SRC_ENDPOINT and vim.env.SRC_ACCESS_TOKEN and config.autocomplete.enable) then
37+
return nil, nil
3638
end
37-
local cody_models = require "cody.models"
38-
return cody_models.models[config.autocomplete_model]
39+
40+
if setdefault and config.autocomplete.model == nil then
41+
local req = api.request("GET", "/.api/modelconfig/supported-models.json")
42+
local ok, response = pcall(req.wait, req)
43+
if ok and response.defaultModels and response.defaultModels.codeCompletion then
44+
config.autocomplete.model = response.defaultModels.codeCompletion
45+
else
46+
config.autocomplete.model = "(could not load default)"
47+
end
48+
end
49+
50+
local mc = (require "cody.models").models[config.autocomplete.model]
51+
if not mc then
52+
return nil, nil
53+
end
54+
55+
return config.autocomplete.model, mc
3956
end
4057

4158
function M:is_available()
42-
return not not current_model_config()
59+
local name, mc = M.get_model(false)
60+
return mc ~= nil
4361
end
4462

4563
function M:get_trigger_characters()
@@ -57,16 +75,16 @@ function M:complete(params, callback)
5775
local linenr = params.context.cursor.row
5876
local colnr = params.context.cursor.col
5977

78+
local name, mc = M.get_model(true)
6079
---@type cody.ModelConfig|nil
61-
local mc = current_model_config()
6280
if not mc then
6381
return
6482
end
6583

6684
-- Generate request body
6785
local prompt_params = gather_context(params.context.bufnr, linenr, colnr, mc.contextTokens)
6886
local body = {
69-
model = config.autocomplete_model,
87+
model = name,
7088

7189
stopSequences = mc.stopSequences,
7290
maxTokensToSample = mc.autoCompleteMultilineMaxTokens,

lua/cody/config.lua

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
1-
local M = {}
1+
return {
22

3-
M.autocomplete_model = "fireworks::v1::deepseek-coder-v2-lite-base" --[[@as cody.ModelName]]
3+
-- For Claude, a token approximately represents 3.5 English characters.
4+
-- see: https://docs.anthropic.com/claude/docs/glossary#tokens
5+
chars_per_token = 3.5,
46

5-
-- For Claude, a token approximately represents 3.5 English characters.
6-
-- see: https://docs.anthropic.com/claude/docs/glossary#tokens
7-
M.chars_per_token = 3.5
7+
-- Settings for autocomplete
8+
autocomplete = {
9+
enable = true,
810

9-
-- The proportion of the token limit that should used for context.
10-
M.context_proportion = 0.9
11+
-- cody.ModelName, or nil to fetch the default complete model from
12+
-- sourcegraph
13+
model = "fireworks::v1::deepseek-coder-v2-lite-base",
1114

12-
return M
15+
-- The proportion of the token limit that should used for context.
16+
context_proportion = 0.9,
17+
},
18+
19+
}

0 commit comments

Comments
 (0)