- Modern Chaos
- Posts
- Follow-up on "vim + llm =🔥": small things that awww
Follow-up on "vim + llm =🔥": small things that awww
Integrating AI with Vim, Emacs, and VSCode. A Small Hack Using a Familiar Workflow. Select Your Text, Choose Your LLM Action, Replace Your Selection: A Baseline for Experimenting With Various Models.
This post is a follow-up on the shared experiment by Joseph Thacker with his vim editor “vim + llm = 🔥”. I found it very interesting because it uses a familiar workflow for vi users and extend the possibilities without the need of yet another AI plugin. It just works — not perfect, but in my opinion, incredibly powerful.
To people that didn’t read Joseph’s post, his passing his selected text in visual mode to a shell command. The shell command can be anything like sort or uniq. What’s interesting here is the process used: the selected region is replaced by the output of llm, a cli to use LLMs in the terminal.
I’m an emacs user with evil-mode, which is a full-featured vi layer, so it just works for me too. While it was super cool, I felt that I could experiment further in several areas:
Organize my prompts using folders, eg
code/fill
,translate/english
Use either llm-cli or ollama (for testing local models) without duplicating prompts
Override temperature and model at call time
The end result is a bash utility called llm-bash that I’m proud to share today. I’m open to pull requests, especially for adding prompts that would be useful for everyone. It requires llm or ollama.
Table of content:
Usage on vim like editors
Usage on VSCode and emacs (without evil-mode)
Usage in your terminal
llm-together: 54 open-source models, ready-to-use
Usage on vim like editors
As you may have seen on the gif in the top of this post, we leverage the visual mode of vi. We make a text selection used as input for your prompt. After selecting your text, you can run a shell command by entering the command line mode with colon :
followed by an exclamation point !
. Enter your shell command and its output will replace your selection.
Super simple with endless possibilities!
However, there are two limitations:
First, it’s a blocking operation. If your command takes a long time, you won’t be able to use your editor until it finishes. That’s why you should use models that respond as quickly as possible. GPT-3.5-turbo is the fastest and is consistent for my prompts.
Second, your selection will be replaced by the llm output, so your prompt should be designed with this in mind. For instance, my code/fill
prompt is designed to output the full initial text selection with the //fill
keywords replaced by code logic. This approach has been challenging to perfect and currently only works with GPT-3.5. Not models are are equals but it’s great to experiment immediately with various models, from OpenAI to local ones.
You can find the prompts on GitHub.
Usage on VSCode and Emacs (non evil-mode)
We are a small team, but we all use different editors: emacs, neovim and VSCode. If possible, we like to share our tools across the team. We found a way to make it work on VSCode in the same fashion than Vim.
You will need the plugin Filter Text. It’s original goal is to select a text region and run a shell command like sort
or uniq
to filter the text. Because it’s not limited to specific shell commands, we can use it for our bash utility to work.
Once installed, you can run the VSCode action “Filter Text Inplace” for an experience similar to vim users.
For emacs, there’s the command shell-command-on-region
that takes the region as the command’s input, but it opens a new buffer with the result. I’m sure there’s a pl
ugin to replace in-place, but I haven’t looked for it since I don’t need it.
Usage in your terminal
Examples:
Single line:
lm translate/english “Hey, what’s up?”
Multiline with Ollama and override default model with mis:
echo “$(cat)“ | oll translate/english -m zephyr
thenCtrl+D
after a return line to run the inference
Usage: lm [OPTION] [PROMPT]
This is a language model bash wrapper for LLM-CLI and OLLAMA.
Options:
-h, --help Display this help message and exit
-t, --temperature Set the temperature
-h, --model Set the model
Prompts:
code/comment: Add comments to code
code/explain: Explain a piece of code by adding comments
code/fill: Replace the //fill keywords with the missing code logic
code/fix: Fix errors in code syntax or logic
code/name: Rename code symbols for clarity
email/draft: Create an email from instructions or notes
email/reply: Reply to an email in the sender language
personal/mealplan: Generate a meal plan for the next 7 days
translate/english: Translate text to English
translate/french: Translate text to French
llm-together: 54 open-source models, ready-to-used
On a side note, we created a plugin for llm-cli to support the Together backend. Together is a cloud platform for fine-tuning and running large AI models. They offer “featured” models, which are always ready for inference, like llama-2-70b-chat or CodeLlama-34b-Python. We don’t have the resources to host these models but are eager to test them. By installing this plugin, you have 54 open-source models to play with. Awesome stuff!
Together is providing $25 of free credits for a new signup, enough to try lots of models and prompts: https://together.ai/apis
Find the github project here: https://github.com/wearedevx/llm-together
Getting started
> llm install llm-together
> llm keys set together
> Enter key: <paste key here>
> llm models list
Here the full featured list for Together.ai (13th, October 2023):
Austism/chronos-hermes-13b
Gryphe/MythoMax-L2-13b
NousResearch/Nous-Hermes-Llama2-13b
NumbersStation/nsql-llama-2-7B
OpenAssistant/llama2-70b-oasst-sft-v10
Phind/Phind-CodeLlama-34B-Python-v1
Phind/Phind-CodeLlama-34B-v2
SG161222/Realistic_Vision_V3.0_VAE
WizardLM/WizardCoder-Python-34B-V1.0
WizardLM/WizardLM-70B-V1.0
garage-bAInd/Platypus2-70B-instruct
huggyllama/llama-65b
lmsys/vicuna-13b-v1.5-16k
lmsys/vicuna-13b-v1.5
mistralai/Mistral-7B-Instruct-v0.1
prompthero/openjourney
togethercomputer/CodeLlama-13b-Instruct
togethercomputer/CodeLlama-13b-Python
togethercomputer/CodeLlama-13b
togethercomputer/CodeLlama-34b-Instruct
togethercomputer/CodeLlama-34b-Python
togethercomputer/CodeLlama-34b
togethercomputer/CodeLlama-7b-Instruct
togethercomputer/CodeLlama-7b-Python
togethercomputer/CodeLlama-7b
togethercomputer/GPT-JT-6B-v1
togethercomputer/GPT-JT-Moderation-6B
togethercomputer/GPT-NeoXT-Chat-Base-20B
togethercomputer/LLaMA-2-7B-32K
togethercomputer/Llama-2-7B-32K-Instruct
togethercomputer/Pythia-Chat-Base-7B-v0.16
togethercomputer/Qwen-7B-Chat
togethercomputer/Qwen-7B
togethercomputer/RedPajama-INCITE-7B-Base
togethercomputer/RedPajama-INCITE-7B-Chat
togethercomputer/RedPajama-INCITE-7B-Instruct
togethercomputer/RedPajama-INCITE-Base-3B-v1
togethercomputer/RedPajama-INCITE-Chat-3B-v1
togethercomputer/RedPajama-INCITE-Instruct-3B-v1
togethercomputer/alpaca-7b
togethercomputer/falcon-40b-instruct
togethercomputer/falcon-40b
togethercomputer/falcon-7b-instruct
togethercomputer/falcon-7b
togethercomputer/llama-2-13b-chat
togethercomputer/llama-2-13b
togethercomputer/llama-2-70b-chat
togethercomputer/llama-2-70b
togethercomputer/llama-2-7b-chat
togethercomputer/llama-2-7b
togethercomputer/mpt-30b-chat
togethercomputer/mpt-30b-instruct
togethercomputer/mpt-30b
upstage/SOLAR-0-70b-16bit
Reply