@wendellresearch-ai/benchwarmers 0.6.2 → 0.6.4
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/AGENTS.md +3 -1
- package/BENCHMARKS.md +1 -1
- package/README.md +2 -0
- package/USAGE.md +4 -6
- package/VERSION +1 -1
- package/package.json +1 -1
- package/scripts/check.py +1 -0
- package/scripts/clients_doc.py +98 -0
- package/scripts/provider_tags.py +19 -3
- package/scripts/test_no_owui.py +8 -0
- package/serve.py +130 -248
- package/ui/bench.css +37 -11
- package/ui/bench.js +355 -118
package/ui/bench.css
CHANGED
|
@@ -117,8 +117,6 @@ main { max-width: var(--page, 104rem); margin: 0 auto; padding: 0 var(--gutter)
|
|
|
117
117
|
|
|
118
118
|
/* Action needed: its own page, a panel per connection as on Models, each a
|
|
119
119
|
table (name, state, the provider's words, actions). */
|
|
120
|
-
.a-line { display: flex; flex-wrap: wrap; align-items: baseline; gap: .25rem .6rem; margin: 1.4rem 1.6rem 0;
|
|
121
|
-
padding: .45rem .75rem; background: var(--err-ground); border-radius: var(--radius); }
|
|
122
120
|
.a-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: .25rem .6rem; }
|
|
123
121
|
.a-head .why { font-size: .875rem; }
|
|
124
122
|
.a-head .why:empty { display: none; }
|
|
@@ -293,10 +291,11 @@ td.num, th.num { text-align: right; }
|
|
|
293
291
|
table.model-cards { table-layout: fixed; min-width: 52rem; }
|
|
294
292
|
.panel:has(> table.model-cards) { overflow-x: auto; } /* scrolls on a narrow window instead of wrapping numbers */
|
|
295
293
|
table.model-cards td.num { white-space: nowrap; }
|
|
296
|
-
table.model-cards col.c-model { width:
|
|
297
|
-
table.model-cards col.c-via { width:
|
|
294
|
+
table.model-cards col.c-model { width: 23%; }
|
|
295
|
+
table.model-cards col.c-via { width: 11%; }
|
|
298
296
|
table.model-cards col.c-n { width: 10%; }
|
|
299
|
-
table.model-cards col.c-input { width:
|
|
297
|
+
table.model-cards col.c-input { width: 15%; }
|
|
298
|
+
table.model-cards col.c-reply { width: 7%; }
|
|
300
299
|
table.model-cards col.c-lim { width: 6%; }
|
|
301
300
|
table.model-cards td { overflow-wrap: anywhere; }
|
|
302
301
|
tbody tr:hover > td { background: var(--step-1); }
|
|
@@ -319,6 +318,7 @@ a.model:hover .alias { box-shadow: inset 0 -.3em 0 var(--signal); }
|
|
|
319
318
|
.chip.err { background: var(--err-ground); color: var(--err); }
|
|
320
319
|
.chip.new { background: var(--sky); color: var(--ink-deep); }
|
|
321
320
|
/* an endpoint a model is reached through: outlined, so it reads as a place, not a state */
|
|
321
|
+
.chip.adhoc { background: color-mix(in oklab, var(--sky) 55%, var(--paper-2)); color: var(--ink-deep); }
|
|
322
322
|
.chip.via { background: transparent; border: 1px solid var(--line); color: var(--ink); font-family: var(--font-mono); }
|
|
323
323
|
button.chip { font-family: inherit; border: 0; cursor: pointer; }
|
|
324
324
|
button.chip:hover { outline: 1px solid currentColor; }
|
|
@@ -334,6 +334,8 @@ td.why { white-space: nowrap; } /* Uptime's down / left out,
|
|
|
334
334
|
dialog { border: 1px solid var(--ink); border-radius: var(--radius); padding: 1.25rem 1.4rem;
|
|
335
335
|
width: min(40rem, calc(100vw - 2rem)); max-height: calc(100vh - 2rem);
|
|
336
336
|
background: var(--paper-2); color: var(--ink); box-shadow: 6px 6px 0 var(--ink); }
|
|
337
|
+
/* The collection popup holds the member table: wider, so names and chips sit on one line. */
|
|
338
|
+
dialog#c-form { width: min(54rem, calc(100vw - 2rem)); }
|
|
337
339
|
dialog::backdrop { background: color-mix(in oklab, var(--ink-deep) 45%, transparent); }
|
|
338
340
|
dialog h2 { margin: 0 0 .2rem; font-size: 1.375rem; font-weight: 700; }
|
|
339
341
|
:is(dialog, .form-panel) .served { color: var(--muted); font-size: .9375rem; margin: 0 0 .9rem; overflow-wrap: anywhere; }
|
|
@@ -344,11 +346,23 @@ dialog h2 { margin: 0 0 .2rem; font-size: 1.375rem; font-weight: 700; }
|
|
|
344
346
|
:is(dialog, .form-panel) .rules { font-size: .875rem; color: var(--muted); margin: .35rem 0 0; }
|
|
345
347
|
:is(dialog, .form-panel) label.check { display: flex; align-items: center; gap: .5rem; margin-top: 1rem; cursor: pointer; }
|
|
346
348
|
:is(dialog, .form-panel) fieldset { border: 0; padding: 0; margin: 1rem 0 0; }
|
|
347
|
-
:is(dialog, .form-panel) .members { max-height:
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
349
|
+
:is(dialog, .form-panel) .members { max-height: min(30rem, 55vh); overflow: auto; border: 1px solid var(--line);
|
|
350
|
+
border-radius: var(--radius); }
|
|
351
|
+
/* A table to scan: the model (its name opens it), context, what it can do, then a
|
|
352
|
+
chip per provider it is on, each ticking that alias (bench.js drawMembers). */
|
|
353
|
+
:is(dialog, .form-panel) .members :is(.m-row, .m-head) { display: grid; gap: .2rem .8rem; align-items: center;
|
|
354
|
+
grid-template-columns: minmax(9rem, 1.4fr) 3.6rem minmax(0, 1fr) minmax(0, 1.3fr); padding: .4rem .6rem; }
|
|
355
|
+
:is(dialog, .form-panel) .members .m-head { position: sticky; top: 0; z-index: 1; background: var(--paper-2);
|
|
356
|
+
border-bottom: 1px solid var(--ink); font-size: .75rem; font-weight: 600; color: var(--muted); }
|
|
357
|
+
:is(dialog, .form-panel) .members .m-row { border-bottom: 1px solid var(--line); }
|
|
358
|
+
:is(dialog, .form-panel) .members .m-row:nth-child(odd) { background: color-mix(in oklab, var(--band) 45%, transparent); }
|
|
359
|
+
:is(dialog, .form-panel) .members .m-row:has(input:checked) { box-shadow: inset 3px 0 0 var(--bench-seat, var(--brand)); }
|
|
360
|
+
:is(dialog, .form-panel) .members .m-name a.model { font-size: .875rem; }
|
|
361
|
+
:is(dialog, .form-panel) .members .m-ctx { font-family: var(--font-mono); font-size: .8125rem; color: var(--muted); text-align: right; }
|
|
362
|
+
:is(dialog, .form-panel) .members .m-can { display: flex; flex-wrap: wrap; gap: .2rem; }
|
|
363
|
+
:is(dialog, .form-panel) .members .m-can .chip { font-size: .6875rem; padding: 0 .4rem; }
|
|
364
|
+
#c-form .members-head { display: flex; align-items: baseline; gap: .6rem; flex-wrap: wrap; }
|
|
365
|
+
#c-form .members-head .field { margin-right: auto; }
|
|
352
366
|
:is(dialog, .form-panel) .members .m-name { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0 .5rem;
|
|
353
367
|
font-size: .875rem; overflow-wrap: anywhere; }
|
|
354
368
|
:is(dialog, .form-panel) .members .m-facts { color: var(--muted); font-size: .8125rem; }
|
|
@@ -380,6 +394,8 @@ dialog h2 { margin: 0 0 .2rem; font-size: 1.375rem; font-weight: 700; }
|
|
|
380
394
|
:is(dialog, .form-panel) .profile .src { font-size: .75rem; color: var(--muted); }
|
|
381
395
|
:is(dialog, .form-panel) .settings { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 1rem; }
|
|
382
396
|
@media (max-width: 40rem) { :is(dialog, .form-panel) :is(.settings, .members .m-row) { grid-template-columns: minmax(0, 1fr); }
|
|
397
|
+
:is(dialog, .form-panel) .members .m-head { display: none; }
|
|
398
|
+
:is(dialog, .form-panel) .members .m-ctx { text-align: left; }
|
|
383
399
|
:is(dialog, .form-panel) .members .m-routes { justify-content: flex-start; } }
|
|
384
400
|
:is(dialog, .form-panel) fieldset label.check { margin-top: .4rem; flex-wrap: wrap; }
|
|
385
401
|
:is(dialog, .form-panel) fieldset label.check .muted { font-size: .875rem; }
|
|
@@ -519,6 +535,17 @@ pre.log.answer { max-height: 40vh; }
|
|
|
519
535
|
.chart { margin: .5rem 0 .75rem; overflow-x: auto; }
|
|
520
536
|
.chart.muted { font-size: .875rem; }
|
|
521
537
|
h3.chart-head { font-size: 1rem; margin: 1rem 0 .2rem; }
|
|
538
|
+
.chart-label { font-size: .875rem; font-weight: 600; margin: .9rem 0 .1rem; }
|
|
539
|
+
/* Models: each connection a fold, its heading the summary */
|
|
540
|
+
.model-card > summary h3.chart-head { display: inline; margin: 0; }
|
|
541
|
+
/* Expand all / Collapse all: a text toggle with a chevron that turns, like a fold's own marker */
|
|
542
|
+
button.fold-all { display: inline-flex; align-items: center; gap: .4rem; margin-left: auto; border: 0; padding: .2rem 0;
|
|
543
|
+
background: none; color: var(--link); font: inherit; font-size: .9375rem; cursor: pointer; }
|
|
544
|
+
button.fold-all:hover, button.fold-all:focus-visible { text-decoration: underline; text-underline-offset: .18em; }
|
|
545
|
+
.fold-chev { width: .5rem; height: .5rem; border: solid currentColor; border-width: 0 2px 2px 0;
|
|
546
|
+
transform: rotate(-45deg); transition: transform .15s; }
|
|
547
|
+
button.fold-all[aria-expanded="true"] .fold-chev { transform: rotate(45deg); margin-top: -.3rem; }
|
|
548
|
+
@media (prefers-reduced-motion: reduce) { .fold-chev { transition: none; } }
|
|
522
549
|
/* the Collections tab: the dialog's form, kept to a readable width */
|
|
523
550
|
.panel.form-panel > :not(#c-list, table) { max-width: 46rem; }
|
|
524
551
|
/* a list of things you open (collections), with its New button above */
|
|
@@ -573,7 +600,6 @@ dialog .pick { display: flex; gap: 1.5rem; }
|
|
|
573
600
|
.toolbar input[type=search] { min-width: 0; width: 100%; }
|
|
574
601
|
button.c-row { grid-template-columns: minmax(0, 1fr); } /* the seats get the width; the whole row opens */
|
|
575
602
|
.c-row .open-hint { display: none; }
|
|
576
|
-
.a-line { margin: 1rem 1rem 0; }
|
|
577
603
|
}
|
|
578
604
|
/* A narrow page (a phone, or a window with the sidebar beside it): name and
|
|
579
605
|
state on one line, the words and actions under them. No gap between name
|