ollanet 0.2.0 → 0.2.2
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/README.md +5 -2
- package/dist/bench.js +18 -10
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -58,6 +58,8 @@ ollanet scan
|
|
|
58
58
|
When installed this way, config lives at `~/.ollanet/config.json` and chats are
|
|
59
59
|
saved to `~/.ollanet/responses/`.
|
|
60
60
|
|
|
61
|
+
Releases can publish from GitHub Actions via npm **trusted publishing** (OIDC + provenance). Setup notes: [docs/trusted-publishing.md](docs/trusted-publishing.md).
|
|
62
|
+
|
|
61
63
|
### From a checkout (development)
|
|
62
64
|
|
|
63
65
|
```bash
|
|
@@ -151,8 +153,9 @@ ollanet bench localhost gemma4:12b --runs 5 --cold-load --json
|
|
|
151
153
|
Runs a built-in suite (`quick` default, or `--suite full`) against one or more **completion**
|
|
152
154
|
models: instruction checks once, throughput case repeated (`--runs`, default 3) with
|
|
153
155
|
pinned `num_predict` / `seed` / `temperature`. Reports median tok/s + spread. Under `--all`,
|
|
154
|
-
skips
|
|
155
|
-
|
|
156
|
+
skips non-completion models (embeddings); multimodal `completion`+`vision` models stay in
|
|
157
|
+
(early-stop / pass_rate handle text-suite failures). Use `--exclude-vision` to drop them.
|
|
158
|
+
Saves `benchmarks/<id>.json` (or `~/.ollanet/benchmarks/` when installed).
|
|
156
159
|
See [`docs/bench-spec.md`](docs/bench-spec.md) for measurement rules.
|
|
157
160
|
|
|
158
161
|
`quick` has only two scored checks (`ping`, `math`), so `pass` is a coarse
|
package/dist/bench.js
CHANGED
|
@@ -19,8 +19,7 @@ function usage() {
|
|
|
19
19
|
|
|
20
20
|
Options:
|
|
21
21
|
--all Every completion-capable model from /api/tags
|
|
22
|
-
|
|
23
|
-
--include-vision With --all, also bench vision-capable models
|
|
22
|
+
--exclude-vision With --all, skip models that advertise vision
|
|
24
23
|
--suite quick|full Prompt suite (default quick)
|
|
25
24
|
--runs <n> Throughput repeats (default 3)
|
|
26
25
|
--warmup / --no-warmup
|
|
@@ -85,7 +84,7 @@ function parseArgs(argv) {
|
|
|
85
84
|
let suite = "quick";
|
|
86
85
|
let runs = 3;
|
|
87
86
|
let all = false;
|
|
88
|
-
let
|
|
87
|
+
let excludeVision = false;
|
|
89
88
|
let warmup = true;
|
|
90
89
|
let coldLoad = false;
|
|
91
90
|
let json = false;
|
|
@@ -105,8 +104,13 @@ function parseArgs(argv) {
|
|
|
105
104
|
all = true;
|
|
106
105
|
continue;
|
|
107
106
|
}
|
|
107
|
+
if (arg === "--exclude-vision") {
|
|
108
|
+
excludeVision = true;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
// Back-compat no-op: 0.2.0 defaulted to skipping vision; prefer --exclude-vision.
|
|
108
112
|
if (arg === "--include-vision") {
|
|
109
|
-
|
|
113
|
+
excludeVision = false;
|
|
110
114
|
continue;
|
|
111
115
|
}
|
|
112
116
|
if (arg === "--json") {
|
|
@@ -215,7 +219,7 @@ function parseArgs(argv) {
|
|
|
215
219
|
machine,
|
|
216
220
|
models,
|
|
217
221
|
all,
|
|
218
|
-
|
|
222
|
+
excludeVision,
|
|
219
223
|
suite,
|
|
220
224
|
runs,
|
|
221
225
|
warmup,
|
|
@@ -433,7 +437,8 @@ function printTable(machine, suite, runs, revision, compKey, models, skipped, co
|
|
|
433
437
|
return -1;
|
|
434
438
|
else if (pb !== pa)
|
|
435
439
|
return pb - pa;
|
|
436
|
-
// Unavailable tok/s
|
|
440
|
+
// Unavailable tok/s (all early-stop / errors) intentionally sinks below any
|
|
441
|
+
// defined median, including 0 — same pass_rate cohort, then speed.
|
|
437
442
|
const ta = a.summary.tok_s_median;
|
|
438
443
|
const tb = b.summary.tok_s_median;
|
|
439
444
|
if (ta == null && tb == null)
|
|
@@ -446,8 +451,9 @@ function printTable(machine, suite, runs, revision, compKey, models, skipped, co
|
|
|
446
451
|
});
|
|
447
452
|
for (const m of sorted) {
|
|
448
453
|
const tok = m.summary.tok_s_median != null ? m.summary.tok_s_median.toFixed(1) : "—";
|
|
454
|
+
// Match median precision — toFixed(0) on min/max can print "83.8 84–86".
|
|
449
455
|
const spread = m.summary.tok_s_min != null && m.summary.tok_s_max != null
|
|
450
|
-
? `${m.summary.tok_s_min.toFixed(
|
|
456
|
+
? `${m.summary.tok_s_min.toFixed(1)}–${m.summary.tok_s_max.toFixed(1)}`
|
|
451
457
|
: "—";
|
|
452
458
|
const pass = m.summary.pass_rate != null
|
|
453
459
|
? `${Math.round(m.summary.pass_rate * checkDenom(m))}/${checkDenom(m)}`
|
|
@@ -486,7 +492,7 @@ function printTable(machine, suite, runs, revision, compKey, models, skipped, co
|
|
|
486
492
|
}
|
|
487
493
|
if (vision.length) {
|
|
488
494
|
lines.push(`Skipped ${vision.length} vision model(s): ${vision.map((s) => s.name).join(", ")}` +
|
|
489
|
-
" (
|
|
495
|
+
" (--exclude-vision)");
|
|
490
496
|
}
|
|
491
497
|
}
|
|
492
498
|
process.stdout.write(`${lines.join("\n")}\n`);
|
|
@@ -521,8 +527,10 @@ export async function main() {
|
|
|
521
527
|
skipped.push({ name: t.name, reason: "non-completion", capabilities: caps ?? [] });
|
|
522
528
|
continue;
|
|
523
529
|
}
|
|
524
|
-
//
|
|
525
|
-
|
|
530
|
+
// Default: completion only (spec). Vision+completion models (gemma3, etc.)
|
|
531
|
+
// stay in --all; early-stop / pass_rate report text-suite failures.
|
|
532
|
+
// Opt out of vision-capable models with --exclude-vision.
|
|
533
|
+
if (parsed.excludeVision && isVisionCapable(caps)) {
|
|
526
534
|
skipped.push({ name: t.name, reason: "vision", capabilities: caps ?? [] });
|
|
527
535
|
continue;
|
|
528
536
|
}
|