Simon Willison's Weblog
- Author
- Simon Willison
- Public lists
-
davewiner/hackerNewsStars
Featured
- Fetched
Gemma 4: Byte for byte, the most capable open models
llm-gemini 0.30
Release: llm-gemini 0.30
New models gemini-3.1-flash-lite-preview, gemma-4-26b-a4b-it and gemma-4-31b-it. See my notes on Gemma 4.
March 2026 sponsors-only newsletter
I just sent the March edition of my sponsors-only monthly newsletter. If you are a sponsor (or if you start a sponsorship now) you can access it here. In this month's newsletter:
- More agentic engineering patterns
- Streaming experts with MoE models on a Mac
- Model releases in March
- Vibe porting
- Supply chain attacks against PyPI and NPM
- Stuff I shipped
- What I'm using, March 2026 edition
- And a couple of museums
Here's a copy of the February newsletter as a preview of what you'll get. Pay $10/month to stay a month ahead of the free copy!
Tags: newsletter
datasette-llm 0.1a6
Release: datasette-llm 0.1a6
- The same model ID no longer needs to be repeated in both the default model and allowed models lists - setting it as a default model automatically adds it to the allowed models list. #6
- Improved documentation for Python API usage.
datasette-enrichments-llm 0.2a1
Release: datasette-enrichments-llm 0.2a1
- The
actorwho triggers an enrichment is now passed to thellm.mode(... actor=actor)method. #3
Tags: enrichments, llm, datasette
datasette-extract 0.3a0
Release: datasette-extract 0.3a0
- This plugin now uses datasette-llm to configure and manage models. This means it's possible to specify which models should be made available for enrichments, using the new
enrichmentspurpose.
datasette-enrichments-llm 0.2a0
Release: datasette-enrichments-llm 0.2a0
- This plugin now uses datasette-llm to configure and manage models. This means it's possible to specify which models should be made available for enrichments, using the new
enrichmentspurpose.
datasette-llm-usage 0.2a0
Release: datasette-llm-usage 0.2a0
- Removed features relating to allowances and estimated pricing. These are now the domain of datasette-llm-accountant.
- Now depends on datasette-llm for model configuration. #3
- Full prompts and responses and tool calls can now be logged to the
llm_usage_prompt_logtable in the internal database if you set the newdatasette-llm-usage.log_promptsplugin configuration setting.- Redesigned the
/-/llm-usage-simple-promptpage, which now requires thellm-usage-simple-promptpermission.
datasette-llm 0.1a5
Release: datasette-llm 0.1a5
- The
llm_prompt_context()plugin hook wrapper mechanism now tracks prompts executed within a chain as well as one-off prompts, which means it can be used to track tool call loops. #5
Quoting Soohoon Choi
I want to argue that AI models will write good code because of economic incentives. Good code is cheaper to generate and maintain. Competition is high between the AI models right now, and the ones that win will help developers ship reliable features fastest, which requires simple, maintainable code. Good code will prevail, not only because we want it to (though we do!), but because economic forces demand it. Markets will not reward slop in coding, in the long-term.
— Soohoon Choi, Slop Is Not Necessarily The Future
Tags: slop, ai-assisted-programming, generative-ai, agentic-engineering, ai, llms
Supply Chain Attack on Axios Pulls Malicious Dependency from npm
Supply Chain Attack on Axios Pulls Malicious Dependency from npm
Useful writeup of today's supply chain attack against Axios, the HTTP client NPM package with 101 million weekly downloads. Versions1.14.1 and 0.30.4 both included a new dependency called plain-crypto-js which was freshly published malware, stealing credentials and installing a remote access trojan (RAT).
It looks like the attack came from a leaked long-lived npm token. Axios have an open issue to adopt trusted publishing, which would ensure that only their GitHub Actions workflows are able to publish to npm. The malware packages were published without an accompanying GitHub release, which strikes me as a useful heuristic for spotting potentially malicious releases - the same pattern was present for LiteLLM last week as well.
Via lobste.rs
Tags: javascript, security, npm, supply-chain
datasette-llm 0.1a4
Release: datasette-llm 0.1a4
- Ability to configure different API keys for models based on their purpose - for example, set it up so enrichments always use
gpt-5.4-miniwith an API key dedicated to that purpose. #4
I released llm-echo 0.3 to provide an API key testing utility I needed for the tests for this new feature.
llm-all-models-async 0.1
Release: llm-all-models-async 0.1
LLM plugins can define new models in both sync and async varieties. The async variants are most common for API-backed models - sync variants tend to be things that run the model directly within the plugin.
My llm-mrchatterbox plugin is sync only. I wanted to try it out with various Datasette LLM features (specifically datasette-enrichments-llm) but Datasette can only use async models.
So... I had Claude spin up this plugin that turns sync models into async models using a thread pool. This ended up needing an extra plugin hook mechanism in LLM itself, which I shipped just now in LLM 0.30.
llm 0.30
Release: llm 0.30
- The register_models() plugin hook now takes an optional
model_aliasesparameter listing all of the models, async models and aliases that have been registered so far by other plugins. A plugin with@hookimpl(trylast=True)can use this to take previously registered models into account. #1389- Added docstrings to public classes and methods and included those directly in the documentation.
Tags: llm
llm-echo 0.4
Release: llm-echo 0.4
- Prompts now have the
input_tokensandoutput_tokensfields populated on the response.
Tags: llm
llm-echo 0.3
Release: llm-echo 0.3
- Mechanisms for testing tool calls. #3
- Mechanism for testing raw responses. #4
- New
echo-needs-keymodel for testing model key logic. #7
Tags: llm
datasette-files 0.1a3
Release: datasette-files 0.1a3
I'm working on integrating datasette-files into other plugins, such as datasette-extract. This necessitated a new release of the base plugin.
owners_can_editandowners_can_deleteconfiguration options, plus thefiles-editandfiles-deleteactions are now scoped to a newFileResourcewhich is a child ofFileSourceResource. #18- The file picker UI is now available as a
<datasette-file-picker>Web Component. Thanks, Alex Garcia. #19- New
from datasette_files import get_filePython API for other plugins that need to access file data. #20
Tags: datasette
datasette-llm 0.1a3
Release: datasette-llm 0.1a3
Adds the ability to configure which LLMs are available for which purpose, which means you can restrict the list of models that can be used with a specific plugin. #3
Quoting Georgi Gerganov
Note that the main issues that people currently unknowingly face with local models mostly revolve around the harness and some intricacies around model chat templates and prompt construction. Sometimes there are even pure inference bugs. From typing the task in the client to the actual result, there is a long chain of components that atm are not only fragile - are also developed by different parties. So it's difficult to consolidate the entire stack and you have to keep in mind that what you are currently observing is with very high probability still broken in some subtle way along that chain.
— Georgi Gerganov, explaining why it's hard to find local models that work well with coding agents
Tags: coding-agents, generative-ai, ai, local-llms, llms, georgi-gerganov
Mr. Chatterbox is a (weak) Victorian-era ethically trained model you can run on your own computer
llm-mrchatterbox 0.1
Pretext
Pretext — Under the Hood
Tool: Pretext — Under the Hood
Python Vulnerability Lookup
Tool: Python Vulnerability Lookup
I learned that the OSV.dev open source vulnerability database has an open CORS JSON API so I had Claude Code build this HTML tool for pasting in a pyproject.toml or requirements.txt file (or name of a GitHub repo containing those) and seeing a list of all reported vulnerabilities from that API.
Tags: tools, python, supply-chain, vibe-coding, security
Quoting Matt Webb
datasette-showboat 0.1a2
Release: datasette-showboat 0.1a2
I added an option to export a Markdown file from my app that lets Showboat incrementally publish updates to a remote server.
Quoting Richard Fontana
FWIW, IANDBL, TINLA, etc., I don’t currently see any basis for concluding that chardet 7.0.0 is required to be released under the LGPL. AFAIK no one including Mark Pilgrim has identified persistence of copyrightable expressive material from earlier versions in 7.0.0 nor has anyone articulated some viable alternate theory of license violation. [...]
— Richard Fontana, LGPLv3 co-author, weighing in on the chardet relicensing situation
Tags: open-source, ai-ethics, llms, ai, generative-ai, ai-assisted-programming
Vibe coding SwiftUI apps is a lot of fun
We Rewrote JSONata with AI in a Day, Saved $500K/Year
We Rewrote JSONata with AI in a Day, Saved $500K/Year
Bit of a hyperbolic framing but this looks like another case study of vibe-porting, this time spinning up a new custom Go implementation of the JSONata JSON expression language - similar in focus to jq, and heavily associated with the Node-RED platform.As with other vibe-porting projects the key enabling factor was JSONata's existing test suite, which helped build the first working Go version in 7 hours and $400 of token spend.
The Reco team then used a shadow deployment for a week to run the new and old versions in parallel to confirm the new implementation exactly matched the behavior of the old one.
Tags: go, json, ai, generative-ai, llms, agentic-engineering