<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: Comments</title><link href="http://feeds.simonwillison.net/" rel="alternate"/><link href="http://feeds.simonwillison.net/atom/beats/comment/" rel="self"/><id>http://feeds.simonwillison.net/</id><updated>2026-08-08T14:06:41+00:00</updated><author><name>Simon Willison</name></author><entry><title>Now we have a timeline of the OpenAI accidental attack against Hugging Face</title><link href="https://news.ycombinator.com/item?id=49220609#49221745" rel="alternate"/><published>2026-08-08T14:06:41+00:00</published><updated>2026-08-08T14:06:41+00:00</updated><id>https://news.ycombinator.com/item?id=49220609#49221745</id><summary type="html">&lt;p&gt;&lt;a href="https://news.ycombinator.com/item?id=49220609#49221745"&gt;My comment&lt;/a&gt; on &lt;a href="https://news.ycombinator.com/item?id=49220609"&gt;Now we have a timeline of the OpenAI accidental attack against Hugging Face&lt;/a&gt; &amp;mdash; Hacker News.&lt;/p&gt;&lt;p&gt;I think one of the most interesting details here might be tucked away in that first bullet point:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;May 7: OpenAI starts a new training run for an experimental, unreleased model. &lt;em&gt;(Do they mean an evaluation run? They say training run in the video, and later mention a “reward signal to judge how well they’re doing”, so I guess this really was about training a model, not evaluating one that was already trained.)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The more I think about this the more I suspect that the fact this happened while &lt;em&gt;training&lt;/em&gt; a new model is key to understanding what went wrong.&lt;/p&gt;
&lt;p&gt;In RLVR - Reinforcement Learning with Verifiable Rewards - you set the model a goal and have it take &lt;em&gt;any steps necessary&lt;/em&gt; to achieve that goal.&lt;/p&gt;
&lt;p&gt;Clearly one aspect of OpenAI's training here is to RLVR their models for cybersecurity tasks. Just like pre-training benefits from dumping in vast sources of knowledge, the more tasks you can feed into RLVR the more of a general purpose capable model you get at the end.&lt;/p&gt;
&lt;p&gt;This also helps explain why the models had nothing to cause them to hold back. Those safety behaviors are added much later in the process.&lt;/p&gt;
&lt;p&gt;AND it explains (but does not excuse) why monitoring was so lax. If you're training a new model like this you presumably set it thousands of tasks like this in parallel. I can see how you might miss that a tiny subset of your training agents have started leaving each other messages in filenames on your packaging server.&lt;/p&gt;
&lt;p&gt;Someone once told me that you can't just leave the racist materials out of your training data if you want a non-racist model: it has to have seen examples of racism in order to later be taught that racism is bad.&lt;/p&gt;
&lt;p&gt;I can see echoes of that here. If your model doesn't know how to aggressively hack things how do you later teach it not to?&lt;/p&gt;
&lt;p&gt;(I have little knowledge of how RLVR works in practice so I'm looking forward to hearing from people who can help me understand if I'm on the right track here.)&lt;/p&gt;</summary><category term="ai"/><category term="openai"/><category term="generative-ai"/><category term="llms"/><category term="ai-security-research"/><category term="openai-hugging-face-incident"/></entry><entry><title>Devtools must be open source (exe.dev)</title><link href="https://news.ycombinator.com/item?id=49156111#49156719" rel="alternate"/><published>2026-08-03T15:30:38+00:00</published><updated>2026-08-03T15:30:38+00:00</updated><id>https://news.ycombinator.com/item?id=49156111#49156719</id><summary type="html">&lt;p&gt;&lt;a href="https://news.ycombinator.com/item?id=49156111#49156719"&gt;My comment&lt;/a&gt; on &lt;a href="https://news.ycombinator.com/item?id=49156111"&gt;Devtools must be open source (exe.dev)&lt;/a&gt; &amp;mdash; Hacker News.&lt;/p&gt;&lt;p&gt;One of the arguments for open source software for end-users has always been the freedom to examine and modify how that software works.&lt;/p&gt;
&lt;p&gt;The reality for most people - even expert programmers - has been that the freedom is more about being able to lean on &lt;em&gt;other people&lt;/em&gt; to do that. Most people can't justify the time commitment needed to read and then modify the code for tools they use very often.&lt;/p&gt;
&lt;p&gt;I think LLMs have changed that equation in a way that makes the original dream much more feasible.&lt;/p&gt;
&lt;p&gt;Several times a day I'll prompt regular Claude chat to "Clone x/y from GitHub and tell me how Z works".&lt;/p&gt;
&lt;p&gt;Getting software to compile in order to start hacking on it used to be enough friction that I often wouldn't bother. Now I treat that as a zero time investment challenge: tell Codex or Claude Code to checkout and build X and then come back ten minutes later and see how it got on.&lt;/p&gt;
&lt;p&gt;I'm not habitually &lt;em&gt;modifying&lt;/em&gt; the software I use yet, but I can see a path to that which didn't exist a year or so ago.&lt;/p&gt;</summary><category term="hacker-news"/><category term="open-source"/><category term="ai"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/></entry><entry><title>encode/httpx: Version 1.0 public call.</title><link href="https://github.com/encode/httpx/discussions/3344#discussioncomment-14170874" rel="alternate"/><published>2025-08-20T03:07:26+00:00</published><updated>2025-08-20T03:07:26+00:00</updated><id>https://github.com/encode/httpx/discussions/3344#discussioncomment-14170874</id><summary type="html">&lt;p&gt;&lt;a href="https://github.com/encode/httpx/discussions/3344#discussioncomment-14170874"&gt;My comment&lt;/a&gt; on &lt;a href="https://github.com/encode/httpx/discussions/3344"&gt;encode/httpx: Version 1.0 public call.&lt;/a&gt; &amp;mdash; GitHub.&lt;/p&gt;&lt;p&gt;I'm not thrilled about the 1.0 version changing the design of HTTPX so thoroughly - it looks like it's splitting &lt;code&gt;httpx&lt;/code&gt; and &lt;code&gt;ahttpx&lt;/code&gt; into entirely separate packages.&lt;/p&gt;
&lt;p&gt;Python's single biggest weakness when it comes to dependency management is that it isn't possible to install two different versions of a package in the same environment. This makes backwards-incompatible changes really painful, because they lead to a prolonged period where different third-party dependencies may themselves require conflicting versions of another dependency.&lt;/p&gt;
&lt;p&gt;This happened with Pydantic 2 and it was &lt;em&gt;miserable&lt;/em&gt; - there was a solid 8-12 month period where depending on Pydantic could actively harm a project if that project also depended on something else that used Pydantic 1 - you couldn't upgrade to 2 until your dependency also upgraded to 2, and if you wanted to depend on libraries X and Y where X depended on Pydantic 1 and Y depended on Pydantic 2 your project just couldn't be built using those libraries!&lt;/p&gt;
&lt;p&gt;I fear that an HTTPX breaking change could be even more painful than the Pydantic one was.&lt;/p&gt;
&lt;p&gt;Consider two of the most popular libraries for interfacing with LLMs - Anthropic and OpenAI's.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/anthropics/anthropic-sdk-python/blob/main/pyproject.toml"&gt;https://github.com/anthropics/anthropic-sdk-python/blob/main/pyproject.toml&lt;/a&gt; depends on &lt;code&gt;"httpx&amp;gt;=0.25.0, &amp;lt;1"&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/openai/openai-python/blob/main/pyproject.toml"&gt;https://github.com/openai/openai-python/blob/main/pyproject.toml&lt;/a&gt; depends on &lt;code&gt;"httpx&amp;gt;=0.23.0, &amp;lt;1"&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;There are plenty of other projects that depend on both - anything that attempts to provide an abstraction layer over multiple LLM providers, for example (&lt;a href="https://llm.datasette.io/"&gt;cough&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Now what happens if HTTPX 1.0 comes out with a breaking API, and Anthropic upgrade to it but OpenAI don't? Any package that depends on both of those underlying packages will be stuck in a no-mans land - it will be forced to stick with HTTPX&amp;lt;1.0 and pin the older version of the Anthropic package, then will be blocked waiting for OpenAI to ship their upgrade.&lt;/p&gt;
&lt;p&gt;It's not just LLM packages though. Show me Python software that &lt;em&gt;doesn't&lt;/em&gt; use an HTTP client these days! &lt;a href="https://github.com/encode/httpx/network/dependents"&gt;https://github.com/encode/httpx/network/dependents&lt;/a&gt; lists 527,282 repositories and 13,654 packages. Will every one of those need to make changes to handle the switch to HTTPX 1.0?&lt;/p&gt;
&lt;p&gt;I understand that complaining about a 0.x to 1.0 having breaking changes is &lt;em&gt;distinctly&lt;/em&gt; uncool of me. That's the whole point of a pre-1.0 version number, at least for projects that follow SemVer.&lt;/p&gt;
&lt;p&gt;I have to admit: I had optimistically hoped that HTTPX wasn't going to follow SemVer given the Python ecosystem's uniquely painful response to breaking changes in major packages that other packages depend on.&lt;/p&gt;
&lt;p&gt;If I'd know this was going to happen I would have tried to find some other post-1.0 HTTP library to build all of my stuff around!&lt;/p&gt;
&lt;h2&gt;Solution: call the package httpx2!&lt;/h2&gt;
&lt;p&gt;I don't like complaining without offering solutions, so here's the one way I can see that this change could be implemented while avoiding all of that pain: &lt;strong&gt;change the package name&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If &lt;strong&gt;httpx2&lt;/strong&gt; came out with this new design, leaving &lt;strong&gt;httpx&lt;/strong&gt; in place, &lt;em&gt;all&lt;/em&gt; of these problems go away.&lt;/p&gt;
&lt;p&gt;Some projects can switch to&lt;code&gt;httpx2&lt;/code&gt; as their client library. Old projects can stick with &lt;code&gt;httpx&lt;/code&gt;. If my project needs to mix and match dependencies that don't agree on that version then it's fine - I can have both &lt;code&gt;httpx&lt;/code&gt; and &lt;code&gt;httpx2&lt;/code&gt; installed in the same environment at the same time.&lt;/p&gt;
&lt;p&gt;Mark &lt;code&gt;httpx&lt;/code&gt; as deprecated and no longer supported (and/or offer to keep on patching it in exchange for paid sponsorship of the work). Make &lt;code&gt;httpx2&lt;/code&gt; clearly the better option.&lt;/p&gt;
&lt;p&gt;That way projects get to switch to &lt;code&gt;httpx2&lt;/code&gt; - and handle the breaking changes - on their own time and without causing any pain for other projects that depend on them but are not yet ready to upgrade their other uses.&lt;/p&gt;
&lt;p&gt;I really, really wish Pydantic had done this with their Pydantic 2 upgrade.&lt;/p&gt;
&lt;p&gt;I get that it feels ugly to have a &lt;code&gt;2&lt;/code&gt; on the end of the name - &lt;code&gt;jinja2&lt;/code&gt; got stuck with that seventeen years ago. But I think that tiny bit of ugliness may be a price to pay for shipping significant breaking changes to a library with 500,000 existing users.&lt;/p&gt;</summary><category term="open-source"/><category term="packaging"/><category term="python"/><category term="httpx"/><category term="pydantic"/></entry></feed>