Query
Saved analyses are materialised by the nightly export from the semantic layer; each shows its latest value, the observations behind it and the formula. The console runs read-only SQL against the same store; the Ask button in the header puts a model in front of it, with every number checked against the record it cites.
Saved analyses
- METR horizon doubling times, both windows and both reliability levels
How fast is the time horizon doubling, and does the answer depend on the window?
108 daysas of 2026-03-05(25 obs)OLS on ln(horizon); rows beyond the 16h suite ceiling excluded; CI from the slope standard error.
Formula
python: fits.loglinear(since=2024-01-01)
- Constant-hazard misfit
Do the 50% and 80% horizons sit where a constant task-length hazard predicts?
2.04×as of 2026-03-05(2 obs)Two points per model on METR's suite; the constant-hazard model is a null, not a claim.
Formula
SELECT a.as_of_date, a.subject AS model, (a.value_numeric / b.value_numeric) / 3.1063 AS value, [a.id, b.id] AS obs_ids FROM observations a JOIN observations b ON a.subject = b.subject AND a.as_of_date = b.as_of_date WHERE a.series_key LIKE 'metr.%.horizon_50.pt' AND b.series_key LIKE 'metr.%.horizon_80.pt' AND NOT coalesce(a.disputed, false)
- Concentration by layer
Is any layer fragmenting while its neighbours stay concentrated?
0.35 indexas of 2026-06-30(6 obs)compute_cloudOnly covered filers; Broadcom, TSMC, Oracle and the neoclouds are absent, so levels overstate concentration. Fiscal quarters mapped to the calendar quarter holding most of their months (NVIDIA's May-to-July quarter counts as Q2); a fiscal Q4 filed only in the 10-K is the full year minus the three reported quarters. Ramp lab shares allow multi-homing and are normalised to sum to one.
Formula
WITH rev AS ( SELECT date_trunc('quarter', as_of_date - INTERVAL 45 DAY) AS cq, subject, v, ids, CASE WHEN subject IN ('nvda', 'amd') THEN 'compute_semis' ELSE 'compute_cloud' END AS layer_id, CASE WHEN subject IN ('nvda', 'amd') THEN 2 ELSE 3 END AS need FROM sec_segment_quarters WHERE series_key IN ('sec_seg.nvda.data_center.revenue.q', 'sec_seg.amd.data_center.revenue.q', 'sec_seg.amzn.aws.revenue.q', 'sec_seg.googl.cloud.revenue.q', 'sec_seg.msft.intelligent_cloud.revenue.q')), complete AS (SELECT cq, layer_id FROM rev GROUP BY cq, layer_id, need HAVING count(DISTINCT subject) = need), sh AS (SELECT (r.cq + INTERVAL 3 MONTH - INTERVAL 1 DAY)::DATE AS as_of_date, r.layer_id, r.v / sum(r.v) OVER (PARTITION BY r.cq, r.layer_id) AS s, r.ids FROM rev r JOIN complete c USING (cq, layer_id)), lab AS (SELECT as_of_date, 'model' AS layer_id, value_numeric / sum(value_numeric) OVER (PARTITION BY as_of_date) AS s, [id] AS ids FROM observations WHERE series_key LIKE 'ramp.%.business_paid_share.m') SELECT as_of_date, layer_id, sum(s * s) AS value, list_sort(list_distinct(flatten(list(ids)))) AS obs_ids FROM (SELECT * FROM sh UNION ALL SELECT * FROM lab) GROUP BY 1, 2 - Lab recoupment ratios
How much run-rate has each lab earned per dollar of capital raised?
0.27×as of 2026-09-30(12 obs)Tier-5 inputs; excludes debt, compute credits and cloud commitments; run-rates are press-reported annualised months.
Formula
WITH rr AS (SELECT subject, as_of_date, value_numeric AS rev, id FROM observations WHERE series_key LIKE 'epoch.%.revenue_run_rate_usd.pt'), eq AS (SELECT subject, as_of_date, value_numeric AS eq, id FROM observations WHERE series_key LIKE 'epoch.%.round_equity_usd.pt') SELECT rr.as_of_date, rr.subject AS entity, rr.rev / sum(eq.eq) AS value, list_concat([rr.id], list(eq.id ORDER BY eq.id)) AS obs_ids FROM rr JOIN eq ON eq.subject = rr.subject AND eq.as_of_date <= rr.as_of_date GROUP BY rr.as_of_date, rr.subject, rr.rev, rr.id - Labour-tracker concordance
Do the four monthly labour trackers agree?
0as of 2026-09-30(7 obs)Different geographies (CA claims vs US employment) and different exposure measures; a count, not a test. Each tracker's latest reading counts, whatever its month.
Formula
WITH obs AS ( SELECT series_key, value_numeric AS v, as_of_date, [id] AS ids FROM observations WHERE series_key IN ('canaries.us_exposure_q5.employment_yoy.m', 'revelio.us_exposed.growth_gap.m', 'yale_budget_lab_data.us_workers.occupation_dissimilarity_pp.m')), cait AS (SELECT as_of_date, value_numeric AS v, id FROM observations WHERE series_key = 'cait.ca_top_quartile_potential.claims.m'), cma AS (SELECT as_of_date, avg(v) OVER w AS ma, count(*) OVER w AS n, list(id) OVER w AS ids FROM cait WINDOW w AS (ORDER BY as_of_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)), cchg AS (SELECT 'cait_3mma_mom' AS series_key, ma / lag(ma) OVER o - 1 AS v, as_of_date, list_distinct(list_concat(ids, lag(ids) OVER o)) AS ids, n, lag(n) OVER o AS n0 FROM cma WINDOW o AS (ORDER BY as_of_date)), allx AS (SELECT series_key, v, as_of_date, ids FROM obs UNION ALL SELECT series_key, v, as_of_date, ids FROM cchg WHERE n = 3 AND n0 = 3), latest AS (SELECT *, row_number() OVER (PARTITION BY series_key ORDER BY as_of_date DESC) AS rn FROM allx), -- a break is that tracker's own fast band, read from the seed rather than restated here tracker AS (SELECT * FROM (VALUES ('canaries.us_exposure_q5.employment_yoy.m', 'canaries_exposed_employment_yoy'), ('revelio.us_exposed.growth_gap.m', 'revelio_exposed_vs_unexposed_growth'), ('cait_3mma_mom', 'cait_high_exposure_claims'), ('yale_budget_lab_data.us_workers.occupation_dissimilarity_pp.m', 'yale_occupational_mix_dissimilarity')) AS t(series_key, indicator_id)) SELECT max(l.as_of_date) AS as_of_date, sum(CASE WHEN (b.fast_lo IS NULL OR l.v >= b.fast_lo) AND (b.fast_hi IS NULL OR l.v <= b.fast_hi) THEN 1 ELSE 0 END)::DOUBLE AS value, list_distinct(flatten(list(l.ids))) AS obs_ids FROM latest l JOIN tracker t USING (series_key) JOIN bands b ON b.indicator_id = t.indicator_id WHERE l.rn = 1 - Capex to AI revenue
How far ahead of AI revenue is hyperscaler capex running?
4.38×as of 2026-09-30(34 obs)Hyperscaler capex is not all AI; the revenue side is run-rates (annualised, press-reported) plus one annual survey and double-counts where enterprises buy from labs; grade C by construction. Most filers report capex only year to date, so fiscal quarters are differenced (six months minus the first quarter, and so on; a fourth quarter is the year minus nine months), and a window counts only when all five filers have four quarters in it.
Formula
WITH cum AS ( -- year-to-date figures share their fiscal year's start date; a filed three-month quarter stands alone SELECT subject, as_of_date, period_start, value_numeric AS v, id FROM observations WHERE source_ns = 'sec' AND measure = 'capex' AND grain IN ('q', 'h1', '9m', 'fy') AND subject IN ('msft', 'googl', 'amzn', 'meta', 'orcl')), diffed AS ( SELECT subject, as_of_date, v - coalesce(lag(v) OVER w, 0) AS v, list_filter([id, lag(id) OVER w], x -> x IS NOT NULL) AS ids, date_diff('day', coalesce(lag(as_of_date) OVER w, period_start), as_of_date) AS days FROM cum WINDOW w AS (PARTITION BY subject, period_start ORDER BY as_of_date)), capex AS ( -- one figure per fiscal quarter; a filed quarter beats a differenced one SELECT date_trunc('quarter', as_of_date) AS cq, subject, v, ids FROM diffed WHERE days BETWEEN 80 AND 100 QUALIFY row_number() OVER (PARTITION BY subject, as_of_date ORDER BY len(ids), ids) = 1), qs AS (SELECT DISTINCT cq FROM capex WHERE cq >= DATE '2024-01-01'), per AS ( SELECT q.cq, c.subject, sum(c.v) AS v, flatten(list(c.ids)) AS ids FROM qs q JOIN capex c ON c.cq > q.cq - INTERVAL 12 MONTH AND c.cq <= q.cq GROUP BY q.cq, c.subject HAVING count(*) = 4), capex4 AS (SELECT cq, sum(v) AS v, list_sort(flatten(list(ids))) AS ids FROM per GROUP BY cq HAVING count(*) = 5), rr AS (SELECT entity_id, as_of_date, value_numeric AS v, id FROM observations WHERE series_key LIKE 'epoch.%.revenue_run_rate_usd.pt' AND entity_id IS NOT NULL), rr_latest AS ( SELECT q.cq, r.entity_id, arg_max(r.v, r.as_of_date) AS v, arg_max(r.id, r.as_of_date) AS id FROM qs q JOIN rr r ON r.as_of_date <= q.cq + INTERVAL 3 MONTH AND r.as_of_date > q.cq - INTERVAL 9 MONTH GROUP BY 1, 2), ent AS (SELECT as_of_date, value_numeric AS v, id FROM observations WHERE series_key = 'menlo.us_enterprise.genai_spend_usd.fy'), ent_latest AS (SELECT q.cq, arg_max(e.v, e.as_of_date) AS v, arg_max(e.id, e.as_of_date) AS id FROM qs q JOIN ent e ON e.as_of_date <= q.cq + INTERVAL 3 MONTH GROUP BY 1) SELECT (c.cq + INTERVAL 3 MONTH - INTERVAL 1 DAY)::DATE AS as_of_date, c.v / ((SELECT sum(v) FROM rr_latest r WHERE r.cq = c.cq) + e.v) AS value, list_distinct(flatten([c.ids, (SELECT list(id) FROM rr_latest r WHERE r.cq = c.cq), [e.id]])) AS obs_ids FROM capex4 c JOIN ent_latest e USING (cq) - Circular financing total
How much circular financing has been signed?
$1.4Tas of 2026-09-18(55 obs)Mixes instruments (equity, guarantees, commitments) with different risk; "up to" and floor values taken at face; cumulative, so it only rises until a row is superseded.
Formula
WITH deals AS ( SELECT as_of_date, value_numeric AS v, id FROM observations WHERE series_key LIKE 'circular.%_usd.pt' AND series_key NOT LIKE '%loi_usd%' AND series_key NOT LIKE '%talks_usd%' AND series_key NOT LIKE '%total_commitments%' AND series_key NOT LIKE '%commercial_rpo%') SELECT last_deal AS as_of_date, sum(v) OVER (ORDER BY q_end) AS value, flatten(list(ids) OVER (ORDER BY q_end)) AS obs_ids FROM (SELECT date_trunc('quarter', as_of_date)::DATE AS q_end, max(as_of_date) AS last_deal, sum(v) AS v, list(id ORDER BY id) AS ids FROM deals GROUP BY 1) - Price per capability
What does a METR-hour of capability cost on OpenRouter?
$0.30as of 2026-09-10(2 obs)List prices on one router, prompt tokens only; the horizon is METR's suite, not general capability; only models present in both datasets count; a price series starts on 10 Sep 2026 and records change points, so the trend needs months; a delisted model's last price carries forward.
Formula
WITH h AS ( SELECT subject, arg_max(value_numeric, as_of_date) AS minutes, arg_max(id, as_of_date) AS hid FROM observations WHERE series_key LIKE 'metr.%.horizon_50.pt' AND NOT coalesce(disputed, false) GROUP BY subject), p AS (SELECT subject, as_of_date, value_numeric AS usd, id FROM observations WHERE series_key LIKE 'openrouter.%.price_prompt_usd_per_mtok.pt' AND value_numeric > 0), d AS (SELECT DISTINCT as_of_date FROM p), cp AS (SELECT d.as_of_date, p.subject, arg_max(p.usd, p.as_of_date) AS usd, arg_max(p.id, p.as_of_date) AS pid FROM d JOIN p ON p.as_of_date <= d.as_of_date GROUP BY 1, 2) , r AS (SELECT cp.as_of_date, min(cp.usd / (h.minutes / 60)) AS value, arg_min([cp.pid, h.hid], cp.usd / (h.minutes / 60)) AS obs_ids FROM cp JOIN h USING (subject) GROUP BY cp.as_of_date) SELECT * FROM r QUALIFY value IS DISTINCT FROM lag(value) OVER (ORDER BY as_of_date) -- change points only - Top direct customer's share of NVIDIA revenue
How dependent is the chip layer's rent on a handful of buyers?
16.0%as of 2026-07-26nvda1 observation
source1Filers name customers only by letter or number and rename them each filing, so this is the top share, not one customer tracked over time; indirect sales through distributors and cloud providers are not attributed.
Formula
SELECT as_of_date, subject AS entity, max(value_numeric) AS value, [arg_max(id, value_numeric)] AS obs_ids FROM observations WHERE series_key LIKE 'sec_seg.%.customer_revenue_share.%.q' GROUP BY as_of_date, subject
- Incremental capex to incremental revenue
How many new dollars of capex does each new dollar of cloud revenue cost?
1.03×as of 2026-06-30(4 obs)msftFiscal years only (quarters are too noisy); whole-company revenue, not AI revenue; skipped when revenue fell. Hyperscalers and CoreWeave.
Formula
WITH j AS ( SELECT c.subject, c.as_of_date, c.value_numeric AS capex, r.value_numeric AS rev, [c.id, r.id] AS ids FROM observations c JOIN observations r ON r.source_ns = 'sec' AND r.subject = c.subject AND r.measure = 'revenue' AND r.grain = 'fy' AND r.as_of_date = c.as_of_date WHERE c.source_ns = 'sec' AND c.measure = 'capex' AND c.grain = 'fy' AND c.subject IN ('msft', 'googl', 'amzn', 'meta', 'orcl', 'crwv')), p AS (SELECT *, lag(capex) OVER w AS capex0, lag(rev) OVER w AS rev0, lag(ids) OVER w AS ids0, lag(as_of_date) OVER w AS d0 FROM j WINDOW w AS (PARTITION BY subject ORDER BY as_of_date)) SELECT as_of_date, subject AS entity, (capex - capex0) / (rev - rev0) AS value, list_concat(ids, ids0) AS obs_ids FROM p WHERE capex0 IS NOT NULL AND rev > rev0 AND date_diff('day', d0, as_of_date) BETWEEN 350 AND 380 - Surprise index
Is AI 2027 running ahead of or behind its own quantitative predictions, by its graders' reckoning?
70.0%as of 2026-07-31(2 obs)Two graders with different item lists; each counts once, at its latest reading.
Formula
WITH l AS (SELECT series_key, value_numeric AS v, as_of_date, id, row_number() OVER (PARTITION BY series_key ORDER BY as_of_date DESC) AS rn FROM observations WHERE series_key IN ('aifutures_blog.ai_2027_quantitative.pace_vs_predicted.pt', 'ai2027_tracker.ai_2027_quantitative.pace_vs_predicted.pt')) SELECT max(as_of_date) AS as_of_date, avg(v) AS value, list(id ORDER BY id) AS obs_ids FROM l WHERE rn = 1 HAVING count(*) > 0 - Venture dollars, trailing four quarters
How much equity has each layer raised over the past year?
$284Bas of 2026-09-30(19 obs)model, allSeed-list entities only, attributed by primary membership; debt excluded.
Formula
WITH m AS (SELECT entity_id, layer_id, sublayer_id FROM entity_membership WHERE is_primary AND sublayer_id IS NOT NULL), r AS (SELECT date_trunc('quarter', v.as_of_date) AS cq, m.layer_id, m.sublayer_id, v.v, v.id FROM venture_rounds v JOIN m USING (entity_id) WHERE v.kind = 'equity' AND v.as_of_date >= DATE '2022-04-01'), qs AS (SELECT DISTINCT cq FROM r WHERE cq >= DATE '2023-01-01'), w AS (SELECT qs.cq, r.layer_id, r.sublayer_id, r.v, r.id FROM qs JOIN r ON r.cq > qs.cq - INTERVAL 12 MONTH AND r.cq <= qs.cq) SELECT (cq + INTERVAL 3 MONTH - INTERVAL 1 DAY)::DATE AS as_of_date, layer_id, coalesce(sublayer_id, 'all') AS sublayer_id, sum(v) AS value, list(id ORDER BY id) AS obs_ids FROM w GROUP BY GROUPING SETS ((cq, layer_id), (cq, layer_id, sublayer_id)) - Venture capital intensity, frontier labs
How many dollars of new capital do the frontier labs raise per dollar of run-rate?
2.21×as of 2026-09-30(9 obs)Run-rates are press-reported annualised months (tier 5); rounds are mostly Epoch (tier 5). Other sub-layers have no revenue series outside the labs, so this is measured for frontier labs only.
Formula
WITH rounds AS (SELECT entity_id, as_of_date, v, id FROM venture_rounds WHERE kind = 'equity'), labs AS (SELECT entity_id FROM entity_membership WHERE is_primary AND sublayer_id = 'frontier_labs'), rr AS (SELECT entity_id, as_of_date, value_numeric AS rev, id FROM observations WHERE series_key LIKE 'epoch.%.revenue_run_rate_usd.pt' AND entity_id IN (SELECT entity_id FROM labs)), qs AS (SELECT DISTINCT date_trunc('quarter', as_of_date) AS cq FROM rounds WHERE as_of_date >= DATE '2023-01-01'), rev AS (SELECT cq, entity_id, rev, id FROM ( SELECT qs.cq, rr.*, row_number() OVER (PARTITION BY qs.cq, rr.entity_id ORDER BY rr.as_of_date DESC) AS rn FROM qs JOIN rr ON rr.as_of_date < qs.cq + INTERVAL 3 MONTH AND rr.as_of_date >= qs.cq + INTERVAL 3 MONTH - INTERVAL 12 MONTH) WHERE rn = 1), raised AS (SELECT qs.cq, r.entity_id, r.v, r.id FROM qs JOIN rounds r ON date_trunc('quarter', r.as_of_date) > qs.cq - INTERVAL 12 MONTH AND date_trunc('quarter', r.as_of_date) <= qs.cq WHERE r.entity_id IN (SELECT entity_id FROM rev WHERE rev.cq = qs.cq)) SELECT (rv.cq + INTERVAL 3 MONTH - INTERVAL 1 DAY)::DATE AS as_of_date, (SELECT sum(v) FROM raised WHERE raised.cq = rv.cq) / sum(rv.rev) AS value, list_concat((SELECT list(id ORDER BY id) FROM raised WHERE raised.cq = rv.cq), list(rv.id ORDER BY rv.id)) AS obs_ids FROM rev rv GROUP BY rv.cq HAVING sum(rv.rev) > 0 AND (SELECT sum(v) FROM raised WHERE raised.cq = rv.cq) > 0 - Frontier Intelligence Index
What is the best Artificial Analysis Intelligence Index, and when was each record set?
60.0 indexas of 2026-10-281 observation
source1The index composition changes between Artificial Analysis versions and every model is re-scored on the current version, so the history is today's scores placed at release dates, not what was measured then. Artificial Analysis sometimes moves a model's release date; v3 keeps only each model's most recently retrieved row.
Formula
WITH one AS (SELECT subject, as_of_date, value_numeric, id FROM observations WHERE series_key LIKE 'aa.%.intelligence_index.pt' AND NOT coalesce(disputed, false) QUALIFY row_number() OVER (PARTITION BY subject ORDER BY retrieved_at DESC, as_of_date DESC, id) = 1), x AS (SELECT as_of_date, max(value_numeric) AS v, arg_max(id, value_numeric) AS id FROM one GROUP BY 1) SELECT as_of_date, v AS value, [id] AS obs_ids FROM x QUALIFY v >= max(v) OVER (ORDER BY as_of_date) - Price per capability, Artificial Analysis
What does a METR-hour cost at Artificial Analysis blended prices, and what does a near-frontier index point cost?
$0.82as of 2026-09-11(2 obs)Models are matched on METR's id with its "_inspect" suffix dropped, so only models named alike in both datasets count; list prices; METR's horizon is software tasks under its suite.
Formula
WITH h AS (SELECT regexp_replace(subject, '_inspect$', '') AS subject, arg_max(value_numeric, as_of_date) AS minutes, arg_max(id, as_of_date) AS hid FROM observations WHERE series_key LIKE 'metr.%.horizon_50.pt' AND NOT coalesce(disputed, false) GROUP BY 1), p AS (SELECT subject, as_of_date, value_numeric AS usd, id FROM observations WHERE series_key LIKE 'aa.%.price_blended_usd_per_mtok.pt' AND value_numeric > 0), d AS (SELECT DISTINCT as_of_date FROM p), cp AS (SELECT d.as_of_date, p.subject, arg_max(p.usd, p.as_of_date) AS usd, arg_max(p.id, p.as_of_date) AS pid FROM d JOIN p ON p.as_of_date <= d.as_of_date GROUP BY 1, 2) , r AS (SELECT cp.as_of_date, min(cp.usd / (h.minutes / 60)) AS value, arg_min([cp.pid, h.hid], cp.usd / (h.minutes / 60)) AS obs_ids FROM cp JOIN h USING (subject) GROUP BY 1) SELECT * FROM r QUALIFY value IS DISTINCT FROM lag(value) OVER (ORDER BY as_of_date) -- change points only - Top-three share of venture dollars
What share of tracked venture dollars do the three largest raisers take?
91.2%as of 2026-09-30(41 obs)Denominator is the seed list, not the market; per sub-layer it is meaningless on current coverage (one to four rounds per cell), so it is computed stack-wide only.
Formula
-- ponytail: the f/e/rounds/m CTEs are copied from frontier_share_of_venture_dollars; a shared view when a third venture metric needs them WITH rounds AS (SELECT entity_id, as_of_date, v, id FROM venture_rounds WHERE kind = 'equity'), m AS (SELECT entity_id FROM entity_membership WHERE is_primary AND sublayer_id IS NOT NULL), q AS (SELECT date_trunc('quarter', r.as_of_date) AS cq, r.entity_id, r.v, r.id FROM rounds r JOIN m USING (entity_id) WHERE r.as_of_date >= DATE '2023-01-01'), qs AS (SELECT DISTINCT cq FROM q), win AS (SELECT qs.cq, q.entity_id, sum(q.v) AS v, list(q.id) AS ids FROM qs JOIN q ON q.cq > qs.cq - INTERVAL 12 MONTH AND q.cq <= qs.cq GROUP BY 1, 2), rk AS (SELECT *, row_number() OVER (PARTITION BY cq ORDER BY v DESC, entity_id) AS r, sum(v) OVER (PARTITION BY cq) AS tot FROM win) SELECT (cq + INTERVAL 3 MONTH - INTERVAL 1 DAY)::DATE AS as_of_date, sum(v) FILTER (WHERE r <= 3) / max(tot) AS value, flatten(list(ids)) AS obs_ids FROM rk GROUP BY cq HAVING max(tot) > 0 - Tokens routed through a public router
How much AI work is actually being run, and how fast is that growing?
165,275,037,348,832 tokensas of 2026-11-03(20 obs)One router, and only the models on its public list, over the router's own trailing window. A model entering or leaving the list moves the sum, so the level is a sample and the growth rate is the reading.
Formula
SELECT as_of_date, sum(value_numeric) AS value, list(id ORDER BY id) AS obs_ids FROM observations WHERE series_key LIKE 'openrouter_rankings.%.tokens.d' GROUP BY as_of_date
- Best score on real freelance projects
What share of real paid freelance projects can the best model complete end to end, and when was that record set?
21.3%as of 2026-09-22epoch_bench.rli1 observation
source1Scores sit at model release dates, often from runs with no compute limit and from mixed scaffolds; a test that stopped getting rows keeps its old record, which is why each test's newest row is exported beside it. A tie on one date keeps the row with the smallest id. Scores on different tests are not comparable to each other.
Formula
WITH pts AS ( SELECT source_ns || '.' || measure AS test, as_of_date, value_numeric AS v, id FROM observations WHERE value_numeric IS NOT NULL AND NOT coalesce(disputed, false) AND grain = 'pt' AND ( (source_ns = 'epoch_bench' AND measure IN ('arc_agi_2', 'cl_bench', 'apex_agents', 'posttrainbench', 'gdpval', 'rli', 'critpt', 'frontierswe', 'scicode', 'frontiermath_t4')) OR (source_ns = 'hal_reliability' AND measure = 'accuracy')) ), d AS (SELECT test, as_of_date, max(v) AS v, list(id ORDER BY v DESC, id)[1] AS id FROM pts GROUP BY 1, 2) SELECT as_of_date, test, v AS value, [id] AS obs_ids FROM d QUALIFY v > coalesce(max(v) OVER (PARTITION BY test ORDER BY as_of_date ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING), -1) - Oracle's contracted backlog
How many years of its current revenue has Oracle already contracted but not yet delivered?
9.25×as of 2026-08-31(8 obs)orclWhole-company figures; filers define and disclose backlog differently, and some count only contracts over a year; fiscal quarters differ by filer; a quarter window must hold exactly four fiscal quarters.
Formula
WITH q AS (SELECT subject, as_of_date, value_numeric AS rev, [id] AS ids FROM observations WHERE source_ns = 'sec' AND measure = 'revenue' AND grain = 'q' AND value_numeric > 0), fy AS (SELECT subject, as_of_date, period_start, value_numeric AS rev, id FROM observations WHERE source_ns = 'sec' AND measure = 'revenue' AND grain = 'fy'), fill AS ( -- a fiscal Q4 filed only inside the 10-K: the full year minus the three quarters inside it SELECT f.subject, f.as_of_date, f.rev - sum(q.rev) AS rev, flatten(list_prepend([f.id], list(q.ids))) AS ids FROM fy f JOIN q ON q.subject = f.subject AND q.as_of_date > f.period_start AND q.as_of_date < f.as_of_date GROUP BY f.subject, f.as_of_date, f.rev, f.id HAVING count(*) = 3 AND NOT EXISTS (SELECT 1 FROM q q2 WHERE q2.subject = f.subject AND q2.as_of_date = f.as_of_date)), qs AS (SELECT * FROM q UNION ALL SELECT * FROM fill), ttm AS ( -- four quarter ends inside ten and a half months: exactly the four fiscal quarters to this date SELECT a.subject, a.as_of_date, sum(b.rev) AS rev, flatten(list(b.ids)) AS ids FROM qs a JOIN qs b ON b.subject = a.subject AND b.as_of_date <= a.as_of_date AND b.as_of_date > a.as_of_date - INTERVAL 320 DAY GROUP BY a.subject, a.as_of_date HAVING count(*) = 4 AND count(DISTINCT b.as_of_date) = 4) SELECT r.as_of_date, r.subject AS entity, r.value_numeric / t.rev AS value, list_prepend(r.id, t.ids) AS obs_ids FROM observations r JOIN ttm t ON t.subject = r.subject AND t.as_of_date = r.as_of_date WHERE r.source_ns = 'sec' AND r.measure = 'rpo' AND r.grain = 'q' AND t.rev > 0 - Labs and compute companies buying the layers above them
In the year to each searched quarter, how many companies in the layers above the model layer did the labs and compute companies buy, or hire the teams of?
46as of 2026-06-30(46 obs)A floor. The ledger was searched under its written rule on 23 Sep 2026 for every buyer from 1 January 2025 (the rule, the searches and every deal considered and left out are at the head of its rows in seed/manual_observations.yaml); a quarter is read only once a sweep has covered it. Four deals met the rule but no citable page states them (three in 2025, one in 2026), so they are not counted. Acquihires surface late, so a sweep can add deals to quarters already read. Each deal counts from its earliest dated row. Undisclosed prices still count as events; deals by companies outside the buyer set (Stripe, Cloudflare, Cognition, Mercor) stay in the ledger uncounted.
Formula
WITH buyers AS (SELECT DISTINCT entity_id FROM entity_membership WHERE is_primary AND layer_id IN ('model', 'compute_physical')), deals AS ( SELECT subject || '/' || measure AS deal, min(as_of_date) AS announced, list(id ORDER BY id) AS ids FROM observations WHERE source_ns = 'acq' AND subject IN (SELECT entity_id FROM buyers) GROUP BY 1), swept AS (SELECT DATE '2026-06-30' AS through), -- the last quarter end a sweep has covered (23 Sep 2026); each sweep's PR raises it spine AS ( -- every completed, swept calendar quarter from the ledger's start; the quarter under way is never read SELECT (range + INTERVAL 3 MONTH - INTERVAL 1 DAY)::DATE AS q FROM range(DATE '2025-01-01', least(date_trunc('quarter', current_date)::DATE, (SELECT through FROM swept) + 1), INTERVAL 3 MONTH)) SELECT s.q AS as_of_date, count(*) AS value, flatten(list(d.ids ORDER BY d.deal)) AS obs_ids FROM spine s JOIN deals d ON d.announced <= s.q AND d.announced > s.q - INTERVAL 12 MONTH WHERE s.q - INTERVAL 12 MONTH >= DATE '2024-12-31' GROUP BY s.q ORDER BY s.q - AI roll-ups buying service firms
In the year to each searched quarter, how many firms that sell services did the AI roll-ups this site follows buy, and how many software products?
41as of 2026-09-30(41 obs)servicesA floor. One sweep, on 5 October 2026, searched thirty-three buyers of the roll-ups this site lists, from 1 January 2024, so a buyer outside that set contributes nothing and old announcements whose pages have gone are missed. Crete and Shield announce firms as joining their groups without stating a stake; those rows are counted as purchases because owning the firms they add is each buyer's stated model. A purchase named only in a buyer's own tally is not a row. A count of purchases says what buyers did, not whether owning paid. A quarter is read only once a sweep has covered it.
Formula
WITH deals AS ( SELECT o.series_key AS deal, min(o.as_of_date) AS announced, list(o.id ORDER BY o.id) AS ids, CASE WHEN any_value(t.trade) = 'software' THEN 'software' ELSE 'services' END AS kind FROM observations o JOIN rollup_trade t USING (series_key) WHERE o.source_ns = 'rollup_acq' GROUP BY 1), swept AS (SELECT DATE '2026-09-30' AS through), -- the last quarter end a sweep has covered (5 Oct 2026); each sweep's PR raises it spine AS ( SELECT (range + INTERVAL 3 MONTH - INTERVAL 1 DAY)::DATE AS q FROM range(DATE '2024-01-01', least(date_trunc('quarter', current_date)::DATE, (SELECT through FROM swept) + 1), INTERVAL 3 MONTH)) SELECT s.q AS as_of_date, d.kind, count(*)::DOUBLE AS value, flatten(list(d.ids ORDER BY d.deal)) AS obs_ids FROM spine s JOIN deals d ON d.announced <= s.q AND d.announced > s.q - INTERVAL 12 MONTH WHERE s.q - INTERVAL 12 MONTH >= DATE '2023-12-31' -- the ledger begins on 1 January 2024 GROUP BY s.q, d.kind ORDER BY 1, 2 - Platforms fencing out outside agents
In the year to the date shown, how many times did a large platform move to keep outside AI agents off it?
1as of 2026-11-04for, agent_access_fences1 observation
source1Hand-kept from dated public reports, so it undercounts; an event is counted once on its own date, and a court's ruling in a case already counted is context, not a second event. When the window empties, the reading cites the event that left it.
Formula
WITH e AS (SELECT subject AS target, measure AS stance, as_of_date, id FROM observations WHERE source_ns = 'evidence' AND subject IN ('ai_evaluation_market', 'insurer_ai_exclusions', 'agent_access_fences') AND measure IN ('for', 'against')), d AS (SELECT target, stance, as_of_date AS day, NULL AS gone FROM e UNION ALL -- the day an event ages out of the trailing year, up to today SELECT target, stance, CAST(as_of_date + INTERVAL 1 YEAR AS DATE), id FROM e WHERE as_of_date + INTERVAL 1 YEAR <= current_date), c AS (SELECT d.target, d.stance, d.day, count(DISTINCT e.id) AS n, list(DISTINCT e.id ORDER BY e.id) FILTER (WHERE e.id IS NOT NULL) AS ids, max(d.gone) AS gone FROM d LEFT JOIN e ON e.target = d.target AND e.stance = d.stance AND e.as_of_date <= d.day AND e.as_of_date > d.day - INTERVAL 1 YEAR GROUP BY 1, 2, 3) SELECT day AS as_of_date, target, stance, n AS value, CASE WHEN n = 0 THEN [gone] ELSE ids END AS obs_ids FROM c - Young against old workers in the most exposed jobs
In the jobs most exposed to AI, how far has employment of workers aged 22 to 25 fallen behind that of workers aged 50 and over since November 2022?
-17.4 index pointsas of 2026-09-30(2 obs)most_exposedADP payroll records, not the whole labour market; the spread is measured from November 2022 and moves with anything that treats young and old workers differently, not only AI.
Formula
SELECT j.as_of_date, 'most_exposed' AS quintile, j.value_numeric - s.value_numeric AS value, [j.id, s.id] AS obs_ids FROM observations j JOIN observations s ON s.as_of_date = j.as_of_date AND s.series_key = 'canaries.us_exposure_q5_age_50_plus.employment_index.m' WHERE j.series_key = 'canaries.us_exposure_q5_age_22_25.employment_index.m' UNION ALL SELECT j.as_of_date, 'least_exposed', j.value_numeric - s.value_numeric, [j.id, s.id] FROM observations j JOIN observations s ON s.as_of_date = j.as_of_date AND s.series_key = 'canaries.us_exposure_q1_age_50_plus.employment_index.m' WHERE j.series_key = 'canaries.us_exposure_q1_age_22_25.employment_index.m'
- How fast agents are getting more accurate
Across the agents HAL evaluates, how many points a year has accuracy risen across model releases?
22.5 pts a yearas of 2026-05-19(15 obs)accuracyOne evaluator's agents, each dated by its model's release (one model can appear at two settings); a straight line through a handful of points, so one new agent can move it. HAL draws its own trend lines with the same fit.
Formula
SELECT max(as_of_date) AS as_of_date, measure, regr_slope(value_numeric, datediff('day', DATE '2000-01-01', as_of_date)) * 365.25 AS value, list(id ORDER BY id) AS obs_ids FROM observations WHERE source_ns = 'hal_reliability' AND measure IN ('accuracy', 'reliability') AND grain = 'pt' AND value_numeric IS NOT NULL AND NOT coalesce(disputed, false) GROUP BY measure HAVING count(*) >= 5 - How much GPU rents moved in a year
How far has the median on-demand rent per GPU-hour moved against the same week a year before, per GPU?
29.2%as of 2026-10-26(2 obs)nvidia_h100List prices, not what contracted buyers pay; the panel of providers changes week to week; a newer GPU's arrival lowers the older one's rent without any glut.
Formula
SELECT a.as_of_date, a.subject AS gpu, a.value_numeric / b.value_numeric - 1 AS value, [a.id, b.id] AS obs_ids FROM observations a JOIN observations b ON a.subject = b.subject AND b.as_of_date BETWEEN a.as_of_date - 367 AND a.as_of_date - 361 WHERE a.series_key LIKE 'getdeploying.%.on_demand_median_usd_per_gpu_hour.w' AND b.series_key LIKE 'getdeploying.%.on_demand_median_usd_per_gpu_hour.w' AND b.value_numeric > 0 QUALIFY row_number() OVER (PARTITION BY a.id ORDER BY abs(b.as_of_date - (a.as_of_date - 364)), b.as_of_date) = 1
- Output per person over its previous peak
How far does American real output per person stand above the highest level it reached a year or more before, the reading the growth bet settles on?
1.8%as of 2026-09-30(2 obs)The peak is the highest quarter since this site's FRED history begins in 2015; each quarter reads the stored release of both quarters, which BEA revises, and the bet itself reads BEA's third estimate in a close call.
Formula
WITH q AS (SELECT as_of_date, value_numeric AS v, id FROM observations WHERE series_key = 'fred.us.real_gdp_per_capita.q'), p AS (SELECT as_of_date, v, id, max(v) OVER w AS peak, arg_max(id, v) OVER w AS peak_id FROM q WINDOW w AS (ORDER BY as_of_date RANGE BETWEEN UNBOUNDED PRECEDING AND INTERVAL 1 YEAR PRECEDING)) SELECT as_of_date, v / peak - 1 AS value, [id, peak_id] AS obs_ids FROM p WHERE peak IS NOT NULL - Output per person, year on year
How fast is American real output per person growing on a year before?
1.8%as of 2026-09-30(2 obs)An official statistic, revised as its agency revises it; the year-on-year change reads the stored release of both ends.
Formula
SELECT a.as_of_date, a.value_numeric / b.value_numeric - 1 AS value, [a.id, b.id] AS obs_ids FROM observations a JOIN observations b ON b.series_key = a.series_key AND b.period_start = a.period_start - INTERVAL 12 MONTH WHERE a.series_key = 'fred.us.real_gdp_per_capita.q' AND b.value_numeric > 0
- Planned against built data-centre power
How far does the power Epoch expects at the sites it tracks run ahead of what is built there?
4.47×as of 2026-11-03(108 obs)allEpoch's estimates, not verified builds: it states power within a factor of 1.4 and dates within six months, and covers roughly half of capacity, mostly the largest sites. 'Built' means dated on or before today; 'planned' means dated after it. A finished site leaves the comparison, so the ratio does not drift toward one with the calendar. A fast build-out with no shortage would read the same. Dated by the day Epoch's file last changed in our ledger; a revision that only removes rows does not advance it. The calendar moves the value under that date as well: a milestone Epoch projected counts as built once its date passes, whether or not Epoch has confirmed it, and a site with no later milestone leaves the comparison. No reading when fewer than twenty sites compare, because one campus could then carry the ratio.
Formula
WITH s AS (SELECT 'all' AS sites, * FROM dc_sites UNION ALL SELECT 'built', * FROM dc_sites WHERE built_mw > 0) SELECT any_value(read_on) AS as_of_date, sites, sum(planned_mw) / sum(built_mw) AS value, list_sort(list_concat(list(built_id), list(planned_id))) AS obs_ids FROM s GROUP BY sites HAVING count(*) >= 20 AND sum(built_mw) > 0 - Sites behind the data-centre gap
How many sites carry both a built and a planned figure, and how many of them are still bare?
54as of 2026-11-03(108 obs)allSame dating and definitions as dc_projected_to_observed_power.
Formula
WITH s AS (SELECT 'all' AS sites, * FROM dc_sites UNION ALL SELECT 'unbuilt', * FROM dc_sites WHERE built_mw = 0) SELECT any_value(read_on) AS as_of_date, sites, count(*) AS value, list_sort(list_concat(list(built_id), list(planned_id))) AS obs_ids FROM s GROUP BY sites - Supply of what AI chips consume
How fast is the supply of packaging, leading-edge logic and high-bandwidth memory growing?
69.1%as of 2025-12-31(2 obs)cowos_supply_wafersMemory supply is published in dollars, so a price rise reads as a supply rise. Supply alone says nothing about demand. Epoch's estimates, which it says are firmer by year than by quarter.
Formula
SELECT a.as_of_date, a.measure AS input, a.value_numeric / b.value_numeric - 1 AS value, [a.id, b.id] AS obs_ids FROM observations a JOIN observations b ON b.series_key = a.series_key AND b.as_of_date = a.as_of_date - INTERVAL 12 MONTH WHERE a.source_ns = 'epoch_components' AND a.subject = 'global' AND b.value_numeric > 0 AND NOT coalesce(a.disputed, false) AND NOT coalesce(b.disputed, false)
- Who buys advanced packaging
How concentrated are the buyers of advanced chip packaging?
0.39 indexas of 2025-12-31(5 obs)Epoch's 'Other' bucket is counted as one buyer though it is many, which overstates the index a little: treating it as many small buyers gives about 0.37, leaving it out about 0.52, against 0.39 here (last quarter of 2025). Epoch's estimates; medians only.
Formula
WITH x AS (SELECT subject, as_of_date, value_numeric AS v, id FROM observations WHERE source_ns = 'epoch_components' AND measure = 'cowos_share_pct' AND NOT coalesce(disputed, false)), first AS (SELECT subject, min(as_of_date) AS f FROM x GROUP BY 1), need AS (SELECT d.as_of_date, count(*) AS n FROM (SELECT DISTINCT as_of_date FROM x) d JOIN first ON first.f <= d.as_of_date GROUP BY 1), have AS (SELECT as_of_date, count(*) AS n, sum(v) AS tot, list(id ORDER BY id) AS ids FROM x GROUP BY 1), panel AS (SELECT have.* FROM have JOIN need USING (as_of_date) WHERE have.n = need.n AND have.n >= 3) SELECT p.as_of_date, sum((x.v / p.tot) * (x.v / p.tot)) AS value, p.ids AS obs_ids FROM panel p JOIN x USING (as_of_date) GROUP BY p.as_of_date, p.ids - Concentration of AI chip supply
How concentrated is the supply of AI chips by designer?
0.48 indexas of 2026-06-30(6 obs)A stock of chips sold to date, not the flow of new sales, so it moves slowly. Epoch's estimates. The newest full panel lags the newest partial one by up to three quarters.
Formula
WITH x AS (SELECT subject, as_of_date, value_numeric AS v, id FROM observations WHERE source_ns = 'epoch_chips' AND measure = 'h100e_cumulative' AND NOT coalesce(disputed, false)), first AS (SELECT subject, min(as_of_date) AS f FROM x GROUP BY 1), need AS (SELECT d.as_of_date, count(*) AS n FROM (SELECT DISTINCT as_of_date FROM x) d JOIN first ON first.f <= d.as_of_date GROUP BY 1), have AS (SELECT as_of_date, count(*) AS n, sum(v) AS tot, list(id ORDER BY id) AS ids FROM x GROUP BY 1), panel AS (SELECT have.* FROM have JOIN need USING (as_of_date) WHERE have.n = need.n AND have.n >= 3) SELECT p.as_of_date, sum((x.v / p.tot) * (x.v / p.tot)) AS value, p.ids AS obs_ids FROM panel p JOIN x USING (as_of_date) GROUP BY p.as_of_date, p.ids - Power drawn by the chip fleet
How fast is the electricity the installed AI chips would draw growing?
122.5%as of 2026-03-31(12 obs)Demand only: the power chips would draw, not the power the grid can supply. Rated draw of chips sold, whether or not they are switched on. Epoch's estimates.
Formula
WITH x AS (SELECT subject, as_of_date, value_numeric AS v, id FROM observations WHERE source_ns = 'epoch_chips' AND measure = 'power_mw_cumulative' AND NOT coalesce(disputed, false)), first AS (SELECT subject, min(as_of_date) AS f FROM x GROUP BY 1), need AS (SELECT d.as_of_date, count(*) AS n FROM (SELECT DISTINCT as_of_date FROM x) d JOIN first ON first.f <= d.as_of_date GROUP BY 1), have AS (SELECT as_of_date, count(*) AS n, sum(v) AS tot, list(id ORDER BY id) AS ids FROM x GROUP BY 1), panel AS (SELECT have.* FROM have JOIN need USING (as_of_date) WHERE have.n = need.n AND have.n >= 3) SELECT a.as_of_date, a.tot / b.tot - 1 AS value, list_concat(a.ids, b.ids) AS obs_ids FROM panel a JOIN panel b ON b.as_of_date = a.as_of_date - INTERVAL 12 MONTH AND b.n = a.n - Cost of a unit of accelerator compute
Is the price of compute still falling at its usual pace?
-17.3%as of 2026-08-02(42 obs)A trend since 2012, so it is slow to show a stall. Only accelerators with a public release price; recent data-centre GPUs have none, so the series may end well before today.
Formula
python: fits.annual_rate(since=2012-01-01, invert=True) over the rows of: SELECT f.as_of_date, f.value_numeric / p.value_numeric AS value, [f.id, p.id] AS obs_ids FROM observations f JOIN observations p ON p.subject = f.subject AND p.as_of_date = f.as_of_date WHERE f.series_key LIKE 'epoch_hw.%.fp16_flops.pt' AND p.series_key LIKE 'epoch_hw.%.release_price_usd.pt' AND NOT f.disputed AND NOT p.disputed AND p.value_numeric > 0
- Cheapest model in the flagship basket
What does the cheapest capable model cost to run?
$0.38as of 2026-10-301 observation
source1The basket is editorial: flagship families by name, with small tiers (nano, mini, lite, flash, haiku and the like) and image, experimental and tool-tuned builds left out, and it ages as families turn over. List prices on one router, from the six vendors the connector keeps. One cheap model sets the minimum. A delisted model keeps its last price, because the ledger holds price changes and has no last-seen date.
Formula
WITH p AS ( SELECT subject, as_of_date, value_numeric AS usd, id, split_part(raw_snippet, ' ', 1) AS model FROM observations WHERE source_ns = 'openrouter' AND measure = 'price_completion_usd_per_mtok' AND value_numeric > 0), basket AS ( SELECT * FROM p WHERE regexp_matches(model, '^(openai/(gpt-5|gpt-6|o3)|anthropic/claude-(opus|sonnet|fable)|google/gemini-(2\.5-pro|3)|x-ai/grok-4|deepseek/deepseek-(r1|v3|v4))') AND NOT contains(model, ':') -- router variants (:free, :batch); the connector drops them today AND NOT regexp_matches(split_part(model, '/', 2), '(^|[-_.])(nano|mini|lite|flash|haiku|small|tiny|8b|4b|distill|image|exp|customtools)([-_.]|$)')), d AS (SELECT DISTINCT as_of_date FROM basket), cp AS (SELECT d.as_of_date, b.subject, arg_max(b.usd, b.as_of_date) AS usd, arg_max(b.id, b.as_of_date) AS pid FROM d JOIN basket b ON b.as_of_date <= d.as_of_date GROUP BY 1, 2), r AS (SELECT as_of_date, min(usd) AS value, [arg_min(pid, (usd, pid))] AS obs_ids FROM cp GROUP BY as_of_date) -- a tie cites the lowest id, every run SELECT * FROM r QUALIFY value IS DISTINCT FROM lag(value) OVER (ORDER BY as_of_date) -- change points only - Growth in hyperscaler capital spending
Are the five largest builders still raising their spending?
93.5%as of 2026-09-30(47 obs)Not all of this spending is for AI. A trailing total turns about two quarters after a single quarter would. Quarters are differenced from year-to-date filings exactly as in capex_to_revenue_stack.
Formula
SELECT (a.cq + INTERVAL 3 MONTH - INTERVAL 1 DAY)::DATE AS as_of_date, a.v / b.v - 1 AS value, list_distinct(list_concat(a.ids, b.ids)) AS obs_ids FROM hyperscaler_capex_ttm a JOIN hyperscaler_capex_ttm b ON b.cq = a.cq - INTERVAL 12 MONTH - Growth of the training-data sellers
Are the firms that sell training data to the labs growing on a year before, counting only those that reported both years?
445.5%as of 2026-07-09(4 obs)Run-rates are annualised months from the press, often sourced to the company; gross, not net of what sellers pay experts. Needs at least two sellers with a pair; sellers without a year-earlier figure (Surge, Scale today) are left out, and one seller's jump can carry the panel.
Formula
WITH r AS ( SELECT subject, as_of_date AS d, value_numeric AS v, id FROM observations WHERE measure = 'gross_revenue_run_rate_usd' AND grain = 'pt' AND subject IN ('mercor', 'handshake', 'surge_ai', 'scale_ai', 'turing', 'micro1', 'invisible')), latest AS (SELECT subject, max(d) AS d, arg_max(v, d) AS v, arg_max(id, d) AS id FROM r GROUP BY subject), pair AS ( SELECT l.subject, l.d, l.v, l.id, arg_max(e.v, e.d) AS ev, arg_max(e.id, e.d) AS eid FROM latest l JOIN r e ON e.subject = l.subject AND e.d BETWEEN l.d - INTERVAL 450 DAY AND l.d - INTERVAL 270 DAY GROUP BY l.subject, l.d, l.v, l.id) SELECT max(d) AS as_of_date, sum(v) / sum(ev) - 1 AS value, list_sort(list_concat(list(id), list(eid))) AS obs_ids FROM pair HAVING count(*) >= 2 - Chinese labs against the frontier
How far is the best Chinese model behind the best model overall, on Epoch's Capabilities Index?
-10.2 indexas of 2026-10-17(3 obs)Country is Epoch's coding of the organisation; about seventeen models have none and count as neither side. Scores are placed at release dates, so a gap can change when Epoch scores an older model late. Cites the leader's score, the best Chinese score and that model's country row.
Formula
WITH e AS ( SELECT subject, as_of_date AS d, value_numeric AS v, value_low AS lo, value_high AS hi, id, nullif(trim(split_part(json_extract_string(raw_snippet, '$.Organization'), ',', 1)), '') AS org FROM observations WHERE series_key LIKE 'epoch_bench.%.eci\_%.pt' ESCAPE '\' AND value_numeric IS NOT NULL), c AS (SELECT subject, value_text AS country, id AS cid FROM observations WHERE series_key LIKE 'epoch_bench.%.country.pt'), ec AS (SELECT e.*, c.country, c.cid FROM e LEFT JOIN c USING (subject)), dates AS (SELECT DISTINCT d FROM e), best AS ( SELECT dt.d, max(ec.v) AS all_v, arg_max(ec.id, ec.v) AS all_id, max(ec.v) FILTER (WHERE ec.country = 'China') AS cn_v, arg_max(ec.id, ec.v) FILTER (WHERE ec.country = 'China') AS cn_id, arg_max(ec.cid, ec.v) FILTER (WHERE ec.country = 'China') AS cn_cid FROM dates dt JOIN ec ON ec.d <= dt.d GROUP BY dt.d) SELECT d AS as_of_date, cn_v - all_v AS value, [all_id, cn_id, cn_cid] AS obs_ids FROM best WHERE cn_v IS NOT NULL QUALIFY value IS DISTINCT FROM lag(value) OVER (ORDER BY d) - Labs level with the leader
How many labs have a recent model level with the leader on Epoch's Capabilities Index?
3as of 2026-09-30(3 obs)Driven by how wide the leader's interval is and how new the leader is; a fresh leader with a narrow interval reads one. Organisation is the first one Epoch lists; models with no organisation are left out.
Formula
WITH e AS ( SELECT as_of_date AS d, value_numeric AS v, value_low AS lo, coalesce(value_high, value_numeric) AS hi, id, nullif(trim(split_part(json_extract_string(raw_snippet, '$.Organization'), ',', 1)), '') AS org FROM observations WHERE series_key LIKE 'epoch_bench.%.eci\_%.pt' ESCAPE '\' AND value_numeric IS NOT NULL), dates AS (SELECT DISTINCT d FROM e), lead AS ( -- the best model to date that Epoch gives an interval for SELECT dt.d, arg_max(e.lo, e.v) AS floor, arg_max(e.id, e.v) AS lead_id FROM dates dt JOIN e ON e.d <= dt.d AND e.lo IS NOT NULL GROUP BY dt.d), near AS ( -- each lab's best model in the trailing year whose interval reaches the leader's SELECT l.d, e.org, arg_max(e.id, e.v) AS id, any_value(l.lead_id) AS lead_id FROM lead l JOIN e ON e.d <= l.d AND e.d > l.d - INTERVAL 365 DAY AND e.hi >= l.floor AND e.org IS NOT NULL GROUP BY l.d, e.org) SELECT d AS as_of_date, count(*)::DOUBLE AS value, list_sort(list_distinct(list_append(list(id), any_value(lead_id)))) AS obs_ids FROM near GROUP BY d QUALIFY value IS DISTINCT FROM lag(value) OVER (ORDER BY d) - Who owns the front door: concentration of chatbot referrals
How concentrated are the visits that AI chatbots send to websites, month by month?
0.37 indexas of 2026-10-31(6 obs)Referral traffic to tracked websites, not use; assistants that answer without sending a visit are undercounted; StatCounter's list of named assistants can change, which moves the index on its own. CC BY-SA 3.0, credit StatCounter Global Stats with a link.
Formula
SELECT as_of_date, sum(value_numeric * value_numeric) / (sum(value_numeric) * sum(value_numeric)) AS value, list(id ORDER BY id) AS obs_ids FROM observations WHERE source_ns = 'statcounter_ai' AND measure = 'referral_share' GROUP BY as_of_date HAVING count(*) >= 4 - Run-rate growth by layer
How fast are stated revenue run-rates growing, by layer, as the median across firms?
802.6%as of 2026-09-30(6 obs)Firms state run-rates when they are growing and fall silent when they are not, so every layer's growth leans high; readings come from different outlets and definitions; a firm counts in its primary layer only.
Formula
WITH rr AS ( SELECT subject, as_of_date, max(value_numeric) AS v, min(id) AS id FROM observations WHERE measure = 'revenue_run_rate_usd' AND value_numeric > 0 GROUP BY 1, 2), m AS (SELECT DISTINCT entity_id, layer_id FROM entity_membership WHERE is_primary AND to_date IS NULL), qs AS (SELECT DISTINCT (date_trunc('quarter', as_of_date) + INTERVAL 3 MONTH - INTERVAL 1 DAY)::DATE AS q FROM rr), w AS ( SELECT qs.q, m.layer_id, rr.subject, arg_min(rr.v, rr.as_of_date) AS v0, min(rr.as_of_date) AS d0, arg_min(rr.id, rr.as_of_date) AS id0, arg_max(rr.v, rr.as_of_date) AS v1, max(rr.as_of_date) AS d1, arg_max(rr.id, rr.as_of_date) AS id1 FROM qs JOIN rr ON rr.as_of_date <= qs.q AND rr.as_of_date > qs.q - INTERVAL 15 MONTH JOIN m ON m.entity_id = rr.subject WHERE qs.q < current_date GROUP BY 1, 2, 3), g AS (SELECT q, layer_id, pow(v1 / v0, 365.0 / date_diff('day', d0, d1)) - 1 AS growth, [id0, id1] AS ids FROM w WHERE date_diff('day', d0, d1) >= 180) SELECT q AS as_of_date, layer_id, median(growth) AS value, list_sort(list_distinct(flatten(list(ids)))) AS obs_ids FROM g GROUP BY 1, 2 HAVING count(*) >= 3
Falsification monitor
The rule that would falsify the normal-technology reading, evaluated nightly. Each condition names the observations it read.
Normal-technology thesis, falsification test · does not hold
(ratio ≤ 2 AND 50% horizon below the ceiling AND 80% horizon > 8 h) AND (≥ 3 trackers break) AND (hours > 20% OR TFP > trend + 1pp for 4 years)
- ✗50%/80% horizon ratio ≤ 2 — 6.34× as of 2026-03-05sources12
- ✗50% horizon below the suite's 16 h ceiling, so a falling ratio is not censoring — 1045 min as of 2026-04-07source1
- ✗80% horizon > 8 h — 186 min as of 2026-04-07source1
- ✗≥ 3 labour trackers show a concurrent AI-attributable break — 0 of 4 as of 2026-09-30sources12+5 more
- ✗work hours assisted by AI > 20% — 5.3% as of 2026-09-30source1
- ✗TFP > trend + 1pp for ≥ 4 consecutive years — 2022 -1.1%, 2023 +1.6%, 2024 +1.5%, 2025 +0.8%sources12+6 more