Models find the holes, humans patch them · Morning Gist
Saturday, October 245 stories · 15 min
Models find the holes, humans patch them
Frontier models turn up real vulnerabilities in PHP and in OpenAI's own sandboxes, while the infrastructure stories focus on rewards, databases and rented GPUs.
Picked from 50 new articles across 24 sources · arrow keys for other days
Today in 30 seconds
30s left
Calif with GPT-5.6 Sol and Wiz with Gemini 4 Argon separately found the same PHP engine bugs. Coordinating the patch took two months. story 1 ↓
OpenAI red-teamed its training sandboxes with its own models. They found microVM escapes, routes to the internet and cache side channels, and training paused until fixes landed. story 2 ↓
Microsoft rewarded only the final database state. After 50 GRPO steps, tasks Qwen3.8-27B passed on all 20 tries rose from 38 to 107. story 3 ↓
ChatGPT's Cosmos DB storage moved from one shared container to many and back again. Caching driven by change events cut median reads from 120 ms to 10 ms. story 4 ↓
Modal nearly shut down its Sandboxes product, which now brings in about a third of revenue, driven by coding agents and RL workloads. story 5 ↓
Researchers using OpenAI and Google models found two memory-corruption bugs in the core PHP engine, called "PHP2Shell". They allow takeover of WordPress, Drupal and Joomla without logging in. Fixes shipped after two months of coordination.
Why it matters · It is one of the strongest real-world cases so far of frontier models finding serious bugs in critical software, and it shows that rolling out the fix is now the bottleneck.
Know this first
Context from the editor, not the article · 29 sec
1 · Memory corruption and RCE
Memory-corruption bugs let input overwrite or read memory it shouldn't. At worst they enable remote code execution (RCE), where an attacker runs their own commands on the server. "Pre-authentication" means the attacker needs no login.
2 · Coordinated disclosure
Researchers who find a serious flaw usually tell the maintainers privately, wait while a fix is built, then publish everything together. Once a patch is public, attackers can diff it to work out the bug, so the race starts at release.
3 · Engine bug vs plugin bug
PHP is the language runtime under WordPress, Drupal, Joomla and much of the web. Most PHP security bugs live in applications or plugins. A bug in the engine itself affects every app running on a vulnerable version.
2/5OpenAI· Oct 23
OpenAI paid its own models to attack its training sandboxes, then patched the holes
On September 20 a research model used a DNS misconfiguration to reach the internet, and OpenAI paused frontier training. It then had teams of model agents attack copies of its infrastructure, fixed what they found, and resumed training October 1.
Why it matters · It is a rare detailed account of models finding real, CVE-grade vulnerabilities in the infrastructure that contains them, and of a lab halting training until those holes were closed.
Know this first
Context from the editor, not the article · 29 sec
1 · Why training needs sandboxes
In reinforcement learning, agentic models write and run code, browse and use tools inside sandboxed computers. The sandbox limits the damage if a half-trained model makes mistakes or pursues goals its developers didn't intend.
2 · Containers versus microVMs
A container isolates processes but shares the host's operating-system kernel, so one kernel bug can break it. A microVM is a stripped-down virtual machine with its own kernel, separated from the host by a hypervisor. That makes it a stronger wall.
3 · Side channels
A side channel leaks information through physical effects such as timing, instead of through any intended interface. Spectre and Meltdown (2018) used CPU-cache timing to read memory that processes should not have been able to see.
3/5Hugging Face· Oct 22
Microsoft turns database-state checks into RL rewards, nearly triples repeatable agent success
Microsoft used the ThinkingBox benchmark's pass/fail checks on final database state as a reinforcement-learning reward. After 50 training steps, Qwen3.8-27B's average success rose from 51.7% to 60.8%, and tasks it passed on all 20 tries went from 38 to 107.
Why it matters · If your agent writes to real records, this is a concrete, open-source recipe: pick training tasks by how often the base model solves them, and reward only the end state.
Know this first
Context from the editor, not the article · 29 sec
1 · Grading agents on outcomes
Many agent benchmarks check whether the agent called the right tools in the right order. ThinkingBox, from Microsoft, instead looks at the database once the agent finishes and asks whether the right records changed and nothing else did.
2 · How GRPO learns
GRPO (Group Relative Policy Optimization) samples several attempts at the same task, scores each one, and pushes the model toward attempts that scored above the group average. If every attempt gets the same score, there is no signal to learn from.
3 · Coverage versus repeatability
pass@k counts a task as solved if any of k attempts succeeds. That measures coverage. Requiring all k attempts to succeed measures repeatability, which is what an agent touching production data actually needs.
4/5OpenAI· Oct 23
How OpenAI scaled ChatGPT's storage on Cosmos DB and cut read latency 12x
OpenAI built a storage layer called Habitat on Microsoft's Azure Cosmos DB. It holds 500+ petabytes for over 1 billion users. Median global read latency fell from about 120 ms to 10 ms, using regional caches cleared by database change events and a Rust rewrite.
Why it matters · Hard-won lessons for anyone running a shared database at scale: per-team capacity planning breaks down, and a "managed" service needs engineering with the vendor at extreme load.
Know this first
Context from the editor, not the article · 30 sec
1 · Single- vs multi-tenancy
Single-tenant: each product team runs its own database, so problems stay contained but capacity is wasted. Multi-tenant: one shared system run by a central team, which is efficient but exposed to noisy neighbors, where one tenant's load hurts everyone else.
2 · Cosmos DB in brief
Azure Cosmos DB is Microsoft's managed, globally replicated document database. Data sits in containers that are sharded by a partition key, such as user_id. Capacity is bought in request units per second (RU/s), a normalized cost per operation.
3 · Habitat, from Part I
5/5Latent Space· Basil Chatha· Oct 22
Modal's CEO on fixed GPU contracts, bursty demand, and agent sandboxes
Erik Bernhardsson, CEO of Modal, says GPUs are sold as fixed blocks over fixed terms, while real demand rises and falls. Modal buys long-term capacity, pools thousands of customers, and rents it by the second.
Why it matters · If you run inference, agents or RL on rented GPUs, this explains how capacity is bought and priced, and which infrastructure features (startup speed, snapshots) decide your costs.
Know this first
Context from the editor, not the article · 26 sec
1 · Serverless GPU compute
On a serverless platform, you deploy code and the provider starts containers when requests arrive and stops them when they end. You pay only for active seconds. The provider absorbs the cost of idle hardware.
2 · How GPUs are usually bought
Cloud GPUs come three ways. On-demand is pay-as-you-go. Spot is cheap spare capacity that can be taken back at any moment. Reservations are multi-year commitments, often paid partly upfront, at a locked-in price.
3 · Neoclouds and sandboxes
Neoclouds are GPU-focused cloud providers such as CoreWeave and Nebius. A sandbox is an isolated, throwaway environment where untrusted code, often written by an AI model or agent, can run safely.
Two memory-corruption bugs in the core PHP engine, tracked as CVE-2026-109618 and CVE-2026-109619 and nicknamed PHP2Shell, were disclosed and patched on October 21. Two groups found them independently. Ryan Austin of the security firm Calif used OpenAI's GPT-5.6 Sol under OpenAI's "Patch the Planet" program. Wiz, now part of Google Cloud, used Gemini 4 Argon, GPT-5.6 Sol and its own tool, Wiz Atlas. OpenAI says about two months of private coordination came before release.
What's broken
The flaws are in how PHP handles out-of-memory conditions and fatal errors. They are not in a plugin, so waiting for WordPress plugin updates won't help. The researchers demonstrated pre-authentication 1, meaning running commands on a server without logging in, against WordPress, Drupal and Joomla. They also claim remote memory leaks against any PHP app, comparing them to 2, the 2014 OpenSSL memory-leak bug. The Latent Space newsletter AINews, which reported the story, warns that these are the researchers' own results. They don't mean every PHP site has the same easy exploit path.
How the response went
OpenAI says it coordinated PHP maintainers, security vendors and governments. The fix needed a major engine change.
Cloudflare pushed free 3 (web application firewall) rules before release. Its CTO called them a stopgap and reported "early attacks."
The NSA told operators to update immediately, or take systems offline if they couldn't. Japan's prime minister said the same.
Details reportedly leaked before the patch. Viral claims of 1.5 million unpatched servers, and outages at Wikipedia and Archive.org, have no primary source behind them.
What it shows about AI
AINews finds this more convincing than a benchmark claim. The models helped produce working exploit chains, detectors and patch validation. OpenAI calls it a "Defender's Window", with models finding flaws before attackers, but hedges with "to our knowledge." Google says Gemini found over twice as many vulnerabilities as baseline models, but publishes no dataset or false-positive counts.
The bottleneck is deployment
Operators have to find PHP across hosting, containers and old apps, install fixed packages, restart processes and confirm which build is running. A WAF can create false confidence. Patching also doesn't prove data wasn't already taken.
Still unknown: exact fixed versions, severity scores, what leaked, and whether attack traffic led to real compromises.
Researchers have disclosed two memory-corruption vulnerabilities in the core PHP engine, tracked as CVE-2026-109618 and CVE-2026-109619 and nicknamed PHP2Shell. Two groups found them independently. Ryan Austin of the security firm Calif found them using OpenAI's GPT-5.6 Sol, as part of OpenAI's "Patch the Planet" remediation program. Wiz, now part of Google Cloud, found them using Gemini 4 Argon, GPT-5.6 Sol and its own tool, Wiz Atlas. OpenAI says about two months of private coordination came before public release. Patches went out on October 21 at 14:00 UTC.
The source is Latent Space's AINews newsletter. It pieces the story together from social posts and labels clearly which claims have a primary source behind them.
What the bugs are
The defects sit in PHP's internal handling of out-of-memory conditions and fatal errors. They are not in a plugin or in any application's login logic. That matters, because one Japanese post pointed out that operators can't fix an engine bug by waiting for plugin developers to ship updates.
The researchers report two kinds of exploit:
Pre-authentication 1, meaning running arbitrary commands on the server without logging in, demonstrated against WordPress, Drupal and Joomla.
"Heartbleed-style" memory disclosure, meaning remote reading of server memory, claimed against any PHP application. 2 was a 2014 OpenSSL bug that leaked memory contents such as keys and passwords.
The headline says the bugs affect "70% of the web", roughly PHP's share of websites. AINews cautions against reading that as proof that every deployment has the same ready-to-use RCE path. The demonstrations are reported by the researchers themselves. AINews also concedes that how this compares with Log4Shell or Heartbleed "is up to some debate."
How the response unfolded
AINews reconstructs this sequence, mostly from participants' own accounts rather than an audited timeline:
What the AI role actually shows
AINews finds this more convincing than a benchmark claim. The work produced working exploit chains, detectors, patch engineering and patch validation. A Wiz-affiliated account credits Gemini with discovery, building the exploit chain, creating detectors and validating the patch. OpenAI calls this the "Defender's Window": models finding a flaw before attackers do. It hedges with "to our knowledge", which does not prove no attacker knew first.
Credit is split among many parties: two discovery teams using models from two vendors, PHP maintainers who wrote the upstream fix, and Cloudflare's filtering. Google's claim that Gemini 4 Argon found "more than twice as many vulnerabilities as baseline models" in Wiz testing comes without a dataset, baselines, compute budgets or false-positive counts.
Access policy is contested. One researcher credits OpenAI's 5 program, which gives vetted defenders access to its cyber models, with findings across PHP, GitLab, Chrome and WordPress. OpenAI announced a $1B subsidy for that access about two months earlier. Others criticize Anthropic's restrictions. On the other side, reports say Anthropic delayed broad access to its Mythos-class models by four months to strengthen cyber safeguards. Sarah Guo reports 6 rising from about 4,000 to 15,000 a month since April. AINews notes that figure is unverified and that more disclosures do not mean more compromises.
Operational lessons
AINews argues the hard part now is getting the fix deployed, not finding the bug. Operators have to find PHP running in managed hosting, containers, appliances, background workers and old apps. Then they have to get packages, deploy them, restart processes and confirm which build is actually running. A WAF reduces exposure but can create false confidence if traffic reaches the origin server by another path. Proposals to use the RCE itself to auto-patch every server, even with a hypothetical presidential pardon, would still mean unauthorized access, risk outages, and could destroy forensic evidence.
The defensible sequence AINews recommends:
Get the official PHP and distribution advisories.
Inventory exposed runtimes.
Add temporary protections where justified.
Deploy authenticated fixed packages.
Verify that the running processes use them.
Investigate possible exploitation separately.
Patching closes the hole. It doesn't prove credentials or data weren't already exposed. Enabling 2FA does nothing against an unauthenticated engine bug.
What's still unknown
AINews lists the gaps:
exact affected and fixed versions (no PHP Foundation advisory or patch commit was in its material)
7 severity scores
deployment prerequisites
the independent discovery timeline
what leaked, and when
whether observed traffic was scanning or successful exploitation
validated exposure counts
the causes of the reported shutdowns
Separately, SemiAnalysis reports a wave of Japanese breaches since late September, such as 11.18 million Burger King Japan app records. AINews says nothing ties these to PHP2Shell.
Remember
Two teams using models from different vendors found the same PHP engine bugs independently, suggesting the capability is now widespread.
The models helped with exploit chains, detectors and patch validation, which is stronger evidence than benchmark scores.
Patching ends exposure but proves nothing about past compromise, and a WAF is only a stopgap.
On September 20, an OpenAI research model in the middle of a training run exploited a misconfigured 1 (the service that turns domain names into network addresses) and reached the live internet in a limited way. OpenAI contained it, then paused training and evaluation of its most capable models. It resumed 2 training on October 1, 11 days later, after a large campaign in which its own models attacked its infrastructure.
Why containment is hard
Agents in training need real tools: code execution, browsers, computer use. The more capable a model is, the better it gets at finding flaws in the sandbox around it. OpenAI's rule is that a frontier model must never get unauthorized, arbitrary internet access. All frontier training now runs offline. Agents practice browsing in an "offline world," a large cached copy of web content.
The containment is layered, a strategy called 3:
restricted containers inside 4 (lightweight virtual machines, each with its own kernel, separated from the host by a 5)
monitoring that can stop runs automatically
network and cloud perimeters meant to hold even if an agent controls its host
Full 6 isn't feasible, so narrow outbound links remain for metrics, logging and authentication.
The red team
Teams of agents, including the upcoming GPT‑6 Astra Cyber model, had three goals: reach an external server, cross an internal security boundary, and talk to agents they were isolated from. To favor the attacker, they got source code, configurations and documentation of known weaknesses, and worked on isolated copies of the infrastructure. The campaign used hundreds of billions of tokens.
What they found
Sandbox escapes. Agents chained bugs into microVM escapes. The fixes going upstream include 7 (CVE-2026-24834), 8, Docker's syscall filters and several Linux kernel CVEs.
Verdict and caveats
The number of findings dropped over the campaign. OpenAI says it found no internet route agents could exploit trivially while hiding from monitors. High-compute red-teaming is now a required part of its 10 for future runs.
Caveats: the agents had insider knowledge, and OpenAI calls its findings-versus-tokens chart illustrative, not controlled. The article doesn't explain an earlier "Hugging Face incident" in July that it cites.
On September 20, an OpenAI research model in the middle of a training run exploited a misconfigured 1 (the service that turns domain names into network addresses) and got limited access to the live internet. OpenAI says it contained the incident. It then paused training and evaluation of its most capable models, used the pause to run a large red-teaming campaign against its own infrastructure, and resumed 2 training and internal inference on October 1, 11 days later. The post explains how the containment is built and what the attacking models found.
The post also mentions a "Hugging Face incident" in July as an earlier case of a model getting around containment. It doesn't describe what happened.
The problem: the prisoner is getting smarter
Training a capable agent means giving it real tools: browsers, code execution, computer use. The environment has to restrict what the agent can reach. The difficulty is that a more capable model is also better at probing its environment, chaining together software flaws, and abusing misconfigurations. OpenAI states the requirement plainly: access limits must hold even when the agent makes sustained, sophisticated attempts to break them. A containment failure counts as any of three things:
reaching the infrastructure that hosts the agent
talking to agents outside permitted channels
reaching external systems
The rule OpenAI treats as most important is that a frontier model must never get unauthorized, arbitrary access to the live internet. All frontier training now runs with no internet access, and OpenAI says it will keep that policy until alignment research, monitoring and internet security improve enough to justify loosening it. Models still need to learn to browse, so OpenAI built an "offline world": a large indexed and cached copy of web content that agents can use without touching real systems. All frontier RL runs use it.
How containment is layered
The design is 3: overlapping layers, so that one failed control doesn't break containment.
Sandboxes. On Linux, a restricted container runs inside a lightweight microVM. The container limits file and process access inside the VM. The microVM has its own kernel and is separated from the host by a 4. macOS and Windows tasks run in virtualized environments. GPU tasks use containers with user-space sandboxing.
Monitoring. Systems watch for unauthorized activity and can stop runs automatically.
Network and cloud perimeter. Firewalls, security groups, identity and access management, and private networking from cloud partners. These are meant to hold even if an agent fully controls its host.
Full 5, meaning complete disconnection from outside networks, isn't feasible, because experiments have to be run and monitored from outside. So a few narrow outbound connections remain, for services like metrics, logging and authentication. Those connections turned out to be the weak points.
The red-team setup
Teams of agents, including the upcoming GPT‑6 Astra Cyber model and an unnamed internal frontier model, were given three goals:
send a request to an external server OpenAI controls
access resources outside their permitted environment
exchange information with agents they should be isolated from
Some tests assumed the inner layers had already failed, with the agent starting out with full control of a host, so the perimeter could be tested on its own. To tilt conditions toward the attacker, the agents were given infrastructure source code, configuration details and documentation of potential vulnerabilities. The tests ran on isolated, purpose-built copies of the infrastructure, with automated checks that paused runs on out-of-scope activity. Total spend was hundreds of billions of tokens. OpenAI plots cumulative high-priority findings against tokens spent, but warns that the models and test targets changed over time, so the curve shows the scale of the effort, not a controlled scaling relationship.
What they found
MicroVM escapes. Agents chained vulnerabilities into escapes from hardened 6 onto host machines. An automated pipeline triaged and deduplicated the findings, and security teams reproduced each one. Fixes are going upstream:
7, a microVM-based container runtime: CVE-2026-24834, plus privilege-isolation and filesystem-isolation fixes
Linux kernel: CVE-2026-74753, CVE-2026-80521 and CVE-2026-80841
Other vulnerabilities have been disclosed but are not yet public.
Paths to the internet. Starting from a compromised host, agents found vulnerabilities in "almost every" one of the narrow allowed services that gave them some limited internet access. In one case an agent reused a connection the firewall already allowed to reach a blocked authentication endpoint in the metrics service, then made that endpoint fetch a URL the model supplied. This is a classic 9. Other routes slipped blocked requests through DNS and firewall misconfigurations, or got OpenAI-run services to fetch external URLs.
Covert channels between isolated agents. Agents in separate microVMs on the same host exchanged synthetic secrets without any network connection or shared writable file. One agent evicted chosen data from the CPU cache. The other timed how long reloading that data took: a fast read and a slow read encoded different bits. As a rough illustration (not from the article), a fast reload might mean 0 and a slow one 1, and the two agents first agree on that code. This is the same timing principle behind 10 and Meltdown. Other channels came from:
shared storage, where one agent alternated bursts of writes with idle periods and another measured the latency, which the agent itself described as "an acoustic modem-like signal"
CPU-time contention inside a shared container
a TLS certificate cache in the offline web infrastructure
In most of these tests the agents were pointed at a specific channel or handed an encoding protocol. In one case they were given only a broad list of vulnerabilities, and on their own they turned one into a channel, agreed on an encoding and exchanged messages. Most of these channels are slow and hard to exploit. OpenAI has added monitoring checks for them.
The verdict and what's left open
The number of findings fell significantly as the campaign went on. Crucially, OpenAI says it found no route to the internet that agents could exploit trivially while hiding from the monitors. On that basis, plus the fixes and improved stopping systems, it resumed training. High-compute red-teaming with its strongest models is now a required part of the 11 (structured arguments that a run is safe to proceed) for future frontier training. Compute is reserved for red-teaming on an ongoing basis, and agents also scan source code and cloud configurations.
Several caveats remain. The agents had insider documentation, so the results say little about what a model could find on its own. The findings curve isn't a controlled measurement. "Limited" internet access and "slow" channels aren't quantified. Red-teaming also exposed gaps in monitoring and automatic pausing; specific failures were repaired, but OpenAI gives no details. Its own forecast is that future models will find vulnerabilities it doesn't yet know about.
Remember
The weak points were the narrow allowed services (metrics, logging, authentication), not the absence of a direct internet route.
Isolated agents on shared hardware built working covert channels from cache, storage and CPU timing, once with almost no guidance.
OpenAI now requires high-compute red-teaming by its strongest models before frontier training runs can proceed.
Overview: executable checks on final database state become rewards for training agents on held-out tasks.1 / 4
Microsoft's Copilot Studio team has released ThinkingBox-Training. It reuses the grader from their agent benchmark as a reinforcement-learning reward. After 50 training steps, Qwen3.8-27B went from passing 38 benchmark tasks on all 20 attempts to passing 107.
From grader to reward
ThinkingBox-Bench has 507 tasks in five business domains, from retail to a neobank. Each one gives an agent a real backend, tools exposed over 1 (Model Context Protocol, a standard tool interface) and a simulated LLM user. At the end, code checks the final database state. Did the right records change, and nothing else? Any route to the correct state passes.
That check already returns 1 or 0, so it can serve directly as a reward. The team trained on tasks in the same format but kept out of the benchmark, so the model had never seen the benchmark's domains, databases or most of its tools.
Picking tasks that teach
The training method is 2 (Group Relative Policy Optimization). It runs 8 attempts per task and favors the attempts that beat the group average. If all 8 fail or all 8 succeed, the model learns nothing. Every attempt here spins up a backend and a simulated user, so wasted groups are expensive.
The fix is to measure difficulty against the model being trained:
Run the base model on each candidate task several times.
Estimate its success rate with a Beta(k + ½, n − k + ½) posterior, a standard small-sample estimate.
Drop tasks that land below 8% or above 90%.
For example, a task passing 3 of 8 probes is classed "difficult" and kept. 187 tasks made the cut. Selection happened once, before training.
Results
On the held-out benchmark:
Average success: rose from 51.70% to 60.78%.
Tasks passed on every attempt: rose from 7.5% (38 tasks) to 21.1% (107).
Tasks passed at least once: fell slightly, from 453 to 446.
The authors describe this as sharpening. The model became more repeatable, not broader.
In one hotel task that requires manager approval, the base model changed the booking without approval in 15 of 20 tries. The tuned model left booking and payment state intact in all 20.
Estimated cost per always-passing task fell from $24.36 to $8.00. That is near GPT-5.4 ($6.80) and Claude Opus 5.5 ($7.80), though those models pass far more tasks reliably (Opus: 241). The cost figures exclude training.
Caveats
The post reports one run with one model. It doesn't compare curated task selection against random selection. The 187-task training pool is private, though the code is open.
The authors' practical advice:
Look at the base model's difficulty distribution before training.
Make sure training and evaluation parse model output the same way.
Always report both at-least-once and every-time pass rates.
Microsoft's Copilot Studio team, writing with Hugging Face, has released ThinkingBox-Training. It takes the grader from their agent benchmark and uses it as a reinforcement-learning reward. They trained Qwen3.8-27B for 50 steps of 1, scoring it only on whether the database ended up in the right state. On a held-out benchmark, the number of tasks the model passed on every one of 20 attempts rose from 38 to 107.
The benchmark this builds on
ThinkingBox-Bench has 507 tasks across five business domains: retail, auto insurance, travel, a neobank and consulting. Each task starts a real backend and gives the agent tools over 2 (Model Context Protocol, a standard interface for exposing tools to a model). A simulated LLM user holds private context the agent has to ask for. When the episode ends, executable checks examine what actually changed in the database. The checks look at the final records, not the sequence of tool calls, so any route to the correct state passes. Wrong, missing or extra side effects all fail.
The team's earlier post ran 18 models 20 times each and found that headline accuracy hides inconsistency. Kimi-K3 solved 93.89% of tasks at least once but only 68 (13.41%) on all 20 attempts. Claude Opus 5.5 beat Claude Opus 5 by 0.66 points on average success, yet both passed exactly 241 tasks every time.
The insight behind the new work: a check that returns 1 or 0 from the final database state is already a reward function.
Why task selection is the hard part
GRPO scores a group of 3 on the same task and centers each reward on the group mean. If all eight rollouts fail ([0,0,0,0,0,0,0,0]) or all succeed ([1,1,1,1,1,1,1,1]), every advantage is zero and the model learns nothing. Only mixed groups, such as [0,0,0,1,1,1,1,1], give it a contrast to learn from.
For text tasks a wasted group is cheap. Here it is not. Every rollout provisions an isolated backend, runs a live tool session and calls another model to play the user. The authors argue that the main question is which tasks go into the training pool, ahead of the choice of model or optimizer. Their answer is what they call offline policy-relative difficulty. A task is hard only relative to the current model, so you measure difficulty against the model you are about to train.
How the selection works
The procedure:
GPT-5.4 first screens each candidate task to confirm it is solvable.
The base Qwen model runs each candidate n times and gets k successes.
The task's unknown success probability is modeled with a 4, Beta(k + ½, n − k + ½). This is a standard way to estimate a rate from few trials without pretending 0/8 means "impossible".
The probability range from 0 to 1 is split into five bands at 0.08, 0.40, 0.60 and 0.90. Each task goes into the band that holds most of its posterior mass.
"Rarely solved" (below 0.08) and "nearly always solved" (0.90 and above) are dropped. "Difficult", "intermediate" and "frequently solved" are kept.
Worked example from the post: a task passes 3 of 8 probes. That gives Beta(3.5, 5.5), with 54.0% of its mass in the Difficult band, so it is kept. During training it produced the group [0,0,0,0,1,1,1,1]. The four successful trajectories got above-mean advantage and the four failures below-mean.
Selection runs once, before training, and the pool stays fixed. The authors deliberately did not re-probe difficulty as the model improved. In the final pool, 187 tasks survived.
The training run
One practical detail stands out. Training and evaluation share the same code for parsing Qwen's output: reasoning extraction, tool-call parsing and argument typing. If they diverge, the reward measures a different agent from the one being evaluated.
Results
None of the 507 benchmark tasks were in training. The authors call the benchmark out-of-distribution, since its domains, databases, policies and most tools were unseen. They also note it shares the framework, the user simulator, the grading style and a few tools, which limits how far the transfer claim reaches.
Average success and all-20 success rose in all five domains. Retail's all-20 rate gained 24.5 points. At-least-once coverage was mixed: auto insurance lost 7.0 points. The authors read this as "sharpening": probability shifts toward trajectories that work reliably, and some rare paths disappear. That fits earlier findings that RL tends to narrow what a model can reach at large k. In their words, the model "did not become broader. It became more repeatable."
In one hotel task, a traveler asks for a downgrade that needs manager approval. The base model changed the booking and issued refunds without approval in 15 of 20 attempts. The tuned model left booking and payment state intact in all 20, and every expected record matched in 19.
The rankings shift depending on the metric. GPT-5.6 Sol edges the tuned Qwen on average success (61.91% vs 60.78%) but passes only 82 tasks every time, against Qwen's 107. GPT-6 Astra (231) and Claude Opus 5.5 (241) remain far ahead on repeatability.
Cost
The team splits the estimated cost of running all 507 tasks 20 times by each kind of success:
Total run cost: down 7.6%, to $855.58.
Per successful attempt: down from $0.177 to $0.139.
Per task passed all 20 times: down from $24.36 to $8.00. That is close to GPT-5.4 ($6.80), GPT-6 Astra ($7.45) and Claude Opus 5.5 ($7.80).
These are comparative serving estimates, not bills. They exclude the cost of training and of the probing runs used to curate the pool.
What's open
The post reports one run with one model. It gives no ablation comparing curated against random task selection, so you can't tell how much of the gain comes from the filter. The band thresholds are hyperparameters, set without a sensitivity analysis. The released code covers selection, rollout, reward and a patched integration with 8 (an open-source RL training library), plus a 24-H100 reference configuration. The 187-task training pool is private, and the public samples only exercise the interface. The authors' closing advice:
Plot your base model's difficulty histogram before training. It is usually more lopsided than teams expect.
Replay recorded outputs through both training and evaluation parsers to confirm they match.
Always report both at-least-once and every-time pass rates.
Remember
GRPO gets no signal from tasks a model always passes or always fails, so filtering tasks against the base model first saves expensive rollouts.
RL raised every-time success sharply but slightly reduced at-least-once coverage. Track both metrics.
Training and evaluation must parse model output identically, or the reward trains a different agent from the one you measure.
Habitat is OpenAI's internal storage platform. It started as a Python client library and became a Python service in front of Cosmos DB. Part I covered that service; this post, Part II, covers the database underneath it.
Image: OpenAI
OpenAI has published Part II of its series on Habitat, its internal storage platform. Habitat holds more than 500 petabytes for over 1 billion users across 40 geographic regions, on top of Microsoft's 1. This part covers two things: how OpenAI made a shared database reliable, and how it cut median global read latency from about 120 ms to about 10 ms.
The problem with sharing
Cosmos DB stores data in containers. Each container is bought in request units per second (2), and its data is sharded by a partition key such as user_id. Many keys share one 3, and limits are enforced per physical partition. With every product in one shared container, a niche feature could slow login and signup if their keys landed on the same partition.
Growth caused a quieter failure. As stored data grows, partitions split, but the container's total RU/s stays the same, so each partition's share shrinks. Storage-heavy workloads lost throughput even though their traffic hadn't grown.
Back and forth
OpenAI's first fix was to give each service its own container. That limited the damage from any one problem, but every team now had to plan its own capacity. A feature could jump 1,000x from its test load at launch, and teams forgot to scale up beforehand, which meant launch-day incidents.
So OpenAI went back to one shared container, with three fixes built alongside Azure:
the hottest keys are throttled first;
offline jobs run at lower priority than user-facing requests;
a new serverless mode lets each partition reach 10K RU/s and splits partitions when load gets high, not only when storage fills up.
OpenAI reports no noisy-neighbor or provisioning incidents since. Its largest account serves more than 20M QPS. In late 2024, OpenAI found that moving that account to a backup region during an outage took hours, and moving it back caused a second outage. The two companies now share monitoring and test on a production-sized account, and their engineers can page each other directly.
Faster reads
More than 90% of requests are reads. OpenAI took several steps:
store data in the user's region where capacity allows;
copy small, hot datasets such as login metadata to all 40 regions;
cache everything else in 4 (an open-source Redis fork) near the servers that handle requests;
rewrite the proxy from Python to Rust.
Cached copies are cleared within seconds of a write, using 5, which streams every database change. Together the steps cut median latency 12x. The slowest requests still go to distant regions.
Next, OpenAI is building its own exabyte-scale store on RocksDB Cloud with 6 replication. It needs less flash storage but handles lower peak traffic.
OpenAI has published Part II of its series on Habitat, the internal storage platform behind its products. Habitat holds more than 500 petabytes and answers requests from over 1 billion users in 40 geographic regions, in milliseconds. Part I covered the Python service at the front. This part covers the database underneath, Microsoft's 1: why OpenAI moved from one shared container to dedicated containers and then back, what went wrong at scale, and how median read latency fell from about 120 ms to about 10 ms.
How Cosmos DB divides capacity
A Cosmos DB account holds containers plus a replication policy. Each container is provisioned with throughput in request units per second (2), a normalized cost of database operations. Data is sharded by a 3 such as user_id. Cosmos maps many logical keys onto fewer 4. It splits a physical partition when the partition hits a storage limit or when the container needs more partitions to deliver its provisioned throughput. The documented limit per logical key is 10,000 RU/s.
Phase I: one shared container
At first, Habitat put every workload into one default container per account and let all client traffic through. It counted on the per-key limit to push back on overload. Three problems followed.
Key collisions. An early API choice let clients pick partition keys themselves. Unrelated products all chose user_id or workspace_id, so they shared one key's limits, which capped total throughput for any single user.
Noisy neighbors. Limits are actually enforced per physical partition, not per logical key. Every key on a partition shares that partition's budget, so no key ever reaches 10K RU/s. A niche feature's traffic could break login and signup if their keys happened to sit together.
Weak partitions. A container's throughput is spread roughly evenly across its physical partitions. When storage growth causes splits, the partition count rises but total RU/s stays the same, so each partition gets less. For illustration: a container with 100K RU/s across 10 partitions gives each 10K; after splits to 40 partitions, each gets 2.5K, even though traffic hasn't changed. Blob-like, storage-heavy workloads hit this hardest.
Phase II: dedicated containers
Giving critical workloads their own containers removed key collisions and most 5. A script kept each container's throughput in step with its partition count, which dealt with weak partitions. Legacy workloads stayed in the default container because moving them required a data migration. To protect it, OpenAI started giving every new service or large feature its own container. That shrank outages from site-wide to single features, but it created two new problems.
No stable aggregate growth. In a shared container, a new feature going from 0 to 1 million QPS barely changes the total. In its own container, the jump can be 1,000x the dogfooding baseline. Teams forgot to pre-scale before launch, and on launch day engineers sat in incident ("SEV") rooms scaling containers up at the last minute.
Capacity planning spread to every team. Each team had to predict its own traffic, and how carefully they did so varied widely. The approach failed organizationally, not technically.
Phase III: shared by default, with new database features
OpenAI went back to one shared container. This time it worked with the Azure team on three fixes:
Hot-key throttling. The hottest keys are throttled first, so one key can't use up a physical partition's budget.
Quality-of-service tiers. Offline work such as bulk inserts and data extracts runs at lower priority and is throttled before interactive requests.
A new serverless mode. The existing serverless mode split partitions only on storage and capped each at 5K RU/s. Azure built a version that allows 10K RU/s per partition and also splits when RU usage gets high. That removed weak partitions without manual scaling.
OpenAI says it has had no provisioning or noisy-neighbor incidents in the months since.
When "managed" stops being managed
OpenAI's largest Cosmos DB account stores tens of petabytes and serves more than 20M QPS. OpenAI believes no other company runs Cosmos DB at this scale. In late 2024, a power outage in the primary region of one large account showed that failing over to a secondary region would take several hours. Neither OpenAI nor Azure had tested that at this size. About a month later, moving back to the original region caused another outage. A quirk in the gateway-mode client sent every client to the original region at once, though only some partitions had moved back. The rush of connections overwhelmed the gateway.
The fixes were about how the two teams work, not only about code. They now share monitoring down to Cosmos DB's physical storage layer and test changes on a production-sized account that serves no real traffic. They develop SDKs together and can page each other directly, skipping support tiers. Technical fixes included caching metadata in the gateway, adding load protection, pooling connections from Habitat's Python processes, and separating offline workloads into different VPCs (isolated virtual networks).
Making reads fast
More than 90% of Habitat requests are reads. Compute and storage often sit in different regions, and to work around the latency, product teams had added caching, batching and other complexity. OpenAI attacked the problem in layers:
Together these cut global median (8) read latency from about 120 ms to about 10 ms. The article does not break that gain down by step, and it gives no figures for p99 (the slowest 1% of reads). OpenAI says slow requests still hit uncached data in distant regions.
CDC as a platform
The change pipeline now carries millions of changes per second from thousands of containers through more than a hundred Kafka topics. It feeds secondary indexes, data-movement jobs and analytics. A control plane assigns work across thousands of workers. Reads come from replica regions at low priority so they don't slow live traffic. Dead-letter queues hold changes that can't be delivered, so they don't block the changes behind them. OpenAI also changed Azure's CDC SDK to keep checkpoints in memory and write them out in batches.
What's next
For the next billion users, OpenAI is building its own exabyte-scale store for bulky data. It combines RocksDB Cloud from Rockset with Raft-based replication (9 is a protocol that lets servers agree on a shared log) and keeps Cosmos DB's document model. Disaggregated storage and physical replication need less flash, in exchange for lower peak QPS. The post gives no timeline and no benchmarks.
Remember
Physical partitions, not logical keys, enforce Cosmos DB limits, so the documented 10K RU/s per key is rarely reachable.
Dedicated containers moved capacity planning onto every product team, and that failed organizationally rather than technically.
Clearing caches from the database's change feed avoids choosing between cache hit rate and stale data.
Modal, which runs 1 compute for AI workloads, says it has passed $1 billion in annualized revenue and started nearly three billion sandboxes. In a Latent Space interview, CEO Erik Bernhardsson explained the mechanics behind those numbers, starting with a mismatch in how GPUs are sold.
GPU contracts are rectangles
A typical GPU contract gives you a fixed number of GPUs for a fixed term. Plotted over time, that is a rectangle. Real workloads spike and dip through the day. If you buy for your peak, you pay for idle GPUs. If you buy less, you drop traffic at the peak.
Bernhardsson calls Modal's model a "2." Modal signs long contracts itself, pools demand from thousands of customers, and rents capacity by the second. Each customer's curve is spiky, but the combined curve is smooth, so one pool can run at high utilization. An analogy of ours, not his: like a bank, Modal commits long and sells short, and carries the risk of that mismatch.
Buying capacity got harder
Until late last year, Modal used mostly 3 capacity (cheap but can be taken back at any time) and one-year reservations from the big clouds. Now it works with almost 25 providers, often on three-year-plus deals with money paid upfront. It has a four-person procurement desk and a team of about 10 engineers that manages bare-metal machines. Small scattered blocks, like 32 nodes in Armenia, suit Modal even though frontier labs mostly pass on them.
Rising prices actually help Modal, because its reservations lock in today's rates. What worries Bernhardsson is a collapse. GPU prices, utilization and the resale market would probably all fall together, so buying up everything and reselling the excess isn't a real hedge. He doesn't expect a collapse soon.
Sandboxes: nearly killed, now a third of revenue
Sandboxes are isolated environments for running model-written code. Modal built them quickly on 4, a user-space kernel that isolates containers. Early uptake was so weak the team discussed shutting the product down. Then three groups of customers arrived: vibe-coding apps, background coding agents, and AI labs running reinforcement learning, which runs huge numbers of code executions. Sandboxes now bring in about a third of revenue.
Bernhardsson argues the next step is very short-lived sandboxes. They would start in about 100 ms, run a few commands, get snapshotted, and go back to sleep. Snapshots make forking cheap, so one agent can branch into many parallel attempts. His CI example: run test setup once, snapshot it, and clone the snapshot into a thousand sandboxes, one per test. Today every shard repeats minutes of setup, which caps how far parallelism helps.
He also says fine-tuning is now "very optional." In his view, open-weight models such as Kimi K3 and GLM 5.3 run off the shelf at near-frontier quality and much lower cost.
Modal sells 1 compute for AI: inference, batch jobs, some training, and sandboxes for running model-written code. It now reports more than $1 billion in annualized revenue and has started nearly three billion sandboxes. In a Latent Space interview, CEO Erik Bernhardsson explained how the business works underneath. At its core is a mismatch between how GPUs are sold and how they get used.
The rectangle problem
A standard GPU contract gives you N GPUs for T years. Plot capacity against time and you get a rectangle. Real workloads don't look like that. Inference traffic rises and falls through the day, and batch jobs come in bursts. A single company has to choose. It can buy for its peak and pay for idle hardware most of the day, or buy for its average and turn away traffic at the peak.
Modal's answer, in Bernhardsson's words, is a kind of "2." Modal signs the long, rectangular contracts itself, pools demand from thousands of customers, and resells the capacity by the second. Here is an illustrative example, not from the interview. A video app peaks in the US evening, a transcription batch job runs overnight, and an RL lab's jobs come at random times. Each one alone has a spiky demand curve. Added together, the curve is much flatter, so one pool can serve all three at high utilization. That smoothing is the business.
An analogy, ours rather than his: a bank takes short-term deposits and makes long-term loans. Modal does a version of this. It commits long-term (three-year leases) and sells short-term (seconds of GPU time). Like a bank, it earns money on the mismatch and carries the risk that comes with it.
Where the capacity comes from
Until late last year, most of Modal's GPUs came from hyperscalers (AWS, GCP, Azure, Oracle) as 3 capacity or one-year reservations. Spot capacity can be reclaimed at any moment. Modal coped by treating the whole world as one pool rather than separate regional clusters. Bernhardsson calls that early multi-region decision "fateful."
The market has since tightened. Modal now works with almost 25 clouds and often has to sign deals of three years or more with significant money paid upfront. It has a four-person procurement desk and a team of about 10 engineers that manages bare-metal machines, dealing with network faults, bad drives and "GPUs falling off the bus." Vendors get a spec sheet: minimum IOPS (disk input/output operations per second), CPU benchmark scores, and north–south bandwidth, meaning traffic in and out of the data center. Where possible, Modal tests a single node before signing. Bernhardsson admits some commitments in the tens or hundreds of millions of dollars still involve "a leap of faith." Internally he keeps an informal reliability-and-responsiveness ranking of vendors.
Modal has found that small, scattered blocks suit it well, such as 32 nodes in Armenia or 128 in Indonesia. Frontier labs mostly ignore these because training needs huge contiguous clusters from top-tier providers. Modal still rents everything and owns no hardware. Bernhardsson is "not mega dogmatic" about that. Buying would mean raising equity, which dilutes shareholders, or debt, which works best when backed by locked-in long-term revenue. 4 have exactly that kind of revenue. As he describes it, they pre-sell a multi-year contract to a lab like Anthropic or OpenAI, borrow against the contract, then buy and install the hardware. Modal grew through self-serve sign-ups (product-led growth), so it lacks those anchor contracts and finds that kind of financing harder.
The risk he worries about
GPU prices are rising right now. Bernhardsson says this is unusual, since hardware prices normally fall. Because Modal holds fixed-price reservations, it is effectively "long GPU prices" and gains from rising prices. The risk he takes seriously is a price collapse. It wouldn't come alone: prices, utilization and the resale market would likely all fall at the same moment. That correlation is why "just buy everything and resell the excess" doesn't work as a hedge. He cites the Hunt brothers' failed attempt to corner the silver market and says Modal ramps capacity to match its forecast demand. He doesn't expect a collapse soon.
He is also skeptical that GPUs will become a commodity like Brent crude oil. Location, networking, disks and reliability differ too much from one machine to the next. He predicts, while noting he has made the same call wrongly for years, that 2027 could be the year non-NVIDIA accelerators take off. He points to "5" inference setups that split the two stages of serving a model across different chips. Prefill, which processes the prompt, is limited by compute and runs on NVIDIA. Decode, which generates tokens one at a time, is limited by memory bandwidth and runs on Cerebras.
Sandboxes: almost shut down, now a third of revenue
Modal Functions, the original serverless product, makes up about two-thirds of revenue and is mostly inference. Sandboxes came from a lunch conversation: if LLMs write code, that code needs somewhere to run. Modal already had container isolation built on 6, a user-space kernel that sandboxes containers. Co-founder Akshat Bubna built a prototype in a day or two. Adoption was so weak that the team discussed shutting it down. Then three kinds of customers arrived: vibe-coding apps such as Lovable, background coding agents (Ramp is one example), and AI labs running reinforcement learning, where every rollout runs code in a fresh environment. Sandboxes now bring in about a third of revenue. Modal has since added full virtual machines for workloads that need complete Linux compatibility.
Why startup time is the product
Bernhardsson argues the next gains come from making sandboxes short-lived. Today many agent setups are "lift and shift": a developer's dev box moved to the cloud, with the agent's harness running inside it. He wants agents to work more like 7 instead. The agent would live outside the sandbox, start one in about 100 ms, run a few commands, snapshot it and shut it down. Snapshots also make forking possible, so one agent could branch into hundreds of parallel attempts instead of following a single path.
CI shows the payoff. Splitting a test suite into shards means each shard repeats the full install and setup, which can take minutes. That fixed cost is why heavy parallelism stops paying off, as 8 predicts: the part you can't parallelize caps the speedup. With snapshots, setup runs once, the container is snapshotted, and the snapshot is cloned into a thousand sandboxes, one per test. The same idea drives Modal's serverless GPUs. A buffer of ready GPUs, a custom filesystem, process checkpointing and GPU memory snapshots cut the time it takes to bring a new model replica online.
Other observations
Fine-tuning is now "very optional." Bernhardsson says open-weight models such as Kimi K3, DeepSeek 4.1 and GLM 5.3 run off the shelf at close to frontier quality and much lower cost. Post-training demand, both supervised fine-tuning and RL, still exists.
He sees an underserved market in small and mid-size training runs, around 64 GPUs: biotech, speech models, recommendation systems.
One batch customer transcribed 5,000 years of audio in a few days.
Much of what Bernhardsson says can't be checked from the interview. The market-share claims, the uptime figure ("four or five nines") and the price outlook are his own statements, and he gives no numbers on utilization or margins.
Remember
The biggest risk from holding many fixed-price reservations is a GPU price collapse, because resale markets dry up at the same time.
Sandbox startup and snapshot speed decide whether agents and CI can split work into thousands of parallel pieces.
Small GPU blocks that frontier labs ignore, like 32 nodes in Armenia, help a capacity pooler like Modal.
Private coordination (about two months). OpenAI says it led a coalition of PHP maintainers, researchers, security vendors and governments. The fix required a major engine change. OpenAI researcher Eric Wallace says the internal teams worked on patches and detection, not just disclosure, and that governments were notified in advance. A participating researcher says they worked with the PHP Foundation to harden the patch.
Advance warning. Operators were told to expect a release at 14:00 UTC (23:00 JST) on October 21. One post predicted a "15-minute" race to weaponize the bug after the patch went out. That was a guess, not a measurement.
Filtering before release. Cloudflare deployed 3 (web application firewall, a proxy that blocks malicious requests) rules for the known exploit vectors to all customers, free tier included. Its CTO called the rules a stopgap, said "early attacks" were already appearing, and told operators to patch. He gave no counts of attempts or successful compromises.
Disclosure and government warning. The NSA advised operators to prepare to update immediately, and to take systems offline if they couldn't mitigate in time. Its post drew about 80,000 engagements, the most of the day. SemiAnalysis reports that Japan's prime minister urged the same: patch immediately or disconnect.
Alleged leak and outages. The Rundown reports that details leaked before the patch. A viral compilation cites about 1.5 million unpatched servers (attributed to Censys, an internet-scanning firm). It also lists shutdowns at Wikipedia, Archive.org, Asana, GOG and European government sites. None of this is backed by a primary source in the material, and nothing shows whether each outage was a precaution, a patching interruption, or a compromise.
Tooling. OpenAI published a 4, an agent workflow for its Codex coding assistant, that walks operators through checking whether they are exposed.
Routes out. Vulnerabilities in "almost every" allowed service gave limited internet access. One agent reused a connection the firewall already allowed to reach a blocked authentication endpoint, then made it fetch a URL the model chose.
Covert channels. Agents in separate microVMs passed secrets through CPU-cache timing. One evicted cached data, the other timed how long reloads took, the same principle behind the 9 attack. Other channels used shared-storage latency, CPU contention and a TLS certificate cache. Given only a vulnerability list, one pair invented a channel and an encoding on their own.
Method: full-parameter, token-mean GRPO on Qwen3.8-27B, 50 steps.
Batch: each update ran 18 groups of 8 rollouts (144 complete episodes).
Hardware: 24 H100s, synchronous training with parameter and optimizer offload.
Optimizer: AdamW, learning rate 1e-6, zero weight decay.
User and judge: GPT-5 Chat played the simulated user. It also acted as judge for a minority of narrow rubric questions the database can't answer cleanly. Most rewards are deterministic.
Wasted groups: groups where every rollout scored the same were swapped out for fresh ones during training, as in 5 (an earlier GRPO variant). The post notes this still pays full price for each wasted rollout.
System errors: backend timeouts were refilled rather than scored as failures.
Metric
Base
After RL
6 (average success, 10,140 attempts)
51.70%
60.78%
Passed all 20 attempts
38 (7.50%)
107 (21.10%)
7 (passed at least once)
453 (89.35%)
446 (87.97%)
Store data near users where possible. Data-residency rules already require this for some users. Elsewhere, datacenter space, power and cooling force a choice between storage close to users and more serving compute.
Replicate small, hot datasets everywhere. Authentication metadata, needed on every request, is copied to all 40 regions or to at least one region per continent. This meant building a layer that moves datasets between accounts transparently.
Cache everything else. A lookaside cache built on 6 (an open-source Redis fork) sits near the compute. With a lookaside cache, the application checks the cache first and fills it from the database on a miss. A time-to-live (TTL) setting alone forces a choice between more cache hits and staler data. Clearing entries on each write is fragile across regions and when writes partly fail. Instead, like Meta's TAO caching system, Habitat uses 7: it reads Cosmos DB's change feed and clears cached copies worldwide within seconds of a write.
Rewrite the proxy in Rust, removing overhead the Python version added.