Skip to content

Commit 16dd263

Browse files
committed
fix(models): correct four release dates and source the other eight
Four of the eight dates carried over from `model-architectures.ts` were wrong, and four models had none at all. Each entry now cites its source, and records the model's first InferenceX sweep from MODELS.md beside it so the invariant that caught these — a model cannot be benchmarked before its weights exist — is checkable at review time. Corrected: - DeepSeek-V4-Pro 2026-06-08 → 2026-04-24. The old date fell six weeks after the first sweep on 2026-04-25. V4-Pro-0813 went GA on 2026-08-13, but Hugging Face still hosts the April preview build, so the weights date does not move. - Kimi-K3 2026-06-13 → 2026-07-27, when the weights were published. The product launched 2026-07-16; the eleven-day gap was to let vLLM, NVIDIA and AMD prepare day-zero support, and InferenceX swept it the day the weights landed. - MiniMax-M2.5 2025-10-25 → 2026-02-12. The old date is M2's launch, not M2.5's. M2.5 is architecturally unchanged from M2, and the architecture entry still points its sourceUrl at MiniMax-M2, which is where the date came from. - gpt-oss-120b 2025-06-13 → 2025-08-05, the Apache 2.0 release alongside gpt-oss-20b. The old date precedes it by seven weeks and matches no published event. Added: Qwen-3.5-397B-A17B 2026-02-16, GLM-5 2026-02-13, MiniMax-M3 2026-06-07, GLM-5.2 2026-06-13. Unchanged and confirmed: DeepSeek-R1-0528, Kimi-K2.5, Llama-3.3-70B, Llama-3.1-70B. Two entries are softer than the rest and say so in place. GLM-5's weights are sourced only to "mid-February", with reporting split between 2026-02-13 and 2026-02-17; GLM-5.2's Hugging Face upload is dated 2026-06-13 by most sources and 2026-06-16 by one. Both are ±3 days on an axis sampled monthly, and both are comfortably before their first sweep, so the ambiguity changes nothing — but it is an announcement-day date, not a confirmed upload day. A bucket that groups point releases takes the earliest release in it, since that is when the bucket's weights first existed: GLM-5 covers 5 and 5.1, MiniMax-M2.5 covers 2.5 and 2.7, Kimi-K2.5 covers 2.5, 2.6 and 2.7-Code. Every selectable model now has a date, so the Fleet Lifecycle axis stops falling back to "anchored to its first benchmark run" — for gpt-oss that fallback was five weeks late. Two tests, both mutation-verified: coverage over MODEL_OPTIONS (dropping Qwen-3.5 fails it), and the twelve dates pinned (reverting gpt-oss to 2025-06-13 fails it). On master the visible change is the architecture diagram caption for four models, plus MiniMax-M3 gaining one it never rendered. 中文:从 `model-architectures.ts` 迁移过来的八个日期中有四个是错的,另有四个模型完全 没有日期。现每条均附来源,并在旁记录 MODELS.md 中该模型的首次 InferenceX 基准日期, 便于评审时核对「模型不可能早于其权重发布被基准测试」这一约束。修正:DeepSeek-V4-Pro 2026-06-08 → 2026-04-24(原值比首次基准还晚六周);Kimi-K3 2026-06-13 → 2026-07-27 (权重发布日,产品发布为 07-16);MiniMax-M2.5 2025-10-25 → 2026-02-12(原值是 M2 的 发布日,非 M2.5);gpt-oss-120b 2025-06-13 → 2025-08-05(Apache 2.0 发布日,原值早了 七周且不对应任何公开事件)。新增 Qwen-3.5、GLM-5、MiniMax-M3、GLM-5.2 四个日期。 GLM-5 与 GLM-5.2 的权重上传日仅能定位到 ±3 天,已在注释中如实标明。分桶取其中最早的 发布日期。现所有可选模型均有日期,集群生命周期时间轴不再回退到首次基准日期。两项测试 均经变异测试验证。
1 parent 9b20c87 commit 16dd263

3 files changed

Lines changed: 92 additions & 11 deletions

File tree

packages/app/src/lib/model-architectures.test.ts

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { MODEL_RELEASE_DATES, getModelReleaseDate } from '@semianalysisai/inferencex-constants';
22
import { describe, expect, it } from 'vitest';
33

4-
import { Model } from '@/lib/data-mappings';
4+
import { MODEL_OPTIONS, Model } from '@/lib/data-mappings';
55

66
import {
77
type SubBlockFlow,
@@ -21,7 +21,35 @@ import {
2121
MODEL_ARCHITECTURES,
2222
} from './model-architectures';
2323

24-
describe('MODEL_RELEASE_DATES keys', () => {
24+
describe('MODEL_RELEASE_DATES coverage', () => {
25+
it('has a sourced date for every model the user can select', () => {
26+
// Without a date the Fleet Lifecycle axis falls back to the model's first
27+
// benchmark run, which reads as "this is when the model appeared" when it is
28+
// really "this is when we got to it" — for gpt-oss that gap is five weeks.
29+
// A model whose release date genuinely cannot be sourced belongs in an
30+
// explicit allowlist here, so the gap stays visible; do not delete the test.
31+
const missing = MODEL_OPTIONS.filter((model) => !getModelReleaseDate(model));
32+
expect(missing).toEqual([]);
33+
});
34+
35+
it('anchors each model to its weights publication, not its first sweep', () => {
36+
// Pinned so a silent revert fails. Every one of these predates the model's
37+
// first InferenceX sweep, which is the invariant that caught the four wrong
38+
// dates: a model cannot be benchmarked before its weights exist.
39+
expect(getModelReleaseDate(Model.Kimi_K3)).toBe('2026-07-27');
40+
expect(getModelReleaseDate(Model.GLM_5_2)).toBe('2026-06-13');
41+
expect(getModelReleaseDate(Model.MiniMax_M3)).toBe('2026-06-07');
42+
expect(getModelReleaseDate(Model.DeepSeek_V4_Pro)).toBe('2026-04-24');
43+
expect(getModelReleaseDate(Model.GLM_5)).toBe('2026-02-13');
44+
expect(getModelReleaseDate(Model.Qwen3_5)).toBe('2026-02-16');
45+
expect(getModelReleaseDate(Model.MiniMax_M2_5)).toBe('2026-02-12');
46+
expect(getModelReleaseDate(Model.Kimi_K2_5)).toBe('2026-01-27');
47+
expect(getModelReleaseDate(Model.GptOss)).toBe('2025-08-05');
48+
expect(getModelReleaseDate(Model.DeepSeek_R1)).toBe('2025-05-28');
49+
expect(getModelReleaseDate(Model.Llama3_3_70B)).toBe('2024-12-06');
50+
expect(getModelReleaseDate(Model.Llama3_1_70B)).toBe('2024-07-23');
51+
});
52+
2553
it('names a real model, so no entry is dead weight', () => {
2654
// The table is keyed by string because it lives in the constants package,
2755
// below the `Model` enum. A key that matches no model never throws — the
@@ -72,12 +100,11 @@ describe('MODEL_ARCHITECTURES', () => {
72100

73101
it('sources every architecture caption from the one release-date table', () => {
74102
// The diagram prints "Released by {developer} on {date}", so an entry with a
75-
// developer and no date silently drops the whole caption. Listing the models
76-
// that have no sourced date keeps that visible instead of invisible.
103+
// developer and no date silently drops the whole caption.
77104
const missing = Object.values(MODEL_ARCHITECTURES)
78105
.filter((arch) => arch?.developer && !getModelReleaseDate(arch.model))
79106
.map((arch) => arch!.model);
80-
expect(missing).toEqual([Model.MiniMax_M3]);
107+
expect(missing).toEqual([]);
81108
});
82109

83110
it('ensures dense models have equal active and total params', () => {

packages/constants/src/models.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,10 @@ describe('MODEL_RELEASE_DATES', () => {
7070
});
7171

7272
it('returns null rather than throwing for a model with no sourced date', () => {
73-
expect(getModelReleaseDate('GLM-5.2')).toBeNull();
73+
// Every model shipped today has a date, so this documents the fallback path
74+
// that a future model arrives on rather than an existing gap.
7475
expect(getModelReleaseDate('not-a-model')).toBeNull();
76+
expect(getModelReleaseDate('')).toBeNull();
7577
});
7678
});
7779

packages/constants/src/models.ts

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,66 @@ export function rowToSequence(row: {
105105
* earliest date they actually have data for.
106106
*/
107107
export const MODEL_RELEASE_DATES: Record<string, string> = {
108+
// Newest first. `sweep:` is the model's "Date added" from MODELS.md — the first
109+
// InferenceX benchmark — recorded so the "cannot predate its own weights"
110+
// invariant above is checkable by eye at review time.
111+
//
112+
// Weights published on Hugging Face 2026-07-27 under the Kimi K3 License,
113+
// eleven days after the 2026-07-16 product launch; the gap was to let vLLM,
114+
// NVIDIA and AMD prepare day-zero support. sweep: 2026-07-27 — day zero.
115+
'Kimi-K3': '2026-07-27',
116+
// Zhipu launched GLM-5.2 on 2026-06-13 via the GLM Coding Plan with MIT
117+
// weights at zai-org/GLM-5.2; standalone API and provider support followed
118+
// over the next few days. One source dates the Hugging Face upload 2026-06-16
119+
// instead, so this is ±3 days — immaterial on a multi-month axis, but it is an
120+
// announcement-day date rather than a confirmed upload day. sweep: 2026-07-18.
121+
'GLM-5.2': '2026-06-13',
122+
// Weights and the official MXFP8 quant live on Hugging Face at
123+
// MiniMaxAI/MiniMax-M3 by 2026-06-07, under the custom minimax-community
124+
// license. The 2026-06-01 launch shipped API access only; the arXiv report
125+
// followed on 2026-06-11. sweep: 2026-06-12.
126+
'MiniMax-M3': '2026-06-07',
127+
// V4 Preview — V4-Pro (1.6T total / 49B active) and V4-Flash (284B/13B)
128+
// published together under MIT on Hugging Face, the API and chat.deepseek.com.
129+
// V4-Pro-0813 went GA on 2026-08-13, but the Hugging Face repo still hosts the
130+
// April preview build, so the weights date is unchanged. sweep: 2026-04-25.
131+
'DeepSeek-V4-Pro': '2026-04-24',
132+
// Bucket covers GLM-5 and GLM-5.1, so the date is GLM-5's: released
133+
// 2026-02-13, 744B/40B active, MIT, trained entirely on Huawei Ascend. Sources
134+
// put the weights in "mid-February" without a day, and reporting clusters on
135+
// 2026-02-13 and 2026-02-17; the Hugging Face commit history at zai-org/GLM-5
136+
// is the authority if this ever needs to be exact. GLM-5.1 followed in April
137+
// 2026. sweep: 2026-03-06.
138+
'GLM-5': '2026-02-13',
139+
// Apache 2.0 weights, plus official FP8 and GPTQ-Int4 quants, published at
140+
// Qwen/Qwen3.5-397B-A17B on 2026-02-16 — the same day InferenceX first swept
141+
// it. sweep: 2026-02-16 — day zero.
142+
'Qwen-3.5-397B-A17B': '2026-02-16',
143+
// Bucket covers M2.5 and M2.7, so the date is M2.5's: announced 2026-02-12
144+
// with weights on Hugging Face, architecturally unchanged from M2 (230B/10B).
145+
// Was 2025-10-25, which is M2's launch, not M2.5's — `model-architectures.ts`
146+
// still points its sourceUrl at MiniMax-M2, which is where that came from.
147+
// sweep: 2026-02-18.
148+
'MiniMax-M2.5': '2026-02-12',
149+
// Weights at moonshotai/Kimi-K2.5 on 2026-01-27 under a modified MIT license,
150+
// 1.04T total / 32B active. sweep: 2026-02-17.
151+
'Kimi-K2.5': '2026-01-27',
152+
// Weights landed on Hugging Face 2025-08-05 under Apache 2.0, alongside
153+
// gpt-oss-20b — OpenAI's first open-weight release since GPT-2. AWS Bedrock
154+
// lists the same launch date; the model-card paper followed on 2025-08-08. Was
155+
// 2025-06-13, which precedes the release by seven weeks and matches no
156+
// published event. sweep: 2025-09-09.
157+
'gpt-oss-120b': '2025-08-05',
158+
// Announced by WeChat post and pushed to Hugging Face on 2025-05-28 under MIT
159+
// — the date the model name encodes. The model card commit landed a day later,
160+
// weights first. sweep: 2025-08-13.
108161
'DeepSeek-R1-0528': '2025-05-28',
162+
// Meta published Llama 3.3 70B Instruct on 2024-12-06. sweep: 2025-08-12,
163+
// shipped as workflow templates in the initial repo import.
109164
'Llama-3.3-70B-Instruct-FP8': '2024-12-06',
165+
// Llama 3.1 was published 2024-07-23. Hidden in the model selector, but the
166+
// architecture diagram still captions it. No InferenceX sweep of its own.
110167
'Llama-3.1-70B-Instruct-FP8-KV': '2024-07-23',
111-
'gpt-oss-120b': '2025-06-13',
112-
'Kimi-K2.5': '2026-01-27',
113-
'Kimi-K3': '2026-06-13',
114-
'MiniMax-M2.5': '2025-10-25',
115-
'DeepSeek-V4-Pro': '2026-06-08',
116168
};
117169

118170
/** Release date for a display model name, or null when we have no sourced date. */

0 commit comments

Comments
 (0)