---
title: 'Before "thinking models" — the dark ages (2022–2024)'
description: From ChatGPT's launch in November 2022 to September 2024, chat models answered in one pass, with no step to check their work. How thinking models arrived, what they fixed and what they didn't, and what thinking costs in my own apps.
date: 2026-11-04
tags: AI, LLMs, reasoning models, hallucinations, AI costs
---

Before thinking models, from ChatGPT's launch in November 2022 to September 2024, a chat model answered in one pass. It wrote its reply one word at a time, with no step to check its work. Thinking models, starting with OpenAI's o1, write out their reasoning first and answer after.

I wasn't sure of the dates myself. This week, I asked Nova, one of my agents, on Telegram. I remembered that the first ChatGPT and Claude didn't think, and that today they all do. I guessed the change came about a year ago. It came two years ago.

Nova sent back a timeline and called the years before it "the dark ages". I liked the title. So I checked the timeline for this note, and added what thinking changed in my own apps: what they cost, how fast they answer, and sometimes whether they answer at all.

## Two years of answers in one pass

"The dark ages" is a joke, but the mechanism behind it is real. Until September 2024, a chat model had no place to think before it spoke.

A language model writes one word at a time. Strictly, it writes tokens, pieces of words, but words are close enough. For each one, it picks a likely next word given everything before it, then moves on. It can't go back and change a word it already wrote.

So the answer was the thinking. If the model took a wrong step early in a sum, every word after it built on that step. The reply still read smoothly. A wrong answer looked as sure as a right one.

Researchers found a workaround in 2022. A team from the University of Tokyo and Google added one sentence before the answer: "Let's think step by step." On a set of simple arithmetic word problems, an OpenAI model went from 18% right to 79%. That's from fewer than one problem in five to almost four in five.

So the model could reason, as long as it wrote the steps down. But someone had to ask for it, and nobody had trained the model to do it well.

<figure class="fd-fig dk-pass" aria-labelledby="dk1-cap" data-desc="Two ways a chat model answers. One pass, ChatGPT in November 2022: it writes the answer word by word, each word its best guess from the words before, with no step back to check, so a wrong step stays in the answer. Think, then answer, o1 in September 2024: it writes its reasoning first, tries, checks and fixes, and only then writes the answer, so it can catch a mistake before you see it, at the price of more words, more time and more cost. Underneath, the 2022 trick: adding the sentence Let's think step by step took one model from 18% to 79% right on simple arithmetic word problems.">
<div class="mp-two-row">
<div class="mp-two-card">
<p class="mp-two-who">ChatGPT, November 2022</p>
<p class="mp-two-name">One pass</p>
<p class="dk-words" aria-hidden="true"><span>The</span><span>answer</span><span>is</span><span class="dk-wrong">wrong</span></p>
<p class="mp-two-line">Writes the answer word by word</p>
<p class="mp-two-line">Each word is a guess from the words before</p>
<p class="mp-two-line">No step back to check</p>
</div>
<p class="mp-two-vs">then</p>
<div class="mp-two-card mp-two-peter">
<p class="mp-two-who">o1, September 2024</p>
<p class="mp-two-name">Think, then answer</p>
<p class="dk-words" aria-hidden="true"><span class="dk-think">try</span><span class="dk-think">check</span><span class="dk-think">fix</span><span class="dk-final">answer</span></p>
<p class="mp-two-line">Writes its reasoning first</p>
<p class="mp-two-line">Can catch a mistake before you see it</p>
<p class="mp-two-line">More words, more time, more cost</p>
</div>
</div>
<p class="mp-strip"><b>2022 trick</b><span>"Let's think step by step": from 18% to 79% right on simple word problems.</span></p>
<figcaption id="dk1-cap">The word chips are a schematic. The two scores are from Kojima and others, 2022, with an OpenAI model of the time.</figcaption>
</figure>

## September 2024: the model learns to think first

On September 12, 2024, OpenAI released o1-preview. It was the first widely used model trained to write its reasoning before every answer.

The training method is reinforcement learning. The model tries a problem, writes its reasoning, and gets a reward when the final answer is right. Over many tries, it keeps the habits that pay. OpenAI's post names some of them: it "learns to recognize and correct its mistakes", breaks hard steps into simpler ones, and tries another way when one fails.

OpenAI kept the raw reasoning hidden. In ChatGPT, you saw a short summary of it, and a line saying how long the model had thought.

The gain was largest where an answer can be checked. AIME is a 15-question exam that qualifies US high school students for the math olympiad. On the 2024 exams, GPT-4o, the best ChatGPT model before o1, solved about 2 questions out of 15 on average. o1 solved about 11.

OpenAI also found that o1 got better the longer it thought. That's a new trade: you buy a better answer with more time and more tokens. It's the trade I now meet in my own apps.

<figure class="fd-fig dk-aime" aria-labelledby="dk2-cap" data-desc="The 2024 AIME math exam, 15 questions, drawn as 15 squares per model. GPT-4o, the best ChatGPT model before o1, solved about 2 of the 15 on average. o1, with one try per question, solved about 11. Underneath: with 64 tries and a vote on the most common answer, o1 reached 12.5 of 15.">
<div class="dk-sq-rows">
<div class="dk-sq-row">
<p class="dk-sq-who"><b>GPT-4o</b><span>About 2 of 15</span></p>
<p class="dk-sq" aria-hidden="true"><i class="dk-on"></i><i class="dk-on"></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></p>
</div>
<div class="dk-sq-row dk-sq-o1">
<p class="dk-sq-who"><b>o1, one try</b><span>About 11 of 15</span></p>
<p class="dk-sq" aria-hidden="true"><i class="dk-on"></i><i class="dk-on"></i><i class="dk-on"></i><i class="dk-on"></i><i class="dk-on"></i><i class="dk-on"></i><i class="dk-on"></i><i class="dk-on"></i><i class="dk-on"></i><i class="dk-on"></i><i class="dk-on"></i><i></i><i></i><i></i><i></i></p>
</div>
</div>
<p class="mp-strip"><b>64 tries</b><span>With a vote on the most common answer, o1 reached 12.5 of 15.</span></p>
<figcaption id="dk2-cap">OpenAI's averages on the 2024 exams, 1.8 and 11.1 of 15, rounded to whole squares.</figcaption>
</figure>

## Six months later, everyone had one

The full o1 came out on December 5, 2024. Two weeks later, Google released an experimental thinking version of Gemini 2.0 Flash. Then everyone followed.

- **DeepSeek-R1, January 2025.** A Chinese lab released a reasoning model close to o1 on math and code. Its weights were open, under the MIT license, so anyone could download and run it. A week later, Nvidia's share price fell 17% in one day.
- **Claude 3.7 Sonnet, February 2025.** Anthropic called it a "hybrid reasoning model": the same model answers fast, or thinks first when you ask, and you can read the thinking.
- **o3 and o4-mini, April 2025.** OpenAI's next reasoning models could use tools while they thought: search the web, run code, look at images.
- **GPT-5, August 2025.** In ChatGPT, a router decides, message by message, whether to answer fast or think.

Today, thinking is a setting, not a separate product. Even the smallest Claude, Haiku 5.5, thinks unless you tell it not to.

Nova's dates held up when I checked them. One number didn't. Nova said DeepSeek trained R1 for about $6 million. That figure belongs to another model: about $5.6 million was the final training run of DeepSeek's base model, V3. R1 is built on top of V3, and its reasoning training cost $294,000 more, according to DeepSeek's paper in Nature.

Nova runs on Claude Sonnet 5, a thinking model, and it still mixed the two up. So what does thinking really fix?

<figure class="fd-fig ah dk-tl" aria-labelledby="dk3-cap" data-desc="A timeline from one pass to thinking by default. November 2022: ChatGPT, then Claude in March 2023, answer in one pass. September 12, 2024: OpenAI's o1-preview, the first widely used model trained to think before it answers. December 2024: the full o1, and Google's Gemini 2.0 Flash Thinking two weeks later. January 2025: DeepSeek-R1, open weights under the MIT license, and Nvidia's share price falls 17% in one day. February 2025: Claude 3.7 Sonnet, one model that answers fast or thinks first. April 2025: o3 and o4-mini think while using tools, search, code and images. August 2025: GPT-5, where ChatGPT's router decides when to think. Today: thinking by default; even Claude Haiku 5.5 thinks unless told not to.">
<ol class="ah-tl-list">
<li class="ah-ev dk-ev-dark"><p class="ah-ev-d">Nov 2022</p><p class="ah-ev-t"><b>ChatGPT, then Claude</b>One pass, no thinking step. Claude arrives in March 2023.</p></li>
<li class="ah-ev dk-ev-key"><p class="ah-ev-d">Sep 12, 2024</p><p class="ah-ev-t"><b>o1-preview</b>Trained to think before it answers.</p></li>
<li class="ah-ev"><p class="ah-ev-d">Dec 2024</p><p class="ah-ev-t"><b>o1, Gemini 2.0 Flash Thinking</b>OpenAI and Google, two weeks apart.</p></li>
<li class="ah-ev"><p class="ah-ev-d">Jan 2025</p><p class="ah-ev-t"><b>DeepSeek-R1</b>Open weights, MIT license. Nvidia falls 17% in a day.</p></li>
<li class="ah-ev"><p class="ah-ev-d">Feb 2025</p><p class="ah-ev-t"><b>Claude 3.7 Sonnet</b>One model: answer fast, or think first.</p></li>
<li class="ah-ev"><p class="ah-ev-d">Apr 2025</p><p class="ah-ev-t"><b>o3 and o4-mini</b>Think while using tools: search, code, images.</p></li>
<li class="ah-ev"><p class="ah-ev-d">Aug 2025</p><p class="ah-ev-t"><b>GPT-5</b>A router decides when ChatGPT thinks.</p></li>
<li class="ah-ev dk-ev-now"><p class="ah-ev-d">Today</p><p class="ah-ev-t"><b>Thinking by default</b>Even Claude Haiku 5.5 thinks unless told not to.</p></li>
</ol>
<figcaption id="dk3-cap">Dates from each company's announcement. The grey row is the "dark ages"; the last row is from my own apps.</figcaption>
</figure>

## Thinking checks the steps, not the facts

Thinking helps most when each step can be checked: a sum, a proof, code that tests can run. It doesn't give the model a fact it never learned.

OpenAI's own reports show both sides. For the o1 report, in December 2024, a monitor read the reasoning behind 102,443 answers. In 43 of them, o1 made up information, and its reasoning showed it knew. Most were references: a book or a web page it couldn't check without search, so it wrote a likely-looking one.

That's rare, about 4 answers in 10,000. But thinking didn't stop it. It only made it visible to whoever read the reasoning.

The o3 report, in April 2025, went further. On PersonQA, OpenAI's test of questions about public facts on people, o3 made things up in 33% of its answers. That's twice o1's 16%, and o4-mini reached 48%. OpenAI's explanation is that o3 makes more claims overall, right and wrong. It also wrote that "more research is needed".

In September 2025, OpenAI published a paper on why models make things up at all. Their answer: most tests score a guess above "I don't know", so training teaches models to guess. Thinking doesn't change that score.

I hit the same limit at home. In August, my fitness agent, Rex, had to log a food product from my photos, nutrition table included. I tried five models on the same step. Gemini 3 Flash came back with a fish dish from earlier in the chat, not the product in the photo. Gemini 3.1 Pro said it couldn't read the values and asked me for them.

The problem was my photos: none showed the table clearly. No model, thinking or not, reads numbers that aren't in the picture. I needed a better photo, not a better model.

<figure class="fd-fig dk-facts" aria-labelledby="dk4-cap" data-desc="What thinking can and can't fix. Thinking helps with steps you can check: a math exam, where o1 went from about 2 to about 11 of 15 questions over GPT-4o; code, when tests run it; a plan with tools, step by step. Thinking can't help with facts the model doesn't have: a reference it can't open, a fact about a person it never learned, a number that isn't in the photo. Bars from OpenAI's PersonQA test, the share of answers with made-up facts: o1 16%, o3 33%, o4-mini 48%. Underneath, from the o1 report: 43 of 102,443 answers were made up knowingly, mostly references.">
<div class="mp-two-row">
<div class="mp-two-card mp-two-peter">
<p class="mp-two-who">Thinking helps</p>
<p class="mp-two-name">Steps you can check</p>
<p class="mp-two-line">A math exam: from about 2 to 11 of 15</p>
<p class="mp-two-line">Code, when tests run it</p>
<p class="mp-two-line">A plan with tools, step by step</p>
</div>
<p class="mp-two-vs">but</p>
<div class="mp-two-card dk-cant">
<p class="mp-two-who">Thinking can't help</p>
<p class="mp-two-name">Facts it doesn't have</p>
<p class="mp-two-line">A reference it can't open</p>
<p class="mp-two-line">A fact about a person it never learned</p>
<p class="mp-two-line">A number that isn't in the photo</p>
</div>
</div>
<div class="rp-bars">
<p class="rp-bars-h">PersonQA: answers with made-up facts</p>
<p class="rp-bar"><span>o1, December 2024</span><i class="dk-w" style="--w:16"></i><b>16%</b></p>
<p class="rp-bar dk-bar-up"><span>o3, April 2025</span><i class="dk-w" style="--w:33"></i><b>33%</b></p>
<p class="rp-bar dk-bar-up"><span>o4-mini, April 2025</span><i class="dk-w" style="--w:48"></i><b>48%</b></p>
</div>
<p class="mp-strip"><b>o1 report</b><span>43 of 102,443 answers made up knowingly, mostly references.</span></p>
<figcaption id="dk4-cap">Bars to scale on a 0 to 100% axis, from OpenAI's o3 and o4-mini system card. Red marks a rate above o1's.</figcaption>
</figure>

## Thinking has a bill

Thinking is extra text the model writes before the answer. You pay for it, you wait for it, and it counts against the answer's size limit. I've met all three in my own apps.

- **The cost.** In September, my meeting notes app, Scribelex, sent a 16-minute meeting to Gemini 3.5 Flash. About 80% of what the model wrote was hidden thinking, billed like the answer. The meeting cost €0.39. My estimate had said €0.08, because it didn't count the thinking.
- **The empty answer.** In October, the live chat in the same app showed a blank reply. Claude Haiku 5.5 thinks by default, and its thinking shares the answer's limit. With a limit of 700 tokens, one call spent all 700 thinking. It returned no text and no error. With thinking off, answers now come back in about 2 seconds instead of 6.
- **The local model.** My commit tool, brb-git, can run on the Mac mini's own models. There it uses IBM's Granite, a model that doesn't think. Thinking models came back empty: they spent the budget on reasoning, the library dropped the reasoning, and nothing was left.

So I choose per task. For a commit message or a quick answer during a meeting, thinking stays off. For agents, it's the opposite. When I set up my agent framework, OpenClaw, it skipped any local model that wasn't marked as able to reason. Agents plan, call tools, read the results and fix their own mistakes. That's the step-by-step work thinking is good at.

<figure class="fd-fig dk-bill" aria-labelledby="dk5-cap" data-desc="What thinking did in four of my apps, and what I changed. Meeting notes in Scribelex: about 80% of Gemini 3.5 Flash's output was hidden thinking, so a 16-minute meeting cost 0.39 euros against a 0.08 euro estimate; the app's cost now counts the thinking, and turning it down is still undecided. Live chat in Scribelex: Claude Haiku 5.5 spent 700 of 700 tokens thinking and returned an empty answer with no error; thinking is off, answers take about 2 seconds instead of 6, and an empty answer now shows as an error. Commit messages with brb-git on a local model: thinking models spent the budget on reasoning and returned empty text; it uses IBM's Granite 4.1, a model that doesn't think. Agents in OpenClaw: they plan, call tools and fix their own mistakes; the framework only ran local models marked as able to reason. Underneath, the rule: short answers, thinking off; agents that plan, thinking on.">
<div class="tm-table">
<p class="tm-row tm-head"><span>App</span><span>What thinking did</span><span>What I changed</span></p>
<p class="tm-row"><b>Meeting notes</b><span>80% of the output was hidden thinking: €0.39 against an €0.08 estimate</span><span>The cost now counts it. Turning it down: <span class="tm-gap">undecided</span></span></p>
<p class="tm-row"><b>Live chat</b><span>700 of 700 tokens spent thinking: <span class="tm-gap">an empty answer, no error</span></span><span>Thinking off: 2 seconds instead of 6. An empty answer is an error</span></p>
<p class="tm-row"><b>Commit messages</b><span>Local thinking models: <span class="tm-gap">empty text</span></span><span>IBM's Granite 4.1, a model that doesn't think</span></p>
<p class="tm-row"><b>Agents</b><span>Plan, call tools, fix their own mistakes</span><span class="dk-on-cell">Only models marked as able to reason</span></p>
</div>
<p class="mp-strip"><b>Per task</b><span>Short answers: thinking off. Agents that plan: thinking on.</span></p>
<figcaption id="dk5-cap">From my own apps, this year. Red marks what broke.</figcaption>
</figure>

## Try it

- OpenAI, [Learning to reason with LLMs](https://openai.com/index/learning-to-reason-with-llms/), September 2024: how o1 was trained, and the AIME results.
- The [o1 system card](https://arxiv.org/abs/2412.16720), December 2024, with the reasoning monitor, and the [o3 and o4-mini system card](https://openai.com/index/o3-o4-mini-system-card/), April 2025, with PersonQA.
- Kojima and others, [Large Language Models are Zero-Shot Reasoners](https://arxiv.org/abs/2205.11916), 2022: the "Let's think step by step" paper.
- DeepSeek, [DeepSeek-R1 incentivizes reasoning in LLMs through reinforcement learning](https://www.nature.com/articles/s41586-025-09422-z), Nature, September 2025.
- OpenAI, [Why language models hallucinate](https://openai.com/index/why-language-models-hallucinate/), September 2025.
- Two of my notes on what AI costs: [counting what tokens buy](/notes/tokenomics-dont-count-tokens.html) and [spending more tokens](/notes/tokenmaxxing-fat-skills-real-tests.html).

Pick one prompt you send every day. Run it once with thinking off and once with it on, and compare the answer, the wait and the cost. If you find a task where thinking isn't worth it, tell me which one.
