Simon Willison · 2026-04-29 · notable
Simon Willison: LLM 0.32a0 Is a Major Backwards-Compatible Refactor
Simon Willison ships an alpha of his LLM CLI that switches inputs to message arrays and streams responses as typed parts (text, tool calls, reasoning, images). Old prompt= calls still work; the rebuild is for modern multimodal/agent models.

The most-used Python CLI for LLMs gets a structural rewrite — messages-in, typed-streamed-parts-out — without breaking the old API.
What is it?
LLM is Simon Willison's open-source Python CLI and library for talking to language models. Version 0.32a0, released April 28 and written up April 29, is a backwards-compatible refactor that brings two architectural changes Simon has been signalling for months: prompts as message arrays instead of single text strings, and responses that stream as typed parts rather than plain text.
How does it work?
New builder helpers (`llm.user()`, `llm.assistant()`) construct message arrays in the OpenAI/Anthropic style. Responses now expose `stream_events()` and `astream_events()` that yield typed chunks for text, tool calls, reasoning traces, and images, so plugins for modern multimodal and agent-style models can preserve structure end-to-end. New `to_dict()` / `from_dict()` methods make responses serialisable. Legacy `prompt=` calls still work transparently. The CLI gains `-o thinking_display` to render reasoning tokens separately.
Why does it matter?
LLM is the de-facto plumbing for thousands of indie scripts, plugins, and one-off automations against frontier models. The plain-text-in, plain-text-out shape didn't model tool calls, reasoning, or multimodal output cleanly — every plugin had to fake it. The 0.32 line gives plugin authors a real type system without forcing existing scripts to migrate.
Who is it for?
Python developers using LLM in scripts/plugins, plugin authors targeting agentic or reasoning models
Try it
pip install llm==0.32a0