Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lanceberge/elysium
Automatically apply AI-generated code changes in Emacs
https://github.com/lanceberge/elysium
ai emacs gpt llm
Last synced: 4 days ago
JSON representation
Automatically apply AI-generated code changes in Emacs
- Host: GitHub
- URL: https://github.com/lanceberge/elysium
- Owner: lanceberge
- License: gpl-3.0
- Created: 2024-08-26T22:55:11.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2024-12-03T22:49:15.000Z (about 2 months ago)
- Last Synced: 2025-01-11T09:08:31.055Z (11 days ago)
- Topics: ai, emacs, gpt, llm
- Language: Emacs Lisp
- Homepage:
- Size: 615 KB
- Stars: 191
- Watchers: 3
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
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.https://github.com/user-attachments/assets/275e292e-c480-48d1-9a13-27664c0bbf12
You can make queries on a region without leaving the the code buffer
https://github.com/user-attachments/assets/73bd4c38-dc03-47b7-b943-a4b9b3203f06
You can make queries on a region without leaving the the code buffer
![](./image/demo2.gif)
# Installation
Elysium is now on Melpa!
```emacs-lisp
(add-to-list 'package-archives
'("melpa-stable" . "https://stable.melpa.org/packages/") t)(use-package elysium)
```# Customization
```emacs-lisp
(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
```emacs-lisp
(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](https://github.com/karthink/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](https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching) with Anthropic to let us send more queries before getting rate-limited