PARAS MADAN
All writing

Latest in AI

LLM 0.37 Released: Endpoint Configuration, Embeddings and a Tool-Callback Fix

Simon Willison’s CLI update adds model support, but its fixes to tool execution and logging deserve just as much attention.

Simon Willison released LLM 0.37 on November 2, updating his command-line tool and Python library for working with language models. Its endpoint and embedding changes arrive alongside an important tool-execution fix.

What changed in LLM 0.37

The release notes add GPT-6.1 Sol, GPT-6.1 Terra and Chat Latest support. Users without an explicitly configured default now get GPT-6 Luna instead of GPT-5.6 Luna. Existing custom defaults are not replaced.

Embedding inputs can now carry a MIME type and source path or URL, rather than arriving only as undifferentiated binary content. Plugins declare supported attachment types. This provides infrastructure for multimodal embeddings; it does not make every installed embedding model understand every file format.

Python 3.15 is supported; Python 3.10 is dropped. There is a practical upgrade check here for teams whose automation still uses an older interpreter.

OpenAI-compatible endpoints become easier to manage

The endpoint documentation describes new add, list, remove and path commands for the extra-openai-models.yaml configuration file. Developers can register a compatible provider under a local model ID and then use it through the usual LLM interface.

A stored key alias can be associated with that endpoint. The configuration stores the alias rather than copying the secret into the YAML record, and a custom base URL does not receive the configured OpenAI key by default.

This reduces the friction of comparing providers without rewriting the surrounding script. Compatibility still needs testing: a provider’s support for tools, structured output or a particular API is a separate question from accepting a familiar request format.

The tool-callback fix is worth checking

The underlying issue report describes a specific Python API problem. A response continued through Response.reply() could automatically execute tools without carrying forward the conversation’s before_call and after_call callbacks. A cancellation raised through before_call could therefore be missed along that path.

The report distinguishes this from Conversation.chain(), which already invoked the callbacks. Version 0.37 fixes forwarding and retaining them across replies. This is a documented library bug, not evidence that every application using LLM suffered an unauthorized action.

If an application uses callbacks as an approval boundary, its regression tests should exercise every continuation path. Testing only the first model response can miss what happens after the model asks for another tool call.

Logging is part of the upgrade too

LLM 0.37 fixes interactive chat ignoring the setting that disables logs. It also saves completed responses within a tool chain as they finish, so a later error does not discard the earlier record.

These changes point to a useful distinction in agent tooling. Adding another model gives developers more choices; preserving cancellation and logging behaviour makes those choices easier to use responsibly. Before changing a production default, check the interpreter, the explicit model selection and the application’s tool-approval tests together.

I’m Paras. I work at the intersection of AI, engineering and distribution.

I help developer-tool teams turn technical releases and workflow improvements into clear stories that founders and developers can use and share.

Book a 30-minute call.