ai-speedometer 2.3.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3016,7 +3016,7 @@ var package_default;
3016
3016
  var init_package = __esm(() => {
3017
3017
  package_default = {
3018
3018
  name: "ai-speedometer",
3019
- version: "2.3.0",
3019
+ version: "2.3.1",
3020
3020
  description: "A comprehensive CLI tool for benchmarking AI models across multiple providers with parallel execution and professional metrics",
3021
3021
  bin: {
3022
3022
  "ai-speedometer": "dist/ai-speedometer",
@@ -3993,16 +3993,14 @@ function BenchmarkScreen() {
3993
3993
  const [modelStates, setModelStates] = useState8([]);
3994
3994
  const [spinnerFrame, setSpinnerFrame] = useState8(0);
3995
3995
  const [allDone, setAllDone] = useState8(false);
3996
+ const [runKey, setRunKey] = useState8(0);
3996
3997
  const spinnerRef = useRef4(null);
3997
- const startedRef = useRef4(false);
3998
3998
  useEffect6(() => {
3999
- if (startedRef.current)
4000
- return;
4001
- startedRef.current = true;
4002
3999
  const models = state.benchResults.map((r) => r.model);
4003
4000
  if (models.length === 0)
4004
4001
  return;
4005
4002
  setModelStates(models.map((m) => ({ model: m, status: "pending" })));
4003
+ setAllDone(false);
4006
4004
  spinnerRef.current = setInterval(() => setSpinnerFrame((f) => f + 1), 80);
4007
4005
  setModelStates((prev) => prev.map((s) => ({ ...s, status: "running", startedAt: Date.now() })));
4008
4006
  async function runAll() {
@@ -4045,7 +4043,14 @@ function BenchmarkScreen() {
4045
4043
  spinnerRef.current = null;
4046
4044
  }
4047
4045
  };
4048
- }, []);
4046
+ }, [runKey]);
4047
+ const rerun = () => {
4048
+ if (spinnerRef.current) {
4049
+ clearInterval(spinnerRef.current);
4050
+ spinnerRef.current = null;
4051
+ }
4052
+ setRunKey((k) => k + 1);
4053
+ };
4049
4054
  const done = modelStates.filter((m) => m.status === "done");
4050
4055
  const running = modelStates.filter((m) => m.status === "running");
4051
4056
  const pending = modelStates.filter((m) => m.status === "pending");
@@ -4493,6 +4498,10 @@ function BenchmarkScreen() {
4493
4498
  useAppKeyboard((key) => {
4494
4499
  if (!allDone)
4495
4500
  return;
4501
+ if (key.shift && key.name === "r") {
4502
+ rerun();
4503
+ return;
4504
+ }
4496
4505
  if (key.name === "q" || key.name === "return" || key.name === "enter") {
4497
4506
  dispatch({ type: "BENCH_RESET" });
4498
4507
  navigate("main-menu");
@@ -4503,7 +4512,7 @@ function BenchmarkScreen() {
4503
4512
  children: [
4504
4513
  /* @__PURE__ */ jsxDEV14("text", {
4505
4514
  fg: theme.success,
4506
- children: "All done! [Enter]/[Q] return [\u2191\u2193/PgUp/PgDn/wheel] scroll"
4515
+ children: "All done! [R] rerun [Enter]/[Q] return [\u2191\u2193/PgUp/PgDn/wheel] scroll"
4507
4516
  }, undefined, false, undefined, this),
4508
4517
  state.logMode && state.logPath && /* @__PURE__ */ jsxDEV14("text", {
4509
4518
  fg: theme.dim,
@@ -6391,7 +6400,7 @@ function getHints(screen, benchResults) {
6391
6400
  return ["[\u2191\u2193] navigate", "[Tab] select", "[Enter] run", "[A] all", "[N] none", "[R] recent", "[Esc] back"];
6392
6401
  case "benchmark": {
6393
6402
  const allDone = benchResults.length > 0 && benchResults.every((r) => r.status === "done" || r.status === "error");
6394
- return allDone ? ["[Enter] back to menu", "[Q] back to menu"] : ["Benchmark in progress..."];
6403
+ return allDone ? ["[R] rerun", "[Enter] back to menu", "[Q] back to menu"] : ["Benchmark in progress..."];
6395
6404
  }
6396
6405
  case "list-providers":
6397
6406
  return ["[\u2191\u2193] scroll", "[Q] back"];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-speedometer",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "description": "A comprehensive CLI tool for benchmarking AI models across multiple providers with parallel execution and professional metrics",
5
5
  "bin": {
6
6
  "ai-speedometer": "dist/ai-speedometer",