Cookbook polish: auto-reconnect, ctx slider fixes, scoring, lots of UI

Backend (services/hwfit + routes):
- VRAM column sort now shows global highest first (was special-cased to
  ascending then truncated top-N, which made "highest VRAM" mathematically
  unreachable). Every column path uses reverse=True for the truncation.
- Hardware probe cache TTL 30min -> 24h so changing filters doesn't keep
  re-probing the rig during a session; Rescan button still forces fresh.
- Multi-GPU rigs filter GGUF Q*/IQ quants (vLLM/SGLang can't serve them);
  default non-prequantized to BF16 on 2+ GPUs.
- AWQ / AWQ-8bit / GPTQ-8bit get a -1.0 quality penalty so FP8 wins ties.
- Version-aware tiebreaker (parse Mn.n / Vn) — MiniMax-M2.7 ranks above M2.5.
- hf_models.json: zai-org/GLM-5.1 added; zai-org/GLM-5 quantization flipped
  Q4_K_M -> BF16. DeepSeek-V4-Flash / -Pro + their -Base variants registered
  with new FP4-MoE-Mixed / FP8-Mixed quant keys (calibrated BPP from the
  actual 156 GB / 284 GB disk footprints).
- New FP4-MoE-Mixed + FP8-Mixed entries in QUANT_BPP / QUANT_SPEED_MULT /
  QUANT_QUALITY_PENALTY / QUANT_BYTES_PER_PARAM / PREQUANTIZED_PREFIXES.

Frontend — Scan/Download:
- Engine + Quant swapped in the toolbar; Quant defaults to "All".
- Ctx (range slider) ported from origin/main: 8k/16k/32k/50k/128k/Max. Drag
  re-sorts by vram ascending (smallest fitting first); back to Max → score.
- Ctx slider rail now visible — was background:transparent in a duplicate
  later-cascade rule. Hardcoded grey + !important.
- Search input moved to the far right of the toolbar.
- Type/Standard default; "Context" not uppercased; Search placeholder dimmed.
- Engine "?" + Quant "?" inline help chips inside their dropdown boxes.
- Fit-column dot toggles fit-only filter; un-toggling re-sorts by VRAM desc.
- Quant column truncates to 9 chars + ellipsis ("FP4-MoE-M..."), full in
  tooltip. Smart title-suffix strips the parts already in the repo name
  (QuantTrio/MiniMax-M2-AWQ + quant AWQ-4bit -> just "(4bit)").
- Conditional warning for safetensors models on non-GPU rigs only.
- Dependency Install / Installed / Installed▾ / N/A all 75.85px wide.
- Rebuild llama.cpp moved into the llama_cpp dep row, styled as a tag.
- Foldable Download admin-card (h2 chevron); line under h2 only when folded.
- HF token save gets a green ✓ + "Saved" flash.
- Cached scan no longer counts stalled rows as downloaded.
- Footer: "Request it →" link with GitHub mark to the public discussion
  (#1962) for model-add requests.

Frontend — Running tab:
- Strict download-finish check (DOWNLOAD_OK or /snapshots/, not bare
  "Download complete"). True overall % for multi-shard downloads:
  ((N-1)+frac)/total instead of hf_transfer's per-shard aggregate.
- ETA in the uptime ticker: "downloading: 12m 34s · ETA 1h 23m".
- Clear button kills the tmux session too; if the output still shows a
  live shard line, the pill is hidden + relabels as "reconnect" + revives
  on click.
- Self-heal: on cookbook open AND every bg-monitor cycle (10s, throttled
  to 8s), scan persisted done/error/crashed downloads and probe their
  tmux session — if alive, flip status back to running and reattach.
- Per-launch zombie probe: clicking Download on a model whose persisted
  state is done but tmux is still alive revives the existing task and
  refuses to start a duplicate.
- Pre-launch GPU probe: vllm / sglang / diffusers serve check
  /api/cookbook/gpus first; warns + confirms if no GPU is visible.
- Server-side state guard: rejects "done" POSTs for downloads lacking
  DOWNLOAD_OK / DOWNLOAD_FAILED / /snapshots/ when the last-mentioned
  shard is N<total — stale tabs can't poison persisted state any more.
- Running count includes tasks whose output looks active even if persisted
  status got stuck. Dir text on the running row, font matched to uptime.

Serve panel:
- Ctx text input always resets to model max on open (default 20000 when
  metadata is missing).
- Max Seqs default 8 -> 4. KV Cache dtype select 32px tall.
- Lightning icon on Launch (same as Action toggle).
- Diagnosis card simplified (no fold/copy/dismiss), suggestion font
  matches body; action buttons get icons on the left (Retry/Copy/Edit/
  Install/Kill/Switch/etc.).
- Incomplete-download serve warning when model status is
  downloading / stalled / has_incomplete.
- MTP "?" tooltip ("supported on a few model families … up to ~3× faster").
This commit is contained in:
pewdiepie-archdaemon
2026-06-03 20:25:25 +09:00
parent 3706d756f3
commit 562bc4dedc
12 changed files with 669 additions and 115 deletions

View File

@@ -18628,16 +18628,41 @@ body.gallery-selecting .gallery-dl-btn,
background: color-mix(in srgb, var(--fg) 10%, transparent);
color: color-mix(in srgb, var(--fg) 60%, transparent);
}
/* Rebuild tag — same look as the LLM category tag, sits to its left. */
.cookbook-dep-rebuild {
background: color-mix(in srgb, var(--fg) 10%, transparent);
color: color-mix(in srgb, var(--fg) 75%, transparent);
border: 1px solid color-mix(in srgb, var(--fg) 20%, transparent);
cursor: pointer;
font-family: inherit;
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
}
.cookbook-dep-rebuild:hover {
background: color-mix(in srgb, var(--accent, var(--red)) 18%, transparent);
color: var(--accent, var(--red));
border-color: color-mix(in srgb, var(--accent, var(--red)) 45%, transparent);
}
.cookbook-dep-installed {
background: color-mix(in srgb, var(--green, #50fa7b) 18%, transparent);
color: var(--green, #50fa7b);
border: 1px solid color-mix(in srgb, var(--green, #50fa7b) 35%, transparent);
/* Match the Install button + Installed split width so all three variants
align in a mixed row. */
min-width: 75.85px;
padding: 0 10px;
box-sizing: border-box;
}
.cookbook-dep-na {
background: color-mix(in srgb, var(--fg) 8%, transparent);
color: color-mix(in srgb, var(--fg) 60%, transparent);
border: 1px solid color-mix(in srgb, var(--fg) 16%, transparent);
cursor: help;
/* Match other dep tag widths so N/A rows line up with Install / Installed. */
min-width: 75.85px;
padding: 0 10px;
box-sizing: border-box;
}
.cookbook-dep-install {
background: var(--accent, var(--red));
@@ -18648,12 +18673,30 @@ body.gallery-selecting .gallery-dl-btn,
font-weight: 500;
position: relative;
top: -3px;
/* Width matches the measured Installed split button (75.85px) so a row of
mixed Install / Installed deps lines up. */
min-width: 75.85px;
padding: 0 10px;
/* Strip the native button box so it's the same height as the sibling tags
(Firefox renders <button> taller otherwise); height comes from .cookbook-dep-tag. */
appearance: none;
-webkit-appearance: none;
-moz-appearance: none;
}
/* Conditional line under the Download h2: only when the section is folded
(collapsed). When expanded, the body content provides separation; the
underline reads as clutter. */
#cookbook-dl-tab-fold { border-bottom: none !important; padding-bottom: 0 !important; }
#cookbook-dl-tab-fold.is-folded {
border-bottom: 1px solid color-mix(in srgb, var(--border) 40%, transparent) !important;
padding-bottom: 6px !important;
}
/* Center the "?" glyph inside the help chip. Without text-align it sits 0.5px
left of true center because of the character's natural baseline offset. */
.hwfit-help-chip {
text-align: center;
padding-left: 0.5px;
}
.cookbook-dep-install:hover { opacity: 0.85; }
/* Installed split button: "Installed" label + separator + caret; clicking it
opens the actions menu (Update). Replaces the old button. */
@@ -18709,12 +18752,13 @@ body.gallery-selecting .gallery-dl-btn,
border: 1px solid var(--border);
border-radius: 4px;
background: var(--bg);
font-size: 11px;
font-size: 12px; /* match .cookbook-field-input so Context reads same size as Engine/Quant */
}
.hwfit-ctx-control span {
text-transform: uppercase;
letter-spacing: 0.3px;
opacity: 0.75;
/* Match Quant/Engine select label style: no uppercase, no letter-spacing. */
text-transform: none;
letter-spacing: 0;
opacity: 0.9;
}
/* Editor-style slider (same look as the gallery editor sliders): thin pill
rail that fattens on interaction, circular red thumb that grows on hover. */
@@ -18726,11 +18770,19 @@ body.gallery-selecting .gallery-dl-btn,
border: 0;
-webkit-appearance: none;
appearance: none;
background: color-mix(in srgb, var(--fg) 25%, transparent);
/* Hard-coded grey so the rail is GUARANTEED visible regardless of theme
every theme-derived color we tried (--fg-muted, --border, accent-bg mix)
kept blending into the panel background on at least one theme. */
background: rgba(150, 150, 150, 0.65);
border-radius: 999px;
accent-color: var(--red);
cursor: pointer;
transition: height 0.15s ease;
transition: height 0.15s ease, background 0.15s ease;
}
.hwfit-ctx-control input[type="range"]:hover,
.hwfit-ctx-control input[type="range"]:focus,
.hwfit-ctx-control input[type="range"]:active {
background: var(--fg);
}
.hwfit-ctx-control input[type="range"]:hover,
.hwfit-ctx-control input[type="range"]:focus,
@@ -19324,9 +19376,12 @@ body.gallery-selecting .gallery-dl-btn,
position: relative;
top: -4px;
cursor: pointer;
padding: 1px 6px 1px 4px;
/* Tightened vertical padding so the hover-background isn't disproportionately
tall vs the icon+label. */
padding: 0 6px 0 4px;
height: 14px;
border: 0;
border-radius: 9px;
border-radius: 7px;
background: transparent;
color: var(--fg);
font-family: inherit;
@@ -20028,6 +20083,17 @@ body.gallery-selecting .gallery-dl-btn,
border-color: var(--color-error);
background: color-mix(in srgb, var(--color-error) 12%, transparent);
}
/* Icons on the left of diagnosis action buttons (Retry / Copy / Edit / etc.). */
.cookbook-diag-btn,
.cookbook-diag-menu button {
display: inline-flex;
align-items: center;
gap: 5px;
}
.cookbook-diag-btn-ico {
flex-shrink: 0;
opacity: 0.9;
}
/* ── What Fits? (hardware model fitting tab in cookbook) ── */
.cookbook-group.hidden { display: none !important; }
@@ -20500,6 +20566,40 @@ body.gallery-selecting .gallery-dl-btn,
.hwfit-toolbar .hwfit-usecase { min-width: 70px; flex-shrink: 0; }
.hwfit-toolbar .hwfit-quant { min-width: 50px; flex-shrink: 0; }
.hwfit-toolbar .hwfit-search { flex: 1; min-width: 80px; }
/* Lower-opacity "Search models..." placeholder so it reads as a hint, not
a label matches the muted form-field feel of the inline filters. */
.hwfit-search::placeholder { opacity: 0.5; }
.hwfit-search::-webkit-input-placeholder { opacity: 0.5; }
.hwfit-search::-moz-placeholder { opacity: 0.5; }
/* Dot inside the Fit column header click to toggle the fit-only filter
(off = show too-tight rows; on = hide them). */
.hwfit-fit-dot {
display: inline-block;
margin-right: 4px;
font-size: 8px;
line-height: 1;
color: color-mix(in srgb, var(--fg) 35%, transparent);
cursor: pointer;
vertical-align: middle;
position: relative;
top: -1px; /* nudge 1px up so the small dot sits centered with the "Fit" caps */
transition: color 0.12s ease, text-shadow 0.12s ease;
}
/* Quant suffix appended to model names when the storage format isn't in the
repo id e.g. "(FP4-MoE-Mixed)" after DeepSeek-V4-Flash. Muted to read as
metadata, not part of the name. */
.hwfit-name-quant {
font-size: 0.78em;
opacity: 0.55;
font-weight: 400;
margin-left: 4px;
}
.hwfit-fit-dot:hover { color: var(--accent, var(--red)); }
.hwfit-fit-dot.active {
color: var(--green, #50fa7b);
text-shadow: 0 0 4px color-mix(in srgb, var(--green, #50fa7b) 55%, transparent);
}
.hwfit-help-chip {
width: 14px;
height: 14px;
@@ -20526,6 +20626,28 @@ body.gallery-selecting .gallery-dl-btn,
.hwfit-help-chip-inline {
margin-left: -2px;
margin-right: 0;
top: 0; /* parent rule sets top:-1px; nudge inline variant 1px lower */
}
/* Quant select + inline ? wrapper the ? sits inside the dropdown's bordered
box, anchored on the right just left of the chevron. */
.hwfit-quant-wrap, .hwfit-engine-wrap {
position: relative;
display: inline-flex;
align-items: center;
}
.hwfit-quant-wrap .hwfit-quant,
.hwfit-engine-wrap .hwfit-engine {
/* Make room for the ? on the right edge, in addition to the native chevron. */
padding-right: 32px;
}
.hwfit-quant-wrap .hwfit-quant-help,
.hwfit-engine-wrap .hwfit-engine-help {
position: absolute;
right: 20px; /* sits just left of the native select chevron */
top: 50%;
transform: translateY(-50%);
pointer-events: auto;
margin: 0;
}
.hwfit-ctx-control {
height: 28px;
@@ -20539,21 +20661,27 @@ body.gallery-selecting .gallery-dl-btn,
border-radius: 4px;
color: var(--fg-muted);
background: var(--bg);
font-size: 10px;
font-size: 12px; /* match .cookbook-field-input — was 10px and read smaller than siblings */
box-sizing: border-box;
}
.hwfit-ctx-control span {
text-transform: uppercase;
letter-spacing: 0.3px;
opacity: 0.75;
/* Match Quant/Engine select label style: no uppercase, no letter-spacing. */
text-transform: none;
letter-spacing: 0;
opacity: 0.9;
}
.hwfit-ctx-control input[type="range"] {
width: 54px;
min-width: 54px;
height: 16px;
width: 64px;
min-width: 64px;
height: 4px;
padding: 0;
border: 0;
background: transparent;
-webkit-appearance: none;
appearance: none;
/* Hardcoded grey rail was background:transparent here, which was the
LATER-in-cascade override that kept making the rail invisible. */
background: rgba(150, 150, 150, 0.65) !important;
border-radius: 999px;
accent-color: var(--accent, var(--red));
}
.hwfit-ctx-control output {