Ellama is a tool for interacting with large language models from Emacs. It allows you to ask questions and receive responses from the LLMs. Ellama can perform various tasks such as translation, code review, summarization, enhancing grammar/spelling or wording and more through the Emacs interface. Ellama natively supports streaming output, making it effortless to use with your preferred text editor.
Install the package ellama
from
MELPA. Just M-x
package-install
Enter ellama
Enter.
By default it uses ollama
provider and zephyr model. If you
ok with it, you need to install
ollama and pull
zephyr. You can use ellama
with
other model or other llm provider. In that case you should customize
ellama configuration like this:
(use-package ellama
:init
(setopt ellama-language "German")
(require 'llm-ollama)
(setopt ellama-provider
(make-llm-ollama
:chat-model "zephyr:7b-beta-q6_K" :embedding-model "zephyr:7b-beta-q6_K"))
;; Predefined llm providers for interactive switching.
;; You shouldn't add ollama providers here - it can be selected interactively
;; without it. It is just example.
(setopt ellama-providers
'(("zephyr" . (make-llm-ollama
:chat-model "zephyr:7b-beta-q6_K"
:embedding-model "zephyr:7b-beta-q6_K"))
("mistral" . (make-llm-ollama
:chat-model "mistral:7b-instruct-v0.2-q6_K"
:embedding-model "mistral:7b-instruct-v0.2-q6_K"))
("mixtral" . (make-llm-ollama
:chat-model "mixtral:8x7b-instruct-v0.1-q3_K_M-4k"
:embedding-model "mixtral:8x7b-instruct-v0.1-q3_K_M-4k")))))
Ask Ellama about something by entering a prompt in an interactive buffer and continue conversation.
Ask Ellama about a selected region or the current buffer.
Send selected region or current buffer to ellama chat.
Send current line to ellama chat.
Complete text in current buffer with ellama.
Ask Ellama to translate a selected region or word at the point.
Find the definition of the current word using Ellama.
Summarize a selected region or the current buffer using Ellama.
Review code in a selected region or the current buffer using Ellama.
Change text in a selected region or the current buffer according to a provided change.
Enhance the grammar and spelling in the currently selected region or buffer using Ellama.
Enhance the wording in the currently selected region or buffer using Ellama.
Make the text of the currently selected region or buffer concise and simple using Ellama.
Change selected code or code in the current buffer according to a provided change using Ellama.
Change selected code or code in the current buffer according to a provided change using Ellama.
Complete selected code or code in the current buffer according to a provided change using Ellama.
Add new code according to a description, generating it with a provided context from the selected region or the current buffer using Ellama.
Render the currently selected text or the text in the current buffer as a specified format using Ellama.
Create a markdown list from the active region or the current buffer using Ellama.
Create a markdown table from the active region or the current buffer using Ellama.
Summarize a webpage fetched from a URL using Ellama.
Select ellama provider.
Alias to the ellama-complete-code
function.
Alias to the ellama-add-code
function.
Alias to the ellama-change-code
function.
Alias to the ellama-enhance-code
function.
Alias to the ellama-enhance-wording
function.
Alias to the ellama-enhance-grammar-spelling
function.
Alias to the ellama-make-concise
function.
Alias to the ellama-render
function.
Alias to the ellama-ask
function.
Here is a table of keybindings and their associated functions in
Ellama, using the C-c e
prefix:
Keymap | Function | Description |
---|---|---|
"c c" | ellama-code-complete | Code complete |
"c a" | ellama-code-add | Code add |
"c e" | ellama-code-edit | Code edit |
"c i" | ellama-code-improve | Code improve |
"c r" | ellama-code-review | Code review |
"s s" | ellama-summarize | Summarize |
"s w" | ellama-summarize-webpage | Summarize webpage |
"i w" | ellama-improve-wording | Improve wording |
"i g" | ellama-improve-grammar | Improve grammar and spelling |
"i c" | ellama-improve-conciseness | Improve conciseness |
"m l" | ellama-make-list | Make list |
"m t" | ellama-make-table | Make table |
"m f" | ellama-make-format | Make format |
"a a" | ellama-ask-about | Ask about |
"a i" | ellama-ask-interactive | Chat with ellama (Interactive) |
"a l" | ellama-ask-line | Ask about current line |
"a s" | ellama-ask-selection | Ask about selection |
"t t" | ellama-translate | Text translate |
"t c" | ellama-complete | Text complete |
"d w" | ellama-define-word | Define word |
"p s" | ellama-provider-select | Provider select |
The following variables can be customized for the Ellama client:
ellama-buffer
: The default Ellama buffer name.ellama-enable-keymap
: Enable the Ellama keymap.ellama-keymap-prefix
: The keymap prefix for Ellama.ellama-user-nick
: The user nick in logs.ellama-assistant-nick
: The assistant nick in logs.ellama-buffer-mode
: The major mode for the Ellama logs buffer. Default mode ismarkdown-mode
.ellama-language
: The language for Ollama translation. Default language is english.ellama-provider
: llm provider for ellama. Default provider isollama
with zephyr model. There are many supported providers:ollama
,open ai
,vertex
,GPT4All
. For more information see llm documentationellama-providers
: association list of model llm providers with name as key.ellama-spinner-type
: Spinner type for ellama. Default type isprogress-bar
.ellama-ollama-binary
: Path to ollama binary.ellama-auto-scroll
: If enabled ellama buffer will scroll automatically during generation. Disabled by default.ellama-fill-paragraphs
: Option to customize ellama paragraphs filling behaviour.
Thanks Jeffrey Morgan for excellent project ollama. This project cannot exist without it.
Thanks zweifisch - I got some ideas from ollama.el what ollama client in Emacs can do.
Thanks Dr. David A. Kunz - I got more ideas from gen.nvim.
Thanks Andrew Hyatt for llm
library.
Without it only ollama
would be supported.
If you are interested in creating a provider, please send a pull request, or open a bug. This library is part of GNU ELPA, so any major provider that we include in this module needs to be written by someone with FSF papers. However, you can always write a module and put it on a different package archive, such as MELPA.