+
+
Area under Pareto frontier (AUC summary)
+
+
+
+ Integration window: 10 → {hi} tok/s/user. {directionHint}
+
+
+ {configs.length === 0 ? (
+
+ Enable at least one configuration in the legend to populate the AUC summary.
+
+ ) : (
+ <>
+
+ {
+ setPrimary(v);
+ track('inference_auc_primary_baseline_changed', { baseline: v });
+ }}
+ testId="auc-primary-baseline-select"
+ />
+ {
+ setSecondary(v);
+ track('inference_auc_secondary_baseline_changed', { baseline: v });
+ }}
+ testId="auc-secondary-baseline-select"
+ />
+ {
+ setTertiary(v);
+ track('inference_auc_tertiary_baseline_changed', { baseline: v });
+ }}
+ testId="auc-tertiary-baseline-select"
+ />
+
+
+
+
+
+ | Config |
+ AUC |
+ {!higherBetter && (
+ Window |
+ )}
+
+ Ratio vs primary
+ |
+
+ Ratio vs secondary
+ |
+
+ Ratio vs tertiary
+ |
+
+
+
+ {configs.map((c, i) => {
+ const auc = aucs[i];
+ const win = aucWindows[i];
+ const primaryR = ratioCell(auc, primaryAuc, ePrimary, c.hwKey);
+ const secondaryR = ratioCell(auc, secondaryAuc, eSecondary, c.hwKey);
+ const tertiaryR = ratioCell(auc, tertiaryAuc, eTertiary, c.hwKey);
+ return (
+
+ |
+ {c.label}
+ |
+ {formatValue(auc)} |
+ {!higherBetter && (
+
+ {win ? `${win.lo}→${win.hi}` : '—'}
+ |
+ )}
+
+ {primaryR.text}
+ |
+
+ {secondaryR.text}
+ |
+
+ {tertiaryR.text}
+ |
+
+ );
+ })}
+
+
+
+ >
+ )}
+
+ );
+}
+
+/**
+ * Section that renders the two summary tables below the Pareto chart on the
+ * inference page. Renders for all y-axis metrics; the "is higher better"
+ * direction is taken from the active metric's roofline direction on the
+ * interactivity chart definition.
+ */
+export default function InteractivityTables() {
+ const { selectedYAxisMetric, graphs } = useInference();
+
+ const interactivityGraph = graphs.find((g) => g.chartDefinition.chartType === 'interactivity');
+ const direction: ParetoDirection = interactivityGraph
+ ? getMetricParetoDirection(interactivityGraph.chartDefinition, selectedYAxisMetric)
+ : 'higher';
+
+ const { configs, yLabel, yTitle } = useConfigSeries(direction);
+
+ if (!interactivityGraph) return null;
+
+ return (
+ <>
+