A fresh install of llm broke because the OpenAI library stopped using httpx
Version 0.32.1 pins the OpenAI Python package below 3.0.0 so that new installations work again. Nothing in llm changed to cause the break: it imported httpx while relying on the OpenAI package to bring it along, and when that package dropped httpx the dependency simply stopped arriving. It is a small release with a lesson that outlives it.
llm is a command-line tool for talking to models, installed as a Python package. On August 21 it shipped 0.32.1, a release whose entire content is a version pin: the OpenAI Python package is now constrained below 3.0.0. The reason is worth more than the fix.
What broke, and why nobody changed anything
The OpenAI Python library dropped its own use of httpx. llm uses httpx too, but it never declared it. It got it transitively, because installing the OpenAI package used to install httpx as well. The moment that stopped being true, a fresh install of llm was missing a library it imports, while every existing installation kept working — the old httpx was already sitting there.
That asymmetry is what makes this class of failure expensive. It cannot be reproduced on the machine of anyone who has had the tool installed for a while, it appears only on clean environments, and the release that caused it belongs to someone else.
The fix and what comes after it
The pin is a holding action, and it is the right one: it restores working installs today without a rewrite. The real repair is scheduled for 0.33, which moves llm to httpx2.
The transferable rule is older than any of these packages. Declare what you import. A dependency that arrives through somebody else's requirements is a dependency you do not control, and it disappears on their schedule rather than yours — which is exactly what happened here.
Who this actually affects
Anyone installing llm fresh between the OpenAI release and 0.32.1, which includes every continuous integration job that builds from scratch, every container image rebuilt in that window, and anyone who followed a tutorial in those days. Upgrading, or installing now, resolves it.
If you ship a Python tool that wraps a vendor SDK, this is the fifteen-minute audit worth doing: list what you import, compare it with what you declare, and assume the gap will close itself at the worst moment.
Sources
Related
llm 0.33 takes the pin out and moves to httpx2
Version 0.32.1 held fresh installs together by pinning the OpenAI Python package below 3.0.0. That was a holding action, and 0.33 does the actual repair: it upgrades to the OpenAI library 3.x and switches its HTTP client from httpx to httpx2. The release also carries changes you will notice in daily use, including a --key option on the embedding commands and server-side tool results that finally show up in llm logs.
Simon Willisonverified

Next.js will patch one critical vulnerability on August 26
Vercel published the date before the fix. Versions 16.3.3 and 15.5.24 arrive on August 26 with a full advisory, and the announcement exists so teams can schedule the upgrade instead of discovering it from a CVE feed.
Next.js Blogverified
ChatGPT search switched en masse to the site: operator
On August 20, Simon Willison relayed a measurement from Promptwatch showing that ChatGPT abruptly began narrowing its searches to preselected domains. The share of queries carrying the site: operator held between 0.3% and 0.5% for weeks, then jumped to 16% to 17% on August 8 — two days after OpenAI announced accuracy fixes in GPT-5.6. Willison concludes that the search tool internally has the shape search(query, recency, domains), which means the model picks domains before it even frames the question. If you care about visibility in that search, you are no longer competing only for a place in the result but for your domain to make the list the model assembles on its own.
Simon Willisonverified