Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
c79c34b
feat: add curated landing page with 1-click preset views (#604)
adibarra Mar 25, 2026
cbb65e6
restore original IntroSection on landing page
adibarra Mar 25, 2026
af3edb6
fix: Dashboard nav link points to /inference, not highlighted on land…
adibarra Mar 25, 2026
ec2ad6e
Merge branch 'master' into feat/curated-landing-page
adibarra Mar 25, 2026
be04ace
perf: gzip compress API route responses
adibarra Mar 25, 2026
0457f78
fix(a11y): improve color contrast for WCAG AA compliance
adibarra Mar 25, 2026
1fe9833
fix: gate analytics to appropriate environments
adibarra Mar 25, 2026
089027b
fix: date-picker hydration mismatch and footer logo aspect ratio
adibarra Mar 25, 2026
b6f0ddf
refactor: convert tab system to real Next.js pages
adibarra Mar 25, 2026
f1677af
merge master into feat/curated-landing-page
adibarra Mar 25, 2026
8427218
fix(a11y): lower inactive carousel button contrast for better active …
adibarra Mar 25, 2026
4e1f699
fix: restore landing page at / and add back-to-home breadcrumb on das…
adibarra Mar 25, 2026
a9cc609
merge master
adibarra Mar 25, 2026
3f313c3
Merge branch 'master' into feat/curated-landing-page
adibarra Mar 25, 2026
164bb55
Merge branch 'master' into feat/curated-landing-page
adibarra Mar 25, 2026
840add9
Merge remote-tracking branch 'origin/master' into feat/curated-landin…
adibarra Mar 25, 2026
800dc5a
SSR GitHub star count and remove client-side API route
adibarra Mar 25, 2026
787a8a8
redesign landing page with split layout, remove favorites bar from /i…
adibarra Mar 25, 2026
46c1530
make SA logo slightly bigger in header
adibarra Mar 25, 2026
0dc2f8d
extract CircuitBackground component, show at all breakpoints, respons…
adibarra Mar 25, 2026
19b9394
add Home nav link, sticky glass header, remove back link from dashboard
adibarra Mar 25, 2026
82b6f17
rework tab nav: card wrapper, single TAB_LINKS array, evenly spaced l…
adibarra Mar 25, 2026
3cb4beb
glass effect on all cards and header, border-border/40
adibarra Mar 25, 2026
50fa980
add gap-4 between cards on all dashboard pages
adibarra Mar 25, 2026
fe78f0d
merge run info and artifact cards in PowerX, use brand color for run …
adibarra Mar 25, 2026
f26e049
reduce tab card vertical padding
adibarra Mar 25, 2026
6b2b6a4
landing page panels use Card component, match glass styling
adibarra Mar 25, 2026
f13172b
restyle curated view cards with brand accent bar and hover effects
adibarra Mar 25, 2026
7700b83
use brand color for dashboard button and landing page icons
adibarra Mar 25, 2026
b818269
link v1/v2 articles to local blog, add hover to run selector
adibarra Mar 25, 2026
3485b3f
improve star button border visibility in light mode
adibarra Mar 25, 2026
b620f45
unify run date, run selector, and changelog button styling
adibarra Mar 25, 2026
03f7087
only change star button border on hover when pulsing
adibarra Mar 25, 2026
b049938
add gap-4 between cards on media, supporters, and articles pages
adibarra Mar 25, 2026
f1e2e5b
combine header and content into single card on articles, supporters, …
adibarra Mar 25, 2026
7fe0897
match blog post card styling to Card component
adibarra Mar 25, 2026
7c1c5f4
use full border on clickable cards, add brand accent bar and arrow to…
adibarra Mar 25, 2026
1165b93
combine header, TOC, and article into single card on blog post page
adibarra Mar 25, 2026
8c0932c
fix: portal sidebar TOC to body to avoid backdrop-filter breaking fix…
adibarra Mar 25, 2026
0e8bde0
polish sidebar TOC: flexible width, hidden scrollbar, more top padding
adibarra Mar 25, 2026
157d2e7
fix: use fixed positioning for circuit background so it stays visible…
adibarra Mar 25, 2026
d3dd8b8
style blog prev/next nav with glassy card treatment
adibarra Mar 25, 2026
df4bed5
increase header background opacity for better readability
adibarra Mar 25, 2026
5562f4b
use custom-scrollbar styling on chart legend scroll containers
adibarra Mar 25, 2026
75ba664
shrink circuit background width on large screens
adibarra Mar 25, 2026
44fa9fb
style dashboard tabs with brand active state and hover underlines
adibarra Mar 25, 2026
e726ce3
add X-to-remove on legend item hover across all charts
adibarra Mar 26, 2026
a7682e4
add togglable to VS Code spell check dictionary
adibarra Mar 26, 2026
2b22407
remove double spacing between historical trends cards
adibarra Mar 26, 2026
8dd645f
add re-lock button to PowerX and generalize feature gate
adibarra Mar 26, 2026
d8556ab
skip star nudge when user has already starred
adibarra Mar 26, 2026
b3441f1
pause quote carousel auto-rotation on hover
adibarra Mar 26, 2026
d0b30a9
restyle media page to match blog and quotes layout
adibarra Mar 26, 2026
0a01ffa
remove (formerly InferenceMAX) mentions from UI and metadata
adibarra Mar 26, 2026
0605e44
remove (formerly InferenceMAX) from package.json and README
adibarra Mar 26, 2026
1d37bc2
fix star-nudge tests to stub localStorage for starred check
adibarra Mar 26, 2026
510e274
move URL preset loading from dropdown into InferenceContext
adibarra Mar 26, 2026
1306e7a
snap evaluation date to nearest valid when inference date unavailable
adibarra Mar 26, 2026
83698de
show run selector and changelog for models without changelog data
adibarra Mar 26, 2026
e74ebef
remove dead code: FavoritePresetsDropdown, parseRunDate, filterDataBy…
adibarra Mar 26, 2026
d9201f0
fix changelog highlight red for dark mode
adibarra Mar 26, 2026
1cc1434
update header/footer logo: webp format, fix image sizing
adibarra Mar 26, 2026
4931482
Merge remote-tracking branch 'origin/master' into feat/curated-landin…
adibarra Mar 26, 2026
7b9f8ec
add about page with dynamic FAQ, move intro text from landing page
adibarra Mar 26, 2026
6a2d12c
add logo grid and heading to landing page testimonials section
adibarra Mar 26, 2026
0eb69b9
fix Open Dashboard button requiring double click
adibarra Mar 26, 2026
6fe1ad5
fix carousel reshuffling on re-render causing missed clicks
adibarra Mar 26, 2026
1d954e7
fix Open Dashboard button: replace Button/Slot with plain Link
adibarra Mar 26, 2026
feb3b92
fix cross-layout-group navigation: use plain <a> tags to avoid Next.j…
adibarra Mar 26, 2026
d7183e3
header NavLink: soft nav within same layout group, full nav across bo…
adibarra Mar 26, 2026
4181088
enable high contrast by default when applying a quick comparison preset
adibarra Mar 26, 2026
bf882c8
high contrast: only assign colors to active items for better hue sepa…
adibarra Mar 26, 2026
ec7494e
presets: exact hwFilter matching, 8k/1k sequences, disagg cross-vendo…
adibarra Mar 26, 2026
420f9ac
add GitHub star modal to landing page
adibarra Mar 26, 2026
8e4e653
remove GitHub star modal from dashboard (now on landing page only)
adibarra Mar 26, 2026
bea2174
add header_star_starred tracking, rename footer to footer_star_starred
adibarra Mar 26, 2026
3f54a95
normalize analytics event names: star_modal_, evaluation_, interactiv…
adibarra Mar 26, 2026
9561c7b
track settled GPU selection with 3s debounce for PostHog analysis
adibarra Mar 26, 2026
e0ab5b1
add debounced selection tracking to interactivity and evaluation charts
adibarra Mar 26, 2026
5d08f4d
move reset filter into actions array, remove dedicated ChartLegend props
adibarra Mar 26, 2026
c671f08
add gap between legend action buttons
adibarra Mar 26, 2026
7a1d3d8
color data points by gradient label when gradient labels are enabled
adibarra Mar 26, 2026
85d2724
move supporter logos from landing page to supporters page
adibarra Mar 26, 2026
31b0ad9
Update intro-section.tsx
functionstackx Mar 26, 2026
ca78d8b
Update intro-section.tsx
functionstackx Mar 26, 2026
0b7f195
update curated presets: H100 vs GB300 disagg comparison, MI355X SGLan…
adibarra Mar 26, 2026
7c9fe96
pin preset card tags to bottom with flex col and mt-auto
adibarra Mar 26, 2026
898ed23
run linter and formatter
adibarra Mar 26, 2026
c169ead
fix gpu config dropdown rendering under chart cards
adibarra Mar 26, 2026
9a78e1f
dynamic vendor-aware chart colors based on active selection
adibarra Mar 26, 2026
9469afa
add analytics tracking for remaining interactive elements and enrich …
adibarra Mar 26, 2026
c4706c4
fix footer server component error by removing onClick handlers
adibarra Mar 26, 2026
efb6103
vendor-aware high contrast colors: avoid red for NVIDIA, green for AMD
adibarra Mar 27, 2026
aa74a1e
meaningful export filenames for PNG and CSV downloads
adibarra Mar 27, 2026
0af043f
enrich y-axis metric analytics with labels, groups, and initial view …
adibarra Mar 27, 2026
0e60744
enable high contrast by default for presets
adibarra Mar 27, 2026
cc09bc6
remove keepPreviousData from useBenchmarks to fix preset race condition
adibarra Mar 27, 2026
d910bde
exclusive vendor hue zones for high-contrast chart colors
adibarra Mar 27, 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
2 changes: 2 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
"pageleave",
"postbuild",
"posthog",
"powerx",
"protobufjs",
"qwen",
"renderable",
Expand All @@ -65,6 +66,7 @@
"smallint",
"smallserial",
"timestamptz",
"togglable",
"tput",
"trtllm",
"ttft",
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ A [Next.js](https://nextjs.org) dashboard for visualizing ML inference benchmark

## Overview

LLM inference performance is a major concern of providing AI services, but accurate performance analysis remains elusive. Fast cadence of software development and model releases makes comparing performance between setups difficult. Existing performance benchmarks quickly become obsolete due to being static, and participants game the benchmarks with unrealistic, highly specific configurations. InferenceX (formerly InferenceMAX) tackles these issues by benchmarking popular models on major hardware platforms nightly with the latest software. For each model and hardware combination, InferenceX sweeps through different tensor parallel sizes and max concurrent requests, showing the throughput vs. latency graph for the full picture. In terms of software configurations, we ensure they are generally applicable across different serving scenarios, and we open source the repo to welcome community contributions. We hope InferenceX informs the community up-to-date and realistic LLM inference performance.
LLM inference performance is a major concern of providing AI services, but accurate performance analysis remains elusive. Fast cadence of software development and model releases makes comparing performance between setups difficult. Existing performance benchmarks quickly become obsolete due to being static, and participants game the benchmarks with unrealistic, highly specific configurations. InferenceX tackles these issues by benchmarking popular models on major hardware platforms nightly with the latest software. For each model and hardware combination, InferenceX sweeps through different tensor parallel sizes and max concurrent requests, showing the throughput vs. latency graph for the full picture. In terms of software configurations, we ensure they are generally applicable across different serving scenarios, and we open source the repo to welcome community contributions. We hope InferenceX informs the community up-to-date and realistic LLM inference performance.

## Architecture

Expand Down
8 changes: 5 additions & 3 deletions packages/app/cypress/component/chart-legend.cy.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,11 @@ function ChartLegendWrapper({ items = MOCK_ITEMS }: { items?: CommonLegendItemPr
isLegendExpanded={expanded}
onExpandedChange={setExpanded}
variant="sidebar"
showResetFilter={itemsWithHandler.some((i) => !i.isActive)}
allSelected={itemsWithHandler.every((i) => i.isActive)}
onResetFilter={() => setLegendItems(items)}
actions={
itemsWithHandler.some((i) => !i.isActive)
? [{ id: 'reset-filter', label: 'Reset filter', onClick: () => setLegendItems(items) }]
: []
}
/>
);
}
Expand Down
90 changes: 0 additions & 90 deletions packages/app/cypress/component/favorite-presets.cy.tsx

This file was deleted.

83 changes: 0 additions & 83 deletions packages/app/cypress/e2e/favorite-presets.cy.ts

This file was deleted.

11 changes: 4 additions & 7 deletions packages/app/cypress/support/mock-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,50 +34,43 @@ export function createMockHardwareConfig(): HardwareConfig {
label: 'H100',
suffix: '',
gpu: "NVIDIA 'Hopper' H100",
color: 'var(--h100)',
},
h200: {
name: 'h200',
label: 'H200',
suffix: '',
gpu: "NVIDIA 'Hopper' H200",
color: 'var(--h200)',
},
b200: {
name: 'b200',
label: 'B200',
suffix: '',
gpu: "NVIDIA 'Blackwell' B200",
color: 'var(--b200)',
},
b200_trt: {
name: 'b200-trt',
label: 'B200',
suffix: '(TRT)',
gpu: "NVIDIA 'Blackwell' B200 TRT",
color: 'var(--b200-trt)',
},
mi300x: {
name: 'mi300x',
label: 'MI300X',
suffix: '',
gpu: 'AMD Instinct MI300X',
color: 'var(--mi300x)',
},
h100_vllm: {
name: 'h100-vllm',
label: 'H100',
suffix: '(vLLM)',
gpu: "NVIDIA 'Hopper' H100 vLLM",
color: 'var(--h100-vllm)',
framework: 'vllm',
},
b200_sglang: {
name: 'b200-sglang',
label: 'B200',
suffix: '(SGLang)',
gpu: "NVIDIA 'Blackwell' B200 SGLang",
color: 'var(--b200-sglang)',
framework: 'sglang',
},
};
Expand Down Expand Up @@ -170,8 +163,10 @@ export function createMockInferenceContext(
activeHwTypes: new Set(['h100', 'b200', 'b200_trt', 'mi300x', 'h200']),
hwTypesWithData: new Set(['h100', 'b200', 'b200_trt', 'mi300x', 'h200']),
toggleHwType: namedStub('toggleHwType'),
removeHwType: namedStub('removeHwType'),
selectAllHwTypes: namedStub('selectAllHwTypes'),
toggleActiveDate: namedStub('toggleActiveDate'),
removeActiveDate: namedStub('removeActiveDate'),
selectAllActiveDates: namedStub('selectAllActiveDates'),
activeDates: new Set(['2025-03-01']),
hardwareConfig: hwConfig,
Expand Down Expand Up @@ -310,6 +305,7 @@ export function createMockEvaluationContext(
unfilteredChartData: [createMockEvaluationChartData()],
enabledHardware: new Set(['b200_trt', 'h100', 'mi300x']),
toggleHardware: namedStub('toggleHardware'),
removeHardware: namedStub('removeHardware'),
highContrast: false,
setHighContrast: namedStub('setHighContrast_eval'),
showLabels: true,
Expand Down Expand Up @@ -373,6 +369,7 @@ export function createMockReliabilityContext(
setHighContrast: namedStub('setHighContrast_reliability'),
enabledModels: new Set([Model.DeepSeek_R1]),
toggleModel: namedStub('toggleModel'),
removeModel: namedStub('removeModel'),
isLegendExpanded: true,
setIsLegendExpanded: namedStub('setIsLegendExpanded_reliability'),
modelsWithData: new Set([Model.DeepSeek_R1]),
Expand Down
2 changes: 1 addition & 1 deletion packages/app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "@semianalysisai/inferencex-app",
"version": "0.1.0",
"private": true,
"description": "InferenceX (formerly InferenceMAX) - Inference performance benchmarking and visualization",
"description": "InferenceX - Inference performance benchmarking and visualization",
"repository": {
"type": "git",
"url": "https://github.com/SemiAnalysisAI/inferencemax-app"
Expand Down
10 changes: 10 additions & 0 deletions packages/app/src/app/(dashboard)/calculator/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import type { Metadata } from 'next';

import ThroughputCalculatorDisplay from '@/components/calculator/ThroughputCalculatorDisplay';
import { tabMetadata } from '@/lib/tab-meta';

export const metadata: Metadata = tabMetadata('calculator');

export default function CalculatorPage() {
return <ThroughputCalculatorDisplay />;
}
15 changes: 15 additions & 0 deletions packages/app/src/app/(dashboard)/evaluation/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import type { Metadata } from 'next';

import { EvaluationProvider } from '@/components/evaluation/EvaluationContext';
import EvaluationChartDisplay from '@/components/evaluation/ui/ChartDisplay';
import { tabMetadata } from '@/lib/tab-meta';

export const metadata: Metadata = tabMetadata('evaluation');

export default function EvaluationPage() {
return (
<EvaluationProvider>
<EvaluationChartDisplay />
</EvaluationProvider>
);
}
10 changes: 10 additions & 0 deletions packages/app/src/app/(dashboard)/gpu-metrics/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import type { Metadata } from 'next';

import GpuMetricsDisplay from '@/components/gpu-power/GpuPowerDisplay';
import { tabMetadata } from '@/lib/tab-meta';

export const metadata: Metadata = tabMetadata('gpu-metrics');

export default function GpuMetricsPage() {
return <GpuMetricsDisplay />;
}
10 changes: 10 additions & 0 deletions packages/app/src/app/(dashboard)/gpu-specs/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import type { Metadata } from 'next';

import { GpuSpecsContent } from '@/components/gpu-specs/gpu-specs-content';
import { tabMetadata } from '@/lib/tab-meta';

export const metadata: Metadata = tabMetadata('gpu-specs');

export default function GpuSpecsPage() {
return <GpuSpecsContent />;
}
15 changes: 15 additions & 0 deletions packages/app/src/app/(dashboard)/historical/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import type { Metadata } from 'next';

import { InferenceProvider } from '@/components/inference/InferenceContext';
import HistoricalTrendsDisplay from '@/components/trends/HistoricalTrendsDisplay';
import { tabMetadata } from '@/lib/tab-meta';

export const metadata: Metadata = tabMetadata('historical');

export default function HistoricalPage() {
return (
<InferenceProvider activeTab="historical">
<HistoricalTrendsDisplay />
</InferenceProvider>
);
}
15 changes: 15 additions & 0 deletions packages/app/src/app/(dashboard)/inference/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import type { Metadata } from 'next';

import { InferenceProvider } from '@/components/inference/InferenceContext';
import InferenceChartDisplay from '@/components/inference/ui/ChartDisplay';
import { tabMetadata } from '@/lib/tab-meta';

export const metadata: Metadata = tabMetadata('inference');

export default function InferencePage() {
return (
<InferenceProvider activeTab="inference">
<InferenceChartDisplay />
</InferenceProvider>
);
}
5 changes: 5 additions & 0 deletions packages/app/src/app/(dashboard)/layout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { DashboardShell } from '@/components/dashboard-shell';

export default function DashboardLayout({ children }: { children: React.ReactNode }) {
return <DashboardShell>{children}</DashboardShell>;
}
Loading
Loading