ai-speedometer 2.1.4 → 2.1.5
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 +100 -19
- package/package.json +1 -1
package/dist/ai-speedometer
CHANGED
|
@@ -1777,8 +1777,22 @@ async function benchmarkSingleModelRest(model) {
|
|
|
1777
1777
|
body: JSON.stringify(body)
|
|
1778
1778
|
});
|
|
1779
1779
|
if (!response.ok) {
|
|
1780
|
-
await response.text();
|
|
1781
|
-
|
|
1780
|
+
const errBody = await response.text();
|
|
1781
|
+
let errDetail = "";
|
|
1782
|
+
try {
|
|
1783
|
+
const parsed = JSON.parse(errBody);
|
|
1784
|
+
if (typeof parsed.error === "object" && parsed.error?.message)
|
|
1785
|
+
errDetail = parsed.error.message;
|
|
1786
|
+
else if (typeof parsed.error === "string")
|
|
1787
|
+
errDetail = parsed.error;
|
|
1788
|
+
else if (parsed.message)
|
|
1789
|
+
errDetail = parsed.message;
|
|
1790
|
+
else
|
|
1791
|
+
errDetail = errBody.slice(0, 200);
|
|
1792
|
+
} catch {
|
|
1793
|
+
errDetail = errBody.slice(0, 200);
|
|
1794
|
+
}
|
|
1795
|
+
throw new Error(`${response.status} ${response.statusText}${errDetail ? ": " + errDetail : ""}`);
|
|
1782
1796
|
}
|
|
1783
1797
|
const reader = response.body.getReader();
|
|
1784
1798
|
const decoder = new TextDecoder;
|
|
@@ -2161,7 +2175,7 @@ var package_default;
|
|
|
2161
2175
|
var init_package = __esm(() => {
|
|
2162
2176
|
package_default = {
|
|
2163
2177
|
name: "ai-speedometer",
|
|
2164
|
-
version: "2.1.
|
|
2178
|
+
version: "2.1.5",
|
|
2165
2179
|
description: "A comprehensive CLI tool for benchmarking AI models across multiple providers with parallel execution and professional metrics",
|
|
2166
2180
|
bin: {
|
|
2167
2181
|
"ai-speedometer": "dist/ai-speedometer",
|
|
@@ -2614,7 +2628,7 @@ function ModelSelectScreen() {
|
|
|
2614
2628
|
navigate("benchmark");
|
|
2615
2629
|
}, [dispatch, navigate]);
|
|
2616
2630
|
usePaste((text) => {
|
|
2617
|
-
setSearchQuery((q) => q + text);
|
|
2631
|
+
setSearchQuery((q) => q + text.replace(/[\r\n]/g, ""));
|
|
2618
2632
|
});
|
|
2619
2633
|
useKeyboard4((key) => {
|
|
2620
2634
|
if (key.name === "escape") {
|
|
@@ -3307,6 +3321,68 @@ function BenchmarkScreen() {
|
|
|
3307
3321
|
}, `ttft-${s.model.id}-${s.model.providerId}`, true, undefined, this));
|
|
3308
3322
|
}
|
|
3309
3323
|
}
|
|
3324
|
+
if (allDone && errors.length > 0) {
|
|
3325
|
+
rows.push(/* @__PURE__ */ jsxDEV10("box", {
|
|
3326
|
+
height: 1,
|
|
3327
|
+
backgroundColor: "#292e42"
|
|
3328
|
+
}, "div-errors", false, undefined, this));
|
|
3329
|
+
rows.push(/* @__PURE__ */ jsxDEV10("box", {
|
|
3330
|
+
height: 1,
|
|
3331
|
+
flexDirection: "row",
|
|
3332
|
+
paddingLeft: 1,
|
|
3333
|
+
children: /* @__PURE__ */ jsxDEV10("text", {
|
|
3334
|
+
fg: "#f7768e",
|
|
3335
|
+
children: [
|
|
3336
|
+
" FAILED (",
|
|
3337
|
+
errors.length,
|
|
3338
|
+
") "
|
|
3339
|
+
]
|
|
3340
|
+
}, undefined, true, undefined, this)
|
|
3341
|
+
}, "hdr-errors", false, undefined, this));
|
|
3342
|
+
for (const s of errors) {
|
|
3343
|
+
rows.push(/* @__PURE__ */ jsxDEV10("box", {
|
|
3344
|
+
flexDirection: "column",
|
|
3345
|
+
paddingLeft: 2,
|
|
3346
|
+
paddingTop: 1,
|
|
3347
|
+
paddingBottom: 1,
|
|
3348
|
+
children: [
|
|
3349
|
+
/* @__PURE__ */ jsxDEV10("box", {
|
|
3350
|
+
height: 1,
|
|
3351
|
+
flexDirection: "row",
|
|
3352
|
+
children: [
|
|
3353
|
+
/* @__PURE__ */ jsxDEV10("text", {
|
|
3354
|
+
fg: "#f7768e",
|
|
3355
|
+
children: "\u2717 "
|
|
3356
|
+
}, undefined, false, undefined, this),
|
|
3357
|
+
/* @__PURE__ */ jsxDEV10("text", {
|
|
3358
|
+
fg: "#c0caf5",
|
|
3359
|
+
children: [
|
|
3360
|
+
s.model.name,
|
|
3361
|
+
" "
|
|
3362
|
+
]
|
|
3363
|
+
}, undefined, true, undefined, this),
|
|
3364
|
+
/* @__PURE__ */ jsxDEV10("text", {
|
|
3365
|
+
fg: "#565f89",
|
|
3366
|
+
children: [
|
|
3367
|
+
"(",
|
|
3368
|
+
s.model.providerName,
|
|
3369
|
+
")"
|
|
3370
|
+
]
|
|
3371
|
+
}, undefined, true, undefined, this)
|
|
3372
|
+
]
|
|
3373
|
+
}, undefined, true, undefined, this),
|
|
3374
|
+
/* @__PURE__ */ jsxDEV10("box", {
|
|
3375
|
+
height: 1,
|
|
3376
|
+
paddingLeft: 3,
|
|
3377
|
+
children: /* @__PURE__ */ jsxDEV10("text", {
|
|
3378
|
+
fg: "#f7768e",
|
|
3379
|
+
children: s.error ?? "Unknown error"
|
|
3380
|
+
}, undefined, false, undefined, this)
|
|
3381
|
+
}, undefined, false, undefined, this)
|
|
3382
|
+
]
|
|
3383
|
+
}, `err-${s.model.id}-${s.model.providerId}`, true, undefined, this));
|
|
3384
|
+
}
|
|
3385
|
+
}
|
|
3310
3386
|
rows.push(/* @__PURE__ */ jsxDEV10("box", {
|
|
3311
3387
|
height: 1,
|
|
3312
3388
|
backgroundColor: "#292e42"
|
|
@@ -3515,10 +3591,11 @@ function AddVerifiedScreen() {
|
|
|
3515
3591
|
}
|
|
3516
3592
|
}
|
|
3517
3593
|
usePaste((text) => {
|
|
3594
|
+
const clean = text.replace(/[\r\n]/g, "");
|
|
3518
3595
|
if (step === "browse")
|
|
3519
|
-
setSearchQuery((q) => q +
|
|
3596
|
+
setSearchQuery((q) => q + clean);
|
|
3520
3597
|
else if (step === "confirm")
|
|
3521
|
-
setApiKey((k) => k +
|
|
3598
|
+
setApiKey((k) => k + clean);
|
|
3522
3599
|
});
|
|
3523
3600
|
useKeyboard6((key) => {
|
|
3524
3601
|
if (step === "browse") {
|
|
@@ -3930,7 +4007,7 @@ function AddCustomScreen() {
|
|
|
3930
4007
|
baseUrl: baseUrl.trim(),
|
|
3931
4008
|
apiKey: apiKey.trim(),
|
|
3932
4009
|
models: models.map((m) => ({
|
|
3933
|
-
id: m
|
|
4010
|
+
id: m,
|
|
3934
4011
|
name: m
|
|
3935
4012
|
}))
|
|
3936
4013
|
});
|
|
@@ -3945,16 +4022,17 @@ function AddCustomScreen() {
|
|
|
3945
4022
|
}
|
|
3946
4023
|
}
|
|
3947
4024
|
usePaste((text) => {
|
|
4025
|
+
const clean = text.replace(/[\r\n]/g, "");
|
|
3948
4026
|
if (step === "id")
|
|
3949
|
-
setProviderId((v) => v +
|
|
4027
|
+
setProviderId((v) => v + clean);
|
|
3950
4028
|
else if (step === "name")
|
|
3951
|
-
setProviderName((v) => v +
|
|
4029
|
+
setProviderName((v) => v + clean);
|
|
3952
4030
|
else if (step === "url")
|
|
3953
|
-
setBaseUrl((v) => v +
|
|
4031
|
+
setBaseUrl((v) => v + clean);
|
|
3954
4032
|
else if (step === "key")
|
|
3955
|
-
setApiKey((v) => v +
|
|
4033
|
+
setApiKey((v) => v + clean);
|
|
3956
4034
|
else if (step === "models")
|
|
3957
|
-
setModelInput((v) => v +
|
|
4035
|
+
setModelInput((v) => v + clean);
|
|
3958
4036
|
});
|
|
3959
4037
|
useKeyboard7((key) => {
|
|
3960
4038
|
if (step === "done") {
|
|
@@ -4018,10 +4096,8 @@ function AddCustomScreen() {
|
|
|
4018
4096
|
}
|
|
4019
4097
|
if (step === "name") {
|
|
4020
4098
|
if (key.name === "return" || key.name === "enter") {
|
|
4021
|
-
if (!providerName.trim())
|
|
4022
|
-
|
|
4023
|
-
return;
|
|
4024
|
-
}
|
|
4099
|
+
if (!providerName.trim())
|
|
4100
|
+
setProviderName(providerId);
|
|
4025
4101
|
setInputError("");
|
|
4026
4102
|
setStep("url");
|
|
4027
4103
|
return;
|
|
@@ -4310,8 +4386,12 @@ function AddCustomScreen() {
|
|
|
4310
4386
|
height: 1,
|
|
4311
4387
|
children: /* @__PURE__ */ jsxDEV12("text", {
|
|
4312
4388
|
fg: "#565f89",
|
|
4313
|
-
children:
|
|
4314
|
-
|
|
4389
|
+
children: [
|
|
4390
|
+
'e.g. My OpenAI (Enter to use "',
|
|
4391
|
+
providerId,
|
|
4392
|
+
'")'
|
|
4393
|
+
]
|
|
4394
|
+
}, undefined, true, undefined, this)
|
|
4315
4395
|
}, undefined, false, undefined, this)
|
|
4316
4396
|
]
|
|
4317
4397
|
}, undefined, true, undefined, this),
|
|
@@ -4485,8 +4565,9 @@ function AddModelsScreen() {
|
|
|
4485
4565
|
load();
|
|
4486
4566
|
}, []);
|
|
4487
4567
|
usePaste((text) => {
|
|
4568
|
+
const clean = text.replace(/[\r\n]/g, "");
|
|
4488
4569
|
if (step === "add")
|
|
4489
|
-
setModelInput((v) => v +
|
|
4570
|
+
setModelInput((v) => v + clean);
|
|
4490
4571
|
});
|
|
4491
4572
|
useKeyboard8((key) => {
|
|
4492
4573
|
if (done) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-speedometer",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.5",
|
|
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",
|