Add retirement_date field and backfill it across all first-party labs - #1923
Add retirement_date field and backfill it across all first-party labs#1923Tangerg wants to merge 2 commits into
Conversation
Adds an optional `retirement_date` field to the model schema (same YYYY-MM / YYYY-MM-DD format as release_date/last_updated) so the database can record when a model stops being served, not just that it is deprecated. OpenAI calls this the "shutdown date" and Anthropic the "retirement date"; the existing `status = "deprecated"` lifecycle value is reused unchanged. Backfills 15 first-party OpenAI and Anthropic models from official sources (OpenAI deprecations page and Anthropic model deprecations page). Wrapper/mirror providers inherit the dates automatically via symlinks and `extends`. Docs updated: README field reference + example, AGENTS.md field table. Refs anomalyco#1921 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1dc0b7d to
0f899d7
Compare
Extends the retirement_date coverage beyond OpenAI/Anthropic to every other first-party lab in the repo that publishes an official model deprecation/retirement schedule: - Google (Gemini): 11 models, from ai.google.dev deprecations page (these are Google's "earliest possible" shutdown dates) - Mistral: 14 legacy models, from docs.mistral.ai models page - Cohere: aya-expanse-8b / aya-vision-8b (retired 2026-04-04) - DeepSeek: deepseek-chat / deepseek-reasoner (discontinued 2026-07-24) - Moonshot/Kimi: 5 kimi-k2 models (discontinued 2026-05-25) status = "deprecated" is set for models already retired or clearly superseded; still-active models with only a future earliest-possible date get retirement_date without a status change. Mirror/aggregator providers inherit via symlinks and extends. Providers checked with no official retirement schedule for tracked models (left unchanged): xAI, Perplexity, Alibaba/Qwen, Amazon Bedrock, NVIDIA, Zhipu/GLM, StepFun, MiniMax, Upstage, Sarvam. Refs anomalyco#1921 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Strong +1. Keeping retirement_date orthogonal to status = "deprecated" is the key insight here — "announced but still callable" and "actually shut off" are genuinely different states, and only the latter is a hard deadline. The 3-month OpenAI example in the description makes the case well. Backfilling from official provider pages (rather than guessing) is exactly the right level of rigor for this repo. |
|
This isn't something i have bandwidth to keep up to date rn |
|
so as of now this isn't something im looking to merge |
|
but long term this would be good to have |
|
@rekram1-node Totally understand the bandwidth concern — keeping retirement dates current is real ongoing work, and that's exactly what I'm offering to take on. I'm not just proposing this in the abstract: I already consume models.dev downstream to generate the per-model catalog in my own project (lynx), where I map your Concretely, I'm happy to:
Since it's kept orthogonal to |
|
need this too. 😭 |
|
Closing this pull request as stale because it has not been updated in 7 days after feedback from @rekram1-node. Feel free to reopen it or submit a new pull request if the work is resumed. |
Summary
Implements the feature proposed in #1921: there was no way to record when a model stops being served by the provider — only that it is
deprecated.Why a separate
retirement_date? Isn'tstatus = "deprecated"enough?No — they describe two different things, and providers treat them as two distinct events:
Every major lab publishes both a deprecation announcement and a later shutdown date, with a deliberate migration buffer in between. For example, OpenAI's 2026-04-22 notice:
computer-use-preview→gpt-5.4-miniThat ~3-month gap is the window developers get to migrate.
status = "deprecated"alone tells you a model is on its way out but not when it actually disappears — which is exactly the information consumers need to plan migrations, warn users, or hide soon-dead models.So this PR keeps the two orthogonal:
status = "deprecated"→ the lifecycle state (announced, still served).retirement_date→ the date it is (or was) shut off.A model can be
deprecatedtoday with a futureretirement_date(still usable, but scheduled to die), e.g.gpt-3.5-turbo→ 2026-10-23. No newstatusvalue is introduced; the existingdeprecatedis reused. OpenAI calls this the "shutdown date" and Anthropic the "retirement date";retirement_datewas chosen as the neutral name.What's in this PR
packages/core/src/schema.ts) — adds an optionalretirement_datefield, same^\d{4}-\d{2}(-\d{2})?$format asrelease_date/last_updated.README.mdand the field table inAGENTS.md.The field flows through to
api.jsonautomatically, and all mirror/aggregator providers (Vertex, Bedrock, OpenRouter, Vercel, Azure, …) inherit it via symlinks andextends.Convention
retirement_dateis set whenever the provider publishes an official date.status = "deprecated"is set only when the model is already retired or clearly superseded. Still-active models that merely have a future published date getretirement_datewithout a status change.Coverage by provider (official sources only)
gpt-3.5-turbo,gpt-4,gpt-4-turbo,gpt-4o-2024-05-13,o1-preview,o1-mini)claude-3*,claude-3-5*,claude-3-7-sonnet,claude-sonnet-4-20250514,claude-opus-4-20250514)c4ai-aya-expanse-8b,c4ai-aya-vision-8b→ 2026-04-04)deepseek-chat,deepseek-reasoner→ 2026-07-24)kimi-k2-*→ 2026-05-25)Checked, no official retirement schedule for tracked models (left unchanged)
xAI (Grok), Perplexity (Sonar), Alibaba (Qwen / Model Studio), Amazon Bedrock, NVIDIA, Zhipu (GLM), StepFun, MiniMax, Upstage, Sarvam. For these, the provider either publishes no formal schedule, or the only dated retirements concern model IDs not tracked in this repo.
Notes for reviewers
retirement_dateis open to bikeshedding.Validation
bun run validatepasses;retirement_dateis present in the generated output for the affected models and their mirrors.