Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
b18d571
feat: add CollectiveX benchmark dashboard
Oseltamivir Jun 25, 2026
206af2c
fix: use log2 for CollectiveX token axis
Oseltamivir Jun 25, 2026
07f64a8
Merge remote-tracking branch 'origin/master' into collectivex
Oseltamivir Jun 27, 2026
04325e4
Merge remote-tracking branch 'origin/master' into collectivex
Oseltamivir Jun 27, 2026
17f137d
feat: align CollectiveX with updated report
Oseltamivir Jun 27, 2026
b778da1
fix: refine CollectiveX chart controls
Oseltamivir Jun 27, 2026
f20bfef
feat: add CollectiveX activation filter
Oseltamivir Jun 27, 2026
72b55d4
feat: align CollectiveX with v3 report
Oseltamivir Jun 29, 2026
2d0ed1f
fix: expose CollectiveX backend generation filter
Oseltamivir Jun 29, 2026
0a91b6d
fix: ingest CollectiveX aggregate runs
Oseltamivir Jun 30, 2026
ea075bc
chore: trigger CollectiveX data update for 28452161275
Jun 30, 2026
2cf1311
chore: trigger CollectiveX data update for 28492830140
Jul 1, 2026
f59b2f4
chore: trigger CollectiveX data update for 28497305436
Jul 1, 2026
9b43824
chore: trigger CollectiveX data update for 28500528370
Jul 1, 2026
21e5bba
chore: trigger CollectiveX data update for 28500063760
Jul 1, 2026
ab499be
chore: trigger CollectiveX data update for 28500059839
Jul 1, 2026
ebaa280
chore: trigger CollectiveX data update for 28500524185
Jul 1, 2026
4d99d8e
chore: trigger CollectiveX data update for 28522872429
Jul 1, 2026
14e202f
chore: trigger CollectiveX data update for 28530579787
Jul 1, 2026
47b061d
chore: trigger CollectiveX data update for 28531976125
Jul 1, 2026
1474bab
chore: trigger CollectiveX data update for 28535231056
Jul 1, 2026
f19abe7
chore: trigger CollectiveX data update for 28535221873
Jul 1, 2026
ada2681
chore: trigger CollectiveX data update for 28535235520
Jul 1, 2026
f1f5eaf
chore: trigger CollectiveX data update for 28535226475
Jul 1, 2026
db663ab
chore: trigger CollectiveX data update for 28534841204
Jul 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/collectivex-source-run.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
source_run_id=28534841204
source_sha=8cbd7c87d2b52f223b2e891b53dbbb4c65d76a83
source_workflow=CollectiveX Sweep
source_run_url=https://github.com/SemiAnalysisAI/InferenceX/actions/runs/28534841204
triggered_at=2026-07-01T19:15:20Z
83 changes: 83 additions & 0 deletions .github/workflows/update-collectivex-data.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
name: Update CollectiveX Data

on:
workflow_dispatch:
inputs:
source_run_id:
description: Optional CollectiveX workflow run ID to include before it reaches completed status
type: string
required: false
default: ''
repository_dispatch:
types: [update-collectivex-data]

concurrency:
group: update-collectivex-data
cancel-in-progress: false

permissions:
contents: write

jobs:
update:
timeout-minutes: 30
runs-on: ubuntu-latest
env:
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
SOURCE_RUN_ID: ${{ github.event.client_payload.source_run_id || inputs.source_run_id || '' }}
steps:
- name: Checkout app repository
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
ref: ${{ github.event.repository.default_branch }}
token: ${{ secrets.PAT }}
fetch-depth: 0

- name: Setup pnpm
uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8

- name: Setup Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '24'
cache: pnpm

- name: Install app dependencies
run: pnpm install --frozen-lockfile --filter @semianalysisai/inferencex-app...
env:
CYPRESS_INSTALL_BINARY: '0'

- name: Generate static CollectiveX snapshot
env:
GITHUB_TOKEN: ${{ secrets.PAT }}
run: |
set -euo pipefail
if [ -n "$SOURCE_RUN_ID" ]; then
pnpm --filter @semianalysisai/inferencex-app generate:collectivex -- \
--source-run-id "$SOURCE_RUN_ID"
else
pnpm --filter @semianalysisai/inferencex-app generate:collectivex
fi

- name: Commit snapshot when data changed
run: |
set -euo pipefail
SNAPSHOT=packages/app/public/data/collectivex.json
git add "$SNAPSHOT"
if git diff --cached --quiet; then
echo "CollectiveX snapshot is already current." >> "$GITHUB_STEP_SUMMARY"
exit 0
fi

git config user.name "InferenceX Data Bot"
git config user.email "actions@users.noreply.github.com"
git commit -m "chore: update CollectiveX data"
git pull --rebase origin "$DEFAULT_BRANCH"
git push origin "HEAD:$DEFAULT_BRANCH"

{
echo "Updated \`$SNAPSHOT\`."
if [ -n "$SOURCE_RUN_ID" ]; then
echo "Included source run: \`$SOURCE_RUN_ID\`."
fi
} >> "$GITHUB_STEP_SUMMARY"
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
**/public/data/*
!**/public/data/github-stars.json
!**/public/data/evaluation/dummy_eval_data.json
!**/public/data/collectivex.json

# cypress
**/cypress/videos/
Expand Down
6 changes: 6 additions & 0 deletions packages/app/cypress/component/tab-nav.cy.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@ describe('TabNav — unofficialrun URL preservation (issue #319)', () => {
'href',
'/submissions?unofficialruns=12345',
);
cy.get('[data-testid="tab-trigger-collectivex"]').should(
'have.attr',
'href',
'/collectivex?unofficialruns=12345',
);
cy.get('[data-testid="tab-trigger-historical"]').should(
'have.attr',
'href',
Expand Down Expand Up @@ -109,6 +114,7 @@ describe('TabNav — Hidden popover for gated tabs', () => {
mountTabNav({});
cy.get('[data-testid="tab-trigger-inference"]').should('exist');
cy.get('[data-testid="tab-trigger-gpu-specs"]').should('exist');
cy.get('[data-testid="tab-trigger-collectivex"]').should('exist');
cy.get('[data-testid="tab-trigger-submissions"]').should('exist');
cy.get('[data-testid="tab-trigger-hidden"]').should('not.exist');
cy.get('[data-testid="tab-trigger-feedback"]').should('not.exist');
Expand Down
187 changes: 187 additions & 0 deletions packages/app/cypress/e2e/collectivex.cy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
function expectToggleOptions(testId: string, labels: string[]) {
cy.get(`[data-testid="${testId}"]`)
.find('button')
.then(($buttons) => {
expect($buttons.toArray().map((button) => button.textContent?.trim())).to.deep.equal(labels);
});
}

function xTickLabels() {
return cy.get('[data-testid="collectivex-explorer-chart"] .x-axis .tick text').then(($ticks) =>
$ticks
.toArray()
.map((tick) => tick.textContent?.trim())
.filter(Boolean),
);
}

describe('CollectiveX', () => {
beforeEach(() => {
cy.intercept('GET', '/data/collectivex.json', { fixture: 'api/collectivex.json' }).as(
'collectivexData',
);
cy.visit('/collectivex');
cy.wait('@collectivexData');
});

it('renders the v3 report hierarchy with headline defaults', () => {
cy.get('[data-testid="collectivex-display"]')
.should('contain.text', 'CollectiveX')
.and('contain.text', 'Retained sweeps');

cy.contains('[role="tab"]', 'EP dispatch / combine').should(
'have.attr',
'aria-selected',
'true',
);
cy.contains('[role="tab"]', 'Decision').should('be.visible');
cy.contains('[role="tab"]', 'All-reduce').should('be.visible');
cy.contains('[role="tab"]', 'KV-cache transfer').should('be.visible');

cy.get('[data-testid="collectivex-main-chart"]')
.should('contain.text', 'Round trip (measured) · decode · p99')
.and('contain.text', 'DeepSeek-V3/V4')
.and('contain.text', 'BF16')
.and('contain.text', 'EP8');
cy.get('[data-testid="collectivex-explorer-chart"] svg').should('be.visible');
cy.get('[data-testid="collectivex-explorer-chart"] .line-path').should('have.length', 3);
cy.get('[data-testid="collectivex-explorer-chart"] .point').should('have.length', 20);
xTickLabels().should('include.members', ['1', '8', '128']);
});

it('keeps log axes sparse and byte/tokens axes readable', () => {
cy.get('[data-testid="collectivex-explorer-chart"] .y-axis .tick').should(($ticks) => {
expect($ticks.length).to.be.greaterThan(0);
expect($ticks.length).to.be.at.most(5);
});

cy.contains('[role="tab"]', 'All-reduce').click();
cy.get('[data-testid="collectivex-all-reduce-chart"] svg').should('be.visible');
cy.get('[data-testid="collectivex-all-reduce-chart"] .x-axis .tick').should(($ticks) => {
expect($ticks.length).to.be.at.most(10);
});
});

it('exposes model, backend, precision, activation, EP, publication, and axis controls', () => {
expectToggleOptions('collectivex-operation-toggle', [
'Dispatch',
'Combine',
'Round trip',
'Isolated sum',
]);
expectToggleOptions('collectivex-phase-toggle', ['Decode', 'Prefill']);
expectToggleOptions('collectivex-percentile-toggle', ['p50', 'p90', 'p99']);
expectToggleOptions('collectivex-suite-toggle', [
'All',
'Backend default',
'Resource constrained',
]);
expectToggleOptions('collectivex-publication-toggle', [
'Official headline',
'Publishable',
'Official only',
'All',
]);
expectToggleOptions('collectivex-precision-toggle', ['All', 'BF16', 'FP8']);
expectToggleOptions('collectivex-ep-toggle', ['All', 'EP8']);
expectToggleOptions('collectivex-x-scale-toggle', ['Log', 'Linear']);
expectToggleOptions('collectivex-y-scale-toggle', ['Log', 'Linear']);

cy.get('[data-testid="collectivex-model-shape-select"]').should(
'contain.text',
'DeepSeek-V3/V4',
);
cy.get('[data-testid="collectivex-backend-select"]').click();
cy.get('[role="option"]').then(($options) => {
expect($options.toArray().map((option) => option.textContent?.trim())).to.include.members([
'All',
'deepep',
'deepep v2',
]);
});
cy.contains('[role="option"]', 'All').click();
cy.get('[data-testid="collectivex-activation-select"]').click();
cy.get('[role="option"]').then(($options) => {
expect($options.toArray().map((option) => option.textContent?.trim())).to.include.members([
'All',
'Normal',
]);
});
cy.contains('[role="option"]', 'Normal').click();
cy.get('[data-testid="collectivex-activation-select"]').should('contain.text', 'Normal');
});

it('filters the EP explorer by precision, activation, routing, and phase', () => {
cy.get('[data-testid="collectivex-suite-toggle"]')
.contains('button', 'Backend default')
.click();
cy.get('[data-testid="collectivex-precision-toggle"]').contains('button', 'FP8').click();
cy.get('[data-testid="collectivex-main-chart"]')
.should('contain.text', 'FP8')
.and('contain.text', 'B300 EP8 · deepep v2 · fp8');
cy.get('[data-testid="collectivex-explorer-chart"] .line-path').should('have.length', 1);

cy.get('[data-testid="collectivex-suite-toggle"]').contains('button', 'All').click();
cy.get('[data-testid="collectivex-precision-toggle"]').contains('button', 'BF16').click();
cy.get('[data-testid="collectivex-routing-select"]').click();
cy.contains('[role="option"]', 'zipf').click();
cy.get('[data-testid="collectivex-main-chart"]').should('contain.text', 'zipf');
cy.get('[data-testid="collectivex-explorer-chart"] .line-path').should(
'have.length.at.least',
1,
);

cy.get('[data-testid="collectivex-routing-select"]').click();
cy.contains('[role="option"]', 'uniform').click();
cy.get('[data-testid="collectivex-phase-toggle"]').contains('button', 'Prefill').click();
cy.get('[data-testid="collectivex-main-chart"]').should('contain.text', 'prefill');
cy.get('[data-testid="collectivex-explorer-chart"] .line-path').should('have.length', 2);
xTickLabels().should('include.members', ['128', '256']);
});

it('renders Decision and Evidence tabs from the static snapshot', () => {
cy.contains('[role="tab"]', 'Decision').click();
cy.get('[data-testid="collectivex-decision"]')
.should('contain.text', 'Best backend')
.and('contain.text', 'Max tokens under round-trip p99 budget');
cy.get('[data-testid="collectivex-summary-card"]').should('have.length', 7);
cy.get('[data-testid="collectivex-budget-table"]').should('contain.text', '<= 100 us');

cy.contains('[role="tab"]', 'Evidence').click();
cy.get('[data-testid="collectivex-sensitivity-table"]').should('exist');
cy.get('[data-testid="collectivex-failures-table"]').should('contain.text', 'diagnostic');
cy.get('[data-testid="collectivex-coverage-table"]').should('contain.text', 'official');
cy.get('section[data-testid="collectivex-display"]').should('contain.text', 'Provenance');
});

it('renders all new collective and transfer family tabs', () => {
const familyTabs = [
['All-reduce', 'collectivex-all-reduce-chart', 'collectivex-all-reduce-metric-toggle'],
['All-gather', 'collectivex-all-gather-chart', 'collectivex-all-gather-metric-toggle'],
['CPU-GPU offload', 'collectivex-offload-chart', 'collectivex-offload-metric-toggle'],
['KV-cache transfer', 'collectivex-kv-cache-chart', 'collectivex-kv-cache-metric-toggle'],
[
'Copy-engine / SDMA',
'collectivex-copy-engine-chart',
'collectivex-copy-engine-metric-toggle',
],
['RL mesh', 'collectivex-rl-mesh-chart', 'collectivex-rl-mesh-metric-toggle'],
];

for (const [label, chartTestId, metricTestId] of familyTabs) {
cy.contains('[role="tab"]', label).click();
cy.get(`[data-testid="${metricTestId}"]`).should('be.visible');
cy.get(`[data-testid="${chartTestId}"] svg`).should('be.visible');
cy.get(`[data-testid="${chartTestId}"] .line-path`).should('have.length.at.least', 1);
}
});

it('legend toggles remove and restore a rendered EP series', () => {
cy.get('[data-testid="collectivex-main-chart"]').within(() => {
cy.contains('label', 'B300 EP8 · deepep · bf16').click();
});
cy.get('[data-testid="collectivex-explorer-chart"] .line-path').should('have.length', 2);
cy.get('[data-testid="collectivex-main-chart"]').contains('button', 'Reset filter').click();
cy.get('[data-testid="collectivex-explorer-chart"] .line-path').should('have.length', 3);
});
});
Loading