LLM follows a rolling release model — stable releases ship as numbered versions, and alpha releases (markedDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/simonw/LLM/llms.txt
Use this file to discover all available pages before exploring further.
a0, a1, …) carry in-progress features. Below are the most recent releases with their full detail. For the complete release history, see the GitHub Releases page.
0.32a3 — 2026-06-09
Driven by the needs of Datasette Agent’s human-in-the-loopask_user() feature, this release improves how tool calls work:
llm_tool_callparameter: Tool implementations can declare a parameter namedllm_tool_callto receive thellm.ToolCallobject for the current invocation, giving access tollm_tool_call.tool_call_id. (#1480)- Guaranteed unique
tool_call_id: Providers that do not supply a tool call ID now receive a synthesizedtc_-prefixed ULID. (#1481) llm.PauseChainexception: Tools can raisellm.PauseChainto cleanly pause the tool chain — useful for human-in-the-loop approval flows. The exception propagates with.tool_calland.tool_resultsattached. (#1482)- Concurrent tool failure semantics: Async sibling tool calls always run to completion before a pause or hook exception propagates. (#1482)
- Resume chains from unresolved tool calls: Chains can now resume from a
messages=history ending in unresolved tool calls.execute_tool_calls()also accepts a newtool_calls_list=argument. (#1482) - Bug fix: The async tool executor no longer silently drops calls to tools not in
tools=— they now returnError: tool "..." does not exist, matching the sync executor. (#1483)
0.32a2 — 2026-05-12
Support for the OpenAI Responses API
Most reasoning-capable OpenAI models now use the/v1/responses endpoint instead of /v1/chat/completions, enabling interleaved reasoning across tool calls for GPT-5 class models. (#1435)
- New
ResponsesandAsyncResponsesmodel classes. The existingChatandAsyncChatclasses are unchanged. - Models now using the Responses API by default:
o1,o3-mini,o3,o4-mini,gpt-5,gpt-5-mini,gpt-5-nano,gpt-5.1,gpt-5.2,gpt-5.4,gpt-5.4-mini,gpt-5.4-nano,gpt-5.5(plus pinned date variants). - Use
-o chat_completions 1to fall back to/v1/chat/completionsfor any of these models. - Encrypted reasoning items are captured as
provider_metadataand round-tripped on subsequent turns. - Reasoning summaries are requested with
"summary": "auto"so visible reasoning text streams back unless--hide-reasoningis set.
CLI
- New
llm -m model --optionsflag to list the options supported by a given model. (#1441) - The
-R/--no-reasoningoption has been renamed to-R/--hide-reasoning.
Python API
- New
hide_reasoning=Truekeyword argument onmodel.prompt(),conversation.prompt(),model.chain(), and their async counterparts. (#1442) - New
options=dict keyword argument onModel.prompt(),Conversation.prompt(),Response.reply(), and their async equivalents. (#1432)
Bug fix
add_tool_call()calls not recorded as stream events are now correctly emitted asToolCallPartobjects and surviveresponse.to_dict()serialization. (#1433)
0.32a1 — 2026-04-29
- Fixed a bug in 0.32a0 where tool-calling conversations were not correctly reinflated from SQLite. (#1426)
0.32a0 — 2026-04-28
A major backwards-compatible refactor introducing structured messages and streaming events. See the annotated release notes for full context.Structured messages and streaming events
Structured messages and streaming events
- New
llm.Messagevalue type and constructor helpers:llm.user(),llm.assistant(),llm.system(),llm.tool_message(). - New
messages=keyword argument onmodel.prompt(),conversation.prompt(),model.chain(), and their async counterparts. - New
response.stream_events()andresponse.astream_events()yielding typedStreamEventobjects ("text","reasoning","tool_call_name","tool_call_args","tool_result"). - New
response.messages()/await response.messages()returning the assembledlist[Message]produced by the model. - New
response.reply(prompt=None, **kwargs)to continue a conversation from anyResponse. - New
response.to_dict()andResponse.from_dict(data, *, model=None)for full round-trip JSON serialization of a conversation turn. - New
llm/serialization.pymodule with TypedDicts:MessageDict,PartDict,ResponseDict,PromptDict,UsageDict,AttachmentDict.
CLI changes
CLI changes
llm promptandllm chatnow display visible reasoning text to stderr in a dim style while streaming.- New
-R/--hide-reasoningflag forllm promptandllm chat. llm logsnow renders reasoning under a## Reasoningheading above the response.- New
reasoningcolumn on theresponsestable in the logs database.
0.31 — 2026-04-24
- New GPT-5.5 OpenAI model:
llm -m gpt-5.5. (#1418) - New
-o verbosity lowoption for setting the text verbosity level for GPT-5+ models. Values:low,medium,high. - New
-o image_detail lowoption for image detail level for OpenAI vision models. - Models listed in
extra-openai-models.yamlare now also registered as asynchronous. (#1395)
0.30 — 2026-03-31
- The
register_models()plugin hook now takes an optionalmodel_aliasesparameter listing all registered models and aliases so far. A plugin with@hookimpl(trylast=True)can use this to avoid conflicts. (#1389) - Added docstrings to public classes and methods, now included directly in the documentation.
0.29 — 2026-03-17
- The
-t/--templateoption now works correctly with-x/--extractand--xl/--extract-last. llm logsnow shows additional model options in its Markdown output. (#1322)- New OpenAI models:
gpt-5.4,gpt-5.4-mini,gpt-5.4-nano. (#1376)
0.28 — 2025-12-12
- New OpenAI models:
gpt-5.1,gpt-5.1-chat-latest,gpt-5.2,gpt-5.2-chat-latest. (#1300, #1317) - LLM now requires Python 3.10 or higher. Python 3.14 is now covered by tests.
- URL fragments (
llm -f URL) now send a custom user-agent:llm/VERSION (https://llm.datasette.io/). (#1309) - Fixed a bug where fragments were not correctly registered with their source when using
llm chat. (#1316) - Fixed some file descriptor leak warnings. (#1313)
- Fixed a deprecation warning for
asyncio.iscoroutinefunction. - Type annotations added for the OpenAI
Chat,AsyncChat, andCompletionexecute()methods. (#1315) - The project now uses
uvand dependency groups for development. (#1318)
0.27.1 — 2025-08-11
llm chat -t templatenow correctly loads tools included in that template. (#1239)- Fixed a bug where saving a template containing
reasoning_effortproduced invalid YAML. (#1237) - Fixed a bug where
llm chat -t templatecould cause prompts to be duplicated. (#1240) - Less confusing error message if a requested toolbox class is unavailable. (#1238)
0.27 — 2025-08-11
This release adds support for the GPT-5 family of models and enhances tool calling, including allowing templates to bundle pre-configured tools.New features
New features
- New models:
gpt-5,gpt-5-mini,gpt-5-nano. (#1229) - Templates can now include a list of tools — named tools from plugins or inline Python function blocks. (#1009)
- Tools can now return attachments (e.g. images) for models that support vision input. (#1014)
- New
Toolboxmethods:.add_tool(),.prepare(),.prepare_async(). (#1111) - New
model.conversation(before_call=x, after_call=y)for registering tool call lifecycle callbacks. (#1088) - Plugins can record the resolved model ID via
response.set_resolved_model(model_id). (#1117) - Raising
llm.CancelToolCallnow cancels only the current call and passes an error to the model. (#1148) - New
-l/--latestoption forllm logs -q searchtermto sort results by date. (#1177)
Bug fixes and documentation
Bug fixes and documentation
- Fix for various streaming function response format bugs in OpenAI-compatible models. (#1218)
register_embedding_modelshook is now documented. (#1049)- Show stack trace for
llm templates show invalid-template-name. (#1053) - Handle invalid tool names more gracefully in
llm chat. (#1104) - Add
-hfor--helpfor allllmCLI commands. (#1134)
0.26 — 2025-05-27
Tool support has arrived! LLM can now expose Python functions as tools that models can call while generating a response.- Two built-in default tools:
llm_version()andllm_time(). (#1096, #1103) llm.get_key()is now a documented utility function. (#1094)- New
tool_instancestable in the database records details ofToolboxinstances. (#1089) - Switched to monotonic ULIDs for response IDs. (#1099)
0.25 — 2025-05-04
- Fragment loaders can now return a mixture of fragments and attachments. (#972)
- New OpenAI models:
gpt-4.1,gpt-4.1-mini,gpt-41-nano,o3,o4-mini. - New environment variables:
LLM_MODELandLLM_EMBEDDING_MODEL. (#932) - New
llm fragments loaderscommand. (#941) llm chatnow includes a!editin-session command. (#969)
0.24 — 2025-04-07
Major release adding fragments for long-context prompts and improved template support.- New fragments feature: assemble prompts from URLs, file paths, or stored fragments. Stored de-duplicated to avoid wasting space. (#617)
register_template_loaders()andregister_fragment_loaders()plugin hooks. (#809, #886)llm fragmentsfamily of commands for browsing stored fragments.- Templates can now store default model options, attachments, and use
$URLas a source. (#845, #826, #856) - New
llm models optionsfamily of commands for per-model default options. (#829) LLM_RAISE_ERRORS=1environment variable for dropping into a debugger on prompt errors. (#817)- OpenAI models now accept PDF attachments. (#834)
This page covers the most recent releases. For the complete version history going back to 0.1, visit the GitHub Releases page or view the full changelog on GitHub.