CodingSoftware & developer tools
Simon Willison releases llm-tools-datasette 0.1.1 to fix breakage from LLM's switch to httpx2
Simon Willison's llm-tools-datasette 0.1.1 replaces httpx with httpx2. The update repairs a plugin that broke after LLM 0.33 dropped httpx. The plugin had imported httpx without declaring it as a dependency, so it worked only while the host tool happened to install it.
From the Simon Willison article of October 18, 2026 and cited sources: Version 0.1.1 adds no features. [1] [2] [3] [9]
SOURCES[1] Simon Willison: Release llm-tools-datasette 0.1.1 simonwillison.net[2] LLM changelog (stable) llm.datasette.io[3] GitHub: llm-tools-datasette releases github.com
AI-assisted, not human-edited. Methodology Corrections Who owns this site
- Original source
- Simon Willison article, independent perspective
- Brief by
- AT Pulse research desk AI-assisted; publisher and contact on the desk page
- When
- October 18, 2026 article published
- Covered
- Oct 19 edition
- Evidence
- 10 sources across 5 sites
- 1Simon Willison: Release llm-tools-datasette 0.1.1simonwillison.net
- 2LLM changelog (stable)llm.datasette.io
- 3GitHub: llm-tools-datasette releasesgithub.com
- 4Simon Willison: datasette+llm tagsimonwillison.net
- 5LLM changelog (latest)llm.datasette.io
- 6Simon Willison: LLM 0.33simonwillison.net
Reach: not measured yet
Version 0.1.1 adds no features. Its only change is swapping the HTTP client from httpx to httpx2. LLM 0.33 (22 August 2026) moved to OpenAI Python 3.x and replaced httpx with httpx2, which meant fresh installs no longer brought in the library the plugin depended on. The plugin gives an LLM model a tool for sending SQL queries to any Datasette instance. [1] [2] [3] [9]
The sources disagree on which LLM version caused the break. Willison's post names the 0.33 switch, but the GitHub release note says the fix is for compatibility with LLM 0.36 and later. The changelog text for 0.34 through 0.36 doesn't settle it. [1] [2] [3]
For plugin authors, the lesson is to declare every library you import and to test against a fresh install of the newest host version. httpx2 is Pydantic's maintained continuation of httpx and is imported under its own name, so a library you rely on but never declare can quietly disappear when a host's upstream SDK changes. [1] [10]
The evidence covers one plugin and one client swap. The wider point is that Python tools importing undeclared packages can break when a host or SDK changes its HTTP stack.
Read the full assessment
That makes version pinning and fresh-install testing worth doing for internal agent tooling.
Executive brief
The bug sat unnoticed for about two months. On 18 October 2026 Simon Willison released llm-tools-datasette 0.1.1. It repairs a plugin that broke when LLM 0.33 (22 August 2026) switched its HTTP client from httpx to Pydantic's httpx2. The plugin had been using httpx without declaring it as a dependency, so it only worked while LLM happened to install httpx. The lesson for anyone building on plugins: a dependency you use but never declare can disappear when someone else updates theirs.
Read the full section
The fix took one line. The bug sat unnoticed for about two months. On 18 October 2026 Simon Willison released llm-tools-datasette 0.1.1. It repairs a plugin that broke when LLM 0.33 (22 August 2026) switched its HTTP client from httpx to Pydantic's httpx2. The plugin had been using httpx without declaring it as a dependency, so it only worked while LLM happened to install httpx. Willison writes that he forgot the switch would break such plugins. The lesson for anyone building on plugins: a dependency you use but never declare can disappear when someone else updates theirs.
What changed and event timeline
Plugin debuts
Willison released alphas 0.1a0 and 0.1a1, then 0.1. Together they let LLM's tool-calling query any Datasette instance. 0.1a1 started showing SQL errors to the model.
More detail
Stopgap pin
LLM 0.32.1 pinned the OpenAI Python library below v3.0.0. Without the pin, fresh installs needed an extra manual httpx install.
Httpx2 switch
LLM 0.33 moved to OpenAI Python 3.x and replaced httpx with httpx2. It also added repeatable
-ttemplates and a--keyoption for embeddings.Further LLM releases
LLM 0.34, 0.35 and 0.36 shipped. 0.36 (22 September) is the latest version on PyPI.
Plugin fixed
Llm-tools-datasette 0.1.1 switches to httpx2.
More detail
Capabilities and access
Read the full section
- Package: llm-tools-datasette 0.1.1. Install with
llm install llm-tools-datasette. It needs LLM 0.26a1 or later (README). - What it does: a
Datasette("<database URL>")tool. Use it from the command line (llm --tool ... "Show tables" --td), inllm chat, or through the Python API. The--tdflag shows tool-call debugging output (README). - Example: a 2025 demo ran it with Grok 4 Fast through OpenRouter to count plugins on datasette.io (tag page).
- New in 0.1.1: only the HTTP-client swap; there are no new features.
Technical analysis for researchers and developers
- What broke: the plugin imported httpx but never declared it (blog). httpx most likely came in through the OpenAI SDK.
- httpx2: Pydantic maintains it as a continuation of httpx, which had seen little recent activity.
- What to do: declare every library you import.
Read the full section
- What broke: the plugin imported httpx but never declared it (blog). httpx most likely came in through the OpenAI SDK. When LLM 0.33 moved to OpenAI 3.x and httpx2 (changelog), fresh installs would no longer include httpx. That chain is inferred; Willison's post doesn't spell it out.
- httpx2: Pydantic maintains it as a continuation of httpx, which had seen little recent activity. You import it as
httpx2, and its API is broadly compatible withrequests(httpx2 repo). - What to do: declare every library you import. Test plugins against a fresh install of the newest host version, not an environment you upgraded in place.
Claims and evidence
- The breakage came from LLM 0.33's httpx2 switch. Willison says so on his blog (post). The changelog confirms 0.33 made the switch (changelog).
- Conflicting evidence: the GitHub release note says the change is "for compatibility with LLM 0.36 and higher" (release), while the blog names 0.33.
- Corroboration: no independent coverage of 0.1.1 was found. Third-party write-ups cover only LLM 0.33 (Let's Data Science).
Read the full section
- The breakage came from LLM 0.33's httpx2 switch. Willison says so on his blog (post). The changelog confirms 0.33 made the switch (changelog).
- Conflicting evidence: the GitHub release note says the change is "for compatibility with LLM 0.36 and higher" (release), while the blog names 0.33. Both statements may be true, for example if 0.36 completed the removal of httpx, but the 0.34–0.36 changelog text reviewed here doesn't confirm that.
- Corroboration: no independent coverage of 0.1.1 was found. Third-party write-ups cover only LLM 0.33 (Let's Data Science).
Context and prior work
- LLM added tool calling in the 0.26 series, and this plugin first appeared in May 2025 as one of the early tool plugins (releases).
- LLM 0.32 (4 August 2026) introduced structured Message and Part objects, the OpenAI Responses API for reasoning models, and tool loops you can pause and resume (changelog).
- Willison has posted on Datasette and LLM thousands of times: about 1,551 posts tagged datasette and 641 tagged llm (blog).
Read the full section
- LLM added tool calling in the 0.26 series, and this plugin first appeared in May 2025 as one of the early tool plugins (releases).
- LLM 0.32 (4 August 2026) introduced structured Message and Part objects, the OpenAI Responses API for reasoning models, and tool loops you can pause and resume (changelog).
- Willison has posted on Datasette and LLM thousands of times: about 1,551 posts tagged datasette and 641 tagged llm (blog).
Limitations, safety and contested findings
- The 0.33 vs 0.36 discrepancy above is still unresolved.
- No source says how many other plugins carried the same hidden httpx dependency. Willison only calls this "one of those plugins" (post).
- From 0.1a1 on, the tool lets a model send SQL to the target Datasette instance and see the error messages that come back (releases).
Read the full section
- The 0.33 vs 0.36 discrepancy above is still unresolved.
- No source says how many other plugins carried the same hidden httpx dependency. Willison only calls this "one of those plugins" (post).
- From 0.1a1 on, the tool lets a model send SQL to the target Datasette instance and see the error messages that come back (releases). The reviewed sources don't discuss access controls beyond whatever that instance exposes.
Business and practitioner implications
- Upgrade together: if you run LLM 0.33 or later with this plugin, move to 0.1.1.
- Check the HTTP stack: the shift from httpx to httpx2 in the OpenAI SDK affects many Python projects, not just this one.
- Easy data access for agents: pointing a model at any public Datasette database takes a single command, which makes this a lightweight way to prototype agents that query data.
Read the full section
- Upgrade together: if you run LLM 0.33 or later with this plugin, move to 0.1.1. Lock the host version and plugin versions together in containers and CI.
- Check the HTTP stack: the shift from httpx to httpx2 in the OpenAI SDK affects many Python projects, not just this one. Audit internal tools that import httpx without declaring it (Let's Data Science).
- Easy data access for agents: pointing a model at any public Datasette database takes a single command, which makes this a lightweight way to prototype agents that query data.