Автозаполнение с использованием GPT, используя данные из истории команд Atuin в качестве приглашения для ввода. Использует потоковую передачу ответов, чтобы очень быстро получить первый ответ. README составляется за считанные минуты, я исправлю его в ближайшее время.
pip install --user tiktoken openai
должно быть достаточно, или вы можете сделать для них venv и указать конфигурации оболочки на правильный Python.
fzf для выбора правильного результата.
Добавьте это в config.nu:
{
name: complete_with_gtp
modifier: CONTROL
keycode: Char_o
mode: [emacs vi_normal vi_insert]
event:[
{ send: executehostcommand,
cmd: "commandline -r (python /path/to/completer.py (commandline) | fzf --track --height 8)"
}
{ send: Enter }
]
}
Для настройки config.fish:
function gpt_completion
commandline (python /path/to/completer.py (commandline) | fzf --track --height 8)
end
bind ck "gpt_completion"
--atuin
: расположение базы данных истории atuin
--dunst
: использовать dunstify для уведомления о том, что происходит (в основном отладка)
--model
: gpt-3.5-турбо или gpt-4. При таком использовании GPT-4 кажется мне намного медленнее.
--wezterm
: добавить содержимое экрана из Wezterm
Это делает несколько запросов к базе данных Atuin, поэтому еще несколько индексов могут значительно ускорить ее:
sqlite3 ~/.local/share/atuin/history.db
CREATE INDEX idx_history_cwd on history(cwd);
CREATE INDEX idx_history_session on history(session);
Если вы используете Wezterm, вы также можете добавить текущее содержимое экрана терминала в приглашение GPT, что может быть полезно, если есть некоторые сообщения об ошибках, которые могут помочь сгенерировать правильную командную строку. В этом случае добавьте -w для командной строки Completer.py.
Get-text Китти прокомментирован в коде, так как мне не удалось заставить его работать прямо сейчас, я скоро это исправлю или дайте мне знать, если вы найдете способ.
Это было опубликовано довольно поспешно, поскольку Атуин попал на первую полосу HN. Код ужасен, там закомментировано куча полуготовых функций, и я особо не тестировал их. Возможно, потребуются некоторые исправления для нормальной работы в других местах. В ближайшие дни посмотрю, почищу.