llm 0.33
Release: https://github.com/simonw/llm/releases/tag/0.33">llm 0.33
My highlights from this release:
- Upgraded to the OpenAI Python library 3.x and switched the HTTP client dependency from
httpxtohttpx2. https://github.com/simonw/llm/issues/1608">#1608, https://github.com/simonw/llm/pull/1631">#1631
I shipped a quick https://simonwillison.net/2026/Aug/21/llm/">0.32.1 fix for this yesterday, but this is the more comprehensive fix.
llm embedandllm embed-multinow accept--key.The Python
EmbeddingModel.embed(),EmbeddingModel.embed_multi(),Collection.embed()andCollection.embed_multi()methods acceptkey=too, passing the resolved per-call key to embedding plugins without changing shared model state.Existing plugins that read
self.keycontinue to work through a compatibility fallback.Thanks, https://github.com/ChrisJr404">ChrisJr404. https://github.com/simonw/llm/issues/757">#757, https://github.com/simonw/llm/pull/1620">#1620
The embedding models now use the same pattern for keys that regular LLM models do.
llm prompt -t/--templatecan now be repeated to combine templates in order.This allows model configuration and options from one template to be used with a prompt from another.
This unlocks a neat pattern where you can create templates that package a model with a set of default options:
llm -m gpt-5.6-luna -o reasoning_effort high --save lhigh
llm "Generate an SVG of a pelican riding a bicycle" --save pelican
# Combine and run the templates
llm -t lhigh -t pelican
- Reasoning-capable Responses API models now support a
reasoning_summaryoption withauto,concise, anddetailedvalues.This can be used with https://llm.datasette.io/en/stable/other-models.html#openai-endpoint">llm openai endpoint --responses. https://github.com/simonw/llm/issues/1600">#1600
This is particularly useful for exercising different models that provide their own imitation of the OpenAI Responses API.
Tags: https://simonwillison.net/tags/annotated-release-notes">annotated-release-notes, https://simonwillison.net/tags/llm">llm