🤗 Hugging Face Code Completion for Neovim
WIP: this is a PoC at the moment
hfcc.nvim is an autocompletion plugin similar to Copilot with the added benefit of letting you pick your model on the Hugging Face Hub.
You can also use any HTTP endpoint you want, provided it adheres to the API specified here.
This project is influenced by copilot.lua and tabnine-nvim
Install
-
Create and get your API token from here https://huggingface.co/settings/tokens.
-
Define how the plugin will read your token. For this you have multiple options, in order of precedence:
- Pass
api_token = <your token>
in plugin opts - this is not recommended if you use a versioning tool for your configuration files - Set the
HUGGING_FACE_HUB_TOKEN
environment variable - You can define your
HF_HOME
environment variable and create a file containing your token at$HF_HOME/token
- Install the huggingface-cli and run
huggingface-cli login
- this will prompt you to enter your token and set it at the right path
- Pass
-
Choose your model on the Hugging Face Hub, and, in order of precedence, you can either:
- Set the
HUGGING_FACE_HUB_MODEL
environment variable - Pass
model = <model token>
in plugin opts
- Set the
packer
Usingrequire("packer").startup(function(use)
use {
'huggingface/hfcc.nvim',
config = function()
require('hfcc').setup({
-- cf Setup
})
end
}
end)
lazy.nvim
Usingrequire("lazy").setup({
{
'huggingface/hfcc.nvim',
opts = {
-- cf Setup
}
},
})
vim-plug
UsingPlug 'huggingface/hfcc.nvim'
require('hfcc').setup({
-- cf Setup
})
Setup
local hfcc = require('hfcc')
hfcc.setup({
api_token = nil, -- cf Install paragraph
model = "bigcode/starcoder", -- can be a model ID or an http(s) endpoint
-- parameters that are added to the request body
query_params = {
max_new_tokens = 60,
temperature = 0.2,
top_p = 0.95,
stop_token = "<|endoftext|>",
},
-- set this if the model supports fill in the middle
fim = {
enabled = true,
prefix = "<fim_prefix>",
middle = "<fim_middle>",
suffix = "<fim_suffix>",
},
debounce_ms = 80,
accept_keymap = "<Tab>",
dismiss_keymap = "<S-Tab>",
max_context_after = 5000,
max_context_before = 5000,
tls_skip_verify_insecure = false,
})
Commands
There are currently two commands:
HFccSuggestion
which was left in case people depended on it, depending on feedback will probably be removedHFccToggleAutoSuggest
which enables/disables insert mode suggest-as-you-type suggestions