<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: andrej-karpathy</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/andrej-karpathy.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2026-04-10T15:56:02+00:00</updated><author><name>Simon Willison</name></author><entry><title>ChatGPT voice mode is a weaker model</title><link href="https://simonwillison.net/2026/Apr/10/voice-mode-is-weaker/#atom-tag" rel="alternate"/><published>2026-04-10T15:56:02+00:00</published><updated>2026-04-10T15:56:02+00:00</updated><id>https://simonwillison.net/2026/Apr/10/voice-mode-is-weaker/#atom-tag</id><summary type="html">
    &lt;p&gt;I think it's non-obvious to many people that the OpenAI voice mode runs on a much older, much weaker model - it feels like the AI that you can talk to should be the smartest AI but it really isn't.&lt;/p&gt;
&lt;p&gt;If you ask ChatGPT voice mode for its knowledge cutoff date it tells you April 2024 - it's a GPT-4o era model.&lt;/p&gt;
&lt;p&gt;This thought inspired by &lt;a href="https://twitter.com/karpathy/status/2042334451611693415"&gt;this Andrej Karpathy tweet&lt;/a&gt; about the growing gap in understanding of AI capability based on the access points and domains people are using the models with:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[...] It really is simultaneously the case that OpenAI's free and I think slightly orphaned (?) "Advanced Voice Mode" will fumble the dumbest questions in your Instagram's reels and &lt;em&gt;at the same time&lt;/em&gt;, OpenAI's highest-tier and paid Codex model will go off for 1 hour to coherently restructure an entire code base, or find and exploit vulnerabilities in computer systems.&lt;/p&gt;
&lt;p&gt;This part really works and has made dramatic strides because 2 properties:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;these domains offer explicit reward functions that are verifiable meaning they are easily amenable to reinforcement learning training (e.g. unit tests passed yes or no, in contrast to writing, which is much harder to explicitly judge),  but also&lt;/li&gt;
&lt;li&gt;they are a lot more valuable in b2b settings, meaning that the biggest fraction of the team is focused on improving them.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/chatgpt"&gt;chatgpt&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="openai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="chatgpt"/><category term="llms"/></entry><entry><title>Mr. Chatterbox is a (weak) Victorian-era ethically trained model you can run on your own computer</title><link href="https://simonwillison.net/2026/Mar/30/mr-chatterbox/#atom-tag" rel="alternate"/><published>2026-03-30T14:28:34+00:00</published><updated>2026-03-30T14:28:34+00:00</updated><id>https://simonwillison.net/2026/Mar/30/mr-chatterbox/#atom-tag</id><summary type="html">
    &lt;p&gt;Trip Venturella released &lt;a href="https://www.estragon.news/mr-chatterbox-or-the-modern-prometheus/"&gt;Mr. Chatterbox&lt;/a&gt;, a language model trained entirely on out-of-copyright text from the British Library. Here's how he describes it in &lt;a href="https://huggingface.co/tventurella/mr_chatterbox_model"&gt;the model card&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Mr. Chatterbox is a language model trained entirely from scratch on a corpus of over 28,000 Victorian-era British texts published between 1837 and 1899, drawn from a dataset made available &lt;a href="https://huggingface.co/datasets/TheBritishLibrary/blbooks"&gt;by the British Library&lt;/a&gt;. The model has absolutely no training inputs from after 1899 — the vocabulary and ideas are formed exclusively from nineteenth-century literature.&lt;/p&gt;
&lt;p&gt;Mr. Chatterbox's training corpus was 28,035 books, with an estimated 2.93 billion input tokens after filtering. The model has roughly 340 million paramaters, roughly the same size as GPT-2-Medium. The difference is, of course, that unlike GPT-2, Mr. Chatterbox is trained entirely on historical data.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Given how hard it is to train a useful LLM without using vast amounts of scraped, unlicensed data I've been dreaming of a model like this for a couple of years now. What would a model trained on out-of-copyright text be like to chat with?&lt;/p&gt;
&lt;p&gt;Thanks to Trip we can now find out for ourselves!&lt;/p&gt;
&lt;p&gt;The model itself is tiny, at least by Large Language Model standards - just &lt;a href="https://huggingface.co/tventurella/mr_chatterbox_model/tree/main"&gt;2.05GB&lt;/a&gt; on disk. You can try it out using Trip's &lt;a href="https://huggingface.co/spaces/tventurella/mr_chatterbox"&gt;HuggingFace Spaces demo&lt;/a&gt;:&lt;/p&gt;
&lt;p style="text-align: center"&gt;&lt;img src="https://static.simonwillison.net/static/2026/chatterbox.jpg" alt="Screenshot of a Victorian-themed chatbot interface titled &amp;quot;🎩 Mr. Chatterbox (Beta)&amp;quot; with subtitle &amp;quot;The Victorian Gentleman Chatbot&amp;quot;. The conversation shows a user asking &amp;quot;How should I behave at dinner?&amp;quot; with the bot replying &amp;quot;My good fellow, one might presume that such trivialities could not engage your attention during an evening's discourse!&amp;quot; The user then asks &amp;quot;What are good topics?&amp;quot; and the bot responds &amp;quot;The most pressing subjects of our society— Indeed, a gentleman must endeavor to engage the conversation with grace and vivacity. Such pursuits serve as vital antidotes against ennui when engaged in agreeable company.&amp;quot; A text input field at the bottom reads &amp;quot;Say hello...&amp;quot; with a send button. The interface uses a dark maroon and cream color scheme." style="max-width: 80%;" /&gt;&lt;/p&gt;
&lt;p&gt;Honestly, it's pretty terrible. Talking with it feels more like chatting with a Markov chain than an LLM - the responses may have a delightfully Victorian flavor to them but it's hard to get a response that usefully answers a question.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://arxiv.org/abs/2203.15556"&gt;2022 Chinchilla paper&lt;/a&gt; suggests a ratio of 20x the parameter count to training tokens. For a 340m model that would suggest around 7 billion tokens, more than twice the British Library corpus used here. The smallest Qwen 3.5 model is 600m parameters and that model family starts to get interesting at 2b - so my hunch is we would need 4x or more the training data to get something that starts to feel like a useful conversational partner.&lt;/p&gt;
&lt;p&gt;But what a fun project!&lt;/p&gt;
&lt;h4 id="running-it-locally-with-llm"&gt;Running it locally with LLM&lt;/h4&gt;
&lt;p&gt;I decided to see if I could run the model on my own machine using my &lt;a href="https://llm.datasette.io/"&gt;LLM&lt;/a&gt; framework.&lt;/p&gt;
&lt;p&gt;I got Claude Code to do most of the work - &lt;a href="https://gisthost.github.io/?7d0f00e152dd80d617b5e501e4ff025b/index.html"&gt;here's the transcript&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Trip trained the model using Andrej Karpathy's &lt;a href="https://github.com/karpathy/nanochat"&gt;nanochat&lt;/a&gt;, so I cloned that project, pulled the model weights and told Claude to build a Python script to run the model. Once we had that working (which ended up needing some extra details from the &lt;a href="https://huggingface.co/spaces/tventurella/mr_chatterbox/tree/main"&gt;Space demo source code&lt;/a&gt;) I had Claude &lt;a href="https://llm.datasette.io/en/stable/plugins/tutorial-model-plugin.html"&gt;read the LLM plugin tutorial&lt;/a&gt; and build the rest of the plugin.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/simonw/llm-mrchatterbox"&gt;llm-mrchatterbox&lt;/a&gt; is the result. Install the plugin like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;llm install llm-mrchatterbox
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The first time you run a prompt it will fetch the 2.05GB model file from Hugging Face. Try that like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;llm -m mrchatterbox "Good day, sir"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or start an ongoing chat session like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;llm chat -m mrchatterbox
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you don't have LLM installed you can still get a chat session started from scratch using uvx like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;uvx --with llm-mrchatterbox llm chat -m mrchatterbox
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When you are finished with the model you can delete the cached file using:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;llm mrchatterbox delete-model
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is the first time I've had Claude Code build a full LLM model plugin from scratch and it worked really well. I expect I'll be using this method again in the future.&lt;/p&gt;
&lt;p&gt;I continue to hope we can get a useful model from entirely public domain data. The fact that Trip was able to get this far using nanochat and 2.93 billion training tokens is a promising start.&lt;/p&gt;

&lt;p id="update-31st"&gt;&lt;strong&gt;Update 31st March 2026&lt;/strong&gt;: I had missed this when I first published this piece but Trip has his own &lt;a href="https://www.estragon.news/mr-chatterbox-or-the-modern-prometheus/"&gt;detailed writeup of the project&lt;/a&gt; which goes into much more detail about how he trained the model. Here's how the books were filtered for pre-training:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;First, I downloaded the British Library dataset split of all 19th-century books. I filtered those down to books contemporaneous with the reign of Queen Victoria—which, unfortunately, cut out the novels of Jane Austen—and further filtered those down to a set of books with a optical character recognition (OCR) confidence of .65 or above, as listed in the metadata. This left me with 28,035 books, or roughly 2.93 billion tokes for pretraining data.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Getting it to behave like a conversational model was a lot harder. Trip started by trying to train on plays by Oscar Wilde and George Bernard Shaw, but found they didn't provide enough pairs. Then he tried extracting dialogue pairs from the books themselves with poor results. The approach that worked was to have Claude Haiku and GPT-4o-mini generate synthetic conversation pairs for the supervised fine tuning, which solved the problem but sadly I think dilutes the "no training inputs from after 1899" claim from the original model card.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/local-llms"&gt;local-llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hugging-face"&gt;hugging-face&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm"&gt;llm&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/training-data"&gt;training-data&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uv"&gt;uv&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-ethics"&gt;ai-ethics&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude-code"&gt;claude-code&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="ai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="local-llms"/><category term="llms"/><category term="ai-assisted-programming"/><category term="hugging-face"/><category term="llm"/><category term="training-data"/><category term="uv"/><category term="ai-ethics"/><category term="claude-code"/></entry><entry><title>Shopify/liquid: Performance: 53% faster parse+render, 61% fewer allocations</title><link href="https://simonwillison.net/2026/Mar/13/liquid/#atom-tag" rel="alternate"/><published>2026-03-13T03:44:34+00:00</published><updated>2026-03-13T03:44:34+00:00</updated><id>https://simonwillison.net/2026/Mar/13/liquid/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/Shopify/liquid/pull/2056"&gt;Shopify/liquid: Performance: 53% faster parse+render, 61% fewer allocations&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
PR from Shopify CEO Tobias Lütke against Liquid, Shopify's open source Ruby template engine that was somewhat inspired by Django when Tobi first created it &lt;a href="https://simonwillison.net/2005/Nov/6/liquid/"&gt;back in 2005&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tobi found dozens of new performance micro-optimizations using a variant of &lt;a href="https://github.com/karpathy/autoresearch"&gt;autoresearch&lt;/a&gt;, Andrej Karpathy's new system for having a coding agent run hundreds of semi-autonomous experiments to find new effective techniques for training &lt;a href="https://github.com/karpathy/nanochat"&gt;nanochat&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tobi's implementation started two days ago with this &lt;a href="https://github.com/Shopify/liquid/blob/2543fdc1a101f555db208fb0deeb2e3bf1ae9e36/auto/autoresearch.md"&gt;autoresearch.md&lt;/a&gt; prompt file and an &lt;a href="https://github.com/Shopify/liquid/blob/2543fdc1a101f555db208fb0deeb2e3bf1ae9e36/auto/autoresearch.sh"&gt;autoresearch.sh&lt;/a&gt; script for the agent to run to execute the test suite and report on benchmark scores.&lt;/p&gt;
&lt;p&gt;The PR now lists &lt;a href="https://github.com/Shopify/liquid/pull/2056/commits"&gt;93 commits&lt;/a&gt; from around 120 automated experiments. The PR description lists what worked in detail - some examples:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Replaced StringScanner tokenizer with &lt;code&gt;String#byteindex&lt;/code&gt;.&lt;/strong&gt; Single-byte &lt;code&gt;byteindex&lt;/code&gt; searching is ~40% faster than regex-based &lt;code&gt;skip_until&lt;/code&gt;. This alone reduced parse time by ~12%.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pure-byte &lt;code&gt;parse_tag_token&lt;/code&gt;.&lt;/strong&gt; Eliminated the costly &lt;code&gt;StringScanner#string=&lt;/code&gt; reset that was called for every &lt;code&gt;{% %}&lt;/code&gt; token (878 times). Manual byte scanning for tag name + markup extraction is faster than resetting and re-scanning via StringScanner. [...]&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cached small integer &lt;code&gt;to_s&lt;/code&gt;.&lt;/strong&gt; Pre-computed frozen strings for 0-999 avoid 267 &lt;code&gt;Integer#to_s&lt;/code&gt; allocations per render.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;This all added up to a 53% improvement on benchmarks - truly impressive for a codebase that's been tweaked by hundreds of contributors over 20 years.&lt;/p&gt;
&lt;p&gt;I think this illustrates a number of interesting ideas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Having a robust test suite - in this case 974 unit tests - is a &lt;em&gt;massive unlock&lt;/em&gt; for working with coding agents. This kind of research effort would not be possible without first having a tried and tested suite of tests.&lt;/li&gt;
&lt;li&gt;The autoresearch pattern - where an agent brainstorms a multitude of potential improvements and then experiments with them one at a time - is really effective.&lt;/li&gt;
&lt;li&gt;If you provide an agent with a benchmarking script "make it faster" becomes an actionable goal.&lt;/li&gt;
&lt;li&gt;CEOs can code again! Tobi has always been more hands-on than most, but this is a much more significant contribution than anyone would expect from the leader of a company with 7,500+ employees. I've seen this pattern play out a lot over the past few months: coding agents make it feasible for people in high-interruption roles to productively work with code again.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here's Tobi's &lt;a href="https://github.com/tobi"&gt;GitHub contribution graph&lt;/a&gt; for the past year, showing a significant uptick following that &lt;a href="https://simonwillison.net/tags/november-2025-inflection/"&gt;November 2025 inflection point&lt;/a&gt; when coding agents got really good.&lt;/p&gt;
&lt;p&gt;&lt;img alt="1,658 contributions in the last year - scattered lightly through Jun, Aug, Sep, Oct and Nov and then picking up significantly in Dec, Jan, and Feb." src="https://static.simonwillison.net/static/2026/tobi-contribs.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;He used &lt;a href="https://github.com/badlogic/pi-mono"&gt;Pi&lt;/a&gt; as the coding agent and released a new &lt;a href="https://github.com/davebcn87/pi-autoresearch"&gt;pi-autoresearch&lt;/a&gt; plugin in collaboration with David Cortés, which maintains state in an &lt;code&gt;autoresearch.jsonl&lt;/code&gt; file &lt;a href="https://github.com/Shopify/liquid/blob/3182b7c1b3758b0f5fe2d0fcc71a48bbcb11c946/autoresearch.jsonl"&gt;like this one&lt;/a&gt;.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://x.com/tobi/status/2032212531846971413"&gt;@tobi&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/performance"&gt;performance&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rails"&gt;rails&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ruby"&gt;ruby&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/agentic-engineering"&gt;agentic-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/november-2025-inflection"&gt;november-2025-inflection&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tobias-lutke"&gt;tobias-lutke&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/autoresearch"&gt;autoresearch&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="performance"/><category term="rails"/><category term="ruby"/><category term="ai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="coding-agents"/><category term="agentic-engineering"/><category term="november-2025-inflection"/><category term="tobias-lutke"/><category term="autoresearch"/></entry><entry><title>Quoting Andrej Karpathy</title><link href="https://simonwillison.net/2026/Feb/26/andrej-karpathy/#atom-tag" rel="alternate"/><published>2026-02-26T19:03:27+00:00</published><updated>2026-02-26T19:03:27+00:00</updated><id>https://simonwillison.net/2026/Feb/26/andrej-karpathy/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/karpathy/status/2026731645169185220"&gt;&lt;p&gt;It is hard to communicate how much programming has changed due to AI in the last 2 months: not gradually and over time in the "progress as usual" way, but specifically this last December. There are a number of asterisks but imo coding agents basically didn’t work before December and basically work since - the models have significantly higher quality, long-term coherence and tenacity and they can power through large and long tasks, well past enough that it is extremely disruptive to the default programming workflow. [...]&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/karpathy/status/2026731645169185220"&gt;Andrej Karpathy&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/agentic-engineering"&gt;agentic-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/november-2025-inflection"&gt;november-2025-inflection&lt;/a&gt;&lt;/p&gt;



</summary><category term="andrej-karpathy"/><category term="coding-agents"/><category term="ai-assisted-programming"/><category term="generative-ai"/><category term="agentic-engineering"/><category term="ai"/><category term="llms"/><category term="november-2025-inflection"/></entry><entry><title>Andrej Karpathy talks about "Claws"</title><link href="https://simonwillison.net/2026/Feb/21/claws/#atom-tag" rel="alternate"/><published>2026-02-21T00:37:45+00:00</published><updated>2026-02-21T00:37:45+00:00</updated><id>https://simonwillison.net/2026/Feb/21/claws/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://twitter.com/karpathy/status/2024987174077432126"&gt;Andrej Karpathy talks about &amp;quot;Claws&amp;quot;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Andrej Karpathy tweeted a mini-essay about buying a Mac Mini ("The apple store person told me they are selling like hotcakes and everyone is confused") to tinker with Claws:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I'm definitely a bit sus'd to run OpenClaw specifically [...] But I do love the concept and I think that just like LLM agents were a new layer on top of LLMs, Claws are now a new layer on top of LLM agents, taking the orchestration, scheduling, context, tool calls and a kind of persistence to a next level.&lt;/p&gt;
&lt;p&gt;Looking around, and given that the high level idea is clear, there are a lot of smaller Claws starting to pop out. For example, on a quick skim NanoClaw looks really interesting in that the core engine is ~4000 lines of code (fits into both my head and that of AI agents, so it feels manageable, auditable, flexible, etc.) and runs everything in containers by default. [...]&lt;/p&gt;
&lt;p&gt;Anyway there are many others - e.g. nanobot, zeroclaw, ironclaw, picoclaw (lol @ prefixes). [...]&lt;/p&gt;
&lt;p&gt;Not 100% sure what my setup ends up looking like just yet but Claws are an awesome, exciting new layer of the AI stack.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Andrej has an ear for fresh terminology (see &lt;a href="https://simonwillison.net/2025/Mar/19/vibe-coding/"&gt;vibe coding&lt;/a&gt;, &lt;a href="https://simonwillison.net/2026/Feb/11/glm-5/"&gt;agentic engineering&lt;/a&gt;) and I think he's right about this one, too: "&lt;strong&gt;Claw&lt;/strong&gt;" is becoming a term of art for the entire category of OpenClaw-like agent systems - AI agents that generally run on personal hardware, communicate via messaging protocols and can both act on direct instructions and schedule tasks.&lt;/p&gt;
&lt;p&gt;It even comes with an established emoji 🦞


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/definitions"&gt;definitions&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-agents"&gt;ai-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openclaw"&gt;openclaw&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/agentic-engineering"&gt;agentic-engineering&lt;/a&gt;&lt;/p&gt;



</summary><category term="definitions"/><category term="ai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llms"/><category term="ai-agents"/><category term="openclaw"/><category term="agentic-engineering"/></entry><entry><title>Quoting Andrej Karpathy</title><link href="https://simonwillison.net/2026/Jan/31/andrej-karpathy/#atom-tag" rel="alternate"/><published>2026-01-31T21:44:02+00:00</published><updated>2026-01-31T21:44:02+00:00</updated><id>https://simonwillison.net/2026/Jan/31/andrej-karpathy/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/karpathy/status/2017703360393318587"&gt;&lt;p&gt;Originally in 2019, GPT-2 was trained by OpenAI on 32 TPU v3 chips for 168 hours (7 days), with $8/hour/TPUv3 back then, for a total cost of approx. $43K. It achieves 0.256525 CORE score, which is an ensemble metric introduced in the DCLM paper over 22 evaluations like ARC/MMLU/etc.&lt;/p&gt;
&lt;p&gt;As of the last few improvements merged into nanochat (many of them originating in modded-nanogpt repo), I can now reach a higher CORE score in 3.04 hours (~$73) on a single 8XH100 node. This is a 600X cost reduction over 7 years, i.e. the cost to train GPT-2 is falling approximately 2.5X every year.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/karpathy/status/2017703360393318587"&gt;Andrej Karpathy&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gpt-2"&gt;gpt-2&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;&lt;/p&gt;



</summary><category term="andrej-karpathy"/><category term="gpt-2"/><category term="generative-ai"/><category term="ai"/><category term="llms"/><category term="openai"/></entry><entry><title>Quoting Andrej Karpathy</title><link href="https://simonwillison.net/2025/Dec/19/andrej-karpathy/#atom-tag" rel="alternate"/><published>2025-12-19T23:07:52+00:00</published><updated>2025-12-19T23:07:52+00:00</updated><id>https://simonwillison.net/2025/Dec/19/andrej-karpathy/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://karpathy.bearblog.dev/year-in-review-2025/"&gt;&lt;p&gt;In 2025, Reinforcement Learning from Verifiable Rewards (RLVR) emerged as the de facto new major stage to add to this mix. By training LLMs against automatically verifiable rewards across a number of environments (e.g. think math/code puzzles), the LLMs spontaneously develop strategies that look like "reasoning" to humans - they learn to break down problem solving into intermediate calculations and they learn a number of problem solving strategies for going back and forth to figure things out (see DeepSeek R1 paper for examples).&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://karpathy.bearblog.dev/year-in-review-2025/"&gt;Andrej Karpathy&lt;/a&gt;, 2025 LLM Year in Review&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-reasoning"&gt;llm-reasoning&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/definitions"&gt;definitions&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/deepseek"&gt;deepseek&lt;/a&gt;&lt;/p&gt;



</summary><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llm-reasoning"/><category term="definitions"/><category term="ai"/><category term="llms"/><category term="deepseek"/></entry><entry><title>Quoting Andrej Karpathy</title><link href="https://simonwillison.net/2025/Nov/16/andrej-karpathy/#atom-tag" rel="alternate"/><published>2025-11-16T18:29:57+00:00</published><updated>2025-11-16T18:29:57+00:00</updated><id>https://simonwillison.net/2025/Nov/16/andrej-karpathy/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://x.com/karpathy/status/1990116666194456651"&gt;&lt;p&gt;With AI now, we are able to write new programs that we could never hope to write by hand before. We do it by specifying objectives (e.g. classification accuracy, reward functions), and we search the program space via gradient descent to find neural networks that work well against that objective.&lt;/p&gt;
&lt;p&gt;This is my &lt;a href="https://karpathy.medium.com/software-2-0-a64152b37c35"&gt;Software 2.0 blog post&lt;/a&gt; from a while ago. In this new programming paradigm then, the new most predictive feature to look at is &lt;strong&gt;verifiability&lt;/strong&gt;. If a task/job is verifiable, then it is optimizable directly or via reinforcement learning, and a neural net can be trained to work extremely well. It's about to what extent an AI can "practice" something. &lt;/p&gt;
&lt;p&gt;The environment has to be resettable (you can start a new attempt), efficient (a lot attempts can be made), and rewardable (there is some automated process to reward any specific attempt that was made).&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://x.com/karpathy/status/1990116666194456651"&gt;Andrej Karpathy&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-agents"&gt;ai-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;&lt;/p&gt;



</summary><category term="andrej-karpathy"/><category term="generative-ai"/><category term="ai-agents"/><category term="ai"/><category term="llms"/></entry><entry><title>Andrej Karpathy — AGI is still a decade away</title><link href="https://simonwillison.net/2025/Oct/18/agi-is-still-a-decade-away/#atom-tag" rel="alternate"/><published>2025-10-18T03:25:59+00:00</published><updated>2025-10-18T03:25:59+00:00</updated><id>https://simonwillison.net/2025/Oct/18/agi-is-still-a-decade-away/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.dwarkesh.com/p/andrej-karpathy"&gt;Andrej Karpathy — AGI is still a decade away&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Extremely high signal 2 hour 25 minute (!) conversation between Andrej Karpathy and Dwarkesh Patel.&lt;/p&gt;
&lt;p&gt;It starts with Andrej's claim that "the year of agents" is actually more likely to take a decade. Seeing as I &lt;a href="https://simonwillison.net/2025/Oct/16/claude-skills/#claude-as-a-general-agent"&gt;accepted 2025 as the year of agents&lt;/a&gt; just yesterday this instantly caught my attention!&lt;/p&gt;
&lt;p&gt;It turns out Andrej is using a different definition of agents to &lt;a href="https://simonwillison.net/2025/Sep/18/agents/"&gt;the one that I prefer&lt;/a&gt; - emphasis mine:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When you’re talking about an agent, or what the labs have in mind and maybe what I have in mind as well, you should &lt;strong&gt;think of it almost like an employee or an intern that you would hire to work with you&lt;/strong&gt;. For example, you work with some employees here. When would you prefer to have an agent like Claude or Codex do that work?&lt;/p&gt;
&lt;p&gt;Currently, of course they can’t. What would it take for them to be able to do that? Why don’t you do it today? The reason you don’t do it today is because they just don’t work. &lt;strong&gt;They don’t have enough intelligence, they’re not multimodal enough, they can’t do computer use and all this stuff&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;They don’t do a lot of the things you’ve alluded to earlier. &lt;strong&gt;They don’t have continual learning&lt;/strong&gt;. You can’t just tell them something and they’ll remember it. They’re cognitively lacking and it’s just not working. It will take about a decade to work through all of those issues.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yeah, continual learning human-replacement agents definitely isn't happening in 2025! Coding agents that are &lt;em&gt;really good&lt;/em&gt; at running tools in the loop on the other hand are here already.&lt;/p&gt;
&lt;p&gt;I loved this bit introducing an analogy of LLMs as ghosts or spirits, as opposed to having brains like animals or humans:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Brains just came from a very different process, and I’m very hesitant to take inspiration from it because we’re not actually running that process. In my post, I said we’re not building animals. We’re building ghosts or spirits or whatever people want to call it, because we’re not doing training by evolution. We’re doing training by imitation of humans and the data that they’ve put on the Internet.&lt;/p&gt;
&lt;p&gt;You end up with these ethereal spirit entities because they’re fully digital and they’re mimicking humans. It’s a different kind of intelligence. If you imagine a space of intelligences, we’re starting off at a different point almost. We’re not really building animals. But it’s also possible to make them a bit more animal-like over time, and I think we should be doing that.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The post Andrej mentions is &lt;a href="https://karpathy.bearblog.dev/animals-vs-ghosts/"&gt;Animals vs Ghosts&lt;/a&gt; on his blog.&lt;/p&gt;
&lt;p&gt;Dwarkesh asked Andrej about &lt;a href="https://twitter.com/karpathy/status/1977758204139331904"&gt;this tweet&lt;/a&gt; where he said that Claude Code and Codex CLI "didn't work well enough at all and net unhelpful" for his &lt;a href="https://simonwillison.net/2025/Oct/13/nanochat/"&gt;nanochat project&lt;/a&gt;. Andrej responded:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[...] So the agents are pretty good, for example, if you’re doing boilerplate stuff. Boilerplate code that’s just copy-paste stuff, they’re very good at that. They’re very good at stuff that occurs very often on the Internet because there are lots of examples of it in the training sets of these models. There are features of things where the models will do very well.&lt;/p&gt;
&lt;p&gt;I would say nanochat is not an example of those because it’s a fairly unique repository. There’s not that much code in the way that I’ve structured it. It’s not boilerplate code. It’s intellectually intense code almost, and everything has to be very precisely arranged. The models have so many cognitive deficits. One example, they kept misunderstanding the code because they have too much memory from all the typical ways of doing things on the Internet that I just wasn’t adopting.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: Here's an &lt;a href="https://twitter.com/karpathy/status/1979644538185752935"&gt;essay length tweet&lt;/a&gt; from Andrej clarifying a whole bunch of the things he talked about on the podcast.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=45619329"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-agents"&gt;ai-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/agent-definitions"&gt;agent-definitions&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="ai-agents"/><category term="coding-agents"/><category term="agent-definitions"/></entry><entry><title>nanochat</title><link href="https://simonwillison.net/2025/Oct/13/nanochat/#atom-tag" rel="alternate"/><published>2025-10-13T20:29:58+00:00</published><updated>2025-10-13T20:29:58+00:00</updated><id>https://simonwillison.net/2025/Oct/13/nanochat/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/karpathy/nanochat"&gt;nanochat&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Really interesting new project from Andrej Karpathy, described at length &lt;a href="https://github.com/karpathy/nanochat/discussions/1"&gt;in this discussion post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It provides a full ChatGPT-style LLM, including training, inference and a web Ui, that can be trained for as little as $100:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This repo is a full-stack implementation of an LLM like ChatGPT in a single, clean, minimal, hackable, dependency-lite codebase.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It's around 8,000 lines of code, mostly Python (using PyTorch) plus a little bit of Rust for &lt;a href="https://github.com/karpathy/nanochat/tree/master/rustbpe"&gt;training the tokenizer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Andrej suggests renting a 8XH100 NVIDA node for around $24/ hour to train the model. 4 hours (~$100) is enough to get a model that can hold a conversation - &lt;a href="https://twitter.com/karpathy/status/1977755430093980034"&gt;almost coherent example here&lt;/a&gt;. Run it for 12 hours and you get something that slightly outperforms GPT-2. I'm looking forward to hearing results from longer training runs!&lt;/p&gt;
&lt;p&gt;The resulting model is ~561M parameters, so it should run on almost anything. I've run a 4B model on my iPhone, 561M should easily fit on even an inexpensive Raspberry Pi.&lt;/p&gt;
&lt;p&gt;The model defaults to training on ~24GB from &lt;a href="https://huggingface.co/datasets/karpathy/fineweb-edu-100b-shuffle"&gt;karpathy/fineweb-edu-100b-shuffle&lt;/a&gt; derived from &lt;a href="https://huggingface.co/datasets/HuggingFaceFW/fineweb-edu"&gt;FineWeb-Edu&lt;/a&gt;, and then &lt;a href="https://github.com/karpathy/nanochat/blob/5fd0b138860a76beb60cf099fa46f74191b50941/scripts/mid_train.py"&gt;midtrains&lt;/a&gt; on 568K examples from &lt;a href="https://huggingface.co/datasets/HuggingFaceTB/smol-smoltalk"&gt;SmolTalk&lt;/a&gt; (460K), &lt;a href="https://huggingface.co/datasets/cais/mmlu"&gt;MMLU auxiliary train&lt;/a&gt; (100K), and &lt;a href="https://huggingface.co/datasets/openai/gsm8k"&gt;GSM8K&lt;/a&gt; (8K), followed by &lt;a href="https://github.com/karpathy/nanochat/blob/5fd0b138860a76beb60cf099fa46f74191b50941/scripts/chat_sft.py"&gt;supervised finetuning&lt;/a&gt; on 21.4K examples from &lt;a href="https://huggingface.co/datasets/allenai/ai2_arc#arc-easy-1"&gt;ARC-Easy&lt;/a&gt; (2.3K), &lt;a href="https://huggingface.co/datasets/allenai/ai2_arc#arc-challenge"&gt;ARC-Challenge&lt;/a&gt; (1.1K), &lt;a href="https://huggingface.co/datasets/openai/gsm8k"&gt;GSM8K&lt;/a&gt; (8K), and &lt;a href="https://huggingface.co/datasets/HuggingFaceTB/smol-smoltalk"&gt;SmolTalk&lt;/a&gt; (10K).&lt;/p&gt;
&lt;p&gt;Here's the code for the &lt;a href="https://github.com/karpathy/nanochat/blob/5fd0b138860a76beb60cf099fa46f74191b50941/scripts/chat_web.py"&gt;web server&lt;/a&gt;, which is fronted by this pleasantly succinct vanilla JavaScript &lt;a href="https://github.com/karpathy/nanochat/blob/5fd0b138860a76beb60cf099fa46f74191b50941/nanochat/ui.html"&gt;HTML+JavaScript frontend&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: Sam Dobson pushed a build of the model to &lt;a href="https://huggingface.co/sdobson/nanochat"&gt;sdobson/nanochat&lt;/a&gt; on Hugging Face. It's designed to run on CUDA but I pointed Claude Code at a checkout and had it hack around until it figured out how to run it on CPU on macOS, which eventually resulted in &lt;a href="https://gist.github.com/simonw/912623bf00d6c13cc0211508969a100a"&gt;this script&lt;/a&gt; which I've published as a Gist. You should be able to try out the model using uv like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd /tmp
git clone https://huggingface.co/sdobson/nanochat
uv run https://gist.githubusercontent.com/simonw/912623bf00d6c13cc0211508969a100a/raw/80f79c6a6f1e1b5d4485368ef3ddafa5ce853131/generate_cpu.py \
--model-dir /tmp/nanochat \
--prompt "Tell me about dogs."
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I got this (truncated because it ran out of tokens):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I'm delighted to share my passion for dogs with you. As a veterinary doctor, I've had the privilege of helping many pet owners care for their furry friends. There's something special about training, about being a part of their lives, and about seeing their faces light up when they see their favorite treats or toys.&lt;/p&gt;
&lt;p&gt;I've had the chance to work with over 1,000 dogs, and I must say, it's a rewarding experience. The bond between owner and pet&lt;/p&gt;
&lt;/blockquote&gt;

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/karpathy/status/1977755427569111362"&gt;@karpathy&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rust"&gt;rust&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pytorch"&gt;pytorch&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/training-data"&gt;training-data&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uv"&gt;uv&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gpus"&gt;gpus&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude-code"&gt;claude-code&lt;/a&gt;&lt;/p&gt;



</summary><category term="python"/><category term="ai"/><category term="rust"/><category term="pytorch"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llms"/><category term="training-data"/><category term="uv"/><category term="gpus"/><category term="claude-code"/></entry><entry><title>Context engineering</title><link href="https://simonwillison.net/2025/Jun/27/context-engineering/#atom-tag" rel="alternate"/><published>2025-06-27T23:42:43+00:00</published><updated>2025-06-27T23:42:43+00:00</updated><id>https://simonwillison.net/2025/Jun/27/context-engineering/#atom-tag</id><summary type="html">
    &lt;p&gt;The term &lt;strong&gt;context engineering&lt;/strong&gt; has recently started to gain traction as a better alternative to prompt engineering. I like it. I think this one may have sticking power.&lt;/p&gt;
&lt;p&gt;Here's an example tweet &lt;a href="https://twitter.com/tobi/status/1935533422589399127"&gt;from Shopify CEO Tobi Lutke&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I really like the term “context engineering” over prompt engineering. &lt;/p&gt;
&lt;p&gt;It describes the core skill better: the art of providing all the context for the task to be plausibly solvable by the LLM.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Recently amplified &lt;a href="https://twitter.com/karpathy/status/1937902205765607626"&gt;by Andrej Karpathy&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;+1 for "context engineering" over "prompt engineering".&lt;/p&gt;
&lt;p&gt;People associate prompts with short task descriptions you'd give an LLM in your day-to-day use. When in every industrial-strength LLM app, context engineering is the delicate art and science of filling the context window with just the right information for the next step. Science because doing this right involves task descriptions and explanations, few shot examples, RAG, related (possibly multimodal) data, tools, state and history, compacting [...] Doing this well is highly non-trivial. And art because of the guiding intuition around LLM psychology of people spirits. [...]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I've &lt;a href="https://simonwillison.net/2023/Feb/21/in-defense-of-prompt-engineering/"&gt;spoken favorably of prompt engineering&lt;/a&gt; in the past - I hoped that term could capture the inherent complexity of constructing reliable prompts. Unfortunately, most people's inferred definition is that it's a laughably pretentious term for typing things into a chatbot! &lt;/p&gt;
&lt;p&gt;It turns out that inferred definitions are the ones that stick. I think the inferred definition of "context engineering" is likely to be much closer to the intended meaning.&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/definitions"&gt;definitions&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prompt-engineering"&gt;prompt-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/context-engineering"&gt;context-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tobias-lutke"&gt;tobias-lutke&lt;/a&gt;&lt;/p&gt;



</summary><category term="definitions"/><category term="ai"/><category term="andrej-karpathy"/><category term="prompt-engineering"/><category term="generative-ai"/><category term="llms"/><category term="context-engineering"/><category term="tobias-lutke"/></entry><entry><title>Understanding the recent criticism of the Chatbot Arena</title><link href="https://simonwillison.net/2025/Apr/30/criticism-of-the-chatbot-arena/#atom-tag" rel="alternate"/><published>2025-04-30T22:55:46+00:00</published><updated>2025-04-30T22:55:46+00:00</updated><id>https://simonwillison.net/2025/Apr/30/criticism-of-the-chatbot-arena/#atom-tag</id><summary type="html">
    &lt;p&gt;The &lt;a href="https://lmarena.ai/"&gt;Chatbot Arena&lt;/a&gt; has become the go-to place for &lt;a href="https://simonwillison.net/2024/Jun/27/ai-worlds-fair/#slide.013.jpeg"&gt;vibes-based evaluation&lt;/a&gt; of LLMs over the past two years. The project, originating at UC Berkeley, is home to a large community of model enthusiasts who submit prompts to two randomly selected anonymous models and pick their favorite response. This produces an &lt;a href="https://en.wikipedia.org/wiki/Elo_rating_system"&gt;Elo score&lt;/a&gt; leaderboard of the "best" models, similar to how chess rankings work.&lt;/p&gt;
&lt;p&gt;It's become one of the most influential leaderboards in the LLM world, which means that billions of dollars of investment are now being evaluated based on those scores.&lt;/p&gt;
&lt;h4 id="the-leaderboard-illusion"&gt;The Leaderboard Illusion&lt;/h4&gt;
&lt;p&gt;A new paper, &lt;strong&gt;&lt;a href="https://arxiv.org/abs/2504.20879"&gt;The Leaderboard Illusion&lt;/a&gt;&lt;/strong&gt;, by authors from Cohere Labs, AI2, Princeton, Stanford, University of Waterloo and University of Washington spends 68 pages dissecting and criticizing how the arena works.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2025/leaderboard-illusion.jpg" alt="Title page of academic paper &amp;quot;The Leaderboard Illusion&amp;quot; with authors Shivalika Singh, Yiyang Nan, Alex Wang, Daniel D'souza, Sayash Kapoor, Ahmet Üstün, Sanmi Koyejo, Yuntian Deng, Shayne Longpre, Noah Smith, Beyza Ermis, Marzieh Fadaee, and Sara Hooker from various institutions including Cohere Labs, Cohere, Princeton University, Stanford University, University of Waterloo, Massachusetts Institute of Technology, Allen Institute for Artificial Intelligence, and University of Washington. Corresponding authors: {shivalikasingh, marzieh, sarahooker}@cohere.com" style="max-width: 100%" /&gt;&lt;/p&gt;
&lt;p&gt;Even prior to this paper there have been rumbles of dissatisfaction with the arena for a while, based on intuitions that the best models were not necessarily bubbling to the top. I've personally been suspicious of the fact that my preferred daily driver, Claude 3.7 Sonnet, rarely breaks the top 10 (it's sat at 20th right now).&lt;/p&gt;
&lt;p&gt;This all came to a head a few weeks ago when the &lt;a href="https://simonwillison.net/2025/Apr/5/llama-4-notes/"&gt;Llama 4 launch&lt;/a&gt; was mired by a leaderboard scandal: it turned out that their model which topped the leaderboard &lt;a href="https://simonwillison.net/2025/Apr/5/llama-4-notes/#lmarena"&gt;wasn't the same model&lt;/a&gt; that they released to the public! The arena released &lt;a href="https://simonwillison.net/2025/Apr/8/lmaren/"&gt;a pseudo-apology&lt;/a&gt; for letting that happen.&lt;/p&gt;
&lt;p&gt;This helped bring focus to &lt;a href="https://blog.lmarena.ai/blog/2024/policy/#our-policy"&gt;the arena's policy&lt;/a&gt; of allowing model providers to anonymously preview their models there, in order to earn a ranking prior to their official launch date. This is popular with their community, who enjoy trying out models before anyone else, but the scale of the preview testing revealed in this new paper surprised me.&lt;/p&gt;
&lt;p&gt;From the new paper's abstract (highlights mine):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We find that undisclosed private testing practices benefit a handful of providers who are able to test multiple variants before public release and retract scores if desired. We establish that the ability of these providers to choose the best score leads to biased Arena scores due to selective disclosure of performance results. &lt;strong&gt;At an extreme, we identify 27 private LLM variants tested by Meta in the lead-up to the Llama-4 release&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If proprietary model vendors can submit dozens of test models, and then selectively pick the ones that score highest it is not surprising that they end up hogging the top of the charts!&lt;/p&gt;
&lt;p&gt;This feels like a classic example of gaming a leaderboard. There are model characteristics that resonate with evaluators there that may not directly relate to the quality of the underlying model. For example, bulleted lists and answers of a very specific length tend to do better.&lt;/p&gt;
&lt;p&gt;It is worth noting that this is quite a salty paper (highlights mine):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It is important to acknowledge that &lt;strong&gt;a subset of the authors of this paper have submitted several open-weight models to Chatbot Arena&lt;/strong&gt;: command-r (Cohere, 2024), command-r-plus
(Cohere, 2024) in March 2024, aya-expanse (Dang et al., 2024b) in October 2024, aya-vision
(Cohere, 2025) in March 2025, command-a (Cohere et al., 2025) in March 2025. We started this extensive study driven by this submission experience with the leaderboard.&lt;/p&gt;
&lt;p&gt;While submitting Aya Expanse (Dang et al., 2024b) for testing, &lt;strong&gt;we observed that our open-weight model appeared to be notably under-sampled compared to proprietary models&lt;/strong&gt; — a discrepancy that is further reflected in Figures 3, 4, and 5. In response, &lt;strong&gt;we contacted the Chatbot Arena organizers to inquire about these differences&lt;/strong&gt; in November 2024. &lt;strong&gt;In the course of our discussions, we learned that some providers were testing multiple variants privately, a practice that appeared to be selectively disclosed and limited to only a few model providers&lt;/strong&gt;. We believe that our initial inquiries partly prompted Chatbot Arena to release &lt;a href=""&gt;a public blog&lt;/a&gt; in December 2024 detailing their benchmarking policy which committed to a consistent sampling rate across models. However, subsequent anecdotal observations of continued sampling disparities and the presence of numerous models with private aliases motivated us to undertake a more systematic analysis.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To summarize the other key complaints from the paper:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unfair sampling rates&lt;/strong&gt;: a small number of proprietary vendors (most notably Google and OpenAI) have their models randomly selected in a much higher number of contests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency&lt;/strong&gt; concerning the scale of proprietary model testing that's going on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unfair removal rates&lt;/strong&gt;: "We find deprecation disproportionately impacts open-weight and open-source models, creating large asymmetries in data access over" - also "out of 243 public models, 205 have been silently deprecated." The longer a model stays in the arena the more chance it has to win competitions and bubble to the top.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Arena responded to the paper &lt;a href="https://twitter.com/lmarena_ai/status/1917492084359192890"&gt;in a tweet&lt;/a&gt;. They emphasized:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We designed our policy to prevent model providers from just reporting the highest score they received during testing. We only publish the score for the model they release publicly.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm dissapointed by this response, because it skips over the point from the paper that I find most interesting. If commercial vendors are able to submit dozens of models to the arena and then cherry-pick for publication just the model that gets the highest score, quietly retracting the others with their scores unpublished, that means the arena is very actively incentivizing models to game the system. It's also obscuring a valuable signal to help the community understand how well those vendors are doing at building useful models.&lt;/p&gt;
&lt;p&gt;Here's &lt;a href="https://twitter.com/lmarena_ai/status/1917668731481907527"&gt;a second tweet&lt;/a&gt; where they take issue with "factual errors and misleading statements" in the paper, but still fail to address that core point. I'm hoping they'll respond to &lt;a href="https://x.com/simonw/status/1917672048031404107"&gt;my follow-up question&lt;/a&gt; asking for clarification around the cherry-picking loophole described by the paper.&lt;/p&gt;

&lt;h4 id="transparency"&gt;I want more transparency&lt;/h4&gt;

&lt;p&gt;The thing I most want here is transparency.&lt;/p&gt;

&lt;p&gt;If a model sits in top place, I'd like a footnote that resolves to additional information about how that vendor tested that model. I'm particularly interested in knowing how many variants of that model the vendor tested. If they ran 21 different models over a 2 month period before selecting the "winning" model, I'd like to know that - and know what the scores were for all of those others that they didn't ship.&lt;/p&gt;

&lt;p&gt;This knowledge will help me personally evaluate how credible I find their score. Were they mainly gaming the benchmark or did they produce a new model family that universally scores highly even as they tweaked it to best fit the taste of the voters in the arena?&lt;/p&gt;

&lt;h4 id="openrouter"&gt;OpenRouter as an alternative?&lt;/h4&gt;

&lt;p&gt;If the arena isn't giving us a good enough impression of who is winning the race for best LLM at the moment, what else can we look to?&lt;/p&gt;

&lt;p&gt;Andrej Karpathy &lt;a href="https://x.com/karpathy/status/1917546757929722115"&gt;discussed the new paper&lt;/a&gt; on Twitter this morning and proposed an alternative source of rankings instead:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It's quite likely that LM Arena (and LLM providers) can continue to iterate and improve within this paradigm, but in addition I also have a new candidate in mind to potentially join the ranks of "top tier eval". It is the &lt;strong&gt;&lt;a href="https://openrouter.ai/rankings"&gt;OpenRouterAI LLM rankings&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Basically, OpenRouter allows people/companies to quickly switch APIs between LLM providers. All of them have real use cases (not toy problems or puzzles), they have their own private evals, and all of them have an incentive to get their choices right, so by choosing one LLM over another they are directly voting for some combo of capability+cost.&lt;/p&gt;
&lt;p&gt;I don't think OpenRouter is there just yet in both the quantity and diversity of use, but something of this kind I think has great potential to grow into a very nice, very difficult to game eval.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I only recently learned about &lt;a href="https://openrouter.ai/rankings?view=trending"&gt;these rankings&lt;/a&gt; but I agree with Andrej: they reveal some interesting patterns that look to match my own intuitions about which models are the most useful (and economical) on which to build software. Here's a snapshot of their current "Top this month" table:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2025/openrouter-top-month.jpg" alt="Screenshot of a trending AI models list with navigation tabs &amp;quot;Top today&amp;quot;, &amp;quot;Top this week&amp;quot;, &amp;quot;Top this month&amp;quot; (selected), and &amp;quot;Trending&amp;quot;. The list shows ranked models: 1. Anthropic: Claude 3.7 Sonnet (1.21T tokens, ↑14%), 2. Google: Gemini 2.0 Flash (1.04T tokens, ↓17%), 3. OpenAI: GPT-4o-mini (503B tokens, ↑191%), 5. DeepSeek: DeepSeek V3 0324 (free) (441B tokens, ↑434%), 6. Quasar Alpha (296B tokens, new), 7. Meta: Llama 3.3 70B Instruct (261B tokens, ↓4%), 8. Google: Gemini 2.5 Pro Preview (228B tokens, new), 9. DeepSeek: R1 (free) (211B tokens, ↓29%), 10. Anthropic: Claude 3.7 Sonnet (thinking) (207B tokens, ↓15%), 11. DeepSeek: DeepSeek V3 0324 (200B tokens, ↑711%), 12. Google: Gemini 1.5 Flash 8B (165B tokens, ↑10%)." style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;The one big weakness of this ranking system is that a single, high volume OpenRouter customer could have an outsized effect on the rankings should they decide to switch models. It will be interesting to see if OpenRouter can design their own statistical mechanisms to help reduce that effect.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-ethics"&gt;ai-ethics&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openrouter"&gt;openrouter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/chatbot-arena"&gt;chatbot-arena&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/paper-review"&gt;paper-review&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="ai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llms"/><category term="ai-ethics"/><category term="openrouter"/><category term="chatbot-arena"/><category term="paper-review"/></entry><entry><title>Semantic Diffusion</title><link href="https://simonwillison.net/2025/Mar/23/semantic-diffusion/#atom-tag" rel="alternate"/><published>2025-03-23T18:30:33+00:00</published><updated>2025-03-23T18:30:33+00:00</updated><id>https://simonwillison.net/2025/Mar/23/semantic-diffusion/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://martinfowler.com/bliki/SemanticDiffusion.html"&gt;Semantic Diffusion&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I &lt;a href="https://bsky.app/profile/mattchughes.ca/post/3ll2sbdky3k2y"&gt;learned about&lt;/a&gt; this term today while complaining about how the definition of "vibe coding" is already being distorted to mean "any time an LLM writes code" as opposed to &lt;a href="https://simonwillison.net/2025/Mar/19/vibe-coding/"&gt;the intended meaning&lt;/a&gt; of "code I wrote with an LLM without even reviewing what it wrote".&lt;/p&gt;
&lt;p&gt;I posted &lt;a href="https://bsky.app/profile/simonwillison.net/post/3ll2rtxeucs2e"&gt;this salty note&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Feels like I'm losing the battle on this one, I keep seeing people use "vibe coding" to mean any time an LLM is used to write code&lt;/p&gt;
&lt;p&gt;I'm particularly frustrated because for a few glorious moments we had the chance at having ONE piece of AI-related terminology with a clear, widely accepted definition!&lt;/p&gt;
&lt;p&gt;But it turns out people couldn't be trusted to read all the way to the end of Andrej's tweet, so now we are back to yet another term where different people assume it means different things&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Martin Fowler coined Semantic Diffusion in 2006 with this very clear definition:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Semantic diffusion occurs when you have a word that is coined by a person or group, often with a pretty good definition, but then gets spread through the wider community in a way that weakens that definition. This weakening risks losing the definition entirely - and with it any usefulness to the term. [...]&lt;/p&gt;
&lt;p&gt;Semantic diffusion is essentially a succession of the &lt;a href="https://en.wikipedia.org/w/index.php?title=Telephone_game"&gt;telephone game&lt;/a&gt; where a different group of people to the originators of a term start talking about it without being careful about following the original definition.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What's happening with vibe coding right now is such a clear example of this effect in action! I've seen &lt;a href="https://simonwillison.net/2024/Mar/5/prompt-injection-jailbreaking/"&gt;the same thing happen&lt;/a&gt; to my own coinage &lt;a href="https://simonwillison.net/2022/Sep/12/prompt-injection/"&gt;prompt injection&lt;/a&gt; over the past couple of years.&lt;/p&gt;
&lt;p&gt;This kind of dillution of meaning is frustrating, but does appear to be inevitable. As Martin Fowler points out it's most likely to happen to popular terms - the more popular a term is the higher the chance a game of telephone will ensue where misunderstandings flourish as the chain continues to grow.&lt;/p&gt;
&lt;p&gt;Andrej Karpathy, who &lt;a href="https://twitter.com/karpathy/status/1886192184808149383"&gt;coined&lt;/a&gt; vibe coding, &lt;a href="https://twitter.com/karpathy/status/1903870973126045712"&gt;posted this&lt;/a&gt; just now in reply to my &lt;a href="https://simonwillison.net/2025/Mar/19/vibe-coding/"&gt;article&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Good post! It will take some time to settle on definitions. Personally I use "vibe coding" when I feel like this dog. My iOS app last night being a good example. But I find that in practice I rarely go full out vibe coding, and more often I still look at the code, I add complexity slowly and I try to learn over time how the pieces work, to ask clarifying questions etc.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Animated GIF.  I have no idea what I'm doing - a dog wags its tail while inspecting the engine of a car and looking gormless" src="https://static.simonwillison.net/static/2025/vibe-coding.gif" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I love that vibe coding has an official illustrative GIF now!


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/definitions"&gt;definitions&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/language"&gt;language&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vibe-coding"&gt;vibe-coding&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/martin-fowler"&gt;martin-fowler&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/semantic-diffusion"&gt;semantic-diffusion&lt;/a&gt;&lt;/p&gt;



</summary><category term="definitions"/><category term="language"/><category term="andrej-karpathy"/><category term="vibe-coding"/><category term="martin-fowler"/><category term="semantic-diffusion"/></entry><entry><title>Not all AI-assisted programming is vibe coding (but vibe coding rocks)</title><link href="https://simonwillison.net/2025/Mar/19/vibe-coding/#atom-tag" rel="alternate"/><published>2025-03-19T17:57:18+00:00</published><updated>2025-03-19T17:57:18+00:00</updated><id>https://simonwillison.net/2025/Mar/19/vibe-coding/#atom-tag</id><summary type="html">
    &lt;p&gt;&lt;strong&gt;Vibe coding&lt;/strong&gt; is having a moment. The term &lt;a href="https://twitter.com/karpathy/status/1886192184808149383"&gt;was coined by Andrej Karpathy&lt;/a&gt; just a few weeks ago (on February 6th) and has since been featured &lt;a href="https://www.nytimes.com/2025/02/27/technology/personaltech/vibecoding-ai-software-programming.html"&gt;in the New York Times&lt;/a&gt;, &lt;a href="https://arstechnica.com/ai/2025/03/is-vibe-coding-with-ai-gnarly-or-reckless-maybe-some-of-both/"&gt;Ars Technica&lt;/a&gt;, &lt;a href="https://www.theguardian.com/technology/2025/mar/16/ai-software-coding-programmer-expertise-jobs-threat"&gt;the Guardian&lt;/a&gt; and countless online discussions.&lt;/p&gt;
&lt;p&gt;I'm concerned that the definition is already escaping its original intent. I'm seeing people apply the term "vibe coding" to all forms of code written with the assistance of AI. I think that both dilutes the term and gives a false impression of what's possible with responsible &lt;a href="https://simonwillison.net/tags/ai-assisted-programming/"&gt;AI-assisted programming&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Vibe coding is &lt;em&gt;not&lt;/em&gt; the same thing as writing code with the help of LLMs!&lt;/p&gt;
&lt;p&gt;To quote Andrej's &lt;a href="https://twitter.com/karpathy/status/1886192184808149383"&gt;original tweet&lt;/a&gt; in full (with my emphasis added):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There's a new kind of coding I call "vibe coding", where you fully give in to the vibes, embrace exponentials, and &lt;strong&gt;forget that the code even exists&lt;/strong&gt;. It's possible because the LLMs (e.g. Cursor Composer w Sonnet) are getting too good. Also I just talk to Composer with SuperWhisper so I barely even touch the keyboard.&lt;/p&gt;
&lt;p&gt;I ask for the dumbest things like "decrease the padding on the sidebar by half" because I'm too lazy to find it. I "Accept All" always, I don't read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it. The code grows beyond my usual comprehension, I'd have to really read through it for a while. Sometimes the LLMs can't fix a bug so I just work around it or ask for random changes until it goes away.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It's not too bad for throwaway weekend projects, but still quite amusing&lt;/strong&gt;. I'm building a project or webapp, but it's not really coding - I just see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I &lt;em&gt;love&lt;/em&gt; this definition. Andrej is an extremely talented and experienced programmer - he has no need for AI assistance at all. He's using LLMs like this because it's fun to try out wild new ideas, and the speed at which an LLM can produce code is an order of magnitude faster than even the most skilled human programmers. For low stakes projects and prototypes why not just &lt;em&gt;let it rip&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;When I talk about vibe coding I mean &lt;strong&gt;building software with an LLM without reviewing the code it writes&lt;/strong&gt;.&lt;/p&gt;

&lt;h4 id="using-llms-for-code-responsibly-is-not-vibe-coding"&gt;Using LLMs for code responsibly is not vibe coding&lt;/h4&gt;
&lt;p&gt;Let's contrast this "forget that the code even exists" approach to how professional software developers use LLMs.&lt;/p&gt;
&lt;p&gt;The job of a software developer is not (just) to churn out code and features. We need to create code that demonstrably works, and can be understood by other humans (and machines), and that will support continued development in the future.&lt;/p&gt;
&lt;p&gt;We need to consider performance, accessibility, security, maintainability, cost efficiency. Software engineering is all about trade-offs - our job is to pick from dozens of potential solutions by balancing all manner of requirements, both explicit and implied.&lt;/p&gt;
&lt;p&gt;We also &lt;em&gt;need&lt;/em&gt; to read the code. My golden rule for production-quality AI-assisted programming is that I won't commit any code to my repository if I couldn't explain exactly what it does to somebody else.&lt;/p&gt;
&lt;p&gt;If an LLM wrote the code for you, and you then reviewed it, tested it thoroughly and made sure you could explain how it works to someone else that's not vibe coding, it's software development. The usage of an LLM to support that activity is immaterial.&lt;/p&gt;
&lt;p&gt;I wrote extensively about my own process in &lt;a href="https://simonwillison.net/2025/Mar/11/using-llms-for-code/"&gt;Here’s how I use LLMs to help me write code&lt;/a&gt;. Vibe coding only describes a small subset of my approach.&lt;/p&gt;
&lt;h4 id="let-s-not-lose-track-of-what-makes-vibe-coding-special"&gt;Let's not lose track of what makes vibe coding special&lt;/h4&gt;
&lt;p&gt;I don't want "vibe coding" to become a negative term that's synonymous with irresponsible AI-assisted programming either. This weird new shape of programming has so much to offer the world!&lt;/p&gt;
&lt;p&gt;I believe &lt;strong&gt;everyone deserves the ability&lt;/strong&gt; to automate tedious tasks in their lives with computers. You shouldn't need a computer science degree or programming bootcamp in order to get computers to do extremely specific tasks for you.&lt;/p&gt;
&lt;p&gt;If vibe coding grants millions of new people the ability to build their own custom tools, I could not be happier about it.&lt;/p&gt;
&lt;p&gt;Some of those people will get bitten by the programming bug and go on to become proficient software developers. One of the biggest barriers to that profession is the incredibly steep initial learning curve - vibe coding shaves that initial barrier down to almost flat.&lt;/p&gt;
&lt;p&gt;Vibe coding also has a ton to offer experienced developers. I've talked before about how &lt;a href="https://simonwillison.net/2025/Mar/11/using-llms-for-code/"&gt;using LLMs for code is difficult&lt;/a&gt; - figuring out what does and doesn't work is a case of building intuition over time, and there are plenty of hidden sharp edges and traps along the way.&lt;/p&gt;
&lt;p&gt;I think vibe coding is the best tool we have to help experienced developers build that intuition as to what LLMs can and cannot do for them. I've published more than &lt;a href="https://tools.simonwillison.net/colophon"&gt;80 experiments&lt;/a&gt; I built with vibe coding and I've learned so much along the way. I would encourage any other developer, no matter their skill level, to try the same.&lt;/p&gt;
&lt;h4 id="when-is-it-ok-to-vibe-code-"&gt;When is it OK to vibe code?&lt;/h4&gt;
&lt;p&gt;If you're an experienced engineer this is likely obvious to you already, so I'm writing this section for people who are just getting started building software.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Projects should be &lt;strong&gt;low stakes&lt;/strong&gt;. Think about how much harm the code you are writing could cause if it has bugs or security vulnerabilities. Could somebody be harmed - damaged reputation, lost money or something worse? This is particularly important if you plan to build software that will be used by other people!&lt;/li&gt;
&lt;li&gt;Consider &lt;strong&gt;security&lt;/strong&gt;. This is a really difficult one - security is a huge topic. Some high level notes:
&lt;ul&gt;
&lt;li&gt;Watch out for &lt;strong&gt;secrets&lt;/strong&gt; - anything that looks similar in shape to a password, such as the API key used to access an online tool. If your code involves secrets you need to take care not to accidentally expose them, which means you need to understand how the code works!&lt;/li&gt;
&lt;li&gt;Think about &lt;strong&gt;data privacy&lt;/strong&gt;. If you are building a tool that has access to private data - anything you wouldn't want to display to the world in a screen-sharing session - approach with caution. It's possible to vibe code personal tools that you paste private information into but you need to be very sure you understand if there are ways that data might leave your machine.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Be a &lt;strong&gt;good network citizen&lt;/strong&gt;. Anything that makes requests out to other platforms could increase the load (and hence the cost) on those services. This is a reason I like &lt;a href="https://simonwillison.net/tags/claude-artifacts/"&gt;Claude Artifacts&lt;/a&gt; - their sandbox prevents accidents from causing harm elsewhere.&lt;/li&gt;
&lt;li&gt;Is &lt;strong&gt;your money on the line&lt;/strong&gt;? I've seen horror stories about people who vibe coded a feature against some API without a billing limit and racked up thousands of dollars in charges. Be very careful about using vibe coding against anything that's charged based on usage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you're going to vibe code anything that might be used by other people, I recommend checking in with someone more experienced for a vibe check (hah) before you share it with the world.&lt;/p&gt;
&lt;h4 id="how-do-we-make-vibe-coding-better-"&gt;How do we make vibe coding better?&lt;/h4&gt;
&lt;p&gt;I think there are some fascinating software design challenges to be solved here.&lt;/p&gt;
&lt;p&gt;Safe vibe coding for complete beginners starts with a &lt;a href="https://en.wikipedia.org/wiki/Sandbox_(computer_security)"&gt;sandbox&lt;/a&gt;. Claude Artifacts was one of the first widely available vibe coding platforms and their approach to sandboxing is fantastic: code is restricted to running in a locked down &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt;, can load only approved libraries and can't make any network requests to other sites.&lt;/p&gt;
&lt;p&gt;This makes it very difficult for people to mess up and cause any harm with their projects. It also greatly limits what those projects can do - you can't use a Claude Artifact project to access data from external APIs for example, or even to build software that runs your own prompts against an LLM.&lt;/p&gt;
&lt;p&gt;Other popular vibe coding tools like Cursor (which was initially intended for professional developers) have far less safety rails.&lt;/p&gt;
&lt;p&gt;There's plenty of room for innovation in this space. I'm hoping to see a cambrian explosion in tooling to help people build their own custom tools as productively and safely as possible.&lt;/p&gt;
&lt;h4 id="go-forth-and-vibe-code"&gt;Go forth and vibe code&lt;/h4&gt;
&lt;p&gt;I really don't want to discourage people who are new to software from trying out vibe coding. The best way to learn anything is to build a project!&lt;/p&gt;
&lt;p&gt;For experienced programmers this is an amazing way to start developing an intuition for what LLMs can and can't do. For beginners there's no better way to open your eyes to what's possible to achieve with code itself.&lt;/p&gt;
&lt;p&gt;But please, don't confuse vibe coding with all other uses of LLMs for code.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/definitions"&gt;definitions&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sandboxing"&gt;sandboxing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vibe-coding"&gt;vibe-coding&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/semantic-diffusion"&gt;semantic-diffusion&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="definitions"/><category term="sandboxing"/><category term="ai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="vibe-coding"/><category term="semantic-diffusion"/></entry><entry><title>Will the future of software development run on vibes?</title><link href="https://simonwillison.net/2025/Mar/6/vibe-coding/#atom-tag" rel="alternate"/><published>2025-03-06T03:39:43+00:00</published><updated>2025-03-06T03:39:43+00:00</updated><id>https://simonwillison.net/2025/Mar/6/vibe-coding/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://arstechnica.com/ai/2025/03/is-vibe-coding-with-ai-gnarly-or-reckless-maybe-some-of-both/"&gt;Will the future of software development run on vibes?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I got a few quotes in this piece by Benj Edwards about &lt;strong&gt;vibe coding&lt;/strong&gt;, the term Andrej Karpathy &lt;a href="https://simonwillison.net/2025/Feb/6/andrej-karpathy/"&gt;coined&lt;/a&gt; for when you prompt an LLM to write code, accept all changes and keep feeding it prompts and error messages and see what you can get it to build.&lt;/p&gt;
&lt;p&gt;Here's what I originally sent to Benj:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I really enjoy vibe coding - it's a fun way to play with the limits of these models. It's also useful for prototyping, where the aim of the exercise is to try out an idea and prove if it can work.&lt;/p&gt;
&lt;p&gt;Where vibe coding fails is in producing maintainable code for production settings. I firmly believe that as a developer you have to take accountability for the code you produce - if you're going to put your name to it you need to be confident that you understand how and why it works - ideally to the point that you can explain it to somebody else.&lt;/p&gt;
&lt;p&gt;Vibe coding your way to a production codebase is clearly a terrible idea. Most of the work we do as software engineers is about evolving existing systems, and for those the quality and understandability of the underlying code is crucial.&lt;/p&gt;
&lt;p&gt;For experiments and low-stake projects where you want to explore what's possible and build fun prototypes? Go wild! But stay aware of the very real risk that a good enough prototype often faces pressure to get pushed to production.&lt;/p&gt;
&lt;p&gt;If an LLM wrote every line of your code but you've reviewed, tested and understood it all, that's not vibe coding in my book - that's using an LLM as a typing assistant.&lt;/p&gt;
&lt;/blockquote&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/benj-edwards"&gt;benj-edwards&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vibe-coding"&gt;vibe-coding&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="benj-edwards"/><category term="vibe-coding"/></entry><entry><title>Initial impressions of GPT-4.5</title><link href="https://simonwillison.net/2025/Feb/27/introducing-gpt-45/#atom-tag" rel="alternate"/><published>2025-02-27T22:02:59+00:00</published><updated>2025-02-27T22:02:59+00:00</updated><id>https://simonwillison.net/2025/Feb/27/introducing-gpt-45/#atom-tag</id><summary type="html">
    &lt;p&gt;GPT-4.5 &lt;a href="https://openai.com/index/introducing-gpt-4-5/"&gt;is out today&lt;/a&gt; as a "research preview" - it's available to OpenAI Pro ($200/month) customers and to developers with an API key. OpenAI also published &lt;a href="https://openai.com/index/gpt-4-5-system-card/"&gt;a GPT-4.5 system card&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I've &lt;a href="https://github.com/simonw/llm/issues/795"&gt;added it to LLM&lt;/a&gt; so you can run it like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;llm -m gpt-4.5-preview 'impress me'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It's &lt;em&gt;very&lt;/em&gt; expensive right now: &lt;a href="https://openai.com/api/pricing/"&gt;currently&lt;/a&gt; $75.00 per million input tokens and $150/million for output! For comparison, o1 is $15/$60 and GPT-4o is $2.50/$10. GPT-4o mini is $0.15/$0.60 making OpenAI's least expensive model 500x cheaper than GPT-4.5 for input and 250x cheaper for output!&lt;/p&gt;
&lt;p&gt;As far as I can tell almost all of its key characteristics are the same as GPT-4o: it has the same 128,000 context length, handles the same inputs (text and image) and even has the same training cut-off date of October 2023.&lt;/p&gt;
&lt;p&gt;So what's it better at? According to OpenAI's blog post:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Combining deep understanding of the world with improved collaboration results in a model that integrates ideas naturally in warm and intuitive conversations that are more attuned to human collaboration. GPT‑4.5 has a better understanding of what humans mean and interprets subtle cues or implicit expectations with greater nuance and “EQ”. GPT‑4.5 also shows stronger aesthetic intuition and creativity. It excels at helping with writing and design.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;They include this chart of win-rates against GPT-4o, where it wins between 56.8% and 63.2% of the time for different classes of query:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2025/gpt-win-rates.jpg" alt="Bar chart showing GPT-4.5 win-rate vs GPT-4o across three categories: Everyday queries (57.0%), Professional queries (63.2%), and Creative intelligence (56.8%)." style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;They also report a SimpleQA hallucination rate of 37.1% - a big improvement on GPT-4o (61.8%) and o3-mini (80.3%) but not much better than o1 (44%). The coding benchmarks all appear to score similar to o3-mini.&lt;/p&gt;
&lt;p&gt;Paul Gauthier &lt;a href="https://twitter.com/paulgauthier/status/1895221869844013108"&gt;reports&lt;/a&gt; a score of 45% on Aider's &lt;a href="https://aider.chat/docs/leaderboards/"&gt;polyglot coding benchmark&lt;/a&gt; - below DeepSeek V3 (48%), Sonnet 3.7 (60% without thinking, 65% with thinking) and o3-mini (60.4%) but significantly ahead of GPT-4o (23.1%).&lt;/p&gt;
&lt;p id="confidence"&gt;OpenAI don't seem to have enormous confidence in the model themselves:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;GPT‑4.5 is a very large and compute-intensive model, making it more &lt;a href="https://openai.com/api/pricing/"&gt;expensive⁠&lt;/a&gt; than and not a replacement for GPT‑4o. Because of this, we're evaluating whether to continue serving it in the API long-term as we balance supporting current capabilities with building future models.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It drew me this for "Generate an SVG of a pelican riding a bicycle":&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2025/pelican-gpt45.jpg" alt="A pretty simple pelican, not as good as other leading models" style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;Accessed via the API the model feels weirdly slow - here's an animation showing how that pelican was rendered - the full response &lt;a href="https://gist.github.com/simonw/90834e1ca91e3f802d80f67bac94ad7d#file-pelican-json-L41"&gt;took 112 seconds&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2025/gpt-45.gif" alt="Animated terminal session - the tokens are coming back very slowly" style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;OpenAI's Rapha Gontijo Lopes &lt;a href="https://twitter.com/rapha_gl/status/1895213014699385082"&gt;calls this&lt;/a&gt; "(probably) the largest model in the world" - evidently the problem with large models is that they are a whole lot slower than their smaller alternatives!&lt;/p&gt;
&lt;p&gt;Andrej Karpathy &lt;a href="https://x.com/karpathy/status/1895213020982472863"&gt;has published some notes&lt;/a&gt; on the new model, where he highlights that the improvements are limited considering the 10x increase in training cost compute to GPT-4:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I remember being a part of a hackathon trying to find concrete prompts where GPT4 outperformed 3.5. They definitely existed, but clear and concrete "slam dunk" examples were difficult to find. [...] So it is with that expectation that I went into testing GPT4.5, which I had access to for a few days, and which saw 10X more pretraining compute than GPT4. And I feel like, once again, I'm in the same hackathon 2 years ago. Everything is a little bit better and it's awesome, but also not exactly in ways that are trivial to point to.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Andrej is also running a fun &lt;a href="https://twitter.com/karpathy/status/1895213023238987854"&gt;vibes-based polling evaluation&lt;/a&gt; comparing output from GPT-4.5 and GPT-4o. &lt;strong&gt;Update&lt;/strong&gt; &lt;a href="https://twitter.com/karpathy/status/1895337579589079434"&gt;GPT-4o won 4/5 rounds&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;There's an &lt;a href="https://news.ycombinator.com/item?id=43197872"&gt;extensive thread&lt;/a&gt; about GPT-4.5 on Hacker News. When it hit 324 comments I ran a summary of it using GPT-4.5 itself with &lt;a href="https://til.simonwillison.net/llms/claude-hacker-news-themes"&gt;this script&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;hn-summary.sh 43197872 -m gpt-4.5-preview&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Here's &lt;a href="https://gist.github.com/simonw/5e9f5e94ac8840f698c280293d39965e"&gt;the result&lt;/a&gt;, which took 154 seconds to generate and cost $2.11 (25797 input tokens and 1225 input, price calculated using my &lt;a href="https://tools.simonwillison.net/llm-prices"&gt;LLM pricing calculator&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;For comparison, I ran the same prompt against &lt;a href="https://gist.github.com/simonw/592d651ec61daec66435a6f718c0618b"&gt;GPT-4o&lt;/a&gt;, &lt;a href="https://gist.github.com/simonw/cc760217623769f0d7e4687332bce409"&gt;GPT-4o Mini&lt;/a&gt;, &lt;a href="https://gist.github.com/simonw/6f11e1974e4d613258b3237380e0ecb3"&gt;Claude 3.7 Sonnet&lt;/a&gt;, &lt;a href="https://gist.github.com/simonw/c178f02c97961e225eb615d4b9a1dea3"&gt;Claude 3.5 Haiku&lt;/a&gt;, &lt;a href="https://gist.github.com/simonw/0c6f071d9ad1cea493de4e5e7a0986bb"&gt;Gemini 2.0 Flash&lt;/a&gt;, &lt;a href="https://gist.github.com/simonw/8a71396a4a219d8281e294b61a9d6dd5"&gt;Gemini 2.0 Flash Lite&lt;/a&gt; and &lt;a href="https://gist.github.com/simonw/112e3f4660a1a410151e86ec677e34ab"&gt;Gemini 2.0 Pro&lt;/a&gt;.&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/evals"&gt;evals&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uv"&gt;uv&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pelican-riding-a-bicycle"&gt;pelican-riding-a-bicycle&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/paul-gauthier"&gt;paul-gauthier&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-release"&gt;llm-release&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="ai"/><category term="openai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llms"/><category term="evals"/><category term="uv"/><category term="pelican-riding-a-bicycle"/><category term="paul-gauthier"/><category term="llm-release"/></entry><entry><title>Andrej Karpathy's initial impressions of Grok 3</title><link href="https://simonwillison.net/2025/Feb/18/andrej-karpathy-grok-3/#atom-tag" rel="alternate"/><published>2025-02-18T16:46:25+00:00</published><updated>2025-02-18T16:46:25+00:00</updated><id>https://simonwillison.net/2025/Feb/18/andrej-karpathy-grok-3/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://twitter.com/karpathy/status/1891720635363254772"&gt;Andrej Karpathy&amp;#x27;s initial impressions of Grok 3&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Andrej has the most detailed analysis I've seen so far of xAI's Grok 3 release from last night. He runs through a bunch of interesting test prompts, and concludes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As far as a quick vibe check over ~2 hours this morning, Grok 3 + Thinking feels somewhere around the state of the art territory of OpenAI's strongest models (o1-pro, $200/month), and slightly better than DeepSeek-R1 and Gemini 2.0 Flash Thinking. Which is quite incredible considering that the team started from scratch ~1 year ago, this timescale to state of the art territory is unprecedented.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I was delighted to see him include my &lt;code&gt;Generate an SVG of a pelican riding a bicycle&lt;/code&gt; benchmark in his tests:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Grok 3's pelicans are pretty good, though I still slightly prefer Claude 3.5 Sonnet's." src="https://static.simonwillison.net/static/2025/grok3-pelican.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Grok 3 is currently sat at the top of the LLM &lt;a href="https://lmarena.ai/"&gt;Chatbot Arena&lt;/a&gt; (across &lt;a href="https://x.com/lmarena_ai/status/1891706269003600187"&gt;all of their categories&lt;/a&gt;) so it's doing very well based on vibes for the voters there.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pelican-riding-a-bicycle"&gt;pelican-riding-a-bicycle&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/grok"&gt;grok&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-release"&gt;llm-release&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/chatbot-arena"&gt;chatbot-arena&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xai"&gt;xai&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llms"/><category term="pelican-riding-a-bicycle"/><category term="grok"/><category term="llm-release"/><category term="chatbot-arena"/><category term="xai"/></entry><entry><title>Quoting Andrej Karpathy</title><link href="https://simonwillison.net/2025/Feb/6/andrej-karpathy/#atom-tag" rel="alternate"/><published>2025-02-06T13:38:08+00:00</published><updated>2025-02-06T13:38:08+00:00</updated><id>https://simonwillison.net/2025/Feb/6/andrej-karpathy/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/karpathy/status/1886192184808149383"&gt;&lt;p&gt;There's a new kind of coding I call "vibe coding", where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. It's possible because the LLMs (e.g. Cursor Composer w Sonnet) are getting too good. Also I just talk to Composer with SuperWhisper so I barely even touch the keyboard.&lt;/p&gt;
&lt;p&gt;I ask for the dumbest things like "decrease the padding on the sidebar by half" because I'm too lazy to find it. I "Accept All" always, I don't read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it. The code grows beyond my usual comprehension, I'd have to really read through it for a while. Sometimes the LLMs can't fix a bug so I just work around it or ask for random changes until it goes away.&lt;/p&gt;
&lt;p&gt;It's not too bad for throwaway weekend projects, but still quite amusing. I'm building a project or webapp, but it's not really coding - I just see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/karpathy/status/1886192184808149383"&gt;Andrej Karpathy&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vibe-coding"&gt;vibe-coding&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cursor"&gt;cursor&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/definitions"&gt;definitions&lt;/a&gt;&lt;/p&gt;



</summary><category term="andrej-karpathy"/><category term="ai-assisted-programming"/><category term="generative-ai"/><category term="ai"/><category term="llms"/><category term="vibe-coding"/><category term="cursor"/><category term="definitions"/></entry><entry><title>DeepSeek_V3.pdf</title><link href="https://simonwillison.net/2024/Dec/26/deepseek-v3/#atom-tag" rel="alternate"/><published>2024-12-26T18:49:05+00:00</published><updated>2024-12-26T18:49:05+00:00</updated><id>https://simonwillison.net/2024/Dec/26/deepseek-v3/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/deepseek-ai/DeepSeek-V3/blob/main/DeepSeek_V3.pdf"&gt;DeepSeek_V3.pdf&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The DeepSeek v3 paper (and &lt;a href="https://github.com/deepseek-ai/DeepSeek-V3/blob/main/README.md"&gt;model card&lt;/a&gt;) are out, after yesterday's mysterious release of &lt;a href="https://simonwillison.net/2024/Dec/25/deepseek-v3/"&gt;the undocumented model weights&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Plenty of interesting details in here. The model pre-trained on 14.8 trillion "high-quality and diverse tokens" (not otherwise documented).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Following this, we conduct post-training, including Supervised Fine-Tuning (SFT) and Reinforcement Learning (RL) on the base model of DeepSeek-V3, to align it with human preferences and further unlock its potential. During the post-training stage, we distill the reasoning capability from the DeepSeek-R1 series of models, and meanwhile carefully maintain the balance between model accuracy and generation length.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;By far the most interesting detail though is how much the training cost. DeepSeek v3 trained on 2,788,000 H800 GPU hours at an estimated cost of $5,576,000. For comparison, Meta AI's Llama 3.1 405B (smaller than DeepSeek v3's 685B parameters) &lt;a href="https://huggingface.co/meta-llama/Llama-3.1-405B-Instruct#hardware-and-software"&gt;trained on 11x that&lt;/a&gt; - 30,840,000 GPU hours, also on 15 trillion tokens.&lt;/p&gt;
&lt;p&gt;DeepSeek v3 benchmarks comparably to Claude 3.5 Sonnet, indicating that it's now possible to train a frontier-class model (at least for the 2024 version of the frontier) for less than $6 million!&lt;/p&gt;
&lt;p&gt;&lt;a href="https://twitter.com/karpathy/status/1872362712958906460"&gt;Andrej Karpathy&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For reference, this level of capability is supposed to require clusters of closer to 16K GPUs, the ones being brought up today are more around 100K GPUs. E.g. Llama 3 405B used 30.8M GPU-hours, while DeepSeek-V3 looks to be a stronger model at only 2.8M GPU-hours (~11X less compute). If the model also passes vibe checks (e.g. LLM arena rankings are ongoing, my few quick tests went well so far) it will be a highly impressive display of research and engineering under resource constraints.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;DeepSeek also &lt;a href="https://twitter.com/deepseek_ai/status/1872242663489188088"&gt;announced their API pricing&lt;/a&gt;. From February 8th onwards:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Input: $0.27/million tokens ($0.07/million tokens with cache hits)&lt;br&gt;
Output: $1.10/million tokens&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Claude 3.5 Sonnet is currently $3/million for input and $15/million for output, so if the models are indeed of equivalent quality this is a dramatic new twist in the ongoing LLM pricing wars.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/deepseek_ai/status/1872242657348710721"&gt;@deepseek_ai&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llama"&gt;llama&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/training-data"&gt;training-data&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/meta"&gt;meta&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-pricing"&gt;llm-pricing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/deepseek"&gt;deepseek&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-release"&gt;llm-release&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-in-china"&gt;ai-in-china&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llama"/><category term="llms"/><category term="training-data"/><category term="meta"/><category term="llm-pricing"/><category term="deepseek"/><category term="llm-release"/><category term="ai-in-china"/></entry><entry><title>Quoting Andrej Karpathy</title><link href="https://simonwillison.net/2024/Nov/29/andrej-karpathy/#atom-tag" rel="alternate"/><published>2024-11-29T18:39:42+00:00</published><updated>2024-11-29T18:39:42+00:00</updated><id>https://simonwillison.net/2024/Nov/29/andrej-karpathy/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/karpathy/status/1862565643436138619"&gt;&lt;p&gt;People have too inflated sense of what it means to "ask an AI" about something. The AI are language models trained basically by imitation on data from human labelers. Instead of the mysticism of "asking an AI", think of it more as "asking the average data labeler" on the internet. [...]&lt;/p&gt;
&lt;p&gt;Post triggered by someone suggesting we ask an AI how to run the government etc. TLDR you're not asking an AI, you're asking some mashup spirit of its average data labeler.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/karpathy/status/1862565643436138619"&gt;Andrej Karpathy&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ethics"&gt;ethics&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-ethics"&gt;ai-ethics&lt;/a&gt;&lt;/p&gt;



</summary><category term="andrej-karpathy"/><category term="ethics"/><category term="generative-ai"/><category term="ai"/><category term="llms"/><category term="ai-ethics"/></entry><entry><title>Quoting Andrej Karpathy</title><link href="https://simonwillison.net/2024/Sep/14/andrej-karpathy/#atom-tag" rel="alternate"/><published>2024-09-14T19:50:08+00:00</published><updated>2024-09-14T19:50:08+00:00</updated><id>https://simonwillison.net/2024/Sep/14/andrej-karpathy/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/karpathy/status/1835024197506187617"&gt;&lt;p&gt;It's a bit sad and confusing that LLMs ("Large Language Models") have little to do with language; It's just historical. They are highly general purpose technology for statistical modeling of token streams. A better name would be Autoregressive Transformers or something.&lt;/p&gt;
&lt;p&gt;They don't care if the tokens happen to represent little text chunks. It could just as well be little image patches, audio chunks, action choices, molecules, or whatever. If you can reduce your problem to that of modeling token streams (for any arbitrary vocabulary of some set of discrete tokens), you can "throw an LLM at it".&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/karpathy/status/1835024197506187617"&gt;Andrej Karpathy&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;&lt;/p&gt;



</summary><category term="andrej-karpathy"/><category term="llms"/><category term="ai"/><category term="generative-ai"/></entry><entry><title>AI-powered Git Commit Function</title><link href="https://simonwillison.net/2024/Aug/26/ai-powered-git-commit-function/#atom-tag" rel="alternate"/><published>2024-08-26T01:06:59+00:00</published><updated>2024-08-26T01:06:59+00:00</updated><id>https://simonwillison.net/2024/Aug/26/ai-powered-git-commit-function/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://gist.github.com/karpathy/1dd0294ef9567971c1e4348a90d69285"&gt;AI-powered Git Commit Function&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Andrej Karpathy built a shell alias, &lt;code&gt;gcm&lt;/code&gt;, which passes your staged Git changes to an LLM via my &lt;a href="https://llm.datasette.io/"&gt;LLM&lt;/a&gt; tool, generates a short commit message and then asks you if you want to "(a)ccept, (e)dit, (r)egenerate, or (c)ancel?".&lt;/p&gt;
&lt;p&gt;Here's the incantation he's using to generate that commit message:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;git diff --cached &lt;span class="pl-k"&gt;|&lt;/span&gt; llm &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
&lt;span class="pl-s"&gt;Below is a diff of all staged changes, coming from the command:&lt;/span&gt;
&lt;span class="pl-s"&gt;\`\`\`&lt;/span&gt;
&lt;span class="pl-s"&gt;git diff --cached&lt;/span&gt;
&lt;span class="pl-s"&gt;\`\`\`&lt;/span&gt;
&lt;span class="pl-s"&gt;Please generate a concise, one-line commit message for these changes.&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This pipes the data into LLM (using the default model, currently &lt;code&gt;gpt-4o-mini&lt;/code&gt; unless you &lt;a href="https://llm.datasette.io/en/stable/setup.html#setting-a-custom-default-model"&gt;set it to something else&lt;/a&gt;) and then appends the prompt telling it what to do with that input.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/karpathy/status/1827810695658029262"&gt;@karpathy&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/git"&gt;git&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prompt-engineering"&gt;prompt-engineering&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm"&gt;llm&lt;/a&gt;&lt;/p&gt;



</summary><category term="git"/><category term="ai"/><category term="andrej-karpathy"/><category term="prompt-engineering"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="llm"/></entry><entry><title>SQL injection-like attack on LLMs with special tokens</title><link href="https://simonwillison.net/2024/Aug/20/sql-injection-like-attack-on-llms-with-special-tokens/#atom-tag" rel="alternate"/><published>2024-08-20T22:01:50+00:00</published><updated>2024-08-20T22:01:50+00:00</updated><id>https://simonwillison.net/2024/Aug/20/sql-injection-like-attack-on-llms-with-special-tokens/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://twitter.com/karpathy/status/1823418177197646104"&gt;SQL injection-like attack on LLMs with special tokens&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Andrej Karpathy explains something that's been confusing me for the best part of a year:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The decision by LLM tokenizers to parse special tokens in the input string (&lt;code&gt;&amp;lt;s&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;|endoftext|&amp;gt;&lt;/code&gt;, etc.), while convenient looking, leads to footguns at best and LLM security vulnerabilities at worst, equivalent to SQL injection attacks. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;LLMs frequently expect you to feed them text that is templated like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;|user|&amp;gt;\nCan you introduce yourself&amp;lt;|end|&amp;gt;\n&amp;lt;|assistant|&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But what happens if the text you are processing includes one of those weird sequences of characters, like &lt;code&gt;&amp;lt;|assistant|&amp;gt;&lt;/code&gt;? Stuff can definitely break in very unexpected ways.&lt;/p&gt;
&lt;p&gt;LLMs generally reserve special token integer identifiers for these, which means that it should be possible to avoid this scenario by encoding the special token as that ID (for example &lt;code&gt;32001&lt;/code&gt; for &lt;code&gt;&amp;lt;|assistant|&amp;gt;&lt;/code&gt; in the &lt;code&gt;Phi-3-mini-4k-instruct&lt;/code&gt; &lt;a href="https://huggingface.co/microsoft/Phi-3-mini-4k-instruct/blob/main/added_tokens.json"&gt;vocabulary&lt;/a&gt;) while that same sequence of characters in untrusted text is encoded as a longer sequence of smaller tokens.&lt;/p&gt;
&lt;p&gt;Many implementations fail to do this! Thanks to Andrej I've learned that modern releases of Hugging Face &lt;a href="https://pypi.org/project/transformers/"&gt;transformers&lt;/a&gt; have a &lt;code&gt;split_special_tokens=True&lt;/code&gt; parameter (added &lt;a href="https://github.com/huggingface/transformers/releases/tag/v4.32.0"&gt;in 4.32.0&lt;/a&gt; in August 2023) that can handle it. Here's an example:&lt;/p&gt;
&lt;div class="highlight highlight-text-python-console"&gt;&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; transformers &lt;span class="pl-k"&gt;import&lt;/span&gt; AutoTokenizer
&amp;gt;&amp;gt;&amp;gt; tokenizer &lt;span class="pl-k"&gt;=&lt;/span&gt; AutoTokenizer.from_pretrained(&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;microsoft/Phi-3-mini-4k-instruct&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;)
&amp;gt;&amp;gt;&amp;gt; tokenizer.encode(&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;&amp;lt;|assistant|&amp;gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;)
[32001]
&amp;gt;&amp;gt;&amp;gt; tokenizer.encode(&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;&amp;lt;|assistant|&amp;gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;, &lt;span class="pl-v"&gt;split_special_tokens&lt;/span&gt;&lt;span class="pl-k"&gt;=&lt;/span&gt;&lt;span class="pl-c1"&gt;True&lt;/span&gt;)
[529, 29989, 465, 22137, 29989, 29958]&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;A better option is to use the &lt;a href="https://huggingface.co/docs/transformers/main/en/chat_templating"&gt;apply_chat_template()&lt;/a&gt; method, which should correctly handle this for you (though I'd like to see confirmation of that).


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sql-injection"&gt;sql-injection&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/transformers"&gt;transformers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prompt-injection"&gt;prompt-injection&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tokenization"&gt;tokenization&lt;/a&gt;&lt;/p&gt;



</summary><category term="security"/><category term="sql-injection"/><category term="transformers"/><category term="ai"/><category term="andrej-karpathy"/><category term="prompt-injection"/><category term="generative-ai"/><category term="llms"/><category term="tokenization"/></entry><entry><title>Quoting Andrej Karpathy</title><link href="https://simonwillison.net/2024/Aug/8/andrej-karpathy/#atom-tag" rel="alternate"/><published>2024-08-08T08:13:26+00:00</published><updated>2024-08-08T08:13:26+00:00</updated><id>https://simonwillison.net/2024/Aug/8/andrej-karpathy/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/karpathy/status/1821277264996352246"&gt;&lt;p&gt;The RM [Reward Model] we train for LLMs is just a vibe check […] It gives high scores to the kinds of assistant responses that human raters statistically seem to like. It's not the "actual" objective of correctly solving problems, it's a proxy objective of what looks good to humans. Second, you can't even run RLHF for too long because your model quickly learns to respond in ways that game the reward model. […]&lt;/p&gt;
&lt;p&gt;No production-grade &lt;em&gt;actual&lt;/em&gt; RL on an LLM has so far been convincingly achieved and demonstrated in an open domain, at scale. And intuitively, this is because getting actual rewards (i.e. the equivalent of win the game) is really difficult in the open-ended problem solving tasks. […] But how do you give an objective reward for summarizing an article? Or answering a slightly ambiguous question about some pip install issue? Or telling a joke? Or re-writing some Java code to Python?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/karpathy/status/1821277264996352246"&gt;Andrej Karpathy&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;&lt;/p&gt;



</summary><category term="andrej-karpathy"/><category term="llms"/><category term="ai"/><category term="generative-ai"/></entry><entry><title>Quoting Andrej Karpathy</title><link href="https://simonwillison.net/2024/Jul/19/andrej-karpathy/#atom-tag" rel="alternate"/><published>2024-07-19T13:09:24+00:00</published><updated>2024-07-19T13:09:24+00:00</updated><id>https://simonwillison.net/2024/Jul/19/andrej-karpathy/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/karpathy/status/1814038096218083497"&gt;&lt;p&gt;The reason current models are so large is because we're still being very wasteful during training - we're asking them to memorize the internet and, remarkably, they do and can e.g. recite SHA hashes of common numbers, or recall really esoteric facts. (Actually LLMs are really good at memorization, qualitatively a lot better than humans, sometimes needing just a single update to remember a lot of detail for a long time). But imagine if you were going to be tested, closed book, on reciting arbitrary passages of the internet given the first few words. This is the standard (pre)training objective for models today. The reason doing better is hard is because demonstrations of thinking are "entangled" with knowledge, in the training data.&lt;/p&gt;
&lt;p&gt;Therefore, the models have to first get larger before they can get smaller, because we need their (automated) help to refactor and mold the training data into ideal, synthetic formats.&lt;/p&gt;
&lt;p&gt;It's a staircase of improvement - of one model helping to generate the training data for next, until we're left with "perfect training set". When you train GPT-2 on it, it will be a really strong / smart model by today's standards. Maybe the MMLU will be a bit lower because it won't remember all of its chemistry perfectly.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/karpathy/status/1814038096218083497"&gt;Andrej Karpathy&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/training-data"&gt;training-data&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gpt-2"&gt;gpt-2&lt;/a&gt;&lt;/p&gt;



</summary><category term="andrej-karpathy"/><category term="generative-ai"/><category term="training-data"/><category term="ai"/><category term="llms"/><category term="gpt-2"/></entry><entry><title>Introducing Eureka Labs</title><link href="https://simonwillison.net/2024/Jul/16/introducing-eureka-labs/#atom-tag" rel="alternate"/><published>2024-07-16T18:25:01+00:00</published><updated>2024-07-16T18:25:01+00:00</updated><id>https://simonwillison.net/2024/Jul/16/introducing-eureka-labs/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://eurekalabs.ai/"&gt;Introducing Eureka Labs&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Andrej Karpathy's new AI education company, exploring an AI-assisted teaching model:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The teacher still designs the course materials, but they are supported, leveraged and scaled with an AI Teaching Assistant who is optimized to help guide the students through them. This Teacher + AI symbiosis could run an entire curriculum of courses on a common platform.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On Twitter &lt;a href="https://twitter.com/karpathy/status/1813263734707790301"&gt;Andrej says&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://twitter.com/EurekaLabsAI"&gt;@EurekaLabsAI&lt;/a&gt; is the culmination of my passion in both AI and education over ~2 decades. My interest in education took me from YouTube tutorials on Rubik's cubes to starting CS231n at Stanford, to my more recent Zero-to-Hero AI series. While my work in AI took me from academic research at Stanford to real-world products at Tesla and AGI research at OpenAI. All of my work combining the two so far has only been part-time, as side quests to my "real job", so I am quite excited to dive in and build something great, professionally and full-time.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The first course will be &lt;a href="https://github.com/karpathy/LLM101n"&gt;LLM101n&lt;/a&gt; - currently just a stub on GitHub, but with the goal to build an LLM chat interface "from scratch in Python, C and CUDA, and with minimal computer science prerequisites".

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://twitter.com/karpathy/status/1813263734707790301"&gt;@karpathy&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/education"&gt;education&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;&lt;/p&gt;



</summary><category term="education"/><category term="ai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llms"/></entry><entry><title>Quoting Andrej Karpathy</title><link href="https://simonwillison.net/2024/Jun/2/andrej-karpathy/#atom-tag" rel="alternate"/><published>2024-06-02T21:09:44+00:00</published><updated>2024-06-02T21:09:44+00:00</updated><id>https://simonwillison.net/2024/Jun/2/andrej-karpathy/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/karpathy/status/1797313173449764933"&gt;&lt;p&gt;Turns out that LLMs learn a lot better and faster from educational content as well. This is partly because the average Common Crawl article (internet pages) is not of very high value and distracts the training, packing in too much irrelevant information. The average webpage on the internet is so random and terrible it's not even clear how prior LLMs learn anything at all.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/karpathy/status/1797313173449764933"&gt;Andrej Karpathy&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/training-data"&gt;training-data&lt;/a&gt;&lt;/p&gt;



</summary><category term="andrej-karpathy"/><category term="llms"/><category term="ai"/><category term="generative-ai"/><category term="training-data"/></entry><entry><title>Quoting Andrej Karpathy</title><link href="https://simonwillison.net/2024/May/30/andrej-karpathy/#atom-tag" rel="alternate"/><published>2024-05-30T07:27:57+00:00</published><updated>2024-05-30T07:27:57+00:00</updated><id>https://simonwillison.net/2024/May/30/andrej-karpathy/#atom-tag</id><summary type="html">
    &lt;blockquote cite="https://twitter.com/karpathy/status/1795980744436932871"&gt;&lt;p&gt;The realization hit me [when the GPT-3 paper came out] that an important property of the field flipped. In ~2011, progress in AI felt constrained primarily by algorithms. We needed better ideas, better modeling, better approaches to make further progress. If you offered me a 10X bigger computer, I'm not sure what I would have even used it for. GPT-3 paper showed that there was this thing that would just become better on a large variety of practical tasks, if you only trained a bigger one. Better algorithms become a bonus, not a necessity for progress in AGI. Possibly not forever and going forward, but at least locally and for the time being, in a very practical sense. Today, if you gave me a 10X bigger computer I would know exactly what to do with it, and then I'd ask for more.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="https://twitter.com/karpathy/status/1795980744436932871"&gt;Andrej Karpathy&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gpt-3"&gt;gpt-3&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;&lt;/p&gt;



</summary><category term="andrej-karpathy"/><category term="gpt-3"/><category term="generative-ai"/><category term="openai"/><category term="ai"/><category term="llms"/></entry><entry><title>Reproducing GPT-2 (124M) in llm.c in 90 minutes for $20</title><link href="https://simonwillison.net/2024/May/28/reproducing-gpt-2/#atom-tag" rel="alternate"/><published>2024-05-28T19:47:13+00:00</published><updated>2024-05-28T19:47:13+00:00</updated><id>https://simonwillison.net/2024/May/28/reproducing-gpt-2/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/karpathy/llm.c/discussions/481"&gt;Reproducing GPT-2 (124M) in llm.c in 90 minutes for $20&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
GPT-2 124M was the smallest model in the GPT-2 series released by OpenAI back in 2019. Andrej Karpathy's llm.c is an evolving  4,000 line C/CUDA implementation which can now train a GPT-2 model from scratch in 90 minutes against a 8X A100 80GB GPU server. This post walks through exactly how to run the training, using 10 billion tokens of FineWeb.&lt;/p&gt;
&lt;p&gt;Andrej notes that this isn't actually that far off being able to train a GPT-3:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Keep in mind that here we trained for 10B tokens, while GPT-3 models were all trained for 300B tokens. [...] GPT-3 actually didn't change too much at all about the model (context size 1024 -&amp;gt; 2048, I think that's it?).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Estimated cost for a GPT-3 ADA (350M parameters)? &lt;a href="https://news.ycombinator.com/item?id=40502090#40504950"&gt;About $2,000&lt;/a&gt;.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="https://news.ycombinator.com/item?id=40502090"&gt;Hacker News&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gpt-2"&gt;gpt-2&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="openai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llms"/><category term="gpt-2"/></entry><entry><title>Andrej Karpathy's Llama 3 review</title><link href="https://simonwillison.net/2024/Apr/18/andrej-karpathys-llama-3-review/#atom-tag" rel="alternate"/><published>2024-04-18T20:50:37+00:00</published><updated>2024-04-18T20:50:37+00:00</updated><id>https://simonwillison.net/2024/Apr/18/andrej-karpathys-llama-3-review/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://twitter.com/karpathy/status/1781028605709234613"&gt;Andrej Karpathy&amp;#x27;s Llama 3 review&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The most interesting coverage I’ve seen so far of Meta’s Llama 3 models (8b and 70b so far, 400b promised later).&lt;/p&gt;

&lt;p&gt;Andrej notes that Llama 3 trained on 15 trillion tokens—up from 2 trillion for Llama 2—and they used that many even for the smaller 8b model, 75x more than the chinchilla scaling laws would suggest.&lt;/p&gt;

&lt;p&gt;The tokenizer has also changed—they now use 128,000 tokens, up from 32,000. This results in a 15% drop in the tokens needed to represent a string of text.&lt;/p&gt;

&lt;p&gt;The one disappointment is the context length—just 8,192, 2x that of Llama 2 and 4x LLaMA 1 but still pretty small by today’s standards.&lt;/p&gt;

&lt;p&gt;If early indications hold, the 400b model could be the first genuinely GPT-4 class openly licensed model. We’ll have to wait and see.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/andrej-karpathy"&gt;andrej-karpathy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llama"&gt;llama&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;&lt;/p&gt;



</summary><category term="ai"/><category term="andrej-karpathy"/><category term="generative-ai"/><category term="llama"/><category term="llms"/></entry></feed>