Model history
Models & usage is a snapshot of today. This page is the path that got us there: when each AI-bearing service came online, every model swap since, and what was retired along the way.
Every row is derived from source-repo git history — the commit that made the change is cited. Dates are commit dates on the mainline branch.
Read it top to bottom and the shape is obvious: OpenAI has been there since the first commit and never stops accumulating; Anthropic arrives all at once in March 2026 and stays inside its own lane; the video vendors land together in a single commit and never move again.
Where we are today
Section titled “Where we are today”| Service | Provider | Models |
|---|---|---|
ai-api — chat, reports, utility | OpenAI (+1 Google) | gpt-5.5, gpt-5.2, gpt-5, gpt-5-mini, gpt-5-nano, gpt-4.1/-mini/-nano, gemini-2.5-flash-lite |
pulsead-agents — autonomous ops | Anthropic (AWS Bedrock) | claude-haiku-4-5, claude-sonnet-4-6, claude-opus-4-8 |
| Snowflake Cortex — semantic SQL | Anthropic | claude-sonnet-4-6 |
| Creative — images | Google + OpenAI | gemini-3-pro-image-preview, gemini-3.1-flash-image-preview, gpt-5.5 + image_generation |
| Creative — video | 5 vendors | Sora 2, Runway, Kling, Google Veo, Grok |
Services coming online
Section titled “Services coming online”Each row is the first commit that put an AI-bearing service in the tree.
| Date | Service | Came up on |
|---|---|---|
| 2025-02-21 | ai-api — first commit | gpt-4o |
| 2025-06-12 | Search-term clustering | Gemini (preview build) |
| 2025-06-27 | PSM chat engine (psm_chatbot.py) | gpt-4.1 |
| 2025-08-11 | Chart tool | gpt-5-nano (from 2025-08-18) |
| 2026-01-27 | banana-bunch — bulk image generation | gemini-3-pro-image-preview |
| 2026-03-17 | pulsead-agents — first autonomous agent (monitoring) | claude-haiku-4-5 |
| 2026-03-24 | Weekly Report pipeline (4 agents) | claude-sonnet-4 for the writer |
| 2026-03-25 | Ads scheduler + executor | claude-haiku-4-5 |
| 2026-03-25 | ads-variation — banner reflow | gemini-3.1-flash-image-preview |
| 2026-04-01 | data_semanticview — semantic SQL layer | Cortex |
| 2026-04-03 | video-generator — all 5 providers at once | Sora, Runway, Kling, Veo, Grok |
| 2026-04-03 | Optimize Cycle group | Bedrock Claude |
| 2026-04-09 | AMC group — router / advisor / writer | Haiku + Sonnet |
| 2026-04-23 | Pulson agent wrapper | delegates to PSM |
| 2026-04-28 | Action chat — the multi-agent chat that is live today | gpt-5 + gpt-5-mini |
| 2026-05-09 | Memory classifier | gpt-5-nano |
| 2026-05-14 | Keyword harvester + waste-keyword pauser | claude-sonnet-4-6 |
| 2026-05-15 | Dashboard Report Agent | gpt-5.2 |
| 2026-05-26 | Brand augment extractor | gpt-5-mini |
| 2026-07-09 | Weekly-report summary API | claude-opus-4-8 |
| 2026-08-06 | Support reminder cron | no LLM — pure Python |
The last row is not a typo. support_reminder is a scheduled job that reads Postgres
and posts to Slack; it holds no model. Not everything added to an agents repo is an
agent.
ai-api — the OpenAI line
Section titled “ai-api — the OpenAI line”| Date | Change | Commit |
|---|---|---|
| 2025-02-21 | Launches on gpt-4o | 23daa671 first commit |
| 2025-05-22 | gpt-4.1 enters the tree | fce70698 |
| 2025-06-25 | gpt-4o-mini and gpt-4.1-mini added for cheap paths | 73629285 |
| 2025-08-18 | Chart generation moved to gpt-5-nano | b4852c19 “chart model을 5 nano로 변경” |
| 2025-11-21 | Search-term clustering: gemini-2.5-flash-lite-preview-06-17 → gemini-2.5-flash-lite | 6730a4db |
| 2025-12-28 | PSM researcher: gpt-4.1 → gpt-5.2 | 2f9f2e26 “model version을 4.1에서 5.2로 업그레이드” |
| 2025-12-29 | gpt-4.1-nano added for the cheapest summaries | b1d82131 |
| 2026-04-10 | Last gpt-4o-mini use removed | 2cefbde9 |
| 2026-04-28 | Action chat ships on gpt-5 (base) + gpt-5-mini (sub-agents) | 91f6388a |
| 2026-05-07 | Last gpt-4o use removed from code | 3ea61511 |
| 2026-05-27 | Sub-agents upgraded gpt-5-mini → gpt-5.5 | eef0662d |
The 2026-05-27 swap is the interesting one. Action chat launched a month earlier
with gpt-5-mini on all four sub-agents. Within four weeks, query, insight, action,
and diagnose were all moved up to gpt-5.5 — while task stayed on gpt-5-mini and
the router stayed on gpt-4.1-mini. The reasoning seats got upgraded; the
classification seats did not.
pulsead-agents — the Bedrock line
Section titled “pulsead-agents — the Bedrock line”Two shared constants drive nearly every autonomous agent, so the whole fleet moves
when one line in shared/config.py changes.
| Date | Change | Commit |
|---|---|---|
| 2026-03-17 | MODEL_ID = claude-haiku-4-5 — the fleet default, set with the first agent | b3c284e |
| 2026-03-24 | WRITER_MODEL_ID = claude-sonnet-4 — report writer promoted | 26eafe4 “upgrade report writer to Sonnet” |
| 2026-04-07 | WRITER_MODEL_ID → claude-sonnet-4-6 | d126140 |
| 2026-04-07 | Rolled back to claude-sonnet-4 — Sonnet 4.6 not subscribed on Marketplace | 0b2b4b4 |
| 2026-04-07 | Re-applied — access resolved | 0e72e14 |
| 2026-07-09 | SUMMARY_MODEL_ID = claude-opus-4-8, for weekly-report summaries only | 805c78b |
The three 2026-04-07 commits are the same day. The Sonnet 4.6 upgrade shipped, broke on a Bedrock Marketplace subscription that wasn’t in place, got reverted, and went back out once the subscription cleared — all within one day. It is the only model rollback in any repo’s history.
claude-opus-4-8 is the only Opus in the stack and drives exactly one job. Everything
else that writes prose runs Sonnet 4.6.
Snowflake Cortex — semantic SQL
Section titled “Snowflake Cortex — semantic SQL”| Date | Change | Commit |
|---|---|---|
| 2026-04-01 | data_semanticview repo created | initial commit |
| 2026-04-09 | Agent v3.1 deployed on claude-sonnet-4-6, up from claude-sonnet-4 | e99b71a |
Same week as the pulsead-agents move to Sonnet 4.6, and unchanged since — the
longest-stable model choice in the stack.
Creative
Section titled “Creative”| Date | Change | Commit |
|---|---|---|
| 2026-01-27 | banana-bunch launches on gemini-3-pro-image-preview (app ID nano-banana-pro) | 1b7550a |
| 2026-03-25 | ads-variation launches on gemini-3.1-flash-image-preview | 6ea3e6c |
| 2026-04-03 | video-generator ships with all five providers in the initial commit | initial commit |
| 2026-06-17 | banana-bunch adds OpenAI gpt-5.5 + image_generation as a selectable model | c87b2bd |
| 2026-06-17 | ads-variation adds the same option | 3954ec0 |
Both image apps gained the OpenAI option on the same day, in two separate repos. Gemini stayed the default in both; OpenAI is opt-in per run. This is the only place in PulseAd where two vendors serve the same job and the choice is left to the operator — everywhere else the vendor is fixed by the service.
Note the two apps do not share a Gemini model: banana-bunch runs Pro,
ads-variation runs Flash. Neither calls OpenAI’s image endpoint directly; both go
through the Responses API with the image_generation tool.
AOP — the operator surface
Section titled “AOP — the operator surface”The aop CLI and its server run their own models, chosen independently of
ai-api. This is the second-largest model surface in the company and shares nothing
with the chat stack.
| Date | Change | Commit |
|---|---|---|
| 2026-05-04 | aop-hermes imported — the Hermes engine, carrying claude-opus-4-7 only as a context-window entry in agent/model_metadata.py. No agent ran it yet | 19613d9 |
| 2026-06-08 | Operator profiles created and pinned — claude-opus-4-7 on four of them, gpt-4o-mini-tts for speech, claude-sonnet-4-6 and claude-haiku-4-5 as lighter options | dd77861 |
| 2026-06-23 | aop-hermes-server created — the fleet runtime | initial commit |
| 2026-06-29 | First fleet profile config lands | 79631d0 |
| 2026-07-30 | Fleet default → openai/gpt-5.6-sol, via OpenRouter | faa4acb |
| 2026-07-30 | Fleet default → openai/gpt-5.6-terra — same day | 0e6b6f4 |
gpt-5.6-sol was the fleet default for part of a single day. It shipped and was
superseded by terra in the same 24 hours — the second same-day model reversal on
record, after the Sonnet 4.6 rollback. Unlike that one, this wasn’t a failure: both
commits read as a deliberate upgrade sequence.
Note the month between those two rows. Importing an engine that supports a model is not the same as running it — the AOP agents didn’t touch Opus until the profiles existed. Reading the repo-wide history alone would date this a month early.
claude-opus-4-7 is worth noting because it appears nowhere in ai-api. The
operator CLI reaches for a heavier reasoning model than anything the customer-facing
chat runs.
Snowflake — the semantic layer’s own models
Section titled “Snowflake — the semantic layer’s own models”Distinct from Cortex, which is what serves text-to-SQL. These are the models that build the semantic layer.
| Date | Change | Commit |
|---|---|---|
| 2026-03-31 | snowflake-multi-agent prototype on claude-sonnet-4-20250514 | bc0f21d |
| 2026-04-13 | snowflake-semantic-agent scaffold imported | initial commit |
| 2026-05-08 | Tutorial-based SA extractor on claude-3-5-sonnet-20241022-v2 (Bedrock) | 59bad012 |
| 2026-05-19 | Column-description generation on claude-haiku-4-5 | 4de915c3 |
snowflake-multi-agent has one commit and no activity since 2026-03-31. It reads
as a prototype that was superseded by snowflake-semantic-agent two weeks later, but
nothing in the repo says so — treat it as unresolved rather than retired.
The claude-3-5-sonnet-20241022-v2 pin is the oldest model still referenced
anywhere in PulseAd. Everything else on this page has moved to a 4-series or
5-series model.
Retired
Section titled “Retired”| Model | In use | Retired by |
|---|---|---|
gpt-4o | 2025-02-21 → 2026-05-07 | Superseded by the GPT-5 family; still declared, unread, in env files |
gpt-4o-mini | 2025-06-25 → 2026-04-10 | Replaced by gpt-4.1-mini |
gemini-2.5-flash-lite-preview-06-17 | → 2025-11-21 | Preview build swapped for the GA model |
claude-sonnet-4 | 2026-03-24 → 2026-04-07 | Superseded by Sonnet 4.6 |
| Weekly Report 4-agent pipeline (Haiku + Sonnet) | 2026-03-24 → 2026-06-25 | Whole pipeline deleted; replaced 2026-07-09 by one Opus 4.8 endpoint |
Models that build the product
Section titled “Models that build the product”These run models but are not the product — no customer request ever reaches them. They’re here because “which models does PulseAd use” gets answered wrong without them, and because the dev toolchain shows the same adoption reflex a quarter early. They get no bands on the chart.
| Date | Where | Model | What it does |
|---|---|---|---|
| 2026-04-13 | pulsy-frontend CI | gpt-5.4 | Codex-based review autofix on pull requests |
| 2026-04-13 | pulsy-frontend agents/ | gpt-5.4, claude-opus-4-7 | Preferred models for the repo’s development agent roles |
| 2026-03-19 | pulsy-qa | claude-opus-4-20250514 | The L3 judge that grades Pulson’s answers |
| 2026-03-19 | pulsy-qa | claude-haiku-4-5-20251001 | SQL verification, docs lookup, report assembly |
| 2026-03-19 | pulsy-qa | claude-sonnet-4-20250514 | Alternative eval policy |
Three things follow. The dev toolchain adopts ahead of the product: gpt-5.4 was
running in CI on 2026-04-13, six weeks before gpt-5.5 reached the chat sub-agents on
2026-05-27. claude-opus-4-7 shows up in dev tooling and in AOP, never in ai-api
— the customer-facing chat has never run an Opus-class model. And PulseAd has run
Opus since 2026-03-19 — but to grade Pulson’s answers, not to produce them. The
product’s first Opus arrived on 2026-07-09, sixteen weeks later.
pulsy-qa’s pins have not moved since its first commit. claude-opus-4-20250514 and
claude-sonnet-4-20250514 are both May-2025 snapshots, so the harness grades a
2026 product with 2025 models.
Checked and running no models
Section titled “Checked and running no models”Recorded so the next audit doesn’t repeat this one.
| Repo | Finding |
|---|---|
prefect | No LLM SDK anywhere in code. Its claude/gpt strings are planning docs describing other services, plus a Google service-account address that happens to read claude-code@… |
portal, portal-api, portal-frontend | Zero model references. The prior-generation product ran no LLMs at all — the AI story starts with ai-api on 2025-02-21, and nothing precedes it |
The portal result is the more interesting one. It means PulseAd’s first generation shipped and was retired without a model in it; everything on this page postdates that line.
What the sequence shows
Section titled “What the sequence shows”Vendor is decided by service, not by task. ai-api has been OpenAI since its
first commit and has never run a Claude model. pulsead-agents has been Anthropic
since its first commit and has never run a GPT. No agent has ever moved between them.
That boundary is infrastructure — direct API versus AWS Bedrock — not a per-task
judgment. AOP is the exception that confirms it: a third service, a third vendor
posture (Anthropic on the CLI, OpenAI via OpenRouter on the fleet), decided
independently of both.
Reasoning power is inverted against audience. The heaviest models in the company
run where staff are — claude-opus-4-7 on the AOP operator CLI, claude-opus-4-8 on
the weekly report — while the customer-facing chat tops out at gpt-5.5 and has never
run an Opus-class model. Whether that’s a cost decision or a latency one isn’t
recorded anywhere in the code.
Upgrades hit the reasoning seats and skip the cheap ones. The router has been on
a -mini model since 2025. Chart generation has been on nano since 2025-08. Meanwhile
the same product’s reasoning seats went gpt-4.1 → gpt-5.2 → gpt-5.5, and the
Bedrock writers went Sonnet 4 → Sonnet 4.6 → Opus 4.8 for the hardest job.
Adoption is fast and occasionally too fast. Sonnet 4.6 went in the day it was tried, broke on an unsubscribed Bedrock Marketplace entry, and was rolled back and re-applied within hours. That is the only rollback on record — the rest of the swaps stuck on the first attempt.
Re-run /sync-docs to refresh this from source.