olbench
Version:
Comprehensive Node.js-based benchmarking tool for Ollama local LLMs
122 lines • 6.46 kB
JavaScript
import React, { useState, useEffect } from 'react';
import { Box, Text } from 'ink';
import Spinner from 'ink-spinner';
import { ResultsProcessor } from '../modules/results-processor.js';
import * as fs from 'fs/promises';
export const CompareResults = ({ options }) => {
const [loading, setLoading] = useState(true);
const [comparison, setComparison] = useState(null);
const [error, setError] = useState(null);
useEffect(() => {
compareResults();
}, []);
const compareResults = async () => {
try {
if (!options.baseline || !options.current) {
throw new Error('Both --baseline and --current file paths are required');
}
// Load baseline results
const baselineContent = await fs.readFile(options.baseline, 'utf-8');
const baselineReport = JSON.parse(baselineContent);
// Load current results
const currentContent = await fs.readFile(options.current, 'utf-8');
const currentReport = JSON.parse(currentContent);
// Compare results
const processor = new ResultsProcessor();
const comparisonReport = processor.compareReports(baselineReport, currentReport);
setComparison(comparisonReport);
setLoading(false);
}
catch (err) {
setError(err instanceof Error ? err.message : String(err));
setLoading(false);
}
};
if (loading) {
return (React.createElement(Box, null,
React.createElement(Spinner, { type: "dots" }),
React.createElement(Text, null, " Comparing benchmark results...")));
}
if (error) {
return (React.createElement(Box, { flexDirection: "column", padding: 1 },
React.createElement(Text, { color: "red", bold: true }, "\u274C Comparison Failed"),
React.createElement(Text, { color: "red" }, error)));
}
if (!comparison) {
return (React.createElement(Box, null,
React.createElement(Text, { color: "red" }, "Failed to generate comparison")));
}
const formatChange = (change, isInverse = false) => {
const adjusted = isInverse ? -change : change;
const color = adjusted > 0 ? 'green' : adjusted < 0 ? 'red' : 'yellow';
const symbol = adjusted > 0 ? '↗' : adjusted < 0 ? '↘' : '→';
return React.createElement(Text, { color: color },
symbol,
" ",
Math.abs(adjusted).toFixed(1),
"%");
};
return (React.createElement(Box, { flexDirection: "column", padding: 1 },
React.createElement(Text, { bold: true, color: "blue", underline: true }, "\uD83D\uDCCA Benchmark Comparison Results"),
React.createElement(Box, { flexDirection: "column", marginY: 1 },
React.createElement(Text, { bold: true }, "Overview:"),
React.createElement(Text, null,
"\u2022 Baseline: ",
comparison.baseline.timestamp.toISOString().split('T')[0],
" (",
comparison.baseline.totalModels,
" models)"),
React.createElement(Text, null,
"\u2022 Current: ",
comparison.current.timestamp.toISOString().split('T')[0],
" (",
comparison.current.totalModels,
" models)"),
React.createElement(Text, null,
"\u2022 Models compared: ",
comparison.summary.modelsCompared)),
React.createElement(Box, { flexDirection: "column", marginY: 1 },
React.createElement(Text, { bold: true }, "Summary Changes:"),
React.createElement(Text, null,
"\u2022 Average speed improvement: ",
formatChange(comparison.summary.averageSpeedImprovement)),
React.createElement(Text, null,
"\u2022 Average latency improvement: ",
formatChange(comparison.summary.averageLatencyImprovement, true))),
React.createElement(Box, { flexDirection: "column", marginY: 1 },
React.createElement(Text, { bold: true, underline: true }, "Detailed Model Comparisons:"),
comparison.comparisons.map((comp, index) => (React.createElement(Box, { key: index, flexDirection: "column", marginLeft: 2, marginY: 1, borderStyle: "round", padding: 1 },
React.createElement(Text, { bold: true, color: "cyan" }, comp.model),
React.createElement(Box, { flexDirection: "row", justifyContent: "space-between" },
React.createElement(Text, null, "Tokens/sec:"),
React.createElement(Box, null,
React.createElement(Text, null,
comp.tokensPerSecond.baseline.toFixed(1),
" \u2192 ",
comp.tokensPerSecond.current.toFixed(1),
" "),
formatChange(comp.tokensPerSecond.change))),
React.createElement(Box, { flexDirection: "row", justifyContent: "space-between" },
React.createElement(Text, null, "First token latency:"),
React.createElement(Box, null,
React.createElement(Text, null,
comp.firstTokenLatency.baseline.toFixed(0),
"ms \u2192 ",
comp.firstTokenLatency.current.toFixed(0),
"ms "),
formatChange(comp.firstTokenLatency.change, true))),
React.createElement(Box, { flexDirection: "row", justifyContent: "space-between" },
React.createElement(Text, null, "Memory usage:"),
React.createElement(Box, null,
React.createElement(Text, null,
comp.memoryUsage.baseline.toFixed(1),
"MB \u2192 ",
comp.memoryUsage.current.toFixed(1),
"MB "),
formatChange(comp.memoryUsage.change, true))))))),
options.output && (React.createElement(Box, { marginY: 1 },
React.createElement(Text, { color: "green" },
"\u2705 Comparison saved to: ",
options.output)))));
};
//# sourceMappingURL=CompareResults.js.map