This package lets you automatically apply AI-generated changes as you code. Call M-x elysium-query
and request a set of changes. They will automatically be merged into your code buffer.
demo.mp4
You can make queries on a region without leaving the the code buffer
demo2.mp4
You can make queries on a region without leaving the the code buffer
Elysium is now on Melpa!
(add-to-list 'package-archives
'("melpa-stable" . "https://stable.melpa.org/packages/") t)
(use-package elysium)
(use-package elysium
:custom
;; Below are the default values
(elysium-window-size 0.33) ; The elysium buffer will be 1/3 your screen
(elysium-window-style 'vertical)) ; Can be customized to horizontal
(use-package gptel
:custom
(gptel-model 'claude-3-5-sonnet-20240620)
:config
(defun read-file-contents (file-path)
"Read the contents of FILE-PATH and return it as a string."
(with-temp-buffer
(insert-file-contents file-path)
(buffer-string)))
(defun gptel-api-key ()
(read-file-contents "~/secrets/claude_key"))
(setq
gptel-backend (gptel-make-anthropic "Claude"
:stream t
:key #'gptel-api-key)))
Use smerge-mode
to then merge in the changes
(use-package smerge-mode
:ensure nil
:hook
(prog-mode . smerge-mode))
Function | Description |
---|---|
elysium-query |
send a query to the gptel backend |
elysium-keep-all-suggested-changes |
keep all of the AI-suggested changes |
elysium-discard-all-suggested-changes |
discard all of the AI-suggested changes |
smerge-next |
go to the next conflicting hunk |
smerge-previous |
go to the next conflicting hunk |
smerge-keep-other |
keep this set of changes |
smerge-keep-mine |
discard this set of changes |
elysium-toggle-window |
toggle the chat window |
elysium
uses gptel as a backend. It supports any of the models supported by gptel
, but currently (9/24)
Claude 3-5 Sonnet seems to be the best for generating code.
If there is a region active, then elysium
will send only that region to the LLM. Otherwise, the entire code buffer will be sent. If you're using Claude
, then I recommend only ever sending a region to avoid getting rate-limited.
- Implementing Prompt Caching with Anthropic to let us send more queries before getting rate-limited