{
  "@context": "https://schema.org",
  "@id": "https://aggr.aymericbeaumet.com/items/simonwillison-net/2026-08-22-llm-0-33/#webpage",
  "@type": [
    "WebPage",
    "ArchiveComponent"
  ],
  "articleBody": "My highlights from this release:\n\n> - Upgraded to the OpenAI Python library 3.x and switched the HTTP client dependency from `httpx` to `httpx2`. [#1608](https://github.com/simonw/llm/issues/1608), [#1631](https://github.com/simonw/llm/pull/1631)\n\nI shipped a quick [0.32.1 fix](https://simonwillison.net/2026/Aug/21/llm/) for this yesterday, but this is the more comprehensive fix.\n\n> - `llm embed` and `llm embed-multi` now accept `--key`. The Python `EmbeddingModel.embed()`, `EmbeddingModel.embed_multi()`, `Collection.embed()` and `Collection.embed_multi()` methods accept `key=` too, passing the resolved per-call key to embedding plugins without changing shared model state. Existing plugins that read `self.key` continue to work through a compatibility fallback. Thanks, [ChrisJr404](https://github.com/ChrisJr404). [#757](https://github.com/simonw/llm/issues/757), [#1620](https://github.com/simonw/llm/pull/1620)\n\nThe embedding models now use the same pattern for keys that regular LLM models do.\n\n> - `llm prompt -t/--template` can now be repeated to combine templates in order. This allows model configuration and options from one template to be used with a prompt from another.\n\nThis unlocks a neat pattern where you can create templates that package a model with a set of default options:\n\n```\nllm -m gpt-5.6-luna -o reasoning_effort high --save lhigh\nllm \"Generate an SVG of a pelican riding a bicycle\" --save pelican\n# Combine and run the templates\nllm -t lhigh -t pelican\n```\n\n> - Reasoning-capable Responses API models now support a `reasoning_summary` option with `auto`, `concise`, and `detailed` values. This can be used with [llm openai endpoint --responses](https://llm.datasette.io/en/stable/other-models.html#openai-endpoint). [#1600](https://github.com/simonw/llm/issues/1600)\n\nThis is particularly useful for exercising different models that provide their own imitation of the OpenAI Responses API.\n",
  "authors": [],
  "captured_at": "2026-09-04T12:14:41.802665207+00:00",
  "category": "programming",
  "content_html": "<p>My highlights from this release:</p>\n<blockquote>\n<ul>\n<li>Upgraded to the OpenAI Python library 3.x and switched the HTTP client dependency from <code>httpx</code> to <code>httpx2</code>. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/simonw/llm/issues/1608\">#1608</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/simonw/llm/pull/1631\">#1631</a></li>\n</ul>\n</blockquote>\n<p>I shipped a quick <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://simonwillison.net/2026/Aug/21/llm/\">0.32.1 fix</a> for this yesterday, but this is the more comprehensive fix.</p>\n<blockquote>\n<ul>\n<li><code>llm embed</code> and <code>llm embed-multi</code> now accept <code>--key</code>. The Python <code>EmbeddingModel.embed()</code>, <code>EmbeddingModel.embed_multi()</code>, <code>Collection.embed()</code> and <code>Collection.embed_multi()</code> methods accept <code>key=</code> too, passing the resolved per-call key to embedding plugins without changing shared model state. Existing plugins that read <code>self.key</code> continue to work through a compatibility fallback. Thanks, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/ChrisJr404\">ChrisJr404</a>. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/simonw/llm/issues/757\">#757</a>, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/simonw/llm/pull/1620\">#1620</a></li>\n</ul>\n</blockquote>\n<p>The embedding models now use the same pattern for keys that regular LLM models do.</p>\n<blockquote>\n<ul>\n<li><code>llm prompt -t/--template</code> can now be repeated to combine templates in order. This allows model configuration and options from one template to be used with a prompt from another.</li>\n</ul>\n</blockquote>\n<p>This unlocks a neat pattern where you can create templates that package a model with a set of default options:</p>\n<pre><code><span class=\"code-snippet\">llm -m gpt-5.6-luna -o reasoning_effort high --save lhigh\nllm &quot;Generate an SVG of a pelican riding a bicycle&quot; --save pelican\n# Combine and run the templates\nllm -t lhigh -t pelican\n</span></code></pre>\n<blockquote>\n<ul>\n<li>Reasoning-capable Responses API models now support a <code>reasoning_summary</code> option with <code>auto</code>, <code>concise</code>, and <code>detailed</code> values. This can be used with <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://llm.datasette.io/en/stable/other-models.html#openai-endpoint\">llm openai endpoint --responses</a>. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/simonw/llm/issues/1600\">#1600</a></li>\n</ul>\n</blockquote>\n<p>This is particularly useful for exercising different models that provide their own imitation of the OpenAI Responses API.</p>\n",
  "content_markdown": "My highlights from this release:\n\n> - Upgraded to the OpenAI Python library 3.x and switched the HTTP client dependency from `httpx` to `httpx2`. [#1608](https://github.com/simonw/llm/issues/1608), [#1631](https://github.com/simonw/llm/pull/1631)\n\nI shipped a quick [0.32.1 fix](https://simonwillison.net/2026/Aug/21/llm/) for this yesterday, but this is the more comprehensive fix.\n\n> - `llm embed` and `llm embed-multi` now accept `--key`. The Python `EmbeddingModel.embed()`, `EmbeddingModel.embed_multi()`, `Collection.embed()` and `Collection.embed_multi()` methods accept `key=` too, passing the resolved per-call key to embedding plugins without changing shared model state. Existing plugins that read `self.key` continue to work through a compatibility fallback. Thanks, [ChrisJr404](https://github.com/ChrisJr404). [#757](https://github.com/simonw/llm/issues/757), [#1620](https://github.com/simonw/llm/pull/1620)\n\nThe embedding models now use the same pattern for keys that regular LLM models do.\n\n> - `llm prompt -t/--template` can now be repeated to combine templates in order. This allows model configuration and options from one template to be used with a prompt from another.\n\nThis unlocks a neat pattern where you can create templates that package a model with a set of default options:\n\n```\nllm -m gpt-5.6-luna -o reasoning_effort high --save lhigh\nllm \"Generate an SVG of a pelican riding a bicycle\" --save pelican\n# Combine and run the templates\nllm -t lhigh -t pelican\n```\n\n> - Reasoning-capable Responses API models now support a `reasoning_summary` option with `auto`, `concise`, and `detailed` values. This can be used with [llm openai endpoint --responses](https://llm.datasette.io/en/stable/other-models.html#openai-endpoint). [#1600](https://github.com/simonw/llm/issues/1600)\n\nThis is particularly useful for exercising different models that provide their own imitation of the OpenAI Responses API.\n",
  "dateCreated": "2026-09-04T12:14:41.802665207+00:00",
  "date_created": "2026-08-22T17:01:16+00:00",
  "date_modified": "2026-08-22T17:01:16+00:00",
  "date_published": "2026-08-22T17:01:16+00:00",
  "description": "Release: llm 0.33 My highlights from this release: Upgraded to the OpenAI Python library 3.x and switched the HTTP client dependency from httpx to httpx2. #1608, #1631 I shipped a quick 0.32.1 fix for this yesterday, but this is the more…",
  "external_url": "https://simonwillison.net/2026/Aug/22/llm/",
  "git": {
    "commit": "ebb0941c5c06a2ab2377342d607535262a3e969e",
    "path": "items/simonwillison-net/2026/08/2026-08-22-llm-0-33.md",
    "permalink": "https://github.com/aymericbeaumet/aggr-instance/blob/ebb0941c5c06a2ab2377342d607535262a3e969e/items/simonwillison-net/2026/08/2026-08-22-llm-0-33.md"
  },
  "id": "urn:aggr:item:4f6f6ad6ec5f1880d7849358da8681611176ca9b",
  "isBasedOn": {
    "@id": "https://simonwillison.net/2026/Aug/22/llm/"
  },
  "mainEntity": {
    "@id": "https://simonwillison.net/2026/Aug/22/llm/",
    "@type": "CreativeWork",
    "archivedAt": {
      "@id": "https://aggr.aymericbeaumet.com/items/simonwillison-net/2026-08-22-llm-0-33/#webpage"
    },
    "dateModified": "2026-08-22T17:01:16+00:00",
    "datePublished": "2026-08-22T17:01:16+00:00",
    "headline": "llm 0.33",
    "timeRequired": "PT2M",
    "url": "https://simonwillison.net/2026/Aug/22/llm/",
    "wordCount": 232
  },
  "name": "Archived snapshot: llm 0.33",
  "preview": null,
  "reading_minutes": 2,
  "replicated_at": null,
  "source": "simonwillison-net",
  "source_name": "Simon Willison's Weblog",
  "summary": "Release: llm 0.33 My highlights from this release: Upgraded to the OpenAI Python library 3.x and switched the HTTP client dependency from httpx to httpx2. #1608, #1631 I shipped a quick 0.32.1 fix for this yesterday, but this is the more comprehensive fix. llm embed and llm embed-multi now accept --key. The Python EmbeddingModel.embed(), EmbeddingModel.embed_multi(), Collection.embed() and Collection.embed_multi() methods accept key= too, passing the resolved per-call key to embedding plugins without changing shared model state. Existing plugins that read self.key continue to work through a compatibility fallback. Thanks, ChrisJr404. #757, #1620 The embedding models now use the same pattern for keys that regular LLM models do. llm prompt -t/--template can now be repeated to combine templates in order. This allows model configuration and options from one template to be used with a prompt from another. This unlocks a neat pattern where you can create templates that package a model with a set of default options: llm -m gpt-5.6-luna -o reasoning_effort high --save lhigh llm \"Generate an SVG of a pelican riding a bicycle\" --save pelican # Combine and run the templates llm -t lhigh -t pelican Reasoning-capable Responses API models now support a reasoning_summary option with auto, concise, and detailed values. This can be used with llm openai endpoint --responses. #1600 This is particularly useful for exercising different models that provide their own imitation of the OpenAI Responses API. Tags: annotated-release-notes, llm",
  "tags": [
    "annotated-release-notes",
    "llm"
  ],
  "temporalCoverage": "2026-09-04T12:14:41.802665207+00:00",
  "title": "llm 0.33",
  "url": "https://aggr.aymericbeaumet.com/items/simonwillison-net/2026-08-22-llm-0-33/",
  "word_count": 232
}