LLM 0.32 Adds Structured Messages and Resumable Tool Loops

Simon Willison released LLM 0.32 on August 4, moving a months-long preview into a stable, backwards-compatible release. The Python library and command-line tool now use structured message parts, default reasoning-capable OpenAI models to the Responses API, add pausable and resumable tool loops, and store logs in a content-addressed SQLite schema. Existing legacy log rows remain readable, but developers should back up logs before upgrading.
Simon Willison released the stable version of LLM 0.32 on August 4, 2026. The open-source Python library and command-line tool now represent prompts and responses as structured messages made from typed parts for text, reasoning, tool calls, tool results and attachments. Existing prompt, system and attachment arguments still work, which is why the maintainer describes the release as backwards-compatible.
A richer response model
The new Python API can accept complete message histories and stream mixed event types instead of exposing only text tokens. Responses can also be serialized to JSON-safe dictionaries and reconstructed later, including provider metadata and pending tool calls. That gives applications a more explicit record of what was sent to a model and what came back.
Reasoning-capable OpenAI models now use the Responses API by default. The older Chat Completions path remains available per request. LLM 0.32 also exposes compatible server-side tools, including web search and code execution, through the same tool interface used by client-side Python functions.
Tool loops can pause and resume
Each tool call now has a unique identifier, including calls from providers that do not supply one. A tool can raise llm.PauseChain when execution needs human approval or another external event, and the chain can later resume from its unresolved call history without repeating completed work. This is useful for approval-gated agents and other workflows that cannot safely run end to end in one process.
Logging moves to content-addressed messages
The release introduces new SQLite tables for threads, turns and a content-addressed message store. Repeated conversation history can be referenced by hash instead of stored again, while provider payloads and structured parts remain available for inspection. Older records in the legacy responses table are not deleted, and the llm logs command reads across both generations.
For practitioners, the most important upgrade checks are operational
back up the logs database first, confirm plugins support the 0.32 response contract, and update environments because LLM now requires sqlite-utils 4.0 or newer and no longer depends on sqlite-migrate.
Key Points
- 1LLM 0.32 makes typed messages and parts the common representation for prompts, reasoning, tool calls, tool results and attachments while retaining the older prompt arguments.
- 2Tool chains can pause for approval or another external event and resume from unresolved call history without repeating tool calls that already produced results.
- 3A new content-addressed SQLite logging schema stores threads, turns and structured messages while preserving access to existing rows in the legacy responses table.
Scoring Rationale
A stable release of a widely used open-source LLM developer tool changes its Python response model, tool-loop controls and logging architecture. The update is materially useful to agent and plugin developers, although it is a library release rather than a new model or independent research result.
Sources
Primary source and supporting public references used for this report.
Practice with real Logistics & Shipping data
90 SQL & Python problems · 15 industry datasets
250 free problems · No credit card
See all Logistics & Shipping problems