explainx.ai0k
TrendingAI News TodayPathwaysSkills
Pricing
explainx.ai

Upskill in AI — 16 free pathways, live workshops & bootcamps, and 50+ courses from practitioners. Plus the skills, tools, and MCP servers to practice on.

follow us

follow on google

Add explainx.ai as a preferred source

corporate training

support@explainx.ai

get started

Find your pathTake Free Evaluation

community

Join the community

learn

mind: share how you thinkpathways — start freeworkshopsbootcampscoursescompare Explainxcertificationsmock testsexplainx universitycorporate traininglearn skills & mcp

discover

skillsmcp serversexplainx mcpestacktoolsmdx readeragentsllmsdesignsdictionarypeopleagi trackerfelony benchranks

company

aboutvisionmissionteaminstructorsteach on explainxpartnershipscommunityhackathonscareers

content

daily AI newsstate of AI — live resultsblogreleasespromptsgeneratorsresource libraryfor LLMsexplainx.ai kids

solutions

all solutionsdeveloper upskillingmarketing upskillingproduct manager upskillingleadership upskilling

newsletter · weekly

Get AI news, tools, and insights in your inbox.

supportcontactprivacytermsdata rightshow we create contentsubmission guidelines

© 2026 AISOLO Technologies Pvt Ltd

explainx.ai

On this page

  • TL;DR: what changed in LLM 0.37
  • What is LLM, and who is it for?
  • New models: GPT-6.1 Sol, Terra and chat-latest
  • The default model is now GPT-6 Luna
  • llm openai endpoint add: OpenAI-compatible servers without YAML
  • Multimodal embeddings: typed attachments
  • Tool-chain changes for agent builders
  • Bug fixes worth reading before you upgrade
  • What breaks: removed models and Python 3.10
  • A note on AI-assisted contributions
  • How to upgrade safely
  • What this means for what you build or pay
  • Related reading
← Back to blog

explainx / blog

LLM 0.37: GPT-6.1 Sol and Terra, Endpoint Add and a Cheaper Default

LLM CLI, Developer Tools, OpenAI, Open Source, Embeddings

Part of AI Tools and Apps

LLM 0.37 adds GPT-6.1 Sol and Terra, an openai endpoint add command, multimodal embeddings and a cheaper GPT-6 Luna default. Upgrade notes inside.

Nov 3, 2026·10 min read·Yash Thakker
add explainx.ai
go deep
LLM 0.37: GPT-6.1 Sol and Terra, Endpoint Add and a Cheaper Default

Simon Willison released LLM 0.37 on November 2, 2026. It is the first release of his command-line tool and Python library for language models in about two months, and the changelog is long. The headline items are support for OpenAI's GPT-6.1 Sol and Terra models, a new llm openai endpoint add command for registering OpenAI-compatible servers, a cheaper default model, and a typed-attachment API for multimodal embeddings. The author's own announcement post summarizes the release, and the full list is in the GitHub release notes.

This post is a practical upgrade guide. It explains what each change does, what could break in your scripts, and how it fits with the OpenAI models we have already covered, including the GPT-6.1 Sol launch and the GPT-6.1 Terra launch.

TL;DR: what changed in LLM 0.37

table · 2 cols
ChangeWhat it means for you
New models: gpt-6.1-sol, gpt-6.1-terra, chat-latestRun the newest OpenAI models from the command line with a model ID
New llm openai endpoint add, list, remove, pathRegister OpenAI-compatible servers without editing YAML by hand
Default model is now GPT-6 LunaNew installs and users without a set default pay about half as much, per the author
Embedding models accept typed attachmentsPlugins can embed images, audio or video, not only text
llm chat -u/--usageSee token usage on standard error after every turn
chain.on_response(callback)Python hook that runs after each response in a tool chain
Python 3.15 supported, 3.10 droppedCheck your environment before upgrading
Retired OpenAI models removedOld scripts naming gpt-4 or o1 will fail

What is LLM, and who is it for?

LLM is an open-source command-line tool and Python library by Simon Willison, built around plugins. You install it, add a plugin for a provider or a local runtime, and then run prompts, chat sessions, tool calls, structured-output schemas and embeddings from the shell. Every prompt and response is logged to a local SQLite database, which makes it easy to search what you asked a model last week.

That logging is why developers use it. You can pipe a file into a model, save the result, and later query the database with SQL. We cover a related example of Willison's tooling in our post on his vibe-coded real-time strategy game, which shows the same preference for small, inspectable tools.

New models: GPT-6.1 Sol, Terra and chat-latest

The release adds three OpenAI model IDs. gpt-6.1-sol maps to GPT-6.1 Sol, gpt-6.1-terra maps to GPT-6.1 Terra, and chat-latest maps to OpenAI's Chat Latest alias.

You can try them as soon as you upgrade and have an OpenAI API key set:

bash
llm install -U llm
llm keys set openai
llm -m gpt-6.1-terra "Explain this error in one paragraph" < error.log
llm -m gpt-6.1-sol "Review this diff for bugs" < change.diff

If you are choosing between the two, our earlier posts have the pricing and benchmark details. The Sol launch is covered in GPT-6.1 Sol at DevDay, the cost angle is in Sol and Astra cost efficiency, and Terra's computer-use positioning is in the Terra post. Check OpenAI's model pages for current prices before you run large batches, because prices can change.

The default model is now GPT-6 Luna

If you never set a default model, LLM picks one for you. In 0.37 that default changes to GPT-6 Luna, the model that replaces GPT-5.6 Luna. Willison writes in his announcement that the new default costs half as much as the old one.

This matters because a default is the model you use when you type a quick prompt without thinking. A cheaper default lowers the cost of casual use. It also changes results, since a different model answers the same question.

To keep the old behavior, run:

bash
llm models default gpt-5.6-luna

To see which default you have now, run llm models default. If you want a stable default across upgrades, set it explicitly once. That protects you from the next default change.

llm openai endpoint add: OpenAI-compatible servers without YAML

Many servers speak the OpenAI API format: local runtimes, gateways, and hosted open-weight model providers. LLM has supported them through a file called extra-openai-models.yaml. Before 0.37 you edited that file by hand.

The new commands manage it:

  • llm openai endpoint add registers a model that uses an OpenAI-compatible endpoint
  • llm openai endpoint list shows the registered entries
  • llm openai endpoint remove deletes one
  • llm openai endpoint path prints the location of the YAML file

The LLM documentation on configuring an OpenAI-compatible model has the full options. The change fits a wider trend. Many services now offer an OpenAI-compatible endpoint, and some, such as Meituan's LongCat-2.5 API, also offer an Anthropic-compatible one. See our LongCat-2.5 launch post for that example. A tool that can point at any compatible server in one command makes it cheap to compare providers on your own prompts.

A practical tip: after adding an endpoint, give the model a short alias and run the same prompt against two providers. Because LLM logs every response, you can compare answers and token counts later with a SQL query.

Multimodal embeddings: typed attachments

LLM can embed text and store the vectors in collections. In 0.37, embedding models can now accept typed attachments. An attachment carries a MIME type and the path or URL it came from. Plugins declare the types they support through attachment_types and receive matching inputs as llm.Attachment objects.

The CLI gains new options. llm embed, llm embed-multi and llm similar accept -a/--attachment and --at/--attachment-type. Collections now store the MIME type in a new content_type column, exposed as Entry.content_type in Python.

Willison's announcement says the point is to support models such as Gemini Embedding 2 that embed text, audio, images and video. The core library does not ship such a model, so you still need a plugin for it. The change gives plugin authors a standard way to pass binary input.

If you build search over mixed media, this is the useful part. You can embed screenshots, audio clips and documents into one collection, then run llm similar with a query. Test on a small sample first, since embedding quality differs a lot between models.

Tool-chain changes for agent builders

LLM supports tools: Python functions or toolboxes that a model can call. When a model calls several tools in a row, that sequence is a chain. Several changes in 0.37 affect chains.

  • chain.on_response(callback) runs a callback for each completed response in a chain. It fires before the chain limit is checked and before that response's tool calls run. That makes it a good place for logging, cost tracking or a safety check.
  • Chain limit fix. A chain that finishes within its limit no longer raises Chain limit of N exceeded. The limit now only applies when the last allowed response asks for another round of tool calls.
  • Schemas apply to every request in a chain, including the final one. Before, a schema was dropped after the first round of tool calls.
  • before_call and after_call are kept when Response.reply() runs tool calls automatically. The old behavior let a tool that before_call rejected still run. This was a real safety bug, and it is worth knowing about if you use before_call as an approval gate.
  • Errors no longer discard logs. llm prompt and llm chat now log each response as soon as it completes, so an error or hitting the chain limit keeps the earlier responses.
  • Missing tools return errors. Response.execute_tool_calls() now returns an error result for a tool with no implementation instead of raising ValueError, matching the async version.

For background on why tools matter, see our explainer on the Model Context Protocol and the July 2026 stateless MCP spec update. For a wider view of agent loops, our loop engineering guide covers the patterns that tool chains implement.

Bug fixes worth reading before you upgrade

A sealed evidence bag with linked dots, showing how the LLM 0.37 CLI now logs each tool-chain response as it completesA sealed evidence bag with linked dots, showing how the LLM 0.37 CLI now logs each tool-chain response as it completes

The release contains many fixes. These are the ones most likely to change something you see.

table · 2 cols
FixWhy it matters
llm chat respects llm logs offBefore, chat logged responses even with logging turned off. If you turned logging off for privacy, earlier chats may have been stored
llm embed-multi --files stopped corrupting non-ASCII textNon-ASCII UTF-8 files were mangled. Run the command again; per the notes it re-embeds only the affected files
SQLITE_BUSY errors fixedMultiple processes logging to one database no longer collide
embed_multi() raises ValueError on a wrong embedding countBefore, rows could be lost or vectors stored against wrong IDs
Collection.embed() no longer skips a new ID with duplicate contentMatches embed_multi()
llm logs -s truncates tool argumentsShort log output stays short
llm schemas list handles boolean property definitionsNo crash on schemas such as a property set to true
log_to_db() on an unread sync response runs it firstThe logged turn now includes output and token usage

The logging fix deserves a note. If you ran llm logs off and still used llm chat, check your database. You can find the file with llm logs path and delete rows you did not intend to keep.

What breaks: removed models and Python 3.10

Two changes can break existing setups.

First, 0.37 removes OpenAI models that have been shut down. The release notes list gpt-3.5-turbo, gpt-3.5-turbo-16k, gpt-3.5-turbo-instruct, gpt-4, gpt-4-turbo, gpt-4-turbo-2024-04-09, gpt-4.1-nano, gpt-5.2-chat-latest, o1, o1-2024-12-17, o3-mini and o4-mini, along with aliases such as 3.5, chatgpt, 4 and 4t. Search your shell scripts, cron jobs and notebooks for those names before you upgrade.

bash
grep -rnE "gpt-4|gpt-3.5|o1|o3-mini|o4-mini|chatgpt" ~/scripts

Second, Python 3.10 is no longer supported, and Python 3.15 now is. If your environment uses 3.10, pin the older LLM version or upgrade Python.

A note on AI-assisted contributions

Willison's announcement says the release includes fixes from 12 contributors, almost all of them AI-assisted. He says he treats these as bug reports with attached examples, and that the review burden was smaller than he expected. The changelog credits contributors by name for the bug fixes, which is a good model for open-source projects that now receive many machine-assisted pull requests.

For readers who maintain a project, the takeaway is practical. A report with a reproducing example is valuable whether a person or a model wrote it. The maintainer still decides what to merge.

How to upgrade safely

A blank terminal window with a green block cursor, ready for the upgrade commands to LLM 0.37A blank terminal window with a green block cursor, ready for the upgrade commands to LLM 0.37

  1. Run llm --version and note your current version.
  2. Search your scripts for the removed model names.
  3. Upgrade with the tool you installed with, such as pip install -U llm, uv tool upgrade llm or brew upgrade llm.
  4. Set an explicit default with llm models default <model> so future default changes do not surprise you.
  5. If you use embeddings with non-ASCII text, rerun llm embed-multi --files on the affected collections to repair them.
  6. If you use before_call as an approval gate, retest your tool chains.
  7. Try llm openai endpoint list to confirm your existing YAML entries still load.

What this means for what you build or pay

For solo developers, the cheaper default lowers the cost of throwaway prompts, and the endpoint commands make it easier to try a second provider. For teams that script LLM in pipelines, the removed models and the Python version change are the items to check first. For agent builders, the tool-chain fixes close real gaps, and on_response gives a clean place to add monitoring.

If you run agents that can take real actions, a hook is not a guardrail on its own. Treat any approval gate as something to test. AgentBeam, the agent security platform from the explainx.ai team, is built to stop agents before they take dangerous actions, and is one option for teams that need more than a callback.

Related reading

  • GPT-6.1 Sol launch, pricing and benchmarks
  • GPT-6.1 Terra: $1 / $5 computer-use model
  • GPT-6.1 Sol and Astra cost efficiency
  • Simon Willison's vibe-coded RTS, Battle Drones
  • What is the Model Context Protocol?
  • Stateless MCP spec, July 2026
  • Loop engineering for coding agents

Version details are accurate as of November 3, 2026. Check the official release notes for later changes.

Spotted something out of date? Let us know.

People in this article

  • Simon Willison →Independent open source developer and creator of Datasette
Explore people in AI →
Yash Thakker

Written by

Yash Thakker

Yash is an AI expert with over 300K learners. Join his workshops →

View Yash Thakker in People in AI →

Related posts

Nov 3, 2026

BLA (Blind LLM Agents): The Trending Shield Against AI Reverse-Engineering Agents, Claimed vs Verified

A new MIT-licensed repo called BLA, short for Blind LLM Agents, gained about 2,000 GitHub stars in nine days. It says it can make AI reverse-engineering agents burn tokens and hit limits on your shipped build. We read the README and the disclaimer to separate measured results from internal estimates.

Nov 3, 2026

OpenAI Pando: The Git Backend It Built for Codex-Scale Work

OpenAI says its monorepo was straining under the parallel work Codex makes possible, with reliability at times below 90 percent. It built Pando, a Git-compatible backend, in 10 weeks. Here is how Pando works, what the numbers say, and what it means for teams running coding agents.

Oct 31, 2026

Postgres 19 Is Late Because LLMs Found Too Many Bugs, Says Committer Robert Haas

PostgreSQL committer Robert Haas argues that AI bug-hunting, not sloppy committers, explains why Postgres 19 is shipping after its usual mid-October window and why three big features were reverted. Here are his numbers, what the project itself has published, and what it means for anyone running open-source code in the LLM era.