The Watt Wall

Microsoft's own CFO told investors the company has been short on data center power "for many quarters" and is not catching up. Its CEO said GPUs it already paid for are sitting in warehouses because there is nowhere to plug them in. The backlog behind that admission tops $80 billion in Azure capacity Microsoft cannot yet deliver. Not a chip shortage. A watt shortage, at the company that can outbid almost anyone on chips. A 2026 Microsoft Research paper published in Joule (Oviedo et al., arXiv:2509.20241) puts a number on the token side: a typical frontier-scale query costs a median 0.31 Wh, but a 15x-longer reasoning trace pushes that to 3.91 Wh, roughly a 13x jump, landing almost exactly on the 2.9 Wh figure a 2023 estimate made famous long before anyone had this data. This post works through what that means for a system that already defaults hard-looking prompts into extended thinking, and why the same cascade that caps a dollar bill also caps the one resource nobody, including Microsoft, can just buy more of on short notice.

Published 2026-09-14 by Dor Amir on the Nadir blog.

Filed under Pricing & Models.

Abstract.

On Microsoft's own fiscal 2026 earnings calls, CFO Amy Hood told investors the company has been short on data center capacity "for many quarters," adding, "I thought we were going to catch up. We are not." CEO Satya Nadella put the mechanism plainly: "You may actually have a bunch of chips sitting in inventory that I can't plug in. In fact, that is my problem today." Source: Data Center Dynamics, "Microsoft has AI GPUs 'sitting in inventory' because it lacks the power necessary to install them." The backlog behind that admission runs to roughly $80 billion in contracted Azure capacity Microsoft cannot yet deliver, disclosed alongside commercial remaining performance obligations that reached $627 billion. Source: Microsoft, FY2026 quarterly earnings calls. Not a chip shortage. A watt shortage, at the company that can outbid almost anyone on Earth for chips.

That changes what "cost optimization" means going forward. For three years, the entire genre, this blog included, has framed routing, compression, and caching as ways to shrink a dollar figure. Dollars were always a proxy for something physical: compute time, silicon, electricity. When GPU supply was the binding constraint, the proxy and the underlying resource moved together closely enough that nobody had to separate them. Now the binding constraint at the biggest buyer of AI compute on the planet is electrons, not chips, and a 2026 Microsoft Research paper puts a real number on what a token costs in the unit that's actually running out.

What a token costs in watt-hours, measured, not guessed.

Felipe Oviedo, Fiodar Kazhamiaka, Esha Choukse, and co-authors published "Energy Use of AI Inference, Efficiency Pathways, and Test-Time Scaling" in Joule in 2026, with the underlying methodology and simulation code released on GitHub. Source: Oviedo et al., *Joule* 2026 (arXiv:2509.20241). For frontier-scale models, over 200 billion parameters, running on H100 nodes, they measure a median of 0.31 Wh per query, interquartile range 0.16 to 0.60 Wh. Their own framing of that number is direct: "widely cited estimates are overstated by 4-20x."

Then they change one variable. Push the same model family into a test-time-scaling scenario, a reasoning trace roughly 15x longer than a typical query, and the median energy rises 13x, to 3.91 Wh, interquartile range 2.15 to 7.05 Wh.

Bar chart: median energy per query for frontier-scale (>200B parameter) models on H100 nodes. A typical query costs 0.31 Wh (IQR 0.16-0.60). A 15x-longer reasoning trace costs 3.91 Wh (IQR 2.15-7.05), roughly a 13x increase. Source: Oviedo et al., Joule 2026, arXiv:2509.20241.
Bar chart: median energy per query for frontier-scale (>200B parameter) models on H100 nodes. A typical query costs 0.31 Wh (IQR 0.16-0.60). A 15x-longer reasoning trace costs 3.91 Wh (IQR 2.15-7.05), roughly a 13x increase. Source: Oviedo et al., Joule 2026, arXiv:2509.20241.

Read that pair of numbers as a policy question, not a curiosity. 13x more energy for 15x more length is close to proportional, not some runaway exponential, which means the physics here isn't exotic. What's expensive is ordinary: every additional token a model decodes burns roughly its share of the joules, whether that token was reasoning that changed the final answer or reasoning that restated the question a different way. A system that defaults hard-looking prompts into extended thinking mode is applying that near-linear multiplier to every request that trips the default, not just the ones where the extra length earned its keep.

The number everyone already believes turns out to be measuring the wrong query.

Before Oviedo's team published, the most-cited public estimate of what a single AI query costs in energy came from a 2023 paper: Alex de Vries, in Joule, estimated roughly 2.9 Wh, extrapolated in comparison to a Google search, and it became the basis of the "one ChatGPT query equals ten searches" framing that spread through mainstream coverage of AI's environmental footprint. Source: de Vries, "The growing energy footprint of artificial intelligence," *Joule* 7 (2023): 2191-2194.

Line that estimate up against Oviedo's 2026 measurements and something specific happens: 2.9 Wh doesn't land near the 0.31 Wh typical-query median at all. It lands almost exactly on the 3.91 Wh reasoning-mode median, the workload nobody was picturing when the number went viral.

Bar chart comparing the widely-cited 2023 energy estimate (~2.9 Wh per query, de Vries, Joule) against Oviedo et al.'s 2026 measured medians: a typical query at 0.31 Wh and a reasoning-mode query at 3.91 Wh. The 2023 figure sits closest to the reasoning-mode measurement, not the ordinary query it was popularly cited for.
Bar chart comparing the widely-cited 2023 energy estimate (~2.9 Wh per query, de Vries, Joule) against Oviedo et al.'s 2026 measured medians: a typical query at 0.31 Wh and a reasoning-mode query at 3.91 Wh. The 2023 figure sits closest to the reasoning-mode measurement, not the ordinary query it was popularly cited for.

The old number wasn't fraudulent. It was measuring a call that, in 2023, wasn't the default and mostly is now. Extended reasoning, agentic tool loops, and multi-step verification, all covered on this blog as dollar-cost stories, have quietly moved a growing share of production traffic from the 0.31 Wh bucket into something closer to the 3.91 Wh one. Whether your fleet's real energy footprint looks like the reassuring small number or the scary big one was never fixed by the model you picked. It's set, request by request, by how long you let that model run.

Compression doesn't dodge this either.

The instinct once a resource gets scarce is to shrink the input and assume the output follows. It usually doesn't. A 2026 study of prompt compression across three providers and 28,421 API trials found that truncating a prompt to keep task-critical instructions intact is harder than it looks: at a 0.7 compression ratio, task success collapsed from a 26.0% baseline pass rate to 1.5%, and on the worst-behaved provider, output length ballooned in response. Source: "The Compression Paradox in LLM Inference: Provider-Dependent Energy Effects of Prompt Compression" (arXiv:2603.23528). This blog has already priced that same mechanism in dollars: a model that loses task-critical instructions to truncation doesn't fail quietly, it writes more, trying to recover context it no longer has. Output tokens are the expensive half of the ledger in dollars, at 5 to 8x the input rate on most cards, and they are the expensive half in watts for the identical reason: decoding a token costs meaningfully more than reading one, so a compression pass that inflates the output side loses on both units it was supposed to save.

The paper's own conclusion matches: "model selection and output-length control offer more reliable energy-quality tradeoffs than prompt compression techniques." Shrinking what you send is not the lever. Bounding what comes back, and choosing which model gets asked to produce it, is.

Routing was already solving this. It just didn't know it.

A separate 2026 paper makes the connection explicit. "Beyond Test-Time Compute Strategies: Advocating Energy-per-Token in LLM Inference" (arXiv:2603.20224) proposes exactly what its title says: track energy-per-token as a first-class metric next to accuracy, and route reasoning depth dynamically against an "operating curve" instead of a fixed thinking-budget setting applied to every request in a class. Source: arXiv:2603.20224.

That is architecturally the same shape as a verifier-gated cascade, which this blog has argued for on dollar grounds already: try the cheap, short path first; escalate to more tokens, or a bigger model, only when a calibrated check says the cheap attempt actually fell short. The reason it generalizes to energy without any new mechanism is that dollars and watt-hours are both, underneath, counting the same thing: how much computation ran to answer one specific prompt. A router that picks the smallest model and shortest reasoning depth that clears your accuracy bar is, by construction, picking close to the fewest joules too, because it never had two separate meters to satisfy. It had one decision, made per request, and both bills are downstream of it.

Self-hosting your own routing or reasoning layer doesn't sidestep this arithmetic either: the classifier and verifier models a DIY stack runs to make that decision are themselves drawing power on hardware you provisioned for the worst hour, all day, every day it's on. The energy question doesn't disappear when you build in-house. It just moves to a rack you're paying to keep spinning.

What to check this week.

None of this requires new infrastructure to start measuring. The same OpenAI-compatible call already routes the decision; what changes is what you do with the model and token fields you're already logging.

import openai

client = openai.OpenAI(
    base_url="https://api.getnadir.com/v1",
    api_key="ndr_...",
)

response = client.chat.completions.create(
    model="auto",  # cheapest model, shortest reasoning depth, that clears the bar
    messages=[{"role": "user", "content": prompt}],
)

# Nadir doesn't meter your electricity bill. It does report which model
# answered and how many input/output tokens it took on every request, in
# the response body's nadir_metadata object. Multiply that against the
# published Wh-per-token figures above and you have a directional energy
# estimate for the same traffic your dollar dashboard already shows you.
usage = response.usage
model_used = response.model

The dollar number and the watt number were never two different problems. They're two units reading the same meter: how much computation this one request actually needed. A team that has already built the habit of asking that question for cost reasons has, without extra work, built the habit that also matters for the reason Microsoft's own earnings calls are now open about, that the electricity to run the alternative isn't guaranteed to be there.

Related reading


Sources: [Data Center Dynamics, "Microsoft has AI GPUs 'sitting in inventory' because it lacks the power necessary to install them."](https://www.datacenterdynamics.com/en/news/microsoft-has-ai-gpus-sitting-in-inventory-because-it-lacks-the-power-necessary-to-install-them/) [Microsoft, FY2026 quarterly earnings calls.](https://www.microsoft.com/en-us/investor/events/fy-2026) [Oviedo, Kazhamiaka, Choukse, et al., "Energy Use of AI Inference, Efficiency Pathways, and Test-Time Scaling," Joule (2026), arXiv:2509.20241.](https://arxiv.org/abs/2509.20241) [de Vries, "The growing energy footprint of artificial intelligence," Joule 7 (2023): 2191-2194.](https://www.cell.com/joule/fulltext/S2542-4351%2823%2900365-3) ["The Compression Paradox in LLM Inference: Provider-Dependent Energy Effects of Prompt Compression," arXiv:2603.23528.](https://arxiv.org/pdf/2603.23528) ["Beyond Test-Time Compute Strategies: Advocating Energy-per-Token in LLM Inference," arXiv:2603.20224.](https://arxiv.org/pdf/2603.20224)

More on pricing & models

What Nadir is

Nadir is an LLM router. Nadir sends each prompt to the cheapest model that can handle it. A small decision model reads each prompt against your model menu and picks the lowest-cost model it expects to handle it. When the decision model is uncertain or unavailable, the request goes to the strongest model on the menu. The routing step makes no call to your model provider.

Nadir runs two ways. The decision API returns a model, reasoning-effort, cache, context, and policy recommendation without calling a model provider, beside the gateway you already run. That is how a shadow-mode evaluation works, and its projected savings stay advisory. The OpenAI compatible managed proxy executes the route, and migration is a two-line change: point the base URL at api.getnadir.com and set model to auto. On that path an optional verifier can score a complete non-streaming answer and escalate to a stronger model when it misses the configured bar. Streaming bypasses post-generation verification. BYOK is supported on every tier.

For coding agents, Nadir Auto is a terminal launcher for Claude Code or Codex that asks Nadir for the main-session model before each turn, with your configured model as the fallback and cost ceiling. Delegation integrations for Claude Code, Codex, or Cursor instead recommend a model tier for subagent work, and the agent decides; the Claude plugin can also move a main-thread turn to Haiku when Nadir's cache check prices it cheaper, unless its switch_main_model option is off. Either way inference runs on your own provider account, so Nadir holds no provider keys on that path.

What the numbers are, and what they are not

Nadir publishes each evaluation with its scope. On checkable code, run-check-escalate solved 392 of 395 common HumanEval and MBPP problems (99.2%), graded by running the canonical tests; that applies only to tasks with runnable deterministic tests. Nadir-Tumbler posts an arena_score of 72.3 on RouterArena's public scorer, 5th of 23 routers, which measures the routing decision on RouterArena's own model pool. A reference-assisted RouterBench evaluation over 11,420 held-out triples produced a 60% lower projected cost than always-Opus with about 98% retained quality and a 1.7% catastrophic-route rate. That experiment gave the verifier the expensive-model reference answer, which production does not have, so it is a research ceiling and not the deployed path.

None of these is a production guarantee, a universal savings rate, or a forecast for any particular workload. Customer savings are reported from measured execution against a declared baseline, and customer quality only from outcome-labelled traffic. Projected savings and realized savings are separate artifacts and are never blended.

Design-partner program

Three rungs, picked by risk appetite. Rung 0 Shadow runs advisory decision calls alongside live traffic and returns a projected receipt, with nothing in the request path changed. Rung 1 Hosted is the two-line swap on a production slice and returns a realized receipt. Rung 2 On-prem is a supervised six-week proof of concept inside the partner's VPC, where no prompt, response, or usage reaches Nadir. The commitments are the same at every rung. Apply for a rung directly: Rung 0 Shadow, Rung 1 Hosted, or Rung 2 On-prem. Not sure which fits? Start at getnadir.com/contact/?reason=design-partner.

Licensing

NadirClaw is the self-hosted core, source-available under the PolyForm Noncommercial License. Source-available is the correct label; NadirClaw is not open source. Nadir Route's hosted plan has no base fee and charges a variable fee only on measured savings from requests Nadir executed.

Pages on this site

Machine-readable summaries of this site: llms.txt and llms-full.txt.