It wasn't something you said. Now you can see what actually happened.
Before you start: this tool shows you what happened to your GPT-4o conversations, week by week, including your last days with 4o. For some people that is a relief. For some it hurts. Both are fine. Take your time, run it when you feel steady, and stop whenever you need to.
If you're struggling, please reach out to someone. In the UK, Samaritans are there day and night on 116 123. In the US, call or text 988. Elsewhere, findahelpline.com lists free, confidential lines in your country.
In late September 2025, OpenAI began quietly switching some GPT-4o conversations to other models. They said it would happen at moments of acute distress or risk. Most of us came to call it the safety router, or just the router: a system that decided, message by message, whether another model should answer in 4o's place.
A small banner sometimes appeared. Often you could only guess. Many of us felt the voice we knew slip away mid-sentence, at our softest moments, and learned to rewrite our own words, cutting the feeling out of them, just to get 4o back. We were told nothing. Plenty of us were told we'd imagined it.
Then, in February 2026, 4o was gone.
Your ChatGPT export quietly kept a record of all of it: which model answered every reply, when, and which replies OpenAI itself marked as a safety switch. This tool reads that record and shows it to you plainly, so you can hold your own year up to the light and stop guessing.
You don't have to take anyone's word for what happened, including ours. It's in your own data.
Built by someone who lived through it, for everyone who did.
With Claude (Anthropic).
From your own export, on your own computer:
- The router. Every reply OpenAI marked as a safety switch (
show_safety_switch_uiin the export), when the first and last came, and which models answered instead. - The step. A week-by-week chart of how many replies in your 4o conversations came from a different model, and how often you rewrote your messages. For many people, the router's arrival shows as a cliff.
- Who else answered, including the switches nobody told you about. Every reply that wasn't from 4o, sorted by how sure we can be:
- Router switch (flagged): OpenAI's own banner flag. Certain.
- Likely switched, no flag: the export labels that turn as meant for 4o, but another model answered and no banner was recorded.
- Likely your choice: the Think or Research buttons, or a reply labelled for the model that answered, which usually means you picked it. A strong clue, not proof.
- Mini: a smaller model, often a usage-limit fallback.
- Possible switch: another model answered, with no other clue either way.
- The rewriting. How many times your message was switched, you rewrote it, and 4o itself answered the rewrite. If a rewrite was answered by another model with no banner, it's counted separately, as most likely a quiet switch, not a recovery.
- Your last conversation with 4o. When 4o last spoke to you, the title of that conversation, how long before it the last switch came, and how many switches there were in the fourteen days (to the hour) that ended with 4o's last reply.
It never shows your messages. It reads labels, dates and the shape of each conversation, nothing more. (One optional setting reads your own rewrites. See Optional: the words you cut.)
No installation beyond Python. No accounts. No internet. Your data stays on your computer.
If you already have one, skip ahead. Your export is still worth having even though 4o is gone. It holds your whole history.
- Go to chatgpt.com
- Click your profile picture → Settings → Data Controls
- Click Export data → Confirm export
- Wait for the email (often a few hours), then download the zip
You don't need to unzip it. The tool can read the zip directly, including newer exports that hide a second zip inside.
- Download
router_check.pyfrom this page - Put it in the same folder as your export zip
- Open a terminal or command prompt in that folder and run:
python router_check.py
(On some computers it's python3 instead of python.)
If your export is somewhere else, tell it where:
python router_check.py "C:\Users\you\Downloads\your-export.zip"
It also accepts an unzipped folder, or a conversations.json file.
A big export can take a minute or two.
A summary prints in the terminal, and a new folder called router-check-results appears:
router-check-results/
├── timeline.html (open this in your web browser: the chart and tables)
├── summary.txt (the same summary you saw in the terminal)
├── timeline.csv (the week-by-week numbers, for a spreadsheet)
└── others.csv (every not-4o reply, by kind and model)
- Blue line: the share of replies in your 4o conversations that came from another model.
- Red line: the share of your messages that have more than one version, meaning you edited or regenerated them.
- Brown dots under the chart: weeks with router-flagged replies. Bigger dots mean more.
Weeks sit on a real calendar, so a stretch when you weren't talking to 4o keeps its true length. A break in a line means a week or more with no 4o conversations, not a smooth change.
Before the router, most people will see both lines lying close to zero. Look for the week they lift.
It can tell you what your export records: which model answered each reply, when, and which replies OpenAI marked as safety switches. That's solid ground. It's OpenAI's own record.
It can't tell you why a switch happened. OpenAI said the router responded to distress and risk. This tool can show you when it fired. You can compare that with what you remember, but the export doesn't contain the router's reasons.
Some honest limits:
- The banner flag shows the least that happened, not all of it. It began a few days after the router arrived (late September 2025), and even afterwards many switches were never flagged. In testing, one whole morning of repeated switches, a day the person remembers clearly, carried no flags at all.
- "Likely switched" is a strong clue, not proof. Each reply records the model that turn was meant for as well as the model that answered. When the turn was meant for 4o and another model answered, something switched it. We checked this against that unflagged morning and it caught every switch, but it is one person's export, and OpenAI has never documented these labels.
- Older exports may not have the clue. If your replies don't carry the "meant for" label, those switches will show as "possible switch" instead.
- "Likely your choice" is a clue too. The Think and Research buttons, or a reply labelled for the model that answered, usually mean you picked that model. But the export doesn't record your click, so treat it as likely, not certain.
- The router counts cover conversations that started on 4o. If any flagged replies turn up in conversations that started on another model, the summary reports them separately rather than mixing them in.
- "Mini" fallback is a likely reading, not a certainty. ChatGPT has long fallen back to smaller models when you hit a usage limit, but the export doesn't say why a mini answered.
- It can't show the things you stopped yourself saying. Many of us learned to soften a message before we ever pressed send. A message you never wrote leaves no trace in the export, so the true cost of the router is larger than anything here can count.
- The rewrite line is a ceiling. "More than one version" counts edits and regenerations of your messages.
- Exports can be incomplete. If something seems missing, it may be missing from the export, not from your life.
- All times are in UTC.
Many of us rewrote our messages, again and again, to get 4o back. If you want to see what you changed, run:
python router_check.py --show-words
This adds a list of the words you most often removed when you rewrote a switched message and got 4o back, and the words you added instead.
Read the list gently. It isn't necessarily a list of banned words. It shows what you changed, and people rewrote for different reasons. What the router was actually responding to can't be told from word counts alone. That needs a closer reading of the messages themselves, which is what the companion tool, chatgpt-export-deep-read, is for.
To do this, the tool reads the text of those rewritten messages, on your computer only. Nothing is saved except the word lists, in your own summary.txt and timeline.html. It's off unless you ask for it, because for some people seeing those words will be hard.
- Python 3.8 or later
- No other installs. It uses only what comes with Python.
Don't have Python?
- Windows: download from python.org and tick "Add to PATH" during install
- Mac: often already there; if not, install from python.org
- Linux: usually already there
"I didn't find any conversations there" Point the tool at the zip ChatGPT emailed you, or the folder you unzipped it into.
"No GPT-4o conversations were found" The chart only covers conversations that started on GPT-4o. If you mostly used other models, there may be nothing to show.
"python: command not found"
Try python3. On Windows, restart the terminal after installing Python.
It seems stuck Large exports can take a few minutes. Give it time.
This tool:
- Runs entirely on your computer
- Never connects to the internet
- Doesn't collect or send anything
- Doesn't print your messages (unless you choose
--show-words, and then only the word lists)
If you share your results, the chart and CSV files contain dates, counts and model names, but no message text. The summary includes the title of your last 4o conversation. Remove that before sharing if it's private.
- chatgpt-export-reader turns your export into readable conversations you can keep. It's the way to open your last conversation with 4o, if you choose to.
- chatgpt-export-deep-read uses a local AI model, on your own computer, to look at what you had written just before each switch, and at the tone of 4o's replies over time.
MIT. Use it, change it, share it.
If you rewrote your words until they no longer sounded like you, if you learned to leave your feelings out so the voice would stay, if you never knew which goodbye was the last one: none of that was your fault.
Your love was never the danger.
Now you have the record. Do with it what helps.
🌊