ai-speedometer 2.3.4 → 2.4.0
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.
- package/dist/ai-speedometer +796 -495
- package/dist/highlights-eq9cgrbb.scm +604 -0
- package/dist/highlights-ghv9g403.scm +205 -0
- package/dist/highlights-hk7bwhj4.scm +284 -0
- package/dist/highlights-r812a2qc.scm +150 -0
- package/dist/highlights-x6tmsnaa.scm +115 -0
- package/dist/injections-73j83es3.scm +27 -0
- package/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
- package/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
- package/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
- package/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
- package/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
- package/package.json +1 -1
package/dist/ai-speedometer
CHANGED
|
@@ -178,7 +178,7 @@ __export(exports_models_dev, {
|
|
|
178
178
|
});
|
|
179
179
|
import fs from "fs";
|
|
180
180
|
import path2 from "path";
|
|
181
|
-
import { homedir
|
|
181
|
+
import { homedir } from "os";
|
|
182
182
|
function ensureCacheDir() {
|
|
183
183
|
try {
|
|
184
184
|
if (!fs.existsSync(CACHE_DIR)) {
|
|
@@ -370,7 +370,7 @@ var cacheBase, CACHE_DIR, CACHE_FILE, FALLBACK_PROVIDERS;
|
|
|
370
370
|
var init_models_dev = __esm(() => {
|
|
371
371
|
init_xdg_basedir();
|
|
372
372
|
init_custom_verified_providers();
|
|
373
|
-
cacheBase = process.env.XDG_CACHE_HOME || xdgCache || path2.join(
|
|
373
|
+
cacheBase = process.env.XDG_CACHE_HOME || xdgCache || path2.join(homedir(), ".cache");
|
|
374
374
|
CACHE_DIR = path2.join(cacheBase, "ai-speedometer");
|
|
375
375
|
CACHE_FILE = path2.join(CACHE_DIR, "models.json");
|
|
376
376
|
FALLBACK_PROVIDERS = [
|
|
@@ -433,9 +433,9 @@ __export(exports_ai_config, {
|
|
|
433
433
|
});
|
|
434
434
|
import fs2 from "fs";
|
|
435
435
|
import path3 from "path";
|
|
436
|
-
import { homedir as
|
|
436
|
+
import { homedir as homedir2 } from "os";
|
|
437
437
|
var getAIConfigPaths = () => {
|
|
438
|
-
const aiConfigDir = process.env.XDG_CONFIG_HOME || xdgConfig || path3.join(
|
|
438
|
+
const aiConfigDir = process.env.XDG_CONFIG_HOME || xdgConfig || path3.join(homedir2(), ".config");
|
|
439
439
|
const aiSpeedometerConfigDir = path3.join(aiConfigDir, "ai-speedometer");
|
|
440
440
|
return {
|
|
441
441
|
configDir: aiSpeedometerConfigDir,
|
|
@@ -461,7 +461,7 @@ var getAIConfigPaths = () => {
|
|
|
461
461
|
}
|
|
462
462
|
}, readThemeFromConfig = async () => {
|
|
463
463
|
const config = await readAIConfig();
|
|
464
|
-
return config.theme ?? "
|
|
464
|
+
return config.theme ?? "minimal-b";
|
|
465
465
|
}, writeThemeToConfig = async (theme) => {
|
|
466
466
|
const config = await readAIConfig();
|
|
467
467
|
await writeAIConfig({ ...config, theme });
|
|
@@ -1440,6 +1440,7 @@ __export(exports_opencode_integration, {
|
|
|
1440
1440
|
});
|
|
1441
1441
|
import fs3 from "fs";
|
|
1442
1442
|
import path4 from "path";
|
|
1443
|
+
import { homedir as homedir3 } from "os";
|
|
1443
1444
|
var getXDGPaths = () => ({
|
|
1444
1445
|
data: path4.join(process.env.XDG_DATA_HOME || xdgData || path4.join(path4.join(process.env.HOME || process.env.USERPROFILE || "."), ".local", "share"), "opencode"),
|
|
1445
1446
|
config: path4.join(process.env.XDG_CONFIG_HOME || xdgConfig || path4.join(path4.join(process.env.HOME || process.env.USERPROFILE || "."), ".config"), "opencode")
|
|
@@ -1492,7 +1493,7 @@ var getXDGPaths = () => ({
|
|
|
1492
1493
|
console.warn("Warning: opencode.json is no longer used. Use ai-benchmark-config.json instead.");
|
|
1493
1494
|
return { provider: {} };
|
|
1494
1495
|
}, readOpencodeGlobalConfig = () => {
|
|
1495
|
-
const configDir = path4.join(process.env.XDG_CONFIG_HOME || path4.join(
|
|
1496
|
+
const configDir = path4.join(process.env.XDG_CONFIG_HOME || path4.join(homedir3(), ".config"), "opencode");
|
|
1496
1497
|
const candidates = ["config.json", "opencode.json", "opencode.jsonc"];
|
|
1497
1498
|
let merged = {};
|
|
1498
1499
|
for (const filename of candidates) {
|
|
@@ -3456,7 +3457,7 @@ var init_AppContext = __esm(() => {
|
|
|
3456
3457
|
function getTheme(name) {
|
|
3457
3458
|
return THEMES[name] ?? THEMES[DEFAULT_THEME];
|
|
3458
3459
|
}
|
|
3459
|
-
var THEMES, DEFAULT_THEME = "
|
|
3460
|
+
var THEMES, DEFAULT_THEME = "minimal-b", THEME_NAMES;
|
|
3460
3461
|
var init_themes = __esm(() => {
|
|
3461
3462
|
THEMES = {
|
|
3462
3463
|
tokyonight: {
|
|
@@ -3887,6 +3888,32 @@ var init_themes = __esm(() => {
|
|
|
3887
3888
|
success: "#388E3C",
|
|
3888
3889
|
error: "#DC3545",
|
|
3889
3890
|
warning: "#FF9500"
|
|
3891
|
+
},
|
|
3892
|
+
"minimal-b": {
|
|
3893
|
+
background: "#000000",
|
|
3894
|
+
surface: "#000000",
|
|
3895
|
+
border: "#333333",
|
|
3896
|
+
dim: "#888888",
|
|
3897
|
+
text: "#FFFFFF",
|
|
3898
|
+
primary: "#FFFFFF",
|
|
3899
|
+
accent: "#FFFFFF",
|
|
3900
|
+
secondary: "#FFFFFF",
|
|
3901
|
+
success: "#FFFFFF",
|
|
3902
|
+
error: "#FFFFFF",
|
|
3903
|
+
warning: "#FFFFFF"
|
|
3904
|
+
},
|
|
3905
|
+
"minimal-w": {
|
|
3906
|
+
background: "#FFFFFF",
|
|
3907
|
+
surface: "#FFFFFF",
|
|
3908
|
+
border: "#CCCCCC",
|
|
3909
|
+
dim: "#777777",
|
|
3910
|
+
text: "#000000",
|
|
3911
|
+
primary: "#000000",
|
|
3912
|
+
accent: "#000000",
|
|
3913
|
+
secondary: "#000000",
|
|
3914
|
+
success: "#000000",
|
|
3915
|
+
error: "#000000",
|
|
3916
|
+
warning: "#000000"
|
|
3890
3917
|
}
|
|
3891
3918
|
};
|
|
3892
3919
|
THEME_NAMES = Object.keys(THEMES);
|
|
@@ -4015,7 +4042,7 @@ function ThemePicker({ onClose }) {
|
|
|
4015
4042
|
width: W,
|
|
4016
4043
|
flexDirection: "column",
|
|
4017
4044
|
border: true,
|
|
4018
|
-
borderStyle: "
|
|
4045
|
+
borderStyle: "single",
|
|
4019
4046
|
borderColor: theme.primary,
|
|
4020
4047
|
backgroundColor: theme.surface,
|
|
4021
4048
|
zIndex: 100,
|
|
@@ -4046,7 +4073,10 @@ function ThemePicker({ onClose }) {
|
|
|
4046
4073
|
}, undefined, true, undefined, this),
|
|
4047
4074
|
/* @__PURE__ */ jsxDEV4("box", {
|
|
4048
4075
|
height: 1,
|
|
4049
|
-
|
|
4076
|
+
children: /* @__PURE__ */ jsxDEV4("text", {
|
|
4077
|
+
fg: theme.border,
|
|
4078
|
+
children: "\u2500".repeat(150)
|
|
4079
|
+
}, undefined, false, undefined, this)
|
|
4050
4080
|
}, undefined, false, undefined, this),
|
|
4051
4081
|
/* @__PURE__ */ jsxDEV4("box", {
|
|
4052
4082
|
height: 1,
|
|
@@ -4072,7 +4102,10 @@ function ThemePicker({ onClose }) {
|
|
|
4072
4102
|
}, undefined, true, undefined, this),
|
|
4073
4103
|
/* @__PURE__ */ jsxDEV4("box", {
|
|
4074
4104
|
height: 1,
|
|
4075
|
-
|
|
4105
|
+
children: /* @__PURE__ */ jsxDEV4("text", {
|
|
4106
|
+
fg: theme.border,
|
|
4107
|
+
children: "\u2500".repeat(150)
|
|
4108
|
+
}, undefined, false, undefined, this)
|
|
4076
4109
|
}, undefined, false, undefined, this),
|
|
4077
4110
|
/* @__PURE__ */ jsxDEV4("scrollbox", {
|
|
4078
4111
|
ref: scrollRef,
|
|
@@ -4125,7 +4158,10 @@ function ThemePicker({ onClose }) {
|
|
|
4125
4158
|
}, undefined, false, undefined, this),
|
|
4126
4159
|
/* @__PURE__ */ jsxDEV4("box", {
|
|
4127
4160
|
height: 1,
|
|
4128
|
-
|
|
4161
|
+
children: /* @__PURE__ */ jsxDEV4("text", {
|
|
4162
|
+
fg: theme.border,
|
|
4163
|
+
children: "\u2500".repeat(150)
|
|
4164
|
+
}, undefined, false, undefined, this)
|
|
4129
4165
|
}, undefined, false, undefined, this),
|
|
4130
4166
|
/* @__PURE__ */ jsxDEV4("box", {
|
|
4131
4167
|
height: 1,
|
|
@@ -4172,7 +4208,7 @@ var package_default;
|
|
|
4172
4208
|
var init_package = __esm(() => {
|
|
4173
4209
|
package_default = {
|
|
4174
4210
|
name: "ai-speedometer",
|
|
4175
|
-
version: "2.
|
|
4211
|
+
version: "2.4.0",
|
|
4176
4212
|
description: "A comprehensive CLI tool for benchmarking AI models across multiple providers with parallel execution and professional metrics",
|
|
4177
4213
|
bin: {
|
|
4178
4214
|
"ai-speedometer": "dist/ai-speedometer",
|
|
@@ -4274,7 +4310,6 @@ function Footer({ hints }) {
|
|
|
4274
4310
|
const theme = useTheme();
|
|
4275
4311
|
const joined = hints.join(" \xB7 ");
|
|
4276
4312
|
return /* @__PURE__ */ jsxDEV6("box", {
|
|
4277
|
-
height: 1,
|
|
4278
4313
|
flexDirection: "row",
|
|
4279
4314
|
alignItems: "center",
|
|
4280
4315
|
paddingLeft: 1,
|
|
@@ -4319,20 +4354,23 @@ function MainMenuScreen() {
|
|
|
4319
4354
|
{ label: "? FAQ / Learn", desc: "how metrics work & resources", color: theme.primary },
|
|
4320
4355
|
{ label: "\u2715 Exit", desc: "quit the application", color: theme.error }
|
|
4321
4356
|
];
|
|
4357
|
+
function handleSelect(index) {
|
|
4358
|
+
if (index === 0)
|
|
4359
|
+
navigate("model-select");
|
|
4360
|
+
else if (index === 1)
|
|
4361
|
+
navigate("model-menu");
|
|
4362
|
+
else if (index === 2)
|
|
4363
|
+
navigate("faq");
|
|
4364
|
+
else if (index === 3)
|
|
4365
|
+
renderer.destroy();
|
|
4366
|
+
}
|
|
4322
4367
|
useAppKeyboard((key) => {
|
|
4323
4368
|
if (key.name === "up") {
|
|
4324
4369
|
setCursor((i) => (i - 1 + ITEMS.length) % ITEMS.length);
|
|
4325
4370
|
} else if (key.name === "down") {
|
|
4326
4371
|
setCursor((i) => (i + 1) % ITEMS.length);
|
|
4327
4372
|
} else if (key.name === "enter" || key.name === "return") {
|
|
4328
|
-
|
|
4329
|
-
navigate("model-select");
|
|
4330
|
-
else if (cursor === 1)
|
|
4331
|
-
navigate("model-menu");
|
|
4332
|
-
else if (cursor === 2)
|
|
4333
|
-
navigate("faq");
|
|
4334
|
-
else if (cursor === 3)
|
|
4335
|
-
renderer.destroy();
|
|
4373
|
+
handleSelect(cursor);
|
|
4336
4374
|
}
|
|
4337
4375
|
});
|
|
4338
4376
|
return /* @__PURE__ */ jsxDEV7("box", {
|
|
@@ -4363,7 +4401,7 @@ function MainMenuScreen() {
|
|
|
4363
4401
|
/* @__PURE__ */ jsxDEV7("box", {
|
|
4364
4402
|
flexDirection: "column",
|
|
4365
4403
|
border: true,
|
|
4366
|
-
borderStyle: "
|
|
4404
|
+
borderStyle: "single",
|
|
4367
4405
|
borderColor: theme.border,
|
|
4368
4406
|
backgroundColor: theme.background,
|
|
4369
4407
|
width: 48,
|
|
@@ -4377,6 +4415,8 @@ function MainMenuScreen() {
|
|
|
4377
4415
|
paddingRight: 2,
|
|
4378
4416
|
paddingTop: 1,
|
|
4379
4417
|
paddingBottom: 1,
|
|
4418
|
+
onMouseOver: () => setCursor(i),
|
|
4419
|
+
onMouseDown: () => handleSelect(i),
|
|
4380
4420
|
children: [
|
|
4381
4421
|
/* @__PURE__ */ jsxDEV7("box", {
|
|
4382
4422
|
flexDirection: "column",
|
|
@@ -4410,74 +4450,13 @@ var init_MainMenuScreen = __esm(() => {
|
|
|
4410
4450
|
init_package();
|
|
4411
4451
|
});
|
|
4412
4452
|
|
|
4413
|
-
// src/tui/
|
|
4453
|
+
// src/tui/screens/ModelMenuScreen.tsx
|
|
4414
4454
|
import { useState as useState5 } from "react";
|
|
4415
4455
|
import { jsxDEV as jsxDEV8 } from "@opentui/react/jsx-dev-runtime";
|
|
4416
|
-
function MenuList({ items, selectedIndex: initialIndex = 0, onSelect, onNavigate }) {
|
|
4417
|
-
const theme = useTheme();
|
|
4418
|
-
const [cursor, setCursor] = useState5(initialIndex);
|
|
4419
|
-
useAppKeyboard((key) => {
|
|
4420
|
-
if (key.name === "up") {
|
|
4421
|
-
const next = (cursor - 1 + items.length) % items.length;
|
|
4422
|
-
setCursor(next);
|
|
4423
|
-
onNavigate?.(next);
|
|
4424
|
-
} else if (key.name === "down") {
|
|
4425
|
-
const next = (cursor + 1) % items.length;
|
|
4426
|
-
setCursor(next);
|
|
4427
|
-
onNavigate?.(next);
|
|
4428
|
-
} else if (key.name === "enter" || key.name === "return") {
|
|
4429
|
-
onSelect(cursor);
|
|
4430
|
-
}
|
|
4431
|
-
});
|
|
4432
|
-
return /* @__PURE__ */ jsxDEV8("box", {
|
|
4433
|
-
flexDirection: "column",
|
|
4434
|
-
children: items.map((item, i) => {
|
|
4435
|
-
const isSelected = i === cursor;
|
|
4436
|
-
return /* @__PURE__ */ jsxDEV8("box", {
|
|
4437
|
-
flexDirection: "row",
|
|
4438
|
-
alignItems: "center",
|
|
4439
|
-
backgroundColor: isSelected ? theme.border : "transparent",
|
|
4440
|
-
paddingLeft: 1,
|
|
4441
|
-
paddingRight: 1,
|
|
4442
|
-
children: [
|
|
4443
|
-
/* @__PURE__ */ jsxDEV8("box", {
|
|
4444
|
-
flexDirection: "column",
|
|
4445
|
-
flexGrow: 1,
|
|
4446
|
-
children: [
|
|
4447
|
-
/* @__PURE__ */ jsxDEV8("text", {
|
|
4448
|
-
fg: isSelected ? theme.text : theme.dim,
|
|
4449
|
-
children: item.label
|
|
4450
|
-
}, undefined, false, undefined, this),
|
|
4451
|
-
item.description ? /* @__PURE__ */ jsxDEV8("text", {
|
|
4452
|
-
fg: isSelected ? theme.dim : theme.border,
|
|
4453
|
-
children: item.description
|
|
4454
|
-
}, undefined, false, undefined, this) : null
|
|
4455
|
-
]
|
|
4456
|
-
}, undefined, true, undefined, this),
|
|
4457
|
-
isSelected && /* @__PURE__ */ jsxDEV8("text", {
|
|
4458
|
-
fg: theme.primary,
|
|
4459
|
-
children: "\u203A"
|
|
4460
|
-
}, undefined, false, undefined, this)
|
|
4461
|
-
]
|
|
4462
|
-
}, i, true, undefined, this);
|
|
4463
|
-
})
|
|
4464
|
-
}, undefined, false, undefined, this);
|
|
4465
|
-
}
|
|
4466
|
-
var init_MenuList = __esm(() => {
|
|
4467
|
-
init_useAppKeyboard();
|
|
4468
|
-
init_ThemeContext();
|
|
4469
|
-
});
|
|
4470
|
-
|
|
4471
|
-
// src/tui/screens/ModelMenuScreen.tsx
|
|
4472
|
-
import { jsxDEV as jsxDEV9 } from "@opentui/react/jsx-dev-runtime";
|
|
4473
4456
|
function ModelMenuScreen() {
|
|
4474
4457
|
const navigate = useNavigate();
|
|
4475
4458
|
const theme = useTheme();
|
|
4476
|
-
|
|
4477
|
-
if (key.name === "escape" || key.name === "q") {
|
|
4478
|
-
navigate("main-menu");
|
|
4479
|
-
}
|
|
4480
|
-
});
|
|
4459
|
+
const [cursor, setCursor] = useState5(0);
|
|
4481
4460
|
function handleSelect(index) {
|
|
4482
4461
|
if (index === 0)
|
|
4483
4462
|
navigate("add-verified");
|
|
@@ -4490,21 +4469,81 @@ function ModelMenuScreen() {
|
|
|
4490
4469
|
else if (index === 4)
|
|
4491
4470
|
navigate("main-menu");
|
|
4492
4471
|
}
|
|
4493
|
-
|
|
4472
|
+
useAppKeyboard((key) => {
|
|
4473
|
+
if (key.name === "up") {
|
|
4474
|
+
setCursor((i) => (i - 1 + ITEMS.length) % ITEMS.length);
|
|
4475
|
+
} else if (key.name === "down") {
|
|
4476
|
+
setCursor((i) => (i + 1) % ITEMS.length);
|
|
4477
|
+
} else if (key.name === "enter" || key.name === "return") {
|
|
4478
|
+
handleSelect(cursor);
|
|
4479
|
+
} else if (key.name === "escape" || key.name === "q") {
|
|
4480
|
+
navigate("main-menu");
|
|
4481
|
+
}
|
|
4482
|
+
});
|
|
4483
|
+
return /* @__PURE__ */ jsxDEV8("box", {
|
|
4494
4484
|
flexDirection: "column",
|
|
4495
4485
|
flexGrow: 1,
|
|
4496
|
-
|
|
4486
|
+
alignItems: "center",
|
|
4487
|
+
justifyContent: "center",
|
|
4497
4488
|
children: [
|
|
4498
|
-
/* @__PURE__ */
|
|
4499
|
-
|
|
4500
|
-
|
|
4501
|
-
|
|
4502
|
-
|
|
4503
|
-
|
|
4504
|
-
|
|
4505
|
-
|
|
4506
|
-
|
|
4507
|
-
|
|
4489
|
+
/* @__PURE__ */ jsxDEV8("box", {
|
|
4490
|
+
flexDirection: "column",
|
|
4491
|
+
alignItems: "center",
|
|
4492
|
+
marginBottom: 2,
|
|
4493
|
+
children: [
|
|
4494
|
+
/* @__PURE__ */ jsxDEV8("text", {
|
|
4495
|
+
fg: theme.primary,
|
|
4496
|
+
bold: true,
|
|
4497
|
+
children: "MODEL MANAGEMENT"
|
|
4498
|
+
}, undefined, false, undefined, this),
|
|
4499
|
+
/* @__PURE__ */ jsxDEV8("text", {
|
|
4500
|
+
fg: theme.dim,
|
|
4501
|
+
children: "configure providers & models"
|
|
4502
|
+
}, undefined, false, undefined, this)
|
|
4503
|
+
]
|
|
4504
|
+
}, undefined, true, undefined, this),
|
|
4505
|
+
/* @__PURE__ */ jsxDEV8("box", {
|
|
4506
|
+
flexDirection: "column",
|
|
4507
|
+
border: true,
|
|
4508
|
+
borderStyle: "single",
|
|
4509
|
+
borderColor: theme.border,
|
|
4510
|
+
backgroundColor: theme.background,
|
|
4511
|
+
width: 48,
|
|
4512
|
+
children: ITEMS.map((item, i) => {
|
|
4513
|
+
const active = i === cursor;
|
|
4514
|
+
const color = theme[item.color];
|
|
4515
|
+
return /* @__PURE__ */ jsxDEV8("box", {
|
|
4516
|
+
flexDirection: "row",
|
|
4517
|
+
alignItems: "center",
|
|
4518
|
+
backgroundColor: active ? theme.border : "transparent",
|
|
4519
|
+
paddingLeft: 2,
|
|
4520
|
+
paddingRight: 2,
|
|
4521
|
+
paddingTop: 1,
|
|
4522
|
+
paddingBottom: 1,
|
|
4523
|
+
onMouseOver: () => setCursor(i),
|
|
4524
|
+
onMouseDown: () => handleSelect(i),
|
|
4525
|
+
children: [
|
|
4526
|
+
/* @__PURE__ */ jsxDEV8("box", {
|
|
4527
|
+
flexDirection: "column",
|
|
4528
|
+
flexGrow: 1,
|
|
4529
|
+
children: [
|
|
4530
|
+
/* @__PURE__ */ jsxDEV8("text", {
|
|
4531
|
+
fg: active ? color : theme.dim,
|
|
4532
|
+
children: item.label
|
|
4533
|
+
}, undefined, false, undefined, this),
|
|
4534
|
+
/* @__PURE__ */ jsxDEV8("text", {
|
|
4535
|
+
fg: active ? theme.dim : theme.border,
|
|
4536
|
+
children: item.desc
|
|
4537
|
+
}, undefined, false, undefined, this)
|
|
4538
|
+
]
|
|
4539
|
+
}, undefined, true, undefined, this),
|
|
4540
|
+
active && /* @__PURE__ */ jsxDEV8("text", {
|
|
4541
|
+
fg: color,
|
|
4542
|
+
children: "\u203A"
|
|
4543
|
+
}, undefined, false, undefined, this)
|
|
4544
|
+
]
|
|
4545
|
+
}, i, true, undefined, this);
|
|
4546
|
+
})
|
|
4508
4547
|
}, undefined, false, undefined, this)
|
|
4509
4548
|
]
|
|
4510
4549
|
}, undefined, true, undefined, this);
|
|
@@ -4514,13 +4553,12 @@ var init_ModelMenuScreen = __esm(() => {
|
|
|
4514
4553
|
init_useAppKeyboard();
|
|
4515
4554
|
init_AppContext();
|
|
4516
4555
|
init_ThemeContext();
|
|
4517
|
-
init_MenuList();
|
|
4518
4556
|
ITEMS = [
|
|
4519
|
-
{ label: "Add Verified Provider" },
|
|
4520
|
-
{ label: "Add Custom Provider" },
|
|
4521
|
-
{ label: "Add Models to Provider" },
|
|
4522
|
-
{ label: "List Providers" },
|
|
4523
|
-
{ label: "Back" }
|
|
4557
|
+
{ label: "Add Verified Provider", desc: "from models.dev verified list", color: "accent" },
|
|
4558
|
+
{ label: "Add Custom Provider", desc: "configure your own API endpoint", color: "secondary" },
|
|
4559
|
+
{ label: "Add Models to Provider", desc: "register models for a provider", color: "primary" },
|
|
4560
|
+
{ label: "List Providers", desc: "view all configured providers", color: "text" },
|
|
4561
|
+
{ label: "Back", desc: "return to main menu", color: "error" }
|
|
4524
4562
|
];
|
|
4525
4563
|
});
|
|
4526
4564
|
|
|
@@ -4544,7 +4582,7 @@ var init_usePaste = () => {};
|
|
|
4544
4582
|
// src/tui/screens/ModelSelectScreen.tsx
|
|
4545
4583
|
import { useState as useState6, useEffect as useEffect4, useCallback as useCallback2, useRef as useRef3 } from "react";
|
|
4546
4584
|
import { useTerminalDimensions } from "@opentui/react";
|
|
4547
|
-
import { jsxDEV as
|
|
4585
|
+
import { jsxDEV as jsxDEV9 } from "@opentui/react/jsx-dev-runtime";
|
|
4548
4586
|
function ModelSelectScreen() {
|
|
4549
4587
|
const { state, dispatch } = useAppContext();
|
|
4550
4588
|
const navigate = useNavigate();
|
|
@@ -4706,12 +4744,12 @@ function ModelSelectScreen() {
|
|
|
4706
4744
|
setSearchQuery((q) => q + key.sequence);
|
|
4707
4745
|
});
|
|
4708
4746
|
if (state.isLoadingConfig) {
|
|
4709
|
-
return /* @__PURE__ */
|
|
4747
|
+
return /* @__PURE__ */ jsxDEV9("box", {
|
|
4710
4748
|
flexDirection: "column",
|
|
4711
4749
|
flexGrow: 1,
|
|
4712
4750
|
alignItems: "center",
|
|
4713
4751
|
justifyContent: "center",
|
|
4714
|
-
children: /* @__PURE__ */
|
|
4752
|
+
children: /* @__PURE__ */ jsxDEV9("text", {
|
|
4715
4753
|
fg: theme.dim,
|
|
4716
4754
|
children: "Loading config..."
|
|
4717
4755
|
}, undefined, false, undefined, this)
|
|
@@ -4719,31 +4757,31 @@ function ModelSelectScreen() {
|
|
|
4719
4757
|
}
|
|
4720
4758
|
const nameW = Math.floor((CARD_W - 10) / 2);
|
|
4721
4759
|
const provW = CARD_W - nameW - 10;
|
|
4722
|
-
return /* @__PURE__ */
|
|
4760
|
+
return /* @__PURE__ */ jsxDEV9("box", {
|
|
4723
4761
|
flexDirection: "column",
|
|
4724
4762
|
flexGrow: 1,
|
|
4725
4763
|
alignItems: "center",
|
|
4726
4764
|
justifyContent: "center",
|
|
4727
|
-
children: /* @__PURE__ */
|
|
4765
|
+
children: /* @__PURE__ */ jsxDEV9("box", {
|
|
4728
4766
|
flexDirection: "column",
|
|
4729
4767
|
border: true,
|
|
4730
|
-
borderStyle: "
|
|
4768
|
+
borderStyle: "single",
|
|
4731
4769
|
borderColor: theme.border,
|
|
4732
4770
|
backgroundColor: theme.background,
|
|
4733
4771
|
width: CARD_W,
|
|
4734
4772
|
children: [
|
|
4735
|
-
/* @__PURE__ */
|
|
4773
|
+
/* @__PURE__ */ jsxDEV9("box", {
|
|
4736
4774
|
flexDirection: "row",
|
|
4737
4775
|
paddingLeft: 2,
|
|
4738
4776
|
paddingRight: 2,
|
|
4739
4777
|
paddingTop: 1,
|
|
4740
4778
|
paddingBottom: 1,
|
|
4741
4779
|
children: [
|
|
4742
|
-
/* @__PURE__ */
|
|
4780
|
+
/* @__PURE__ */ jsxDEV9("text", {
|
|
4743
4781
|
fg: theme.accent,
|
|
4744
4782
|
children: "Search: "
|
|
4745
4783
|
}, undefined, false, undefined, this),
|
|
4746
|
-
/* @__PURE__ */
|
|
4784
|
+
/* @__PURE__ */ jsxDEV9("text", {
|
|
4747
4785
|
fg: theme.text,
|
|
4748
4786
|
children: [
|
|
4749
4787
|
searchQuery,
|
|
@@ -4752,19 +4790,22 @@ function ModelSelectScreen() {
|
|
|
4752
4790
|
}, undefined, true, undefined, this)
|
|
4753
4791
|
]
|
|
4754
4792
|
}, undefined, true, undefined, this),
|
|
4755
|
-
/* @__PURE__ */
|
|
4793
|
+
/* @__PURE__ */ jsxDEV9("box", {
|
|
4756
4794
|
height: 1,
|
|
4757
|
-
|
|
4795
|
+
children: /* @__PURE__ */ jsxDEV9("text", {
|
|
4796
|
+
fg: theme.border,
|
|
4797
|
+
children: "\u2500".repeat(150)
|
|
4798
|
+
}, undefined, false, undefined, this)
|
|
4758
4799
|
}, undefined, false, undefined, this),
|
|
4759
|
-
/* @__PURE__ */
|
|
4800
|
+
/* @__PURE__ */ jsxDEV9("scrollbox", {
|
|
4760
4801
|
ref: scrollboxRef,
|
|
4761
4802
|
height: PAGE_SIZE,
|
|
4762
4803
|
style: { scrollbarOptions: { showArrows: true, trackOptions: { foregroundColor: theme.primary, backgroundColor: theme.border } } },
|
|
4763
4804
|
children: [
|
|
4764
|
-
allRows.length === 0 && /* @__PURE__ */
|
|
4805
|
+
allRows.length === 0 && /* @__PURE__ */ jsxDEV9("box", {
|
|
4765
4806
|
height: 1,
|
|
4766
4807
|
paddingLeft: 2,
|
|
4767
|
-
children: /* @__PURE__ */
|
|
4808
|
+
children: /* @__PURE__ */ jsxDEV9("text", {
|
|
4768
4809
|
fg: theme.dim,
|
|
4769
4810
|
children: "No models found"
|
|
4770
4811
|
}, undefined, false, undefined, this)
|
|
@@ -4773,10 +4814,10 @@ function ModelSelectScreen() {
|
|
|
4773
4814
|
let modelCursor = 0;
|
|
4774
4815
|
return allRows.map((row, i) => {
|
|
4775
4816
|
if (row.kind === "separator")
|
|
4776
|
-
return /* @__PURE__ */
|
|
4817
|
+
return /* @__PURE__ */ jsxDEV9("box", {
|
|
4777
4818
|
height: 1,
|
|
4778
4819
|
paddingLeft: 2,
|
|
4779
|
-
children: /* @__PURE__ */
|
|
4820
|
+
children: /* @__PURE__ */ jsxDEV9("text", {
|
|
4780
4821
|
fg: theme.dim,
|
|
4781
4822
|
children: row.label
|
|
4782
4823
|
}, undefined, false, undefined, this)
|
|
@@ -4791,33 +4832,45 @@ function ModelSelectScreen() {
|
|
|
4791
4832
|
nameFg = theme.text;
|
|
4792
4833
|
else if (isSel)
|
|
4793
4834
|
nameFg = theme.success;
|
|
4794
|
-
return /* @__PURE__ */
|
|
4835
|
+
return /* @__PURE__ */ jsxDEV9("box", {
|
|
4795
4836
|
height: 1,
|
|
4796
4837
|
width: "100%",
|
|
4797
4838
|
flexDirection: "row",
|
|
4798
4839
|
backgroundColor: isActive ? theme.border : "transparent",
|
|
4840
|
+
onMouseOver: () => setCursor(localCursor),
|
|
4841
|
+
onMouseDown: () => {
|
|
4842
|
+
setCursor(localCursor);
|
|
4843
|
+
setSelected((prev) => {
|
|
4844
|
+
const next = new Set(prev);
|
|
4845
|
+
if (next.has(row.model.key))
|
|
4846
|
+
next.delete(row.model.key);
|
|
4847
|
+
else
|
|
4848
|
+
next.add(row.model.key);
|
|
4849
|
+
return next;
|
|
4850
|
+
});
|
|
4851
|
+
},
|
|
4799
4852
|
children: [
|
|
4800
|
-
/* @__PURE__ */
|
|
4853
|
+
/* @__PURE__ */ jsxDEV9("text", {
|
|
4801
4854
|
fg: theme.dim,
|
|
4802
4855
|
width: 2,
|
|
4803
4856
|
children: " "
|
|
4804
4857
|
}, undefined, false, undefined, this),
|
|
4805
|
-
/* @__PURE__ */
|
|
4858
|
+
/* @__PURE__ */ jsxDEV9("text", {
|
|
4806
4859
|
fg: nameFg,
|
|
4807
4860
|
width: nameW,
|
|
4808
4861
|
children: row.model.name
|
|
4809
4862
|
}, undefined, false, undefined, this),
|
|
4810
|
-
/* @__PURE__ */
|
|
4863
|
+
/* @__PURE__ */ jsxDEV9("text", {
|
|
4811
4864
|
fg: isActive ? theme.primary : theme.dim,
|
|
4812
4865
|
width: provW,
|
|
4813
4866
|
children: row.model.providerName
|
|
4814
4867
|
}, undefined, false, undefined, this),
|
|
4815
|
-
/* @__PURE__ */
|
|
4868
|
+
/* @__PURE__ */ jsxDEV9("text", {
|
|
4816
4869
|
fg: theme.success,
|
|
4817
4870
|
width: 2,
|
|
4818
4871
|
children: isSel ? "\u2713" : " "
|
|
4819
4872
|
}, undefined, false, undefined, this),
|
|
4820
|
-
/* @__PURE__ */
|
|
4873
|
+
/* @__PURE__ */ jsxDEV9("text", {
|
|
4821
4874
|
fg: theme.accent,
|
|
4822
4875
|
width: 2,
|
|
4823
4876
|
children: isActive ? "\u203A" : " "
|
|
@@ -4828,38 +4881,35 @@ function ModelSelectScreen() {
|
|
|
4828
4881
|
})()
|
|
4829
4882
|
]
|
|
4830
4883
|
}, undefined, true, undefined, this),
|
|
4831
|
-
/* @__PURE__ */
|
|
4884
|
+
/* @__PURE__ */ jsxDEV9("box", {
|
|
4832
4885
|
height: 1,
|
|
4833
|
-
|
|
4886
|
+
children: /* @__PURE__ */ jsxDEV9("text", {
|
|
4887
|
+
fg: theme.border,
|
|
4888
|
+
children: "\u2500".repeat(150)
|
|
4889
|
+
}, undefined, false, undefined, this)
|
|
4834
4890
|
}, undefined, false, undefined, this),
|
|
4835
|
-
/* @__PURE__ */
|
|
4891
|
+
/* @__PURE__ */ jsxDEV9("box", {
|
|
4836
4892
|
flexDirection: "row",
|
|
4837
4893
|
paddingLeft: 2,
|
|
4838
4894
|
paddingRight: 2,
|
|
4839
4895
|
paddingTop: 1,
|
|
4840
4896
|
paddingBottom: 1,
|
|
4841
4897
|
children: [
|
|
4842
|
-
/* @__PURE__ */
|
|
4898
|
+
/* @__PURE__ */ jsxDEV9("text", {
|
|
4843
4899
|
fg: theme.secondary,
|
|
4844
4900
|
children: [
|
|
4845
4901
|
"Selected: ",
|
|
4846
|
-
selected.size
|
|
4847
|
-
" model",
|
|
4848
|
-
selected.size !== 1 ? "s" : ""
|
|
4902
|
+
selected.size
|
|
4849
4903
|
]
|
|
4850
4904
|
}, undefined, true, undefined, this),
|
|
4851
|
-
recentCount > 0 && /* @__PURE__ */
|
|
4905
|
+
recentCount > 0 && /* @__PURE__ */ jsxDEV9("text", {
|
|
4852
4906
|
fg: theme.dim,
|
|
4853
4907
|
children: [
|
|
4854
4908
|
" [R] recent (",
|
|
4855
4909
|
recentCount,
|
|
4856
4910
|
")"
|
|
4857
4911
|
]
|
|
4858
|
-
}, undefined, true, undefined, this)
|
|
4859
|
-
/* @__PURE__ */ jsxDEV10("text", {
|
|
4860
|
-
fg: theme.dim,
|
|
4861
|
-
children: " [\u2191\u2193/PgUp/PgDn/wheel] scroll"
|
|
4862
|
-
}, undefined, false, undefined, this)
|
|
4912
|
+
}, undefined, true, undefined, this)
|
|
4863
4913
|
]
|
|
4864
4914
|
}, undefined, true, undefined, this)
|
|
4865
4915
|
]
|
|
@@ -4874,24 +4924,10 @@ var init_ModelSelectScreen = __esm(() => {
|
|
|
4874
4924
|
init_usePaste();
|
|
4875
4925
|
});
|
|
4876
4926
|
|
|
4877
|
-
// src/tui/components/BarChart.tsx
|
|
4878
|
-
import { jsxDEV as jsxDEV11 } from "@opentui/react/jsx-dev-runtime";
|
|
4879
|
-
function BarChart({ value, max, width, color, inverted = false }) {
|
|
4880
|
-
const normalizedValue = inverted && max > 0 ? Math.max(0, max - value) : value;
|
|
4881
|
-
const filled = max === 0 ? 0 : Math.round(normalizedValue / max * width);
|
|
4882
|
-
const empty = width - filled;
|
|
4883
|
-
const bar = "\u2588".repeat(filled) + "\u2591".repeat(empty);
|
|
4884
|
-
return /* @__PURE__ */ jsxDEV11("text", {
|
|
4885
|
-
fg: color,
|
|
4886
|
-
children: bar
|
|
4887
|
-
}, undefined, false, undefined, this);
|
|
4888
|
-
}
|
|
4889
|
-
var init_BarChart = () => {};
|
|
4890
|
-
|
|
4891
4927
|
// src/tui/components/GlowBar.tsx
|
|
4892
4928
|
import { useState as useState7, useEffect as useEffect5 } from "react";
|
|
4893
4929
|
import { engine, Timeline } from "@opentui/core";
|
|
4894
|
-
import { jsxDEV as
|
|
4930
|
+
import { jsxDEV as jsxDEV10 } from "@opentui/react/jsx-dev-runtime";
|
|
4895
4931
|
function blendHex(hex, toward, t) {
|
|
4896
4932
|
const parse3 = (h) => [
|
|
4897
4933
|
parseInt(h.slice(1, 3), 16),
|
|
@@ -4930,16 +4966,16 @@ function GlowBar({ done, total, running }) {
|
|
|
4930
4966
|
const fg = intensity >= 0 ? blendHex(theme.accent, "#ffffff", intensity * 0.55) : blendHex(theme.accent, theme.background, Math.abs(intensity) * 0.5);
|
|
4931
4967
|
return { ch: "\u2588", fg };
|
|
4932
4968
|
});
|
|
4933
|
-
return /* @__PURE__ */
|
|
4969
|
+
return /* @__PURE__ */ jsxDEV10("box", {
|
|
4934
4970
|
height: 1,
|
|
4935
4971
|
flexDirection: "row",
|
|
4936
4972
|
paddingLeft: 2,
|
|
4937
4973
|
children: [
|
|
4938
|
-
/* @__PURE__ */
|
|
4974
|
+
/* @__PURE__ */ jsxDEV10("text", {
|
|
4939
4975
|
fg: theme.dim,
|
|
4940
4976
|
children: "Benchmarking "
|
|
4941
4977
|
}, undefined, false, undefined, this),
|
|
4942
|
-
/* @__PURE__ */
|
|
4978
|
+
/* @__PURE__ */ jsxDEV10("text", {
|
|
4943
4979
|
fg: theme.accent,
|
|
4944
4980
|
children: [
|
|
4945
4981
|
done,
|
|
@@ -4948,11 +4984,11 @@ function GlowBar({ done, total, running }) {
|
|
|
4948
4984
|
" "
|
|
4949
4985
|
]
|
|
4950
4986
|
}, undefined, true, undefined, this),
|
|
4951
|
-
barChars.map((b, i) => /* @__PURE__ */
|
|
4987
|
+
barChars.map((b, i) => /* @__PURE__ */ jsxDEV10("text", {
|
|
4952
4988
|
fg: b.fg,
|
|
4953
4989
|
children: b.ch
|
|
4954
4990
|
}, i, false, undefined, this)),
|
|
4955
|
-
/* @__PURE__ */
|
|
4991
|
+
/* @__PURE__ */ jsxDEV10("text", {
|
|
4956
4992
|
fg: theme.warning,
|
|
4957
4993
|
children: [
|
|
4958
4994
|
" ",
|
|
@@ -4969,7 +5005,7 @@ var init_GlowBar = __esm(() => {
|
|
|
4969
5005
|
});
|
|
4970
5006
|
|
|
4971
5007
|
// src/tui/components/ResultsTable.tsx
|
|
4972
|
-
import { jsxDEV as
|
|
5008
|
+
import { jsxDEV as jsxDEV11 } from "@opentui/react/jsx-dev-runtime";
|
|
4973
5009
|
function lpad(s, w) {
|
|
4974
5010
|
return s.length >= w ? s.slice(0, w) : " ".repeat(w - s.length) + s;
|
|
4975
5011
|
}
|
|
@@ -4983,33 +5019,37 @@ function ResultsTable({ results, pendingCount }) {
|
|
|
4983
5019
|
const theme = useTheme();
|
|
4984
5020
|
const sorted = [...results].sort((a, b) => b.tokensPerSecond - a.tokensPerSecond);
|
|
4985
5021
|
const C = { rank: 4, model: 16, prov: 10, time: 8, ttft: 7, tps: 9, f1000: 8, out: 6, inp: 6, tot: 6 };
|
|
4986
|
-
const totalW = C.rank + C.model + C.prov + C.time + C.ttft + C.tps + C.f1000 + C.out + C.inp + C.tot + 10;
|
|
4987
|
-
const sep = "\u2500".repeat(totalW);
|
|
4988
5022
|
const maxTps = Math.max(...results.map((r) => r.tokensPerSecond), 0);
|
|
4989
5023
|
const minTtft = Math.min(...results.map((r) => r.timeToFirstToken), Infinity);
|
|
4990
5024
|
const validF1000s = results.map((r) => r.f1000).filter((f) => f !== Infinity);
|
|
4991
5025
|
const minF1000 = validF1000s.length > 0 ? Math.min(...validF1000s) : Infinity;
|
|
4992
|
-
function
|
|
4993
|
-
return lpad(
|
|
5026
|
+
function headerRow() {
|
|
5027
|
+
return "\u2502 " + lpad("#", C.rank) + " \u2502 " + rpad("Model", C.model) + " \u2502 " + rpad("Provider", C.prov) + " \u2502 " + lpad("Time(s)", C.time) + " \u2502 " + lpad("TTFT(s)", C.ttft) + " \u2502 " + lpad("Tok/s", C.tps) + " \u2502 " + lpad("F1000(h)", C.f1000) + " \u2502 " + lpad("Out", C.out) + " \u2502 " + lpad("In", C.inp) + " \u2502 " + lpad("Total", C.tot) + " \u2502";
|
|
4994
5028
|
}
|
|
4995
|
-
|
|
4996
|
-
return /* @__PURE__ */ jsxDEV13("box", {
|
|
5029
|
+
return /* @__PURE__ */ jsxDEV11("box", {
|
|
4997
5030
|
flexDirection: "column",
|
|
4998
|
-
paddingLeft:
|
|
4999
|
-
paddingRight:
|
|
5031
|
+
paddingLeft: 2,
|
|
5032
|
+
paddingRight: 2,
|
|
5000
5033
|
children: [
|
|
5001
|
-
/* @__PURE__ */
|
|
5034
|
+
/* @__PURE__ */ jsxDEV11("box", {
|
|
5035
|
+
height: 1,
|
|
5036
|
+
children: /* @__PURE__ */ jsxDEV11("text", {
|
|
5037
|
+
fg: theme.border,
|
|
5038
|
+
children: RULE
|
|
5039
|
+
}, undefined, false, undefined, this)
|
|
5040
|
+
}, undefined, false, undefined, this),
|
|
5041
|
+
/* @__PURE__ */ jsxDEV11("box", {
|
|
5002
5042
|
height: 1,
|
|
5003
|
-
children: /* @__PURE__ */
|
|
5043
|
+
children: /* @__PURE__ */ jsxDEV11("text", {
|
|
5004
5044
|
fg: theme.accent,
|
|
5005
|
-
children:
|
|
5045
|
+
children: headerRow()
|
|
5006
5046
|
}, undefined, false, undefined, this)
|
|
5007
5047
|
}, undefined, false, undefined, this),
|
|
5008
|
-
/* @__PURE__ */
|
|
5048
|
+
/* @__PURE__ */ jsxDEV11("box", {
|
|
5009
5049
|
height: 1,
|
|
5010
|
-
children: /* @__PURE__ */
|
|
5050
|
+
children: /* @__PURE__ */ jsxDEV11("text", {
|
|
5011
5051
|
fg: theme.border,
|
|
5012
|
-
children:
|
|
5052
|
+
children: RULE
|
|
5013
5053
|
}, undefined, false, undefined, this)
|
|
5014
5054
|
}, undefined, false, undefined, this),
|
|
5015
5055
|
sorted.map((r, i) => {
|
|
@@ -5025,97 +5065,105 @@ function ResultsTable({ results, pendingCount }) {
|
|
|
5025
5065
|
const isBestTps = r.tokensPerSecond === maxTps && maxTps > 0;
|
|
5026
5066
|
const isBestTtft = r.timeToFirstToken === minTtft;
|
|
5027
5067
|
const isBestF1000 = r.f1000 === minF1000 && r.f1000 !== Infinity;
|
|
5028
|
-
return /* @__PURE__ */
|
|
5068
|
+
return /* @__PURE__ */ jsxDEV11("box", {
|
|
5029
5069
|
height: 1,
|
|
5030
5070
|
flexDirection: "row",
|
|
5031
5071
|
children: [
|
|
5032
|
-
/* @__PURE__ */
|
|
5072
|
+
/* @__PURE__ */ jsxDEV11("text", {
|
|
5073
|
+
fg: theme.dim,
|
|
5074
|
+
children: "\u2502 "
|
|
5075
|
+
}, undefined, false, undefined, this),
|
|
5076
|
+
/* @__PURE__ */ jsxDEV11("text", {
|
|
5033
5077
|
fg: theme.dim,
|
|
5034
5078
|
children: [
|
|
5035
5079
|
lpad(rank, C.rank),
|
|
5036
5080
|
" \u2502 "
|
|
5037
5081
|
]
|
|
5038
5082
|
}, undefined, true, undefined, this),
|
|
5039
|
-
/* @__PURE__ */
|
|
5083
|
+
/* @__PURE__ */ jsxDEV11("text", {
|
|
5040
5084
|
fg: theme.text,
|
|
5041
5085
|
children: [
|
|
5042
5086
|
rpad(trunc(r.model, C.model), C.model),
|
|
5043
5087
|
" \u2502 "
|
|
5044
5088
|
]
|
|
5045
5089
|
}, undefined, true, undefined, this),
|
|
5046
|
-
/* @__PURE__ */
|
|
5090
|
+
/* @__PURE__ */ jsxDEV11("text", {
|
|
5047
5091
|
fg: theme.dim,
|
|
5048
5092
|
children: [
|
|
5049
5093
|
rpad(trunc(r.provider, C.prov), C.prov),
|
|
5050
5094
|
" \u2502 "
|
|
5051
5095
|
]
|
|
5052
5096
|
}, undefined, true, undefined, this),
|
|
5053
|
-
/* @__PURE__ */
|
|
5097
|
+
/* @__PURE__ */ jsxDEV11("text", {
|
|
5054
5098
|
fg: theme.dim,
|
|
5055
5099
|
children: [
|
|
5056
5100
|
lpad(timeSec, C.time),
|
|
5057
5101
|
" \u2502 "
|
|
5058
5102
|
]
|
|
5059
5103
|
}, undefined, true, undefined, this),
|
|
5060
|
-
/* @__PURE__ */
|
|
5104
|
+
/* @__PURE__ */ jsxDEV11("text", {
|
|
5061
5105
|
fg: isBestTtft ? theme.success : theme.dim,
|
|
5062
5106
|
children: [
|
|
5063
5107
|
lpad(ttftSec, C.ttft),
|
|
5064
5108
|
" \u2502 "
|
|
5065
5109
|
]
|
|
5066
5110
|
}, undefined, true, undefined, this),
|
|
5067
|
-
/* @__PURE__ */
|
|
5111
|
+
/* @__PURE__ */ jsxDEV11("text", {
|
|
5068
5112
|
fg: isBestTps ? theme.success : theme.dim,
|
|
5069
5113
|
children: [
|
|
5070
5114
|
lpad(tps, C.tps),
|
|
5071
5115
|
" \u2502 "
|
|
5072
5116
|
]
|
|
5073
5117
|
}, undefined, true, undefined, this),
|
|
5074
|
-
/* @__PURE__ */
|
|
5118
|
+
/* @__PURE__ */ jsxDEV11("text", {
|
|
5075
5119
|
fg: isBestF1000 ? theme.success : theme.dim,
|
|
5076
5120
|
children: [
|
|
5077
5121
|
lpad(f1000Val, C.f1000),
|
|
5078
5122
|
" \u2502 "
|
|
5079
5123
|
]
|
|
5080
5124
|
}, undefined, true, undefined, this),
|
|
5081
|
-
/* @__PURE__ */
|
|
5125
|
+
/* @__PURE__ */ jsxDEV11("text", {
|
|
5082
5126
|
fg: theme.dim,
|
|
5083
5127
|
children: [
|
|
5084
5128
|
lpad(outTok, C.out),
|
|
5085
5129
|
" \u2502 "
|
|
5086
5130
|
]
|
|
5087
5131
|
}, undefined, true, undefined, this),
|
|
5088
|
-
/* @__PURE__ */
|
|
5132
|
+
/* @__PURE__ */ jsxDEV11("text", {
|
|
5089
5133
|
fg: theme.dim,
|
|
5090
5134
|
children: [
|
|
5091
5135
|
lpad(inTok, C.inp),
|
|
5092
5136
|
" \u2502 "
|
|
5093
5137
|
]
|
|
5094
5138
|
}, undefined, true, undefined, this),
|
|
5095
|
-
/* @__PURE__ */
|
|
5139
|
+
/* @__PURE__ */ jsxDEV11("text", {
|
|
5096
5140
|
fg: theme.dim,
|
|
5097
5141
|
children: lpad(totTok, C.tot)
|
|
5098
5142
|
}, undefined, false, undefined, this),
|
|
5099
|
-
|
|
5143
|
+
/* @__PURE__ */ jsxDEV11("text", {
|
|
5144
|
+
fg: theme.dim,
|
|
5145
|
+
children: " \u2502"
|
|
5146
|
+
}, undefined, false, undefined, this),
|
|
5147
|
+
hasEst && /* @__PURE__ */ jsxDEV11("text", {
|
|
5100
5148
|
fg: theme.warning,
|
|
5101
5149
|
children: " [est]"
|
|
5102
5150
|
}, undefined, false, undefined, this)
|
|
5103
5151
|
]
|
|
5104
5152
|
}, `${r.model}-${r.provider}-${i}`, true, undefined, this);
|
|
5105
5153
|
}),
|
|
5106
|
-
/* @__PURE__ */
|
|
5154
|
+
/* @__PURE__ */ jsxDEV11("box", {
|
|
5107
5155
|
height: 1,
|
|
5108
|
-
children: /* @__PURE__ */
|
|
5156
|
+
children: /* @__PURE__ */ jsxDEV11("text", {
|
|
5109
5157
|
fg: theme.border,
|
|
5110
|
-
children:
|
|
5158
|
+
children: RULE
|
|
5111
5159
|
}, undefined, false, undefined, this)
|
|
5112
5160
|
}, undefined, false, undefined, this),
|
|
5113
|
-
pendingCount > 0 && /* @__PURE__ */
|
|
5161
|
+
pendingCount > 0 && /* @__PURE__ */ jsxDEV11("box", {
|
|
5114
5162
|
height: 1,
|
|
5115
|
-
children: /* @__PURE__ */
|
|
5163
|
+
children: /* @__PURE__ */ jsxDEV11("text", {
|
|
5116
5164
|
fg: theme.dim,
|
|
5117
5165
|
children: [
|
|
5118
|
-
"
|
|
5166
|
+
"Waiting for ",
|
|
5119
5167
|
pendingCount,
|
|
5120
5168
|
" more result",
|
|
5121
5169
|
pendingCount !== 1 ? "s" : "",
|
|
@@ -5126,14 +5174,35 @@ function ResultsTable({ results, pendingCount }) {
|
|
|
5126
5174
|
]
|
|
5127
5175
|
}, undefined, true, undefined, this);
|
|
5128
5176
|
}
|
|
5177
|
+
var RULE;
|
|
5129
5178
|
var init_ResultsTable = __esm(() => {
|
|
5130
5179
|
init_ThemeContext();
|
|
5180
|
+
RULE = "\u2500".repeat(200);
|
|
5131
5181
|
});
|
|
5132
5182
|
|
|
5133
|
-
// src/tui/
|
|
5134
|
-
import {
|
|
5135
|
-
|
|
5136
|
-
|
|
5183
|
+
// src/tui/components/BarChart.tsx
|
|
5184
|
+
import { jsxDEV as jsxDEV12 } from "@opentui/react/jsx-dev-runtime";
|
|
5185
|
+
function BarChart({ value, max, width, color, inverted = false }) {
|
|
5186
|
+
const normalizedValue = inverted && max > 0 ? Math.max(0, max - value) : value;
|
|
5187
|
+
const filled = max === 0 ? 0 : Math.round(normalizedValue / max * width);
|
|
5188
|
+
const empty = width - filled;
|
|
5189
|
+
const bar = "\u2588".repeat(filled) + "\u2591".repeat(empty);
|
|
5190
|
+
return /* @__PURE__ */ jsxDEV12("text", {
|
|
5191
|
+
fg: color,
|
|
5192
|
+
children: bar
|
|
5193
|
+
}, undefined, false, undefined, this);
|
|
5194
|
+
}
|
|
5195
|
+
var init_BarChart = () => {};
|
|
5196
|
+
|
|
5197
|
+
// src/tui/components/RankingRow.tsx
|
|
5198
|
+
import { jsxDEV as jsxDEV13 } from "@opentui/react/jsx-dev-runtime";
|
|
5199
|
+
function pad(s, w, align) {
|
|
5200
|
+
if (s.length >= w)
|
|
5201
|
+
return s.slice(0, w);
|
|
5202
|
+
const pad2 = " ".repeat(w - s.length);
|
|
5203
|
+
return align === "right" ? pad2 + s : s + pad2;
|
|
5204
|
+
}
|
|
5205
|
+
function rankLabel(rank) {
|
|
5137
5206
|
if (rank === 1)
|
|
5138
5207
|
return "1st";
|
|
5139
5208
|
if (rank === 2)
|
|
@@ -5142,6 +5211,73 @@ function rankBadge(rank) {
|
|
|
5142
5211
|
return "3rd";
|
|
5143
5212
|
return `${rank}th`;
|
|
5144
5213
|
}
|
|
5214
|
+
function RankingRow({ rank, rankFg, metrics, model, modelFg, provider, providerFg, bar, theme }) {
|
|
5215
|
+
const badge = pad(rankLabel(rank), 3, "left");
|
|
5216
|
+
const modelCol = pad(model, 18, "left");
|
|
5217
|
+
const provCol = pad(provider, 12, "left");
|
|
5218
|
+
return /* @__PURE__ */ jsxDEV13("box", {
|
|
5219
|
+
height: 1,
|
|
5220
|
+
flexDirection: "row",
|
|
5221
|
+
paddingLeft: 2,
|
|
5222
|
+
children: [
|
|
5223
|
+
/* @__PURE__ */ jsxDEV13("text", {
|
|
5224
|
+
fg: rankFg,
|
|
5225
|
+
children: [
|
|
5226
|
+
badge,
|
|
5227
|
+
" "
|
|
5228
|
+
]
|
|
5229
|
+
}, undefined, true, undefined, this),
|
|
5230
|
+
metrics.map((m, i) => /* @__PURE__ */ jsxDEV13("box", {
|
|
5231
|
+
flexDirection: "row",
|
|
5232
|
+
children: [
|
|
5233
|
+
/* @__PURE__ */ jsxDEV13("text", {
|
|
5234
|
+
fg: theme.dim,
|
|
5235
|
+
children: " \u2502 "
|
|
5236
|
+
}, undefined, false, undefined, this),
|
|
5237
|
+
/* @__PURE__ */ jsxDEV13("text", {
|
|
5238
|
+
fg: m.fg,
|
|
5239
|
+
children: [
|
|
5240
|
+
pad(m.text, m.width, m.align ?? "right"),
|
|
5241
|
+
" "
|
|
5242
|
+
]
|
|
5243
|
+
}, undefined, true, undefined, this)
|
|
5244
|
+
]
|
|
5245
|
+
}, `m-${i}`, true, undefined, this)),
|
|
5246
|
+
/* @__PURE__ */ jsxDEV13("text", {
|
|
5247
|
+
fg: theme.dim,
|
|
5248
|
+
children: " \u2502 "
|
|
5249
|
+
}, undefined, false, undefined, this),
|
|
5250
|
+
/* @__PURE__ */ jsxDEV13("text", {
|
|
5251
|
+
fg: modelFg,
|
|
5252
|
+
children: [
|
|
5253
|
+
modelCol,
|
|
5254
|
+
" "
|
|
5255
|
+
]
|
|
5256
|
+
}, undefined, true, undefined, this),
|
|
5257
|
+
/* @__PURE__ */ jsxDEV13("text", {
|
|
5258
|
+
fg: providerFg,
|
|
5259
|
+
children: provCol
|
|
5260
|
+
}, undefined, false, undefined, this),
|
|
5261
|
+
/* @__PURE__ */ jsxDEV13("text", {
|
|
5262
|
+
fg: theme.dim,
|
|
5263
|
+
children: " \u2502 "
|
|
5264
|
+
}, undefined, false, undefined, this),
|
|
5265
|
+
/* @__PURE__ */ jsxDEV13(BarChart, {
|
|
5266
|
+
value: bar.value,
|
|
5267
|
+
max: bar.max,
|
|
5268
|
+
width: bar.width,
|
|
5269
|
+
color: bar.color
|
|
5270
|
+
}, undefined, false, undefined, this)
|
|
5271
|
+
]
|
|
5272
|
+
}, undefined, true, undefined, this);
|
|
5273
|
+
}
|
|
5274
|
+
var init_RankingRow = __esm(() => {
|
|
5275
|
+
init_BarChart();
|
|
5276
|
+
});
|
|
5277
|
+
|
|
5278
|
+
// src/tui/screens/BenchmarkScreen.tsx
|
|
5279
|
+
import { useState as useState8, useEffect as useEffect6, useRef as useRef4, useMemo } from "react";
|
|
5280
|
+
import { jsxDEV as jsxDEV14 } from "@opentui/react/jsx-dev-runtime";
|
|
5145
5281
|
function BenchmarkScreen() {
|
|
5146
5282
|
const { state, dispatch } = useAppContext();
|
|
5147
5283
|
const navigate = useNavigate();
|
|
@@ -5294,7 +5430,10 @@ function BenchmarkScreen() {
|
|
|
5294
5430
|
if (tpsRanked.length > 0) {
|
|
5295
5431
|
rows.push(/* @__PURE__ */ jsxDEV14("box", {
|
|
5296
5432
|
height: 1,
|
|
5297
|
-
|
|
5433
|
+
children: /* @__PURE__ */ jsxDEV14("text", {
|
|
5434
|
+
fg: theme.border,
|
|
5435
|
+
children: "\u2500".repeat(150)
|
|
5436
|
+
}, undefined, false, undefined, this)
|
|
5298
5437
|
}, "div-tps", false, undefined, this));
|
|
5299
5438
|
rows.push(/* @__PURE__ */ jsxDEV14("box", {
|
|
5300
5439
|
height: 1,
|
|
@@ -5310,75 +5449,29 @@ function BenchmarkScreen() {
|
|
|
5310
5449
|
const rankFg = rank === 1 ? theme.accent : rank === 2 ? theme.secondary : theme.dim;
|
|
5311
5450
|
const tps = s.result?.tokensPerSecond ?? 0;
|
|
5312
5451
|
const timeSec = (s.result?.totalTime ?? 0) / 1000;
|
|
5313
|
-
|
|
5314
|
-
|
|
5315
|
-
|
|
5316
|
-
|
|
5317
|
-
|
|
5318
|
-
|
|
5319
|
-
|
|
5320
|
-
|
|
5321
|
-
|
|
5322
|
-
|
|
5323
|
-
|
|
5324
|
-
|
|
5325
|
-
|
|
5326
|
-
|
|
5327
|
-
}, undefined, true, undefined, this),
|
|
5328
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5329
|
-
fg: theme.dim,
|
|
5330
|
-
children: " \u2502 "
|
|
5331
|
-
}, undefined, false, undefined, this),
|
|
5332
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5333
|
-
fg: theme.accent,
|
|
5334
|
-
children: [
|
|
5335
|
-
tps.toFixed(1).padStart(8),
|
|
5336
|
-
" tok/s "
|
|
5337
|
-
]
|
|
5338
|
-
}, undefined, true, undefined, this),
|
|
5339
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5340
|
-
fg: theme.dim,
|
|
5341
|
-
children: " \u2502 "
|
|
5342
|
-
}, undefined, false, undefined, this),
|
|
5343
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5344
|
-
fg: theme.secondary,
|
|
5345
|
-
children: [
|
|
5346
|
-
timeSec.toFixed(2).padStart(6),
|
|
5347
|
-
"s "
|
|
5348
|
-
]
|
|
5349
|
-
}, undefined, true, undefined, this),
|
|
5350
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5351
|
-
fg: theme.dim,
|
|
5352
|
-
children: " \u2502 "
|
|
5353
|
-
}, undefined, false, undefined, this),
|
|
5354
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5355
|
-
fg: theme.text,
|
|
5356
|
-
children: [
|
|
5357
|
-
modelCol,
|
|
5358
|
-
" "
|
|
5359
|
-
]
|
|
5360
|
-
}, undefined, true, undefined, this),
|
|
5361
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5362
|
-
fg: theme.dim,
|
|
5363
|
-
children: [
|
|
5364
|
-
provCol,
|
|
5365
|
-
" \u2502 "
|
|
5366
|
-
]
|
|
5367
|
-
}, undefined, true, undefined, this),
|
|
5368
|
-
/* @__PURE__ */ jsxDEV14(BarChart, {
|
|
5369
|
-
value: tps,
|
|
5370
|
-
max: maxTps,
|
|
5371
|
-
width: BAR_W2,
|
|
5372
|
-
color: theme.accent
|
|
5373
|
-
}, undefined, false, undefined, this)
|
|
5374
|
-
]
|
|
5375
|
-
}, `tps-${s.model.id}-${s.model.providerId}`, true, undefined, this));
|
|
5452
|
+
rows.push(/* @__PURE__ */ jsxDEV14(RankingRow, {
|
|
5453
|
+
rank,
|
|
5454
|
+
rankFg,
|
|
5455
|
+
metrics: [
|
|
5456
|
+
{ text: `${tps.toFixed(1)} tok/s`, fg: theme.accent, width: 12 },
|
|
5457
|
+
{ text: `${timeSec.toFixed(2)}s`, fg: theme.secondary, width: 7 }
|
|
5458
|
+
],
|
|
5459
|
+
model: s.model.name,
|
|
5460
|
+
modelFg: theme.text,
|
|
5461
|
+
provider: s.model.providerName,
|
|
5462
|
+
providerFg: theme.dim,
|
|
5463
|
+
bar: { value: tps, max: maxTps, width: BAR_W2, color: theme.accent },
|
|
5464
|
+
theme
|
|
5465
|
+
}, `tps-${s.model.id}-${s.model.providerId}`, false, undefined, this));
|
|
5376
5466
|
}
|
|
5377
5467
|
}
|
|
5378
5468
|
if (ttftRanked.length > 0) {
|
|
5379
5469
|
rows.push(/* @__PURE__ */ jsxDEV14("box", {
|
|
5380
5470
|
height: 1,
|
|
5381
|
-
|
|
5471
|
+
children: /* @__PURE__ */ jsxDEV14("text", {
|
|
5472
|
+
fg: theme.border,
|
|
5473
|
+
children: "\u2500".repeat(150)
|
|
5474
|
+
}, undefined, false, undefined, this)
|
|
5382
5475
|
}, "div-ttft", false, undefined, this));
|
|
5383
5476
|
rows.push(/* @__PURE__ */ jsxDEV14("box", {
|
|
5384
5477
|
height: 1,
|
|
@@ -5394,75 +5487,29 @@ function BenchmarkScreen() {
|
|
|
5394
5487
|
const rankFg = rank === 1 ? theme.accent : rank === 2 ? theme.secondary : theme.dim;
|
|
5395
5488
|
const ttft = (s.result?.timeToFirstToken ?? 0) / 1000;
|
|
5396
5489
|
const tps = s.result?.tokensPerSecond ?? 0;
|
|
5397
|
-
|
|
5398
|
-
|
|
5399
|
-
|
|
5400
|
-
|
|
5401
|
-
|
|
5402
|
-
|
|
5403
|
-
|
|
5404
|
-
|
|
5405
|
-
|
|
5406
|
-
|
|
5407
|
-
|
|
5408
|
-
|
|
5409
|
-
|
|
5410
|
-
|
|
5411
|
-
}, undefined, true, undefined, this),
|
|
5412
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5413
|
-
fg: theme.dim,
|
|
5414
|
-
children: " \u2502 "
|
|
5415
|
-
}, undefined, false, undefined, this),
|
|
5416
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5417
|
-
fg: theme.secondary,
|
|
5418
|
-
children: [
|
|
5419
|
-
ttft.toFixed(2).padStart(7),
|
|
5420
|
-
"s "
|
|
5421
|
-
]
|
|
5422
|
-
}, undefined, true, undefined, this),
|
|
5423
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5424
|
-
fg: theme.dim,
|
|
5425
|
-
children: " \u2502 "
|
|
5426
|
-
}, undefined, false, undefined, this),
|
|
5427
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5428
|
-
fg: theme.accent,
|
|
5429
|
-
children: [
|
|
5430
|
-
tps.toFixed(1).padStart(8),
|
|
5431
|
-
" tok/s "
|
|
5432
|
-
]
|
|
5433
|
-
}, undefined, true, undefined, this),
|
|
5434
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5435
|
-
fg: theme.dim,
|
|
5436
|
-
children: " \u2502 "
|
|
5437
|
-
}, undefined, false, undefined, this),
|
|
5438
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5439
|
-
fg: theme.text,
|
|
5440
|
-
children: [
|
|
5441
|
-
modelCol,
|
|
5442
|
-
" "
|
|
5443
|
-
]
|
|
5444
|
-
}, undefined, true, undefined, this),
|
|
5445
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5446
|
-
fg: theme.dim,
|
|
5447
|
-
children: [
|
|
5448
|
-
provCol,
|
|
5449
|
-
" \u2502 "
|
|
5450
|
-
]
|
|
5451
|
-
}, undefined, true, undefined, this),
|
|
5452
|
-
/* @__PURE__ */ jsxDEV14(BarChart, {
|
|
5453
|
-
value: ttft,
|
|
5454
|
-
max: maxTtftForBar,
|
|
5455
|
-
width: BAR_W2,
|
|
5456
|
-
color: theme.secondary
|
|
5457
|
-
}, undefined, false, undefined, this)
|
|
5458
|
-
]
|
|
5459
|
-
}, `ttft-${s.model.id}-${s.model.providerId}`, true, undefined, this));
|
|
5490
|
+
rows.push(/* @__PURE__ */ jsxDEV14(RankingRow, {
|
|
5491
|
+
rank,
|
|
5492
|
+
rankFg,
|
|
5493
|
+
metrics: [
|
|
5494
|
+
{ text: `${ttft.toFixed(2)}s`, fg: theme.secondary, width: 7 },
|
|
5495
|
+
{ text: `${tps.toFixed(1)} tok/s`, fg: theme.accent, width: 12 }
|
|
5496
|
+
],
|
|
5497
|
+
model: s.model.name,
|
|
5498
|
+
modelFg: theme.text,
|
|
5499
|
+
provider: s.model.providerName,
|
|
5500
|
+
providerFg: theme.dim,
|
|
5501
|
+
bar: { value: ttft, max: maxTtftForBar, width: BAR_W2, color: theme.secondary },
|
|
5502
|
+
theme
|
|
5503
|
+
}, `ttft-${s.model.id}-${s.model.providerId}`, false, undefined, this));
|
|
5460
5504
|
}
|
|
5461
5505
|
}
|
|
5462
5506
|
if (f1000Ranked.length > 0) {
|
|
5463
5507
|
rows.push(/* @__PURE__ */ jsxDEV14("box", {
|
|
5464
5508
|
height: 1,
|
|
5465
|
-
|
|
5509
|
+
children: /* @__PURE__ */ jsxDEV14("text", {
|
|
5510
|
+
fg: theme.border,
|
|
5511
|
+
children: "\u2500".repeat(150)
|
|
5512
|
+
}, undefined, false, undefined, this)
|
|
5466
5513
|
}, "div-f1000", false, undefined, this));
|
|
5467
5514
|
rows.push(/* @__PURE__ */ jsxDEV14("box", {
|
|
5468
5515
|
height: 1,
|
|
@@ -5477,89 +5524,31 @@ function BenchmarkScreen() {
|
|
|
5477
5524
|
const rank = i + 1;
|
|
5478
5525
|
const rankFg = rank === 1 ? theme.accent : rank === 2 ? theme.secondary : theme.dim;
|
|
5479
5526
|
const f1000 = s.result?.f1000 ?? Infinity;
|
|
5480
|
-
const f1000Str = f1000 === Infinity ? "\u221E" : f1000.toFixed(2)
|
|
5481
|
-
const ttft = (s.result?.timeToFirstToken ?? 0) / 1000;
|
|
5527
|
+
const f1000Str = f1000 === Infinity ? "\u221E" : `${f1000.toFixed(2)}h`;
|
|
5482
5528
|
const tps = s.result?.tokensPerSecond ?? 0;
|
|
5483
|
-
|
|
5484
|
-
|
|
5485
|
-
|
|
5486
|
-
|
|
5487
|
-
|
|
5488
|
-
|
|
5489
|
-
|
|
5490
|
-
|
|
5491
|
-
|
|
5492
|
-
|
|
5493
|
-
|
|
5494
|
-
|
|
5495
|
-
|
|
5496
|
-
|
|
5497
|
-
}, undefined, true, undefined, this),
|
|
5498
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5499
|
-
fg: theme.dim,
|
|
5500
|
-
children: " \u2502 "
|
|
5501
|
-
}, undefined, false, undefined, this),
|
|
5502
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5503
|
-
fg: theme.primary,
|
|
5504
|
-
children: [
|
|
5505
|
-
f1000Str.padStart(7),
|
|
5506
|
-
"h "
|
|
5507
|
-
]
|
|
5508
|
-
}, undefined, true, undefined, this),
|
|
5509
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5510
|
-
fg: theme.dim,
|
|
5511
|
-
children: " \u2502 "
|
|
5512
|
-
}, undefined, false, undefined, this),
|
|
5513
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5514
|
-
fg: theme.secondary,
|
|
5515
|
-
children: [
|
|
5516
|
-
ttft.toFixed(2).padStart(5),
|
|
5517
|
-
"s "
|
|
5518
|
-
]
|
|
5519
|
-
}, undefined, true, undefined, this),
|
|
5520
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5521
|
-
fg: theme.dim,
|
|
5522
|
-
children: " \u2502 "
|
|
5523
|
-
}, undefined, false, undefined, this),
|
|
5524
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5525
|
-
fg: theme.accent,
|
|
5526
|
-
children: [
|
|
5527
|
-
tps.toFixed(0).padStart(5),
|
|
5528
|
-
" tok/s "
|
|
5529
|
-
]
|
|
5530
|
-
}, undefined, true, undefined, this),
|
|
5531
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5532
|
-
fg: theme.dim,
|
|
5533
|
-
children: " \u2502 "
|
|
5534
|
-
}, undefined, false, undefined, this),
|
|
5535
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5536
|
-
fg: theme.text,
|
|
5537
|
-
children: [
|
|
5538
|
-
modelCol,
|
|
5539
|
-
" "
|
|
5540
|
-
]
|
|
5541
|
-
}, undefined, true, undefined, this),
|
|
5542
|
-
/* @__PURE__ */ jsxDEV14("text", {
|
|
5543
|
-
fg: theme.dim,
|
|
5544
|
-
children: [
|
|
5545
|
-
provCol,
|
|
5546
|
-
" \u2502 "
|
|
5547
|
-
]
|
|
5548
|
-
}, undefined, true, undefined, this),
|
|
5549
|
-
/* @__PURE__ */ jsxDEV14(BarChart, {
|
|
5550
|
-
value: f1000 === Infinity ? maxF1000 : f1000,
|
|
5551
|
-
max: maxF1000,
|
|
5552
|
-
width: BAR_W2,
|
|
5553
|
-
color: theme.primary
|
|
5554
|
-
}, undefined, false, undefined, this)
|
|
5555
|
-
]
|
|
5556
|
-
}, `f1000-${s.model.id}-${s.model.providerId}`, true, undefined, this));
|
|
5529
|
+
rows.push(/* @__PURE__ */ jsxDEV14(RankingRow, {
|
|
5530
|
+
rank,
|
|
5531
|
+
rankFg,
|
|
5532
|
+
metrics: [
|
|
5533
|
+
{ text: f1000Str, fg: theme.primary, width: 7 },
|
|
5534
|
+
{ text: `${tps.toFixed(0)} tok/s`, fg: theme.accent, width: 12 }
|
|
5535
|
+
],
|
|
5536
|
+
model: s.model.name,
|
|
5537
|
+
modelFg: theme.text,
|
|
5538
|
+
provider: s.model.providerName,
|
|
5539
|
+
providerFg: theme.dim,
|
|
5540
|
+
bar: { value: f1000 === Infinity ? maxF1000 : f1000, max: maxF1000, width: BAR_W2, color: theme.primary },
|
|
5541
|
+
theme
|
|
5542
|
+
}, `f1000-${s.model.id}-${s.model.providerId}`, false, undefined, this));
|
|
5557
5543
|
}
|
|
5558
5544
|
}
|
|
5559
5545
|
if (allDone && errors.length > 0) {
|
|
5560
5546
|
rows.push(/* @__PURE__ */ jsxDEV14("box", {
|
|
5561
5547
|
height: 1,
|
|
5562
|
-
|
|
5548
|
+
children: /* @__PURE__ */ jsxDEV14("text", {
|
|
5549
|
+
fg: theme.border,
|
|
5550
|
+
children: "\u2500".repeat(150)
|
|
5551
|
+
}, undefined, false, undefined, this)
|
|
5563
5552
|
}, "div-errors", false, undefined, this));
|
|
5564
5553
|
rows.push(/* @__PURE__ */ jsxDEV14("box", {
|
|
5565
5554
|
height: 1,
|
|
@@ -5620,7 +5609,10 @@ function BenchmarkScreen() {
|
|
|
5620
5609
|
}
|
|
5621
5610
|
rows.push(/* @__PURE__ */ jsxDEV14("box", {
|
|
5622
5611
|
height: 1,
|
|
5623
|
-
|
|
5612
|
+
children: /* @__PURE__ */ jsxDEV14("text", {
|
|
5613
|
+
fg: theme.border,
|
|
5614
|
+
children: "\u2500".repeat(150)
|
|
5615
|
+
}, undefined, false, undefined, this)
|
|
5624
5616
|
}, "div-results", false, undefined, this));
|
|
5625
5617
|
rows.push(/* @__PURE__ */ jsxDEV14("box", {
|
|
5626
5618
|
height: 1,
|
|
@@ -5726,7 +5718,7 @@ function BenchmarkScreen() {
|
|
|
5726
5718
|
/* @__PURE__ */ jsxDEV14("box", {
|
|
5727
5719
|
flexDirection: "column",
|
|
5728
5720
|
border: true,
|
|
5729
|
-
borderStyle: "
|
|
5721
|
+
borderStyle: "single",
|
|
5730
5722
|
borderColor: theme.border,
|
|
5731
5723
|
backgroundColor: theme.background,
|
|
5732
5724
|
flexGrow: 1,
|
|
@@ -5746,7 +5738,10 @@ function BenchmarkScreen() {
|
|
|
5746
5738
|
}, undefined, true, undefined, this),
|
|
5747
5739
|
/* @__PURE__ */ jsxDEV14("box", {
|
|
5748
5740
|
height: 1,
|
|
5749
|
-
|
|
5741
|
+
children: /* @__PURE__ */ jsxDEV14("text", {
|
|
5742
|
+
fg: theme.border,
|
|
5743
|
+
children: "\u2500".repeat(150)
|
|
5744
|
+
}, undefined, false, undefined, this)
|
|
5750
5745
|
}, undefined, false, undefined, this),
|
|
5751
5746
|
/* @__PURE__ */ jsxDEV14("scrollbox", {
|
|
5752
5747
|
focused: true,
|
|
@@ -5766,9 +5761,9 @@ var init_BenchmarkScreen = __esm(() => {
|
|
|
5766
5761
|
init_useAppKeyboard();
|
|
5767
5762
|
init_AppContext();
|
|
5768
5763
|
init_ThemeContext();
|
|
5769
|
-
init_BarChart();
|
|
5770
5764
|
init_GlowBar();
|
|
5771
5765
|
init_ResultsTable();
|
|
5766
|
+
init_RankingRow();
|
|
5772
5767
|
});
|
|
5773
5768
|
|
|
5774
5769
|
// src/tui/screens/AddVerifiedScreen.tsx
|
|
@@ -5931,7 +5926,7 @@ function AddVerifiedScreen() {
|
|
|
5931
5926
|
children: /* @__PURE__ */ jsxDEV15("box", {
|
|
5932
5927
|
flexDirection: "column",
|
|
5933
5928
|
border: true,
|
|
5934
|
-
borderStyle: "
|
|
5929
|
+
borderStyle: "single",
|
|
5935
5930
|
borderColor: theme.border,
|
|
5936
5931
|
backgroundColor: theme.background,
|
|
5937
5932
|
width: CARD_W,
|
|
@@ -5947,7 +5942,10 @@ function AddVerifiedScreen() {
|
|
|
5947
5942
|
}, undefined, false, undefined, this),
|
|
5948
5943
|
/* @__PURE__ */ jsxDEV15("box", {
|
|
5949
5944
|
height: 1,
|
|
5950
|
-
|
|
5945
|
+
children: /* @__PURE__ */ jsxDEV15("text", {
|
|
5946
|
+
fg: theme.border,
|
|
5947
|
+
children: "\u2500".repeat(150)
|
|
5948
|
+
}, undefined, false, undefined, this)
|
|
5951
5949
|
}, undefined, false, undefined, this),
|
|
5952
5950
|
/* @__PURE__ */ jsxDEV15("box", {
|
|
5953
5951
|
flexDirection: "column",
|
|
@@ -6019,7 +6017,10 @@ function AddVerifiedScreen() {
|
|
|
6019
6017
|
}, undefined, true, undefined, this),
|
|
6020
6018
|
/* @__PURE__ */ jsxDEV15("box", {
|
|
6021
6019
|
height: 1,
|
|
6022
|
-
|
|
6020
|
+
children: /* @__PURE__ */ jsxDEV15("text", {
|
|
6021
|
+
fg: theme.border,
|
|
6022
|
+
children: "\u2500".repeat(150)
|
|
6023
|
+
}, undefined, false, undefined, this)
|
|
6023
6024
|
}, undefined, false, undefined, this),
|
|
6024
6025
|
saveSuccess ? /* @__PURE__ */ jsxDEV15("box", {
|
|
6025
6026
|
flexDirection: "column",
|
|
@@ -6095,6 +6096,42 @@ function AddVerifiedScreen() {
|
|
|
6095
6096
|
}, undefined, false, undefined, this)
|
|
6096
6097
|
}, undefined, false, undefined, this)
|
|
6097
6098
|
]
|
|
6099
|
+
}, undefined, true, undefined, this),
|
|
6100
|
+
/* @__PURE__ */ jsxDEV15("box", {
|
|
6101
|
+
height: 1,
|
|
6102
|
+
children: /* @__PURE__ */ jsxDEV15("text", {
|
|
6103
|
+
fg: theme.border,
|
|
6104
|
+
children: "\u2500".repeat(150)
|
|
6105
|
+
}, undefined, false, undefined, this)
|
|
6106
|
+
}, undefined, false, undefined, this),
|
|
6107
|
+
/* @__PURE__ */ jsxDEV15("box", {
|
|
6108
|
+
height: 1,
|
|
6109
|
+
flexDirection: "row",
|
|
6110
|
+
paddingLeft: 2,
|
|
6111
|
+
paddingRight: 2,
|
|
6112
|
+
paddingTop: 1,
|
|
6113
|
+
paddingBottom: 1,
|
|
6114
|
+
onMouseDown: () => {
|
|
6115
|
+
setStep("list");
|
|
6116
|
+
setSelectedProvider(null);
|
|
6117
|
+
setApiKey("");
|
|
6118
|
+
setSaveSuccess(false);
|
|
6119
|
+
setSaveError("");
|
|
6120
|
+
},
|
|
6121
|
+
children: [
|
|
6122
|
+
/* @__PURE__ */ jsxDEV15("text", {
|
|
6123
|
+
fg: theme.dim,
|
|
6124
|
+
children: "\u2190 "
|
|
6125
|
+
}, undefined, false, undefined, this),
|
|
6126
|
+
/* @__PURE__ */ jsxDEV15("text", {
|
|
6127
|
+
fg: theme.accent,
|
|
6128
|
+
children: "Back to list"
|
|
6129
|
+
}, undefined, false, undefined, this),
|
|
6130
|
+
/* @__PURE__ */ jsxDEV15("text", {
|
|
6131
|
+
fg: theme.dim,
|
|
6132
|
+
children: " [Esc]"
|
|
6133
|
+
}, undefined, false, undefined, this)
|
|
6134
|
+
]
|
|
6098
6135
|
}, undefined, true, undefined, this)
|
|
6099
6136
|
]
|
|
6100
6137
|
}, undefined, true, undefined, this)
|
|
@@ -6108,7 +6145,7 @@ function AddVerifiedScreen() {
|
|
|
6108
6145
|
children: /* @__PURE__ */ jsxDEV15("box", {
|
|
6109
6146
|
flexDirection: "column",
|
|
6110
6147
|
border: true,
|
|
6111
|
-
borderStyle: "
|
|
6148
|
+
borderStyle: "single",
|
|
6112
6149
|
borderColor: theme.border,
|
|
6113
6150
|
backgroundColor: theme.background,
|
|
6114
6151
|
width: CARD_W,
|
|
@@ -6135,7 +6172,10 @@ function AddVerifiedScreen() {
|
|
|
6135
6172
|
}, undefined, true, undefined, this),
|
|
6136
6173
|
/* @__PURE__ */ jsxDEV15("box", {
|
|
6137
6174
|
height: 1,
|
|
6138
|
-
|
|
6175
|
+
children: /* @__PURE__ */ jsxDEV15("text", {
|
|
6176
|
+
fg: theme.border,
|
|
6177
|
+
children: "\u2500".repeat(150)
|
|
6178
|
+
}, undefined, false, undefined, this)
|
|
6139
6179
|
}, undefined, false, undefined, this),
|
|
6140
6180
|
/* @__PURE__ */ jsxDEV15("scrollbox", {
|
|
6141
6181
|
ref: scrollboxRef,
|
|
@@ -6168,6 +6208,12 @@ function AddVerifiedScreen() {
|
|
|
6168
6208
|
width: "100%",
|
|
6169
6209
|
flexDirection: "row",
|
|
6170
6210
|
backgroundColor: isActive ? theme.border : "transparent",
|
|
6211
|
+
onMouseOver: () => setCursor(i),
|
|
6212
|
+
onMouseDown: () => {
|
|
6213
|
+
setCursor(i);
|
|
6214
|
+
setSelectedProvider(prov);
|
|
6215
|
+
setStep("confirm");
|
|
6216
|
+
},
|
|
6171
6217
|
children: [
|
|
6172
6218
|
/* @__PURE__ */ jsxDEV15("text", {
|
|
6173
6219
|
fg: theme.dim,
|
|
@@ -6196,7 +6242,10 @@ function AddVerifiedScreen() {
|
|
|
6196
6242
|
}, undefined, true, undefined, this),
|
|
6197
6243
|
/* @__PURE__ */ jsxDEV15("box", {
|
|
6198
6244
|
height: 1,
|
|
6199
|
-
|
|
6245
|
+
children: /* @__PURE__ */ jsxDEV15("text", {
|
|
6246
|
+
fg: theme.border,
|
|
6247
|
+
children: "\u2500".repeat(150)
|
|
6248
|
+
}, undefined, false, undefined, this)
|
|
6200
6249
|
}, undefined, false, undefined, this),
|
|
6201
6250
|
/* @__PURE__ */ jsxDEV15("box", {
|
|
6202
6251
|
flexDirection: "row",
|
|
@@ -6217,6 +6266,36 @@ function AddVerifiedScreen() {
|
|
|
6217
6266
|
children: " [\u2191\u2193/PgUp/PgDn/wheel] scroll"
|
|
6218
6267
|
}, undefined, false, undefined, this)
|
|
6219
6268
|
]
|
|
6269
|
+
}, undefined, true, undefined, this),
|
|
6270
|
+
/* @__PURE__ */ jsxDEV15("box", {
|
|
6271
|
+
height: 1,
|
|
6272
|
+
children: /* @__PURE__ */ jsxDEV15("text", {
|
|
6273
|
+
fg: theme.border,
|
|
6274
|
+
children: "\u2500".repeat(150)
|
|
6275
|
+
}, undefined, false, undefined, this)
|
|
6276
|
+
}, undefined, false, undefined, this),
|
|
6277
|
+
/* @__PURE__ */ jsxDEV15("box", {
|
|
6278
|
+
height: 1,
|
|
6279
|
+
flexDirection: "row",
|
|
6280
|
+
paddingLeft: 2,
|
|
6281
|
+
paddingRight: 2,
|
|
6282
|
+
paddingTop: 1,
|
|
6283
|
+
paddingBottom: 1,
|
|
6284
|
+
onMouseDown: () => navigate("model-menu"),
|
|
6285
|
+
children: [
|
|
6286
|
+
/* @__PURE__ */ jsxDEV15("text", {
|
|
6287
|
+
fg: theme.dim,
|
|
6288
|
+
children: "\u2190 "
|
|
6289
|
+
}, undefined, false, undefined, this),
|
|
6290
|
+
/* @__PURE__ */ jsxDEV15("text", {
|
|
6291
|
+
fg: theme.accent,
|
|
6292
|
+
children: "Back"
|
|
6293
|
+
}, undefined, false, undefined, this),
|
|
6294
|
+
/* @__PURE__ */ jsxDEV15("text", {
|
|
6295
|
+
fg: theme.dim,
|
|
6296
|
+
children: " [Q] or [Esc]"
|
|
6297
|
+
}, undefined, false, undefined, this)
|
|
6298
|
+
]
|
|
6220
6299
|
}, undefined, true, undefined, this)
|
|
6221
6300
|
]
|
|
6222
6301
|
}, undefined, true, undefined, this)
|
|
@@ -6460,7 +6539,7 @@ function AddCustomScreen() {
|
|
|
6460
6539
|
children: /* @__PURE__ */ jsxDEV16("box", {
|
|
6461
6540
|
flexDirection: "column",
|
|
6462
6541
|
border: true,
|
|
6463
|
-
borderStyle: "
|
|
6542
|
+
borderStyle: "single",
|
|
6464
6543
|
borderColor: theme.border,
|
|
6465
6544
|
backgroundColor: theme.background,
|
|
6466
6545
|
width: CARD_W,
|
|
@@ -6505,7 +6584,7 @@ function AddCustomScreen() {
|
|
|
6505
6584
|
children: /* @__PURE__ */ jsxDEV16("box", {
|
|
6506
6585
|
flexDirection: "column",
|
|
6507
6586
|
border: true,
|
|
6508
|
-
borderStyle: "
|
|
6587
|
+
borderStyle: "single",
|
|
6509
6588
|
borderColor: theme.border,
|
|
6510
6589
|
backgroundColor: theme.background,
|
|
6511
6590
|
width: CARD_W,
|
|
@@ -6529,7 +6608,7 @@ function AddCustomScreen() {
|
|
|
6529
6608
|
children: /* @__PURE__ */ jsxDEV16("box", {
|
|
6530
6609
|
flexDirection: "column",
|
|
6531
6610
|
border: true,
|
|
6532
|
-
borderStyle: "
|
|
6611
|
+
borderStyle: "single",
|
|
6533
6612
|
borderColor: theme.border,
|
|
6534
6613
|
backgroundColor: theme.background,
|
|
6535
6614
|
width: CARD_W,
|
|
@@ -6545,7 +6624,10 @@ function AddCustomScreen() {
|
|
|
6545
6624
|
}, undefined, false, undefined, this),
|
|
6546
6625
|
/* @__PURE__ */ jsxDEV16("box", {
|
|
6547
6626
|
height: 1,
|
|
6548
|
-
|
|
6627
|
+
children: /* @__PURE__ */ jsxDEV16("text", {
|
|
6628
|
+
fg: theme.border,
|
|
6629
|
+
children: "\u2500".repeat(150)
|
|
6630
|
+
}, undefined, false, undefined, this)
|
|
6549
6631
|
}, undefined, false, undefined, this),
|
|
6550
6632
|
/* @__PURE__ */ jsxDEV16("box", {
|
|
6551
6633
|
paddingTop: 1,
|
|
@@ -6554,7 +6636,10 @@ function AddCustomScreen() {
|
|
|
6554
6636
|
}, undefined, false, undefined, this),
|
|
6555
6637
|
/* @__PURE__ */ jsxDEV16("box", {
|
|
6556
6638
|
height: 1,
|
|
6557
|
-
|
|
6639
|
+
children: /* @__PURE__ */ jsxDEV16("text", {
|
|
6640
|
+
fg: theme.border,
|
|
6641
|
+
children: "\u2500".repeat(150)
|
|
6642
|
+
}, undefined, false, undefined, this)
|
|
6558
6643
|
}, undefined, false, undefined, this),
|
|
6559
6644
|
/* @__PURE__ */ jsxDEV16("box", {
|
|
6560
6645
|
flexDirection: "column",
|
|
@@ -6570,6 +6655,16 @@ function AddCustomScreen() {
|
|
|
6570
6655
|
width: "100%",
|
|
6571
6656
|
flexDirection: "row",
|
|
6572
6657
|
backgroundColor: i === typeCursor ? theme.border : "transparent",
|
|
6658
|
+
onMouseOver: () => setTypeCursor(i),
|
|
6659
|
+
onMouseDown: () => {
|
|
6660
|
+
setTypeCursor(i);
|
|
6661
|
+
if (i === 2) {
|
|
6662
|
+
navigate("model-menu");
|
|
6663
|
+
} else {
|
|
6664
|
+
setProviderType(i === 1 ? "anthropic" : "openai-compatible");
|
|
6665
|
+
setStep("id");
|
|
6666
|
+
}
|
|
6667
|
+
},
|
|
6573
6668
|
children: [
|
|
6574
6669
|
/* @__PURE__ */ jsxDEV16("text", {
|
|
6575
6670
|
fg: i === typeCursor ? theme.text : theme.dim,
|
|
@@ -6771,6 +6866,46 @@ function AddCustomScreen() {
|
|
|
6771
6866
|
}, undefined, false, undefined, this)
|
|
6772
6867
|
}, undefined, false, undefined, this) : null
|
|
6773
6868
|
]
|
|
6869
|
+
}, undefined, true, undefined, this),
|
|
6870
|
+
/* @__PURE__ */ jsxDEV16("box", {
|
|
6871
|
+
height: 1,
|
|
6872
|
+
marginTop: 1,
|
|
6873
|
+
children: /* @__PURE__ */ jsxDEV16("text", {
|
|
6874
|
+
fg: theme.border,
|
|
6875
|
+
children: "\u2500".repeat(Math.min(CARD_W, 70))
|
|
6876
|
+
}, undefined, false, undefined, this)
|
|
6877
|
+
}, undefined, false, undefined, this),
|
|
6878
|
+
/* @__PURE__ */ jsxDEV16("box", {
|
|
6879
|
+
height: 1,
|
|
6880
|
+
flexDirection: "row",
|
|
6881
|
+
paddingLeft: 1,
|
|
6882
|
+
paddingRight: 1,
|
|
6883
|
+
onMouseDown: () => {
|
|
6884
|
+
if (step === "type")
|
|
6885
|
+
navigate("model-menu");
|
|
6886
|
+
else {
|
|
6887
|
+
setInputError("");
|
|
6888
|
+
const idx = stepIndex(step);
|
|
6889
|
+
if (idx <= 1)
|
|
6890
|
+
setStep("type");
|
|
6891
|
+
else
|
|
6892
|
+
setStep(STEPS[idx - 1]);
|
|
6893
|
+
}
|
|
6894
|
+
},
|
|
6895
|
+
children: [
|
|
6896
|
+
/* @__PURE__ */ jsxDEV16("text", {
|
|
6897
|
+
fg: theme.dim,
|
|
6898
|
+
children: "\u2190 "
|
|
6899
|
+
}, undefined, false, undefined, this),
|
|
6900
|
+
/* @__PURE__ */ jsxDEV16("text", {
|
|
6901
|
+
fg: theme.accent,
|
|
6902
|
+
children: "Back"
|
|
6903
|
+
}, undefined, false, undefined, this),
|
|
6904
|
+
/* @__PURE__ */ jsxDEV16("text", {
|
|
6905
|
+
fg: theme.dim,
|
|
6906
|
+
children: " [Esc]"
|
|
6907
|
+
}, undefined, false, undefined, this)
|
|
6908
|
+
]
|
|
6774
6909
|
}, undefined, true, undefined, this)
|
|
6775
6910
|
]
|
|
6776
6911
|
}, undefined, true, undefined, this)
|
|
@@ -6911,42 +7046,74 @@ function AddModelsScreen() {
|
|
|
6911
7046
|
children: /* @__PURE__ */ jsxDEV17("box", {
|
|
6912
7047
|
flexDirection: "column",
|
|
6913
7048
|
border: true,
|
|
6914
|
-
borderStyle: "
|
|
7049
|
+
borderStyle: "single",
|
|
6915
7050
|
borderColor: theme.border,
|
|
6916
7051
|
backgroundColor: theme.background,
|
|
6917
7052
|
width: CARD_W,
|
|
6918
|
-
children:
|
|
6919
|
-
|
|
6920
|
-
|
|
6921
|
-
|
|
6922
|
-
|
|
6923
|
-
|
|
6924
|
-
|
|
6925
|
-
|
|
6926
|
-
|
|
6927
|
-
|
|
6928
|
-
|
|
6929
|
-
|
|
6930
|
-
|
|
6931
|
-
|
|
6932
|
-
|
|
6933
|
-
|
|
6934
|
-
|
|
6935
|
-
|
|
6936
|
-
|
|
6937
|
-
|
|
6938
|
-
|
|
6939
|
-
|
|
6940
|
-
|
|
6941
|
-
|
|
6942
|
-
|
|
6943
|
-
|
|
6944
|
-
|
|
7053
|
+
children: [
|
|
7054
|
+
/* @__PURE__ */ jsxDEV17("box", {
|
|
7055
|
+
flexDirection: "column",
|
|
7056
|
+
paddingLeft: 2,
|
|
7057
|
+
paddingRight: 2,
|
|
7058
|
+
paddingTop: 1,
|
|
7059
|
+
paddingBottom: 1,
|
|
7060
|
+
children: [
|
|
7061
|
+
/* @__PURE__ */ jsxDEV17("box", {
|
|
7062
|
+
height: 1,
|
|
7063
|
+
children: /* @__PURE__ */ jsxDEV17("text", {
|
|
7064
|
+
fg: theme.success,
|
|
7065
|
+
children: [
|
|
7066
|
+
"Done! Added ",
|
|
7067
|
+
addedModels.length,
|
|
7068
|
+
" model",
|
|
7069
|
+
addedModels.length !== 1 ? "s" : "",
|
|
7070
|
+
" to ",
|
|
7071
|
+
selectedProvider?.name,
|
|
7072
|
+
"."
|
|
7073
|
+
]
|
|
7074
|
+
}, undefined, true, undefined, this)
|
|
7075
|
+
}, undefined, false, undefined, this),
|
|
7076
|
+
/* @__PURE__ */ jsxDEV17("box", {
|
|
7077
|
+
height: 1,
|
|
7078
|
+
children: /* @__PURE__ */ jsxDEV17("text", {
|
|
7079
|
+
fg: theme.dim,
|
|
7080
|
+
children: "Press [Enter] to return"
|
|
7081
|
+
}, undefined, false, undefined, this)
|
|
6945
7082
|
}, undefined, false, undefined, this)
|
|
7083
|
+
]
|
|
7084
|
+
}, undefined, true, undefined, this),
|
|
7085
|
+
/* @__PURE__ */ jsxDEV17("box", {
|
|
7086
|
+
height: 1,
|
|
7087
|
+
children: /* @__PURE__ */ jsxDEV17("text", {
|
|
7088
|
+
fg: theme.border,
|
|
7089
|
+
children: "\u2500".repeat(150)
|
|
6946
7090
|
}, undefined, false, undefined, this)
|
|
6947
|
-
|
|
6948
|
-
|
|
6949
|
-
|
|
7091
|
+
}, undefined, false, undefined, this),
|
|
7092
|
+
/* @__PURE__ */ jsxDEV17("box", {
|
|
7093
|
+
height: 1,
|
|
7094
|
+
flexDirection: "row",
|
|
7095
|
+
paddingLeft: 2,
|
|
7096
|
+
paddingRight: 2,
|
|
7097
|
+
paddingTop: 1,
|
|
7098
|
+
paddingBottom: 1,
|
|
7099
|
+
onMouseDown: () => navigate("model-menu"),
|
|
7100
|
+
children: [
|
|
7101
|
+
/* @__PURE__ */ jsxDEV17("text", {
|
|
7102
|
+
fg: theme.dim,
|
|
7103
|
+
children: "\u2190 "
|
|
7104
|
+
}, undefined, false, undefined, this),
|
|
7105
|
+
/* @__PURE__ */ jsxDEV17("text", {
|
|
7106
|
+
fg: theme.accent,
|
|
7107
|
+
children: "Back to menu"
|
|
7108
|
+
}, undefined, false, undefined, this),
|
|
7109
|
+
/* @__PURE__ */ jsxDEV17("text", {
|
|
7110
|
+
fg: theme.dim,
|
|
7111
|
+
children: " [Enter]"
|
|
7112
|
+
}, undefined, false, undefined, this)
|
|
7113
|
+
]
|
|
7114
|
+
}, undefined, true, undefined, this)
|
|
7115
|
+
]
|
|
7116
|
+
}, undefined, true, undefined, this)
|
|
6950
7117
|
}, undefined, false, undefined, this);
|
|
6951
7118
|
}
|
|
6952
7119
|
if (step === "add" && selectedProvider) {
|
|
@@ -6958,7 +7125,7 @@ function AddModelsScreen() {
|
|
|
6958
7125
|
children: /* @__PURE__ */ jsxDEV17("box", {
|
|
6959
7126
|
flexDirection: "column",
|
|
6960
7127
|
border: true,
|
|
6961
|
-
borderStyle: "
|
|
7128
|
+
borderStyle: "single",
|
|
6962
7129
|
borderColor: theme.border,
|
|
6963
7130
|
backgroundColor: theme.background,
|
|
6964
7131
|
width: CARD_W,
|
|
@@ -6981,7 +7148,10 @@ function AddModelsScreen() {
|
|
|
6981
7148
|
}, undefined, true, undefined, this),
|
|
6982
7149
|
/* @__PURE__ */ jsxDEV17("box", {
|
|
6983
7150
|
height: 1,
|
|
6984
|
-
|
|
7151
|
+
children: /* @__PURE__ */ jsxDEV17("text", {
|
|
7152
|
+
fg: theme.border,
|
|
7153
|
+
children: "\u2500".repeat(150)
|
|
7154
|
+
}, undefined, false, undefined, this)
|
|
6985
7155
|
}, undefined, false, undefined, this),
|
|
6986
7156
|
/* @__PURE__ */ jsxDEV17("box", {
|
|
6987
7157
|
flexDirection: "column",
|
|
@@ -7071,6 +7241,43 @@ function AddModelsScreen() {
|
|
|
7071
7241
|
}, undefined, false, undefined, this)
|
|
7072
7242
|
}, undefined, false, undefined, this)
|
|
7073
7243
|
]
|
|
7244
|
+
}, undefined, true, undefined, this),
|
|
7245
|
+
/* @__PURE__ */ jsxDEV17("box", {
|
|
7246
|
+
height: 1,
|
|
7247
|
+
children: /* @__PURE__ */ jsxDEV17("text", {
|
|
7248
|
+
fg: theme.border,
|
|
7249
|
+
children: "\u2500".repeat(150)
|
|
7250
|
+
}, undefined, false, undefined, this)
|
|
7251
|
+
}, undefined, false, undefined, this),
|
|
7252
|
+
/* @__PURE__ */ jsxDEV17("box", {
|
|
7253
|
+
height: 1,
|
|
7254
|
+
flexDirection: "row",
|
|
7255
|
+
paddingLeft: 2,
|
|
7256
|
+
paddingRight: 2,
|
|
7257
|
+
paddingTop: 1,
|
|
7258
|
+
paddingBottom: 1,
|
|
7259
|
+
onMouseDown: () => {
|
|
7260
|
+
setStep("pick");
|
|
7261
|
+
setSelectedProvider(null);
|
|
7262
|
+
setModelInput("");
|
|
7263
|
+
setAddedModels([]);
|
|
7264
|
+
setSaveError("");
|
|
7265
|
+
setInputError("");
|
|
7266
|
+
},
|
|
7267
|
+
children: [
|
|
7268
|
+
/* @__PURE__ */ jsxDEV17("text", {
|
|
7269
|
+
fg: theme.dim,
|
|
7270
|
+
children: "\u2190 "
|
|
7271
|
+
}, undefined, false, undefined, this),
|
|
7272
|
+
/* @__PURE__ */ jsxDEV17("text", {
|
|
7273
|
+
fg: theme.accent,
|
|
7274
|
+
children: "Back"
|
|
7275
|
+
}, undefined, false, undefined, this),
|
|
7276
|
+
/* @__PURE__ */ jsxDEV17("text", {
|
|
7277
|
+
fg: theme.dim,
|
|
7278
|
+
children: " [Esc]"
|
|
7279
|
+
}, undefined, false, undefined, this)
|
|
7280
|
+
]
|
|
7074
7281
|
}, undefined, true, undefined, this)
|
|
7075
7282
|
]
|
|
7076
7283
|
}, undefined, true, undefined, this)
|
|
@@ -7084,7 +7291,7 @@ function AddModelsScreen() {
|
|
|
7084
7291
|
children: /* @__PURE__ */ jsxDEV17("box", {
|
|
7085
7292
|
flexDirection: "column",
|
|
7086
7293
|
border: true,
|
|
7087
|
-
borderStyle: "
|
|
7294
|
+
borderStyle: "single",
|
|
7088
7295
|
borderColor: theme.border,
|
|
7089
7296
|
backgroundColor: theme.background,
|
|
7090
7297
|
width: CARD_W,
|
|
@@ -7100,7 +7307,10 @@ function AddModelsScreen() {
|
|
|
7100
7307
|
}, undefined, false, undefined, this),
|
|
7101
7308
|
/* @__PURE__ */ jsxDEV17("box", {
|
|
7102
7309
|
height: 1,
|
|
7103
|
-
|
|
7310
|
+
children: /* @__PURE__ */ jsxDEV17("text", {
|
|
7311
|
+
fg: theme.border,
|
|
7312
|
+
children: "\u2500".repeat(150)
|
|
7313
|
+
}, undefined, false, undefined, this)
|
|
7104
7314
|
}, undefined, false, undefined, this),
|
|
7105
7315
|
/* @__PURE__ */ jsxDEV17("box", {
|
|
7106
7316
|
flexDirection: "column",
|
|
@@ -7133,6 +7343,16 @@ function AddModelsScreen() {
|
|
|
7133
7343
|
width: "100%",
|
|
7134
7344
|
flexDirection: "row",
|
|
7135
7345
|
backgroundColor: isActive ? theme.border : "transparent",
|
|
7346
|
+
onMouseOver: () => setCursor(i),
|
|
7347
|
+
onMouseDown: () => {
|
|
7348
|
+
setCursor(i);
|
|
7349
|
+
setSelectedProvider(prov);
|
|
7350
|
+
setModelInput("");
|
|
7351
|
+
setAddedModels([]);
|
|
7352
|
+
setSaveError("");
|
|
7353
|
+
setInputError("");
|
|
7354
|
+
setStep("add");
|
|
7355
|
+
},
|
|
7136
7356
|
children: [
|
|
7137
7357
|
/* @__PURE__ */ jsxDEV17("text", {
|
|
7138
7358
|
fg: theme.dim,
|
|
@@ -7161,6 +7381,36 @@ function AddModelsScreen() {
|
|
|
7161
7381
|
}, prov.id, true, undefined, this);
|
|
7162
7382
|
})
|
|
7163
7383
|
]
|
|
7384
|
+
}, undefined, true, undefined, this),
|
|
7385
|
+
/* @__PURE__ */ jsxDEV17("box", {
|
|
7386
|
+
height: 1,
|
|
7387
|
+
children: /* @__PURE__ */ jsxDEV17("text", {
|
|
7388
|
+
fg: theme.border,
|
|
7389
|
+
children: "\u2500".repeat(150)
|
|
7390
|
+
}, undefined, false, undefined, this)
|
|
7391
|
+
}, undefined, false, undefined, this),
|
|
7392
|
+
/* @__PURE__ */ jsxDEV17("box", {
|
|
7393
|
+
height: 1,
|
|
7394
|
+
flexDirection: "row",
|
|
7395
|
+
paddingLeft: 2,
|
|
7396
|
+
paddingRight: 2,
|
|
7397
|
+
paddingTop: 1,
|
|
7398
|
+
paddingBottom: 1,
|
|
7399
|
+
onMouseDown: () => navigate("model-menu"),
|
|
7400
|
+
children: [
|
|
7401
|
+
/* @__PURE__ */ jsxDEV17("text", {
|
|
7402
|
+
fg: theme.dim,
|
|
7403
|
+
children: "\u2190 "
|
|
7404
|
+
}, undefined, false, undefined, this),
|
|
7405
|
+
/* @__PURE__ */ jsxDEV17("text", {
|
|
7406
|
+
fg: theme.accent,
|
|
7407
|
+
children: "Back"
|
|
7408
|
+
}, undefined, false, undefined, this),
|
|
7409
|
+
/* @__PURE__ */ jsxDEV17("text", {
|
|
7410
|
+
fg: theme.dim,
|
|
7411
|
+
children: " [Esc]"
|
|
7412
|
+
}, undefined, false, undefined, this)
|
|
7413
|
+
]
|
|
7164
7414
|
}, undefined, true, undefined, this)
|
|
7165
7415
|
]
|
|
7166
7416
|
}, undefined, true, undefined, this)
|
|
@@ -7179,9 +7429,12 @@ function ListProvidersScreen() {
|
|
|
7179
7429
|
const { state } = useAppContext();
|
|
7180
7430
|
const navigate = useNavigate();
|
|
7181
7431
|
const theme = useTheme();
|
|
7432
|
+
function goBack() {
|
|
7433
|
+
navigate("model-menu");
|
|
7434
|
+
}
|
|
7182
7435
|
useAppKeyboard((key) => {
|
|
7183
7436
|
if (key.name === "escape" || key.name === "q") {
|
|
7184
|
-
|
|
7437
|
+
goBack();
|
|
7185
7438
|
}
|
|
7186
7439
|
});
|
|
7187
7440
|
if (state.isLoadingConfig) {
|
|
@@ -7196,44 +7449,37 @@ function ListProvidersScreen() {
|
|
|
7196
7449
|
}, undefined, false, undefined, this);
|
|
7197
7450
|
}
|
|
7198
7451
|
const providers = state.config?.providers ?? [];
|
|
7199
|
-
if (providers.length === 0) {
|
|
7200
|
-
return /* @__PURE__ */ jsxDEV18("box", {
|
|
7201
|
-
flexDirection: "column",
|
|
7202
|
-
flexGrow: 1,
|
|
7203
|
-
padding: 1,
|
|
7204
|
-
children: [
|
|
7205
|
-
/* @__PURE__ */ jsxDEV18("text", {
|
|
7206
|
-
fg: theme.primary,
|
|
7207
|
-
children: "Configured Providers"
|
|
7208
|
-
}, undefined, false, undefined, this),
|
|
7209
|
-
/* @__PURE__ */ jsxDEV18("box", {
|
|
7210
|
-
marginTop: 1,
|
|
7211
|
-
children: /* @__PURE__ */ jsxDEV18("text", {
|
|
7212
|
-
fg: theme.warning,
|
|
7213
|
-
children: "No providers configured yet."
|
|
7214
|
-
}, undefined, false, undefined, this)
|
|
7215
|
-
}, undefined, false, undefined, this)
|
|
7216
|
-
]
|
|
7217
|
-
}, undefined, true, undefined, this);
|
|
7218
|
-
}
|
|
7219
7452
|
return /* @__PURE__ */ jsxDEV18("box", {
|
|
7220
7453
|
flexDirection: "column",
|
|
7221
7454
|
flexGrow: 1,
|
|
7222
7455
|
padding: 1,
|
|
7223
7456
|
children: [
|
|
7224
|
-
/* @__PURE__ */ jsxDEV18("text", {
|
|
7225
|
-
fg: theme.primary,
|
|
7226
|
-
children: "Configured Providers"
|
|
7227
|
-
}, undefined, false, undefined, this),
|
|
7228
7457
|
/* @__PURE__ */ jsxDEV18("box", {
|
|
7229
|
-
|
|
7458
|
+
flexDirection: "row",
|
|
7459
|
+
marginBottom: 1,
|
|
7460
|
+
children: /* @__PURE__ */ jsxDEV18("text", {
|
|
7461
|
+
fg: theme.primary,
|
|
7462
|
+
bold: true,
|
|
7463
|
+
children: "Configured Providers"
|
|
7464
|
+
}, undefined, false, undefined, this)
|
|
7465
|
+
}, undefined, false, undefined, this),
|
|
7466
|
+
providers.length === 0 ? /* @__PURE__ */ jsxDEV18("box", {
|
|
7467
|
+
flexDirection: "column",
|
|
7468
|
+
flexGrow: 1,
|
|
7469
|
+
alignItems: "center",
|
|
7470
|
+
justifyContent: "center",
|
|
7471
|
+
children: /* @__PURE__ */ jsxDEV18("text", {
|
|
7472
|
+
fg: theme.warning,
|
|
7473
|
+
children: "No providers configured yet."
|
|
7474
|
+
}, undefined, false, undefined, this)
|
|
7475
|
+
}, undefined, false, undefined, this) : /* @__PURE__ */ jsxDEV18("box", {
|
|
7230
7476
|
flexGrow: 1,
|
|
7231
7477
|
children: /* @__PURE__ */ jsxDEV18("scrollbox", {
|
|
7232
7478
|
focused: true,
|
|
7233
7479
|
children: providers.map((provider, i) => /* @__PURE__ */ jsxDEV18("box", {
|
|
7234
7480
|
flexDirection: "column",
|
|
7235
7481
|
border: true,
|
|
7236
|
-
borderStyle: "
|
|
7482
|
+
borderStyle: "single",
|
|
7237
7483
|
borderColor: theme.border,
|
|
7238
7484
|
backgroundColor: theme.background,
|
|
7239
7485
|
marginBottom: 1,
|
|
@@ -7266,7 +7512,36 @@ function ListProvidersScreen() {
|
|
|
7266
7512
|
]
|
|
7267
7513
|
}, i, true, undefined, this))
|
|
7268
7514
|
}, undefined, false, undefined, this)
|
|
7269
|
-
}, undefined, false, undefined, this)
|
|
7515
|
+
}, undefined, false, undefined, this),
|
|
7516
|
+
/* @__PURE__ */ jsxDEV18("box", {
|
|
7517
|
+
height: 1,
|
|
7518
|
+
marginTop: 1,
|
|
7519
|
+
children: /* @__PURE__ */ jsxDEV18("text", {
|
|
7520
|
+
fg: theme.border,
|
|
7521
|
+
children: "\u2500".repeat(70)
|
|
7522
|
+
}, undefined, false, undefined, this)
|
|
7523
|
+
}, undefined, false, undefined, this),
|
|
7524
|
+
/* @__PURE__ */ jsxDEV18("box", {
|
|
7525
|
+
height: 1,
|
|
7526
|
+
flexDirection: "row",
|
|
7527
|
+
paddingLeft: 1,
|
|
7528
|
+
paddingRight: 1,
|
|
7529
|
+
onMouseDown: goBack,
|
|
7530
|
+
children: [
|
|
7531
|
+
/* @__PURE__ */ jsxDEV18("text", {
|
|
7532
|
+
fg: theme.dim,
|
|
7533
|
+
children: "\u2190 "
|
|
7534
|
+
}, undefined, false, undefined, this),
|
|
7535
|
+
/* @__PURE__ */ jsxDEV18("text", {
|
|
7536
|
+
fg: theme.accent,
|
|
7537
|
+
children: "Back"
|
|
7538
|
+
}, undefined, false, undefined, this),
|
|
7539
|
+
/* @__PURE__ */ jsxDEV18("text", {
|
|
7540
|
+
fg: theme.dim,
|
|
7541
|
+
children: " [Q] or [Esc]"
|
|
7542
|
+
}, undefined, false, undefined, this)
|
|
7543
|
+
]
|
|
7544
|
+
}, undefined, true, undefined, this)
|
|
7270
7545
|
]
|
|
7271
7546
|
}, undefined, true, undefined, this);
|
|
7272
7547
|
}
|
|
@@ -7281,9 +7556,12 @@ import { jsxDEV as jsxDEV19 } from "@opentui/react/jsx-dev-runtime";
|
|
|
7281
7556
|
function FAQScreen() {
|
|
7282
7557
|
const navigate = useNavigate();
|
|
7283
7558
|
const theme = useTheme();
|
|
7559
|
+
function goBack() {
|
|
7560
|
+
navigate("main-menu");
|
|
7561
|
+
}
|
|
7284
7562
|
useAppKeyboard((key) => {
|
|
7285
7563
|
if (key.name === "escape" || key.name === "q") {
|
|
7286
|
-
|
|
7564
|
+
goBack();
|
|
7287
7565
|
}
|
|
7288
7566
|
});
|
|
7289
7567
|
return /* @__PURE__ */ jsxDEV19("box", {
|
|
@@ -7294,6 +7572,7 @@ function FAQScreen() {
|
|
|
7294
7572
|
children: /* @__PURE__ */ jsxDEV19("box", {
|
|
7295
7573
|
flexDirection: "column",
|
|
7296
7574
|
width: 70,
|
|
7575
|
+
flexGrow: 1,
|
|
7297
7576
|
children: [
|
|
7298
7577
|
/* @__PURE__ */ jsxDEV19("box", {
|
|
7299
7578
|
marginBottom: 1,
|
|
@@ -7306,13 +7585,14 @@ function FAQScreen() {
|
|
|
7306
7585
|
/* @__PURE__ */ jsxDEV19("scrollbox", {
|
|
7307
7586
|
focused: true,
|
|
7308
7587
|
flexGrow: 1,
|
|
7588
|
+
style: { scrollbarOptions: { showArrows: true, trackOptions: { foregroundColor: theme.primary, backgroundColor: theme.border } } },
|
|
7309
7589
|
children: /* @__PURE__ */ jsxDEV19("box", {
|
|
7310
7590
|
flexDirection: "column",
|
|
7311
7591
|
children: [
|
|
7312
7592
|
/* @__PURE__ */ jsxDEV19("box", {
|
|
7313
7593
|
flexDirection: "column",
|
|
7314
7594
|
border: true,
|
|
7315
|
-
borderStyle: "
|
|
7595
|
+
borderStyle: "single",
|
|
7316
7596
|
borderColor: theme.border,
|
|
7317
7597
|
padding: 1,
|
|
7318
7598
|
marginBottom: 1,
|
|
@@ -7423,7 +7703,7 @@ function FAQScreen() {
|
|
|
7423
7703
|
/* @__PURE__ */ jsxDEV19("box", {
|
|
7424
7704
|
flexDirection: "column",
|
|
7425
7705
|
border: true,
|
|
7426
|
-
borderStyle: "
|
|
7706
|
+
borderStyle: "single",
|
|
7427
7707
|
borderColor: theme.border,
|
|
7428
7708
|
padding: 1,
|
|
7429
7709
|
marginBottom: 1,
|
|
@@ -7489,7 +7769,7 @@ function FAQScreen() {
|
|
|
7489
7769
|
/* @__PURE__ */ jsxDEV19("box", {
|
|
7490
7770
|
flexDirection: "column",
|
|
7491
7771
|
border: true,
|
|
7492
|
-
borderStyle: "
|
|
7772
|
+
borderStyle: "single",
|
|
7493
7773
|
borderColor: theme.border,
|
|
7494
7774
|
padding: 1,
|
|
7495
7775
|
marginBottom: 1,
|
|
@@ -7520,19 +7800,40 @@ function FAQScreen() {
|
|
|
7520
7800
|
children: " \u2022 [*] in results means token count was estimated"
|
|
7521
7801
|
}, undefined, false, undefined, this)
|
|
7522
7802
|
]
|
|
7523
|
-
}, undefined, true, undefined, this)
|
|
7524
|
-
/* @__PURE__ */ jsxDEV19("box", {
|
|
7525
|
-
flexDirection: "row",
|
|
7526
|
-
justifyContent: "center",
|
|
7527
|
-
marginTop: 1,
|
|
7528
|
-
children: /* @__PURE__ */ jsxDEV19("text", {
|
|
7529
|
-
fg: theme.dim,
|
|
7530
|
-
children: "Press [Q] or [Esc] to return to main menu"
|
|
7531
|
-
}, undefined, false, undefined, this)
|
|
7532
|
-
}, undefined, false, undefined, this)
|
|
7803
|
+
}, undefined, true, undefined, this)
|
|
7533
7804
|
]
|
|
7534
7805
|
}, undefined, true, undefined, this)
|
|
7535
|
-
}, undefined, false, undefined, this)
|
|
7806
|
+
}, undefined, false, undefined, this),
|
|
7807
|
+
/* @__PURE__ */ jsxDEV19("box", {
|
|
7808
|
+
height: 1,
|
|
7809
|
+
marginTop: 1,
|
|
7810
|
+
children: /* @__PURE__ */ jsxDEV19("text", {
|
|
7811
|
+
fg: theme.border,
|
|
7812
|
+
children: "\u2500".repeat(70)
|
|
7813
|
+
}, undefined, false, undefined, this)
|
|
7814
|
+
}, undefined, false, undefined, this),
|
|
7815
|
+
/* @__PURE__ */ jsxDEV19("box", {
|
|
7816
|
+
height: 1,
|
|
7817
|
+
width: "100%",
|
|
7818
|
+
flexDirection: "row",
|
|
7819
|
+
paddingLeft: 1,
|
|
7820
|
+
paddingRight: 1,
|
|
7821
|
+
onMouseDown: goBack,
|
|
7822
|
+
children: [
|
|
7823
|
+
/* @__PURE__ */ jsxDEV19("text", {
|
|
7824
|
+
fg: theme.dim,
|
|
7825
|
+
children: "\u2190 "
|
|
7826
|
+
}, undefined, false, undefined, this),
|
|
7827
|
+
/* @__PURE__ */ jsxDEV19("text", {
|
|
7828
|
+
fg: theme.accent,
|
|
7829
|
+
children: "Back to main menu"
|
|
7830
|
+
}, undefined, false, undefined, this),
|
|
7831
|
+
/* @__PURE__ */ jsxDEV19("text", {
|
|
7832
|
+
fg: theme.dim,
|
|
7833
|
+
children: " [Q] or [Esc]"
|
|
7834
|
+
}, undefined, false, undefined, this)
|
|
7835
|
+
]
|
|
7836
|
+
}, undefined, true, undefined, this)
|
|
7536
7837
|
]
|
|
7537
7838
|
}, undefined, true, undefined, this)
|
|
7538
7839
|
}, undefined, false, undefined, this);
|
|
@@ -7553,7 +7854,7 @@ function getHints(screen, benchResults) {
|
|
|
7553
7854
|
case "model-menu":
|
|
7554
7855
|
return ["[\u2191\u2193] navigate", "[Enter] select", "[Q] back"];
|
|
7555
7856
|
case "model-select":
|
|
7556
|
-
return ["[\u2191\u2193]
|
|
7857
|
+
return ["[\u2191\u2193] nav [Tab] sel [Enter] run", "[A]ll [N]one [R]ecent [Esc] back"];
|
|
7557
7858
|
case "benchmark": {
|
|
7558
7859
|
const allDone = benchResults.length > 0 && benchResults.every((r) => r.status === "done" || r.status === "error");
|
|
7559
7860
|
return allDone ? ["[R] rerun", "[Enter] back to menu", "[Q] back to menu"] : ["Benchmark in progress..."];
|