How fast is AI moving? Ten measured trends about what AI models can do, what they cost and what it takes to build them, explained for readers who are not specialists and backed by detail for those who are.
Every number on the page is computed from public datasets by a script. Nothing is typed by hand.
| # | Question | Data |
|---|---|---|
| 01 | Are models getting smarter? | Epoch Capabilities Index, 270 models |
| 02 | How long a task can AI finish on its own? | METR time horizons |
| 03 | Is AI getting cheaper to use? | Launch prices matched to the capability index |
| 04 | Are models getting bigger? | Parameter counts and how often labs publish them |
| 05 | How much computing goes into training? | Training compute of frontier models |
| 06 | What does it cost to train a top model? | Training cost estimates |
| 07 | Do chips give more for the money? | AI chip launch prices and speed |
| 08 | How big are the machines that train AI? | AI cluster sizes |
| 09 | How far behind are open models? | Open and closed frontiers, lag in months |
| 10 | Who is ahead? | US and Chinese frontiers, best model per lab |
A searchable table of every indexed model and a method section with sources close the page.
Node.js 22.12+ or 24. The committed data file is enough to run the site.
npm ci
npm run devnpm run build # static site in dist/, works from any subdirectory
npm run previewInstall uv, then:
uv sync --frozen
npm run data:refresh # download every source and rebuild public/data/signals.json
npm run data:offline # rebuild from the last download, no networkThe pipeline replaces public/data/signals.json only after every chapter is computed and the sanity checks pass. Raw downloads are cached in data/snapshots/ (not in git); their SHA-256 hashes are published inside the data file.
The same procedure runs on every metric (pipeline/stats.py):
- Use vetted values only (
pipeline/audit.py). A value from the Epoch AI models database can set a record, enter a trend or be quoted only if the model is in the curated notable set and the row is rated Confident or Likely. Speculative and unrated rows are background dots. A parameter count whose own note quotes the same number in another unit is set aside. A recent value that beats the previous record more than tenfold is held back until someone adds it topipeline/reviewed.jsonwith a reason. Everything set aside is listed on the page. - Pick the frontier. A trend is fitted on the vetted models that led at the time of release: record setters, or the ten largest so far. Membership never depends on later releases.
- Fit one straight line. Ordinary least squares, on log10 of the value for anything that grows by multiplication, so a straight line means steady exponential change.
- Ask if the pace changed. Find the split date where two lines fit best and compare the slopes. The search for the split is repeated on 2,000 bootstrap resamples, and a change counts only if 95% of them agree on its direction. The recent part must cover at least two years. If the pace changed, the projection uses the recent part.
- Backtest. Rerun the whole procedure on earlier cutoff dates and compare its projection with the models released 6 to 18 months later. A projection (80% band) is drawn only if the method beat assuming no change and the fit has at least 10 points.
Prices (pipeline/prices.py) are attached to index models in a fixed order of trust: a launch price restored by hand with its source (pipeline/launch_prices.json), a price Epoch AI recorded, the vendor list price before a documented change, today's first party list price, then OpenRouter's pass through price for closed models. A hosting price of an open model counts from the day it was recorded, never from the model's release, and today's third party hosting prices are not used.
Chip value uses one yardstick for every chip: the fastest of its 32 and 16 bit speeds, the formats used for training. The 8 and 4 bit formats newer chips add for running models are left out, because mixing them in makes progress look faster than it is.
Known source errors are fixed through pipeline/corrections.json, each with a reason, and reported on the page. A correction applies only while the source still holds the wrong value.
npm run lint # eslint and ruff
npm test # formatting and scale helpers
npm run data:test # statistics, price matching, published bundle
npm run build.github/workflows/publish.yml runs on every push to main, every Monday and on demand. It downloads fresh sources, runs every check and deploys dist/ to GitHub Pages, so the live site is refreshed weekly without data commits. If a source changes shape the run fails and the previous site stays online.
This requires the repository's Pages source to be set to GitHub Actions (Settings, Pages). With the older "deploy from branch" setting Pages serves the unbuilt index.html and the site is blank.
pipeline/ sources, statistics, price matching, chapter builders
tests/ Python tests
src/ React app: one generic chart, one section component, copy in signals.tsx
public/data/ signals.json, the only data the browser loads
.github/workflows/ validation and weekly publish
| Source | Used for | License |
|---|---|---|
| Epoch AI models database | size, compute, training cost | CC BY 4.0 |
| Epoch AI Benchmarking Hub | Epoch Capabilities Index | CC BY 4.0 |
| Epoch AI hardware database | chip speed and launch price | CC BY 4.0 |
| Epoch AI supercomputers database | cluster sizes | CC BY 4.0 |
| Epoch AI price trends | prices recorded 2021 to early 2025 | CC BY 4.0 |
| METR time horizons | task length | attribution required |
| llm-prices.com | vendor list prices and price changes | no license declared |
| models.dev | current first party list prices | MIT |
| OpenRouter | current list prices of closed models | public API |
Many Epoch AI values are researcher estimates, not company disclosures. Code is MIT licensed. Data keeps the terms of each source.
Versions 2 and 3 of this project are in the Git history (46b17f2 and d6b4922).