I wanted a transcription of a segment of a podcast I was listening to, and Mistral released Voxtral pretty recently and I wanted to try it.
llm is my go to tool for quick queries so I updated to the latest version of the mistral plugin
llm install -U llm-mistral
and refreshed the model list
llm mistral refresh
and clipped the segment of the show I wanted to transcribe to pass as an attachment
ffmpeg -i podcast.mp3 -ss 42:56 -to 55:27 -c copy clip.mp3
llm -m voxtral-small -a clip.mp3
But it didn’t work because the Voxtral model currently only works for URLs to MP3 files hosted online: in llm-mistral, not local files
But I knew that llm could handle local attachments, and the Voxtral API documentation had an exmple
So I cloned llm-mistral, copied the documentation example into my clipboard, and gave them both to gpt-5
cat llm_mistral.py| llm "$(pbpaste)" -s "Update llm-mistral to take local file attachments, as well as URLs, based on this example from the documentation"
It spat out a six line change which I pasted in to llm_mistral.py. Then I spun up a venv with uv so I could test it out without messing with my normal llm installation and installed my local, modified, copy of llm-mistral
uv venv .venv-llm-dev
source .venv-llm-dev/bin/activate
uv pip install llm
.venv-llm-dev/bin/llm install -e .
And it worked first try
.venv-llm-dev/bin/llm -m voxtral-small -a clip.mp3
What I would say about vibe coding this kind of minor edit or tweak is that about half the time it works first try, and about half the time it doesn’t, and if they fail I usually just do it myself instead of doubling down.