Skip to content

Automatically apply AI-generated code changes in Emacs

License

Notifications You must be signed in to change notification settings

lanceberge/elysium

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

82 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

elysium

This package lets you automatically apply AI-generated changes as you code. Call M-x elysium-query and request a set of changes, and they will be applied to your code buffer as a merge.

Installation

Using straight.el

Toggle
(use-package elysium
  :straight
  (:host github :repo "lanceberge/elysium" :branch "main" :files ("*.el")
  ...)

Using elpaca

Toggle
(use-package elysium
  :ensure (:host github :repo "lanceberge/elysium")
  ...)

Using package.el

Toggle
(use-package elysium
  :vc (:fetcher github :repo lanceberge/elysium)
  ...)

Customization

(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))

Usage

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

Notes

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.

Planned Features

  • Implementing Prompt Caching with Anthropic to let us send more queries before getting rate-limited