{
  "chart": "s2s-chart/1",
  "kind": "bars",
  "title": "The short answer: two models on four machines, no graphics card in the path",
  "subtitle": "Tokens a second while writing, and seconds to the first word of a fresh answer, at Ollama's default threads: 4 of the laptop's 24 and 4 of the mini PC's 16, so not a hardware ranking (at 20 threads the laptop wrote the dense model at 5.14). The 3700X row is 2026-11-04 fresh loads (n = 3); the rest are 2026-08-25, writing from warm runs (n = 5) and the first word from two cold runs; longer writes faster, shorter waits less.",
  "series": [
    "gemma4:26b, a 26B mixture",
    "mistral-small3.2:24b, 24B dense"
  ],
  "panels": [
    {
      "heading": "Writing speed, tok/s",
      "unit": "tok/s",
      "rows": [
        {
          "label": "EPYC 7532, 128 GB",
          "notes": "Desktop · 8 ch DDR4-3200 · 32 threads (default)",
          "values": [
            {
              "value": "24.68",
              "source": "/two-hours-on-battery/data/runs/cpu-server-m5.json derived.decode_tok_s.median 24.675"
            },
            {
              "value": "7.09",
              "source": "/two-hours-on-battery/data/runs/cpu-server-m4.json derived.decode_tok_s.median 7.091"
            }
          ]
        },
        {
          "label": "290HX Plus, 64 GB",
          "notes": "Laptop · DDR5-5600 · 4 of 24 threads (default)",
          "values": [
            {
              "value": "13.26",
              "source": "/two-hours-on-battery/data/runs/cpu-laptop-m5.json derived.decode_tok_s.median 13.258"
            },
            {
              "value": "2.70",
              "source": "/two-hours-on-battery/data/runs/cpu-laptop-m4.json derived.decode_tok_s.median 2.702"
            }
          ]
        },
        {
          "label": "i5-12600H, 32 GB",
          "notes": "Mini PC · DDR5-4800 · 4 of 16 threads (default)",
          "values": [
            {
              "value": "12.66",
              "source": "/two-hours-on-battery/data/runs/cpu-mini-m5.json derived.decode_tok_s.median 12.657"
            },
            {
              "value": "3.31",
              "source": "/two-hours-on-battery/data/runs/cpu-mini-m4.json derived.decode_tok_s.median 3.313"
            }
          ]
        },
        {
          "label": "3700X, 32 GB DDR4",
          "notes": "Desktop · 2 ch DDR4-3200 · 8 threads (default)",
          "values": [
            {
              "value": "13.64",
              "source": "/speeds-from-ram-alone/data/two-channel-desktop/summary.json arms[0].decode_median 13.642"
            },
            {
              "value": "2.57",
              "source": "/speeds-from-ram-alone/data/two-channel-desktop/summary.json arms[1].decode_median 2.569"
            }
          ]
        }
      ]
    },
    {
      "heading": "First word (s) · mistral reads 1,023 tokens",
      "unit": "s",
      "rows": [
        {
          "label": "EPYC 7532, 128 GB",
          "notes": "Desktop · 8 ch DDR4-3200 · 32 threads (default)",
          "values": [
            {
              "value": "3.74",
              "source": "/two-hours-on-battery/data/runs/cpu-server-m5.json cold_load[] (ttft_ms − load_duration_ns ÷ 1e6) ÷ 1,000, median of 2 (rule 3 item 2) 3.7424"
            },
            {
              "value": "24.63",
              "source": "/two-hours-on-battery/data/runs/cpu-server-m4.json cold_load[] (ttft_ms − load_duration_ns ÷ 1e6) ÷ 1,000, median of 2 (rule 3 item 2) 24.6330"
            }
          ]
        },
        {
          "label": "290HX Plus, 64 GB",
          "notes": "Laptop · DDR5-5600 · 4 of 24 threads (default)",
          "values": [
            {
              "value": "8.51",
              "source": "/two-hours-on-battery/data/runs/cpu-laptop-m5.json cold_load[] (ttft_ms − load_duration_ns ÷ 1e6) ÷ 1,000, median of 2 (rule 3 item 2) 8.5129"
            },
            {
              "value": "82.36",
              "source": "/two-hours-on-battery/data/runs/cpu-laptop-m4.json cold_load[] (ttft_ms − load_duration_ns ÷ 1e6) ÷ 1,000, median of 2 (rule 3 item 2) 82.3586"
            }
          ]
        },
        {
          "label": "i5-12600H, 32 GB",
          "notes": "Mini PC · DDR5-4800 · 4 of 16 threads (default)",
          "values": [
            {
              "value": "11.43",
              "source": "/two-hours-on-battery/data/runs/cpu-mini-m5.json cold_load[] (ttft_ms − load_duration_ns ÷ 1e6) ÷ 1,000, median of 2 (rule 3 item 2) 11.4255"
            },
            {
              "value": "97.67",
              "source": "/two-hours-on-battery/data/runs/cpu-mini-m4.json cold_load[] (ttft_ms − load_duration_ns ÷ 1e6) ÷ 1,000, median of 2 (rule 3 item 2) 97.6731"
            }
          ]
        },
        {
          "label": "3700X, 32 GB DDR4",
          "notes": "Desktop · 2 ch DDR4-3200 · 8 threads (default)",
          "values": [
            {
              "value": "8.26",
              "source": "/speeds-from-ram-alone/data/two-channel-desktop/summary.json arms[0].first_word_median_ms 8255.4 ÷ 1,000"
            },
            {
              "value": "62.45",
              "source": "/speeds-from-ram-alone/data/two-channel-desktop/summary.json arms[1].first_word_median_ms 62446.1 ÷ 1,000"
            }
          ]
        }
      ]
    }
  ],
  "source": "The battery page's kit: runs/cpu-server-m5.json, cpu-laptop-m5.json, cpu-mini-m5.json and the -m4 files (derived.decode_tok_s.median; cold_load[] for the first word). Exhibit 105's kit: two-channel-desktop/summary.json arms[0] and arms[1] (decode_median, first_word_median_ms). Every value stands in this page's tables T1 and T3."
}
