Skip to content

feat: add MiniMax M3 to /compare, /compare-per-dollar, architecture diagram, and ingest#456

Merged
functionstackx merged 1 commit into
masterfrom
feat/minimax-m3-everywhere
Jun 13, 2026
Merged

feat: add MiniMax M3 to /compare, /compare-per-dollar, architecture diagram, and ingest#456
functionstackx merged 1 commit into
masterfrom
feat/minimax-m3-everywhere

Conversation

@functionstackx

@functionstackx functionstackx commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

MiniMax M3 (428B) shipped in the model dropdown (#444 / reorders #450, #455) but was missing from every surface that maintains its own model list independent of `MODEL_CONFIG`. This adds it everywhere those lists live.

What changed

Surface File Change
/compare, /compare-per-dollar, sitemap, OG images `compare-slug.ts` `minimax-m3` entry in `COMPARE_MODEL_SLUGS` (`dbKeys: ['minimaxm3']`, label "MiniMax M3 428B"), placed before `minimax-m27` so the newer flagship leads. Distinct architecture → own slug/dbKey, not joined to the M2 group. Bare `minimax` alias stays on the M2 series for link compat.
`?g_model=` validation `compare-ssr.ts` `'MiniMax-M3'` added to `KNOWN_MODELS`.
Compare SEO meta `compare/page.tsx`, `compare-per-dollar/page.tsx` "MiniMax M3 428B" added to the `DESCRIPTION` model catalog blurb.
Architecture diagram (inference tab) `model-architectures.ts` New `Model.MiniMax_M3` entry from the verified HF `config.json`: 428B/23B, 60 layers, hidden 6144, 64Q/4KV heads, 129 experts (128 routed + 1 shared, 4 active), 1M context, MiniMax Sparse Attention (MSA), QK Norm, SwiGLU, native multimodality.
Ingest `normalizers.ts` `'MiniMaxAI/MiniMax-M3': 'minimaxm3'` HF-path mapping in `MODEL_TO_KEY`.

/about needs no change — its model list derives from `DB_MODEL_TO_DISPLAY` (already has `minimaxm3`), so it already lists MiniMax-M3 (verified on the live page). Same for `submissions-utils.ts` (data-driven).

Tests

  • `compare-slug.test.ts`: parse `minimax-m3-h100-vs-h200` + alias resolution (bare `minimax` stays on M2).
  • `model-architectures.test.ts`: M3 added to the required-models list + a dedicated spec asserting every field.
  • `model-architecture.cy.ts`: e2e block selecting MiniMax M3 — MoE/GQA/428B badges, static (non-expandable) sparse-attention block, MSA feature visible.
  • All unit suites green (compare-slug, model-architectures, data-mappings: 123; db normalizers: 63). Typecheck/oxlint/oxfmt clean via pre-commit.

Notes

  • Only B300 currently has `minimaxm3` benchmark rows (per the live availability API, dates 2026-06-12/13). The /compare index only renders a model section once two GPUs have data (`getComparablePairsByModelSlug` needs both sides of a pair), so the M3 section/sitemap-URLs/OG appear automatically when a second GPU lands; direct `/compare/minimax-m3-*` URLs show the standard empty state until then.
  • The architecture entry omits `releaseDate` — I couldn't verify the exact public release date (HF initial commit ~2026-06-12, but no authoritative date), and would rather leave it off than assert a wrong one. The diagram's "Released by … on …" line simply hides; everything else renders.
  • `docs/adding-entities.md`: the "Adding a New Model" checklist now lists the compare-slug, `KNOWN_MODELS`, compare-description, and architecture steps that were previously undocumented (the reason M3 fell through).
  • Overlay support: N/A — these are SSR routing / static-architecture / ingest changes, not inference/evaluation chart-data paths.

Supersedes #451 (which only touched compare-slug/ssr from an older master).

🤖 Generated with Claude Code


Note

Low Risk
Additive registry entries, SEO copy, ingest mapping, and static architecture metadata with broad test coverage; no auth or core pipeline logic changes.

Overview
MiniMax M3 was already in the dashboard dropdown but missing from every separate model registry (compare routes, ingest paths, architecture data). This PR closes that gap.

It adds a dedicated minimax-m3 compare slug (dbKeys: ['minimaxm3'], label "MiniMax M3 428B") ahead of minimax-m27, registers MiniMax-M3 in compare ?g_model= validation, and updates /compare and /compare-per-dollar SEO descriptions. ETL maps MiniMaxAI/MiniMax-M3minimaxm3.

The inference-tab architecture diagram gets a full M3 spec (428B/23B MoE, MSA, static non-expandable GQA attention like M2.5). docs/adding-entities.md now documents compare-slug, KNOWN_MODELS, SEO blurbs, and architecture checklist steps that were easy to skip.

Tests cover slug parsing/aliases, architecture fields, and Cypress for M3 badges and MSA copy.

Reviewed by Cursor Bugbot for commit 90f1528. Bugbot is set up for automated code reviews on this repo. Configure here.

MiniMax M3 (428B) was in the model dropdown but missing from the
non-dropdown surfaces that maintain their own model lists:

- compare-slug.ts: COMPARE_MODEL_SLUGS entry (drives /compare,
  /compare-per-dollar, sitemap, OG images)
- compare-ssr.ts: KNOWN_MODELS for ?g_model= validation
- compare + compare-per-dollar page DESCRIPTION meta strings
- model-architectures.ts: architecture diagram entry (verified from
  the HF MiniMax-M3 config.json)
- normalizers.ts: MODEL_TO_KEY HF-path mapping for ingest

/about needs no change (derives from DB_MODEL_TO_DISPLAY).

Tests: compare-slug, model-architectures (unit + e2e) updated.
Docs: adding-entities checklist now lists the compare/architecture steps.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@functionstackx functionstackx requested a review from adibarra as a code owner June 13, 2026 18:50
@vercel

vercel Bot commented Jun 13, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
inferencemax-app Ready Ready Preview, Comment Jun 13, 2026 6:50pm

Request Review

@functionstackx functionstackx merged commit 46e8a5e into master Jun 13, 2026
16 of 18 checks passed
@functionstackx functionstackx deleted the feat/minimax-m3-everywhere branch June 13, 2026 18:52
@blacksmith-sh

blacksmith-sh Bot commented Jun 13, 2026

Copy link
Copy Markdown

Found 3 test failures on Blacksmith runners:

Failures

Test View Logs
Model Architecture Diagram › Alternating Attention Blocks (MoE model - gpt-oss 120B)/
"before all" hook for "shows MoE and Sink/Full GQA badges for gpt-oss"
View Logs
Model Architecture Diagram › Collapsible Transformer Blocks (MoE model - MiniMax M3)/
"before all" hook for "shows MoE and GQA badges for MiniMax M3"
View Logs
Model Architecture Diagram › Hybrid Attention Blocks (MoE model - DeepSeek V4 Pro)/
"before all" hook for "shows MoE and Hybrid badges for DeepSeek V4 Pro"
View Logs

Fix with Codesmith
Need help on this PR? Tag /codesmith with what you need.

@adibarra

Copy link
Copy Markdown
Contributor

@claude make a new branch/pr to fix these ci failures

@github-actions

github-actions Bot commented Jun 14, 2026

Copy link
Copy Markdown
Contributor

Claude finished @adibarra's task in 10m 39s —— View jobclaude/pr-456-20260614-0714Create PR ➔


Fixing CI failures from #456

Root cause. The model-architecture.cy.ts suite runs under E2E_FIXTURES=1 (set in .github/workflows/tests-e2e.yml), which makes the API routes read packages/app/cypress/fixtures/api/*.json instead of the DB. PR #456 added a new MiniMax M3 describe block (model-architecture.cy.ts:244-279) that does cy.get('[role="option"]').contains('MiniMax M3').click(), but the fixture availability.json predated M3 — no minimaxm3 rows. GlobalFilterContext.availableModels therefore filtered MiniMax M3 out of the dropdown, the before all hook timed out, and the leftover open Radix popper cascaded into the next two suites failing on [role="combobox"] not visible (the gpt-oss and DeepSeek V4 Pro blocks).

Fix. Regenerated all 7 fixtures from prod via pnpm --filter app capture:fixtures (the workflow documented in packages/app/src/lib/test-fixtures.ts and packages/app/scripts/capture-cypress-fixtures.ts). The capture script hits https://inferencex.semianalysis.com and rewrites availability / benchmarks / benchmarks-history / evaluations / reliability / submissions / workflow-info. availability.json now contains minimaxm3 (24 rows) — verified before push.

Local verification. Built with E2E_FIXTURES=1 pnpm build, served with E2E_FIXTURES=1 pnpm start, ran the spec headless in Chrome:

✔ model-architecture.cy.ts    00:08    45    45    -    -    -
✔ All specs passed!

All three previously-failing suites (MiniMax M3, gpt-oss 120B, DeepSeek V4 Pro) now pass.

  • Identify root cause (stale fixtures, no minimaxm3)
  • Refresh fixtures from prod (pnpm capture:fixtures)
  • Verify minimaxm3 appears in availability.json (24 rows)
  • Run failing E2E spec locally — 45/45 passing
  • Commit and push branch claude/pr-456-20260614-0714

· Branch

adibarra added a commit that referenced this pull request Jun 14, 2026
#458)

* chore(e2e): refresh Cypress fixtures so MiniMax M3 appears in dropdown

The E2E_FIXTURES=1 cypress build serves availability.json (and the rest of
packages/app/cypress/fixtures/api/) instead of querying the DB. After #456
added MiniMax M3 to the dashboard, the model-architecture.cy.ts spec gained
a new MiniMax M3 describe block that tries to click `MiniMax M3` in the
model dropdown — but the fixture availability.json predated M3, so
GlobalFilterContext.availableModels filtered MiniMax M3 out of the dropdown
and the `cy.contains('MiniMax M3').click()` in the `before all` hook timed
out. The leftover open Radix popper then took out the gpt-oss and DeepSeek
V4 Pro suites with `[role="combobox"]` not visible.

Refreshed via `pnpm --filter app capture:fixtures` (captures from
https://inferencex.semianalysis.com). Verified locally:
`E2E_FIXTURES=1 pnpm start` + `cypress run --spec model-architecture.cy.ts`
→ 45/45 passing.

Co-authored-by: Alec Ibarra <adibarra@users.noreply.github.com>

* fix(e2e): pair i_prec=fp8 URL with a model that has FP8 in fixtures

After PR #435 made DeepSeek-V4-Pro the default model, the refreshed
availability fixture (which includes only FP4 for dsv4) caused
`effectivePrecisions` to intersect the URL-seeded ['fp8'] with the
available set and fall back to FP4. The precision-multiselect then
rendered FP4 instead of the expected FP8.

Add `g_model=DeepSeek-R1-0528` to the two affected specs so the URL
selection is meaningful — matching the workaround already used by the
"multiple URL params" test in url-params.cy.ts.

Co-authored-by: Alec Ibarra <adibarra@users.noreply.github.com>

* chore(fixtures): apply oxfmt formatting to refreshed Cypress fixtures

Co-authored-by: Alec Ibarra <adibarra@users.noreply.github.com>

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Alec Ibarra <adibarra@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants