Commit Graph
322 Commits
Author SHA1 Message Date
noonghunnaandClaude Opus 4.8 ffd525a7f6 UPSTREAM: dgemma #45163 — add promote-to-caveats trigger (hold at experimental for now)
Decision 2026-06-11: hold DiffusionGemma at 🧪 experimental; promote 🧪⚠️
caveats when #45163 merges into a pinnable release (arch is in no release today
+ mutable :gemma tag = the blocker for caveats). soak-continuous PASS, bench +
8-pack done; the dLLM SSE/streaming-NIAH checks can't cleanly gate. Tracked in
club-3090 task + learnings re-test row.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-11 06:21:08 +00:00
noonghunnaandClaude Opus 4.8 0cfd099b37 dgemma: adopt official vllm/vllm-openai:gemma image (drop 120-file sideload)
vLLM publishes an OFFICIAL `vllm/vllm-openai:gemma` image (pushed 2026-06-10, a
stock build of the dgemma branch commit 74b5964f) with DiffusionGemma baked in —
`DiffusionGemmaForBlockDiffusion` registers natively, transformers 5.10.2. So we
pin that image (BY DIGEST, purge-resistant) and drop the bespoke sideload from
PR #358 (stock nightly + 123-file branch overlay + install_script).

3 fixes are NOT upstream (vLLM tests H100/B200 + TP=1) so they're not in :gemma —
the compose now bind-mounts them (site_package_overlay) from the new lean dir
models/diffusiongemma-26b-a4b/vllm/patches/gemma-image-fixes/:
  - marlin.py + marlin_utils_fp8.py — sm_86 fp8 Marlin sub-tile-K pad. :gemma
    clean dies in warmup ("Invalid thread config ... num_bits=8 ...
    max_shared_mem=101376", K=352/1056) without it.
  - diffusion_gemma.py — TP-vocab soft-embed + dtype fix (TP=2; their recipe is TP=1).

Changes:
  - base.yml: image -> :gemma@sha256:9c719fc0...; default `vllm serve` entrypoint
    + 3 file mounts (was: overlay-dir mount + install_script bash entrypoint).
    Status 🧪 experimental (was upstream-gated; supersedes PR #359 too).
  - engine vllm-diffusion-gemma: install.spec -> :gemma@digest; vendored_overlays
    -> the 3 fixes (delivery site_package_overlay).
  - registry status -> experimental; note rewritten.
  - patches.yml: dgemma-gemma-image-fixes (site_package_overlay, 3 overlay_files).
  - diagnose_profile_cli OVERLAY_PATH_HINTS + docs/UPSTREAM.md #45163 row.
  - DELETE the 123-file dgemma-overlay/ + the regeneration Dockerfile.

Validated live on 2x RTX 3090 (2026-06-11): :gemma clean dies on the Marlin wall;
:gemma + 3 mounts (via `docker compose -f base.yml up`) boots, serves coherent
output, 262K, ~177/180 TPS typical / ~1100 peak, 23.1 GB/card. verify-full: gen +
tool-call + reasoning + output-quality pass (streaming-SSE "1 chunk" is the
expected block-diffusion artifact). Full gate green (test-compose-registry-disk
local-only red = untracked nex-n2-mini WIP; CI-clean validated: disk 46 / reg 45).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-11 05:31:36 +00:00
noonghunnaandClaude Opus 4.8 af1e909b04 Wire DiffusionGemma into the catalog via stock-nightly sideload
Make `vllm/diffusiongemma-dual` usable through setup/pull/switch/launch, and
pivot the engine delivery from a baked local image to a SIDELOADED overlay on a
stock, pullable nightly (so non-rig users can actually run it).

Delivery (no baked image):
- Engine `vllm-diffusion-gemma` pins a STOCK `vllm/vllm-openai:nightly-2c9c07c8…`
  and sideloads the vendored overlay at boot via install_script (entrypoint).
- `models/diffusiongemma-26b-a4b/vllm/patches/dgemma-overlay/` is the vendored
  payload: the FULL stock-vs-`dgemma`-branch `vllm/` delta (123 .py) — a lean
  PR-#45163-only overlay version-skews (`build_attn_metadata() got an unexpected
  keyword argument 'causal'`: load-bearing dgemma changes live outside the PR
  diff) — plus Codex's 3 fixes (marlin K-pad ×2 + diffusion_gemma TP-vocab/dtype).
  install.sh cp's it over the installed vllm pkg, fail-loud arch assert.
- base.yml rewired: stock image + overlay mount + install_script entrypoint;
  drops the 3 standalone marlin-k-pad mounts (folded into the overlay) and the
  baked-image dependency. The dgemma-pr45163 Dockerfile is now the overlay-
  regeneration helper, not the runtime engine.

Catalog wiring:
- Model profile `diffusiongemma-26b-a4b` (gemma4-swa-moe backbone + block
  diffusion; text; valid_tp [1,2]; kv_calc_supported=false → kvcalc_key SKIP).
- Engine profile `vllm-diffusion-gemma` (stock install + vendored_overlays).
- compose_registry `vllm/diffusiongemma-dual` (port 8042, status upstream-gated).
  NO DEFAULTS row — upstream-gated is non-functional, reachable only by slug.
- patches.yml `dgemma-vllm45163-sideload` (install_script + drift_guard) and the
  diagnose_profile_cli overlay-path hint.
- docs/UPSTREAM.md row for vllm#45163 (re-pin + drop triggers).

Output-length fix carried in base.yml: lift the model's 256-tok max_new_tokens
default to 16384 via --override-generation-config (keeps the diffusion denoising
params; fixes OWUI truncation + next-turn echo).

Tests: bump the count fixtures for +1 model / +1 engine / +1 compose / +1 registry
entry (test-profiles-compat 6→7 models, 11→12 engines; test-compose-registry-disk
44→45 registry, 45→46 disk). Full gate green except test-compose-registry-disk
local-only redness from untracked nex-n2-mini WIP in the shared tree (CI-clean
validated green: tracked-only disk=46, registry=45, disk-only set all-allowed).

Validated live on 2x RTX 3090: stock nightly + sideloaded overlay boots, serves
coherent output, 262K, via `docker compose -f base.yml up` (the switch/launch path).
Upstream-gated until #45163 merges into a pinnable engine.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-11 04:00:30 +00:00
noonghunnaandClaude Opus 4.8 18902fa495 image-studio P1 follow-up: setup UX, LiteLLM route, architecture docs
From maintainer feedback on the P1 bundle:

- scripts/setup-image-studio.sh: pre-run plan + confirm prompt (--yes / CI=1 /
  non-TTY auto-yes to never hang), --help/usage banner, and a proper "Get started"
  block — create your admin account (first sign-up = admin; no creds pre-set),
  pick the gemma-4-12b chat model, then 🖼️ to generate. States the fresh-vs-existing
  volume wiring caveat.
- services/litellm/config.yaml: add a gemma-4-12b route (-> :8069), so the
  image-studio chat brain is reachable through the gateway too (it's the one route
  live in image-studio mode; the big-model routes are GPU-mutex with ComfyUI).
  Open WebUI still points direct to :8069 by default for a clean picker.
- docs/IMAGE_STUDIO.md: architecture section + ASCII diagram (front-end -> chat /
  image; the 2-GPU split; LiteLLM gateway), explicit first-run + how-to-generate-an-
  image-in-chat steps, chat-routing explanation, and pin/v0.9.6/secret accuracy fixes.

Live-validated: gemma-4-12b responds through LiteLLM :4000; setup --help + bash -n clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-09 05:13:31 +00:00
noonghunnaandClaude Opus 4.8 c28470c5f8 image-studio P1 docs: add IMAGE_STUDIO.md + index/README/FAQ pointers
- docs/IMAGE_STUDIO.md (new): the bundle — quickstart, two-front-ends, gpu-mode
  modes, measured Ideogram-4 VRAM-by-resolution, chat-model options, the
  PersistentConfig "image button missing" fix, single-GPU fallback.
- docs/README.md: IMAGE_STUDIO.md under the user track.
- README.md: one-line image-gen pointer.
- docs/FAQ.md: point the existing image-gen answer at the turnkey bundle.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-09 04:31:10 +00:00
74b30abfe3 Add vllm/qwen-27b-dual-balanced + record 3-way 8-pack A/B (tie) (#343)
* Add vllm/qwen-27b-dual-balanced + record 3-way 8-pack A/B (tie)

New "balanced" dual tier: cyankiwi AWQ-BF16-INT4 (int4 group-32 + BF16 mtp,
compressed-tensors) + int8-PTH KV + MTP n=3, TP=2 @262K. Live-validated
2026-06-07 (Marlin WNA16, KV pool 370K tok / 1.41x — the LARGEST of the dual
family, since int4 weights free more VRAM than fp8's 8-bit; ~67 TPS decode).

3-way 8-pack A/B (--full, same harness, same day 2026-06-07):
  fast (autoround+fp8KV) 109 · balanced (awq+int8KV) 105 · max (fp8+int8KV) 110
  → a TIE (deterministic packs 64/64/65; spread within +/-5-7 noise).

The short-context 8-pack does NOT separate the quants. So:
- fast (vllm/dual) stays the default;
- balanced/max are framed by SERVING characteristics (KV-pool headroom,
  int8-PTH fidelity), NOT behavioral quality — headers/docs say so explicitly.
- The dimension where int8-PTH should win (long-ctx NIAH recall) is an open
  follow-up, not claimed here.

Also corrects the stale fast-tier 129/150 baseline: that was the 2026-05-09
harness; today's benchlocal-cli (verifier fixes since) scores the same fast
config at 109/150. Annotated as not-comparable across all four compose headers.

Wiring: awq-bf16-int4 weights_variant (compressed-tensors, cyankiwi repo) +
registry entry (vllm-stable, kv int8_per_token_head, port 8016, SKIP kvcalc,
experimental) + dual-max status_note updated with the A/B + DUAL_CARD rows +
A/B footnote. test-compose-registry-disk 42->43 / 43->44. Full gate green 43/0;
compat C4/C10/C14 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

* Correct balanced KV-pool claim: fast has the largest pool, not balanced

Measured v0.22.0 @262K, TP=2: fast 622K/2.37× > balanced 370K/1.41× > max
295K/1.13×. My initial framing claimed balanced had "the largest KV pool of
the dual family" — wrong: I only compared it to max and forgot fast. Fast's
17.5 GB autoround weights are far lighter than balanced's 27 GB AWQ, so fast
has the biggest pool by a wide margin.

This reframes balanced honestly: it is DOMINATED by the fast tier — slower
(~67 vs ~89 code TPS), smaller KV pool, and tied/below on the 8-pack. Its
only possible edge is int8-PTH KV fidelity > fast's fp8_e5m2 (same size — a
fidelity bet, not a memory one), which is UNPROVEN (the short-ctx 8-pack is
blind to it). Keep only if the long-ctx NIAH A/B (#470) proves it; else
deprecate. Fixed across the compose header, registry status_note, and
DUAL_CARD (rows + footnote); fast row now cites its 622K/2.37× pool.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

---------

Co-authored-by: noonghunna <[email protected]>
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-08 02:25:29 +05:00
noonghunnaandClaude Opus 4.8 c51dc23dde docs: reconcile DUAL/MULTI_CARD for the qwen fast/max tiers (#340)
DUAL_CARD.md: annotate dual.yml as the "fast" tier (≡ vllm/qwen-27b-dual-fast)
and add the new "max accuracy" row (vllm/qwen-27b-dual-max — FP8 + int8-PTH KV,
🧪, boot/KV-validated, no TPS claim).

MULTI_CARD.md: the "Shipped TP=4 baselines" section documented vllm/dual4 +
vllm/dual4-dflash → composes that no longer exist (multi4 now has only
autoround-int4/mtp.yml + fp8/mtp.yml). Rewrote to vllm/qwen-27b-multi-fast +
-multi-max, carried Whamp's cross-rig fp8/MTP numbers onto multi-fast (same
config, renamed file; labelled cross-rig), and dropped the removed DFlash TP=4
variant (DFlash on Qwen3-Next vLLM is blocked, #39931 — kept its numbers as a
historical note). Fixed the recipe's stale filename (multi4.yml) + container/port
(8014 multi-fast / 8015 multi-max), and the "why one config" section → fast/max pair.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-07 14:54:24 +00:00
noonghunnaandClaude Opus 4.8 21d01bdaad docs(ADDING_MODELS): quant & arch gotchas checklist (Step 1)
Five verify-or-get-bitten checks distilled from the gemma/qwen quant work:
arch registered in the TARGET engine image (Gemma4Unified→gemma4-unified image
vs Gemma4ForConditionalGeneration→stock v0.22.0); MTP key is family-specific
(mtp_num_hidden_layers vs num_nextn_predict_layers); --reasoning-parser required
or verify-full step 6 false-fails; don't infer a quant from its name (read
quantization_config); KV dtype constrained by the loader (compressed-tensors
can't fp8-KV → int8-PTH). + meta: verify capability against the running image,
not the profile.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-06 20:02:57 +00:00
noonghunnaandClaude Opus 4.8 3382a47f40 docs: quant-fidelity (KLD/QAT) + the Ampere KV-dtype traps (int8-PTH native, fp8-guard)
Capture the quant/KV findings so others don't re-hit them:

DTYPE_MATRIX.md — new "KV-quant × checkpoint compatibility — the two Ampere traps":
  (1) fp8 KV is rejected for compressed-tensors checkpoints (AWQ/FP8/INT8 weights),
      flag-independent; auto_round/GPTQ unaffected. (2) int8_per_token_head is NATIVE
      in stock v0.22.0 for uniform-head-dim models — #40391 is the Gemma-4-only
      (interleaved 256/512 head-dim → page-size unification) adapter, don't copy it.
  + an Ampere KV-dtype picker table; tag the INT8-PTH row native/overlay status.

QUANTIZATION.md — new §4a "Picking a quant by fidelity (KLD) — and where QAT fits":
  Phaelon74 KLD ranking (INT8 0.009 < FP8 0.023 < AWQ-BF16-INT4 0.042 < AWQ-INT4
  0.051 < AutoRound 0.063); KLD is weights-only (KV-quant adds separate error);
  QAT only out-earns PTQ at <=4-bit (8-bit PTQ already near-lossless); dual=fidelity /
  single=fit tiering. + int8_per_token_head row + the fp8-guard caveat in §5.
  FIX the stale §4 FP8 line: FP8 *weights* DO run on Ampere via Marlin W8A16 (not
  "emulated / KV-only") and are a top-fidelity option.

FAQ.md — new Q: "My AWQ/FP8 model errors on --kv-cache-dtype fp8" → use int8-PTH.

Gate 42/42.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-06 18:21:19 +00:00
noonghunnaandClaude Opus 4.8 09a448238d docs(upstream): repoint Gemma engine-pin row to vllm-gemma-stable + add vllm-stable row (#324 fidelity)
Post-#324 the Gemma duals run on vllm-gemma-stable (overlay-carrying), not
vllm-stable. Repoint that engine-pin row and add the missing vllm-stable
(overlay-free) row for the Qwen3-Next + dense + derived-base path. Pure
doc-fidelity; flagged during the #254 Genesis-cleanup.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-05 14:59:42 +00:00
noonghunnaandClaude Opus 4.8 baac1acafd chore(254): deprecate the now-unused Genesis nightly engines + patches [Phase 3+4]
Phase 3 — engine profiles (zero registry users after the archival):
- vllm-nightly-mtp + vllm-nightly-full -> stability: deprecated + DEPRECATED notes
  (both purged nightlies, 404 on Docker Hub). nightly-mtp retained as the
  genesis_equipped test anchor (required_genesis:true).
- arch_patches.yml: flipped the qwen3-next-hybrid vllm-nightly-mtp pin
  loads:true -> false (deriver won't offer the dead engine; [email protected].0
  stays the loads:true primary).
- generate-compose.sh usage example + docs/UPSTREAM.md engine-pin rows updated.

Phase 4 — patches.yml: stamped 55 patches deprecated_on:2026-06-05 (kept on disk):
- the ~46 genesis-p*/pn* env-gated patches (via the &genesis_env_patch anchor)
- 9 dead overlays: sglang x2, pr40798/pr40914 (negative-result), gemma-pr41800
  (merged upstream), gemma4-fp8-ampere (Ampere-dead), perheadkv-hybridpage-fix +
  pr40391-perheadkv (superseded by pr40391-rebased), carnice-chat-template
  (carnice compose archived).
- Left 9 ACTIVE: overlays still mounted by functional composes + the gated
  gemma-a4b #326 patch.

42/42 gate green. Refs #254.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-05 14:44:21 +00:00
noonghunna e183eea61b Merge pull request #322 from noonghunna/fix/318-vllm-offline
feat(vllm): opt-in offline/air-gap support across vLLM composes (#318)
2026-06-05 17:51:16 +05:00
noonghunnaandClaude Opus 4.8 b314ea97a7 docs(adding-models): extend coherence rules — patch roles, engine identity/channels, test matrix
Completes the coherence section with the three Codex-endorsed additions:
- Rule 7: label every patch by role (compose-local-runtime /
  engine-provenance-only / load-bearing-gate / deprecated-history) — the
  load-bearing-vs-provenance distinction that the #254 unify got wrong.
- Rule 8: engine identity is stable, version lives in install.spec; channels
  (stable/rc/nightly) are separate engine profiles; deviate one compose by
  re-pointing its registry engine, not by editing the shared profile.
- A compact 'change type -> tests that prove coherence' matrix.

UPSTREAM cross-link intentionally NOT added here — docs/UPSTREAM.md stays the
single tracker. Refs #254.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-05 11:40:50 +00:00
noonghunnaandClaude Opus 4.8 a9ffb532ef refactor(vllm): reconcile vLLM engines to v0.22.0 — two-engine split (#254)
Replace the purged `vllm-nightly-clean` pin (nightly-bf610c2f, now 404 on
Docker Hub — so the launcher injected a dead image for every slug on it)
with a v0.22.0 two-engine design:

- `vllm-stable`: OVERLAY-FREE v0.22.0 — the broad successor to
  vllm-nightly-clean. Serves Qwen3-Next (hybrid 27b + MoE 35B-A3B), generic
  `dense` transformers, and uncurated derived-emission bases. Migrates
  vllm/qwen-35b-a3b-dual, vllm/dual, vllm/minimal (live-validated on stock
  v0.22.0: TP=2 + MTP + tool-call clean; marlin-pad confirmed unnecessary).
  Added as the first loads:true arch pin on the qwen + dense rows.
- `vllm-gemma-stable`: KEPT as the OVERLAY-CARRYING v0.22.0 engine (#40391
  per-head INT8 KV + #42006 tool-parser) — the Gemma 4 path. Unchanged.
- `vllm-pip-baseline`: the renamed pip `dense` lower-bound (frees the
  `vllm-stable` name for the docker engine above).

Why two engines and not one: `vendored_overlays` is LOAD-BEARING, not
documentation. `derived_emittable` (CONTRACT-5) refuses any engine whose
`vendored_overlays != []` as a derived-emission base, and `diagnose-profile`
expects the Gemma overlay declared on its engine. A single engine cannot be
both overlay-free (for derived/Qwen bases) and overlay-carrying (for Gemma
provenance) — so the two stay split. Compose owns patch APPLICATION; engine
owns provenance/compatibility. (An attempt to fold both into one engine broke
4 tests via exactly these two consumers; the split is the validated shape.)

Also adds scripts/tests/test-compose-image-drift.sh: asserts every fixed
`${VLLM_IMAGE:-<tag>}` compose default equals its engine's `install.spec`
(catches bump-the-engine-forget-the-literal drift), and a docs/ADDING_MODELS.md
"Coherence rules" section codifying the compose/engine/patch separation.

42/42 gate green; resolver emits v0.22.0 for all migrated Qwen + Gemma slugs.
The remaining experimental/preview slugs still on vllm-nightly-clean migrate
in follow-up as each is validated, then that engine is deprecated.

Refs #254.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-05 11:27:17 +00:00
noonghunnaandClaude Opus 4.8 edd77cfd46 feat(vllm): opt-in offline/air-gap support across vLLM composes (#318)
Add HF_HUB_OFFLINE + TRANSFORMERS_OFFLINE passthrough (default off) to all
31 vLLM composes, driven by one OFFLINE flag. Even with local weights and a
local --model path, vLLM/transformers resolve config/tokenizer metadata
against HF unless these are set, so air-gapped boots hang/fail (#318).
OFFLINE=1 (or either var) makes vLLM use local files only.

Compose only injects env vars it explicitly lists, so a host-shell
HF_HUB_OFFLINE never reached the container before this. Default 0 = unchanged
behavior online. Documents the air-gap flow in docs/FAQ.md (incl. the gated-
drafter gotcha for *-mtp composes).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-05 09:01:39 +00:00
noonghunnaandClaude Opus 4.8 47f6291ad2 docs: drop stale /opt/ai vLLM-clone instructions (marlin-pad is vendored + auto-mounted)
FAQ/DUAL_CARD/HARDWARE told users to `git clone vLLM to /opt/ai/engines/vllm/primary/`
and said the dual composes mount from there — both stale. The marlin-pad patch
(vllm#40361) is now vendored in-repo (models/qwen3.6-27b/vllm/patches/vllm-marlin-pad/
{marlin.py,MPLinearKernel.py}) and overlaid into the stock vLLM image automatically by
each dual compose (delivery_mechanism: site_package_overlay). No user clone, no rig path.

Genericizes the internal path out of the public docs AND fixes the no-longer-needed
clone step in one go. (setup.sh already notes the clone is "previous design".)

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-05 02:26:26 +00:00
noonghunnaandClaude Opus 4.8 924883c560 docs(faq,dual-card): image/video gen guidance + 2x3090 multimodal lessons
Promote the cross-cutting findings out of the omni README so all clubbers
find them:
- FAQ: new "Image & video generation" section — use ComfyUI (not the LLM
  stack) on a free card; Open WebUI -> ComfyUI for a unified UI; open-weight
  model shortlist; + "why does my image model OOM with a small transformer?"
  (the ~8-24GB text-encoder hidden cost; GGUF Q5/Q6 near-lossless).
- DUAL_CARD: "multimodal & image/video models" heads-up — size the full
  pipeline (encoder, not just transformer); fp8/int8 KV reaches full context
  single-card before reaching for TP/PP on PCIe; ComfyUI for image/video.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-05 02:19:56 +00:00
noonghunnaandClaude Opus 4.8 edc44c4367 docs: document the compose filename convention (serving-feature delta)
ADDING_MODELS.md gets the full rule + AGENTS.md (CLAUDE.md) the short form:
filename = serving-feature delta from a plain boot — <drafter>[-<kv>][-vision].yml,
suffix order drafter→KV→vision. base.yml = engine-default KV + no drafter; don't
name the default KV (no bf16.yml when bf16 is the default — that's base.yml), only
non-default KV (int8/fp8/tq3). Workload-tuned variants (long-text, tools-text,
bounded-thinking, minimal) keep a descriptive name — recognized exception. Never
encode the weights-quant (that's the <quant>/ dir) or topology (the path).
Existing filenames grandfathered (renaming re-paths registry compose_path).

Resolves the base.yml-vs-bf16.yml-vs-int8.yml spread. New composes only.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-04 20:49:24 +00:00
noonghunnaandClaude Opus 4.8 28794dabff docs(ADDING_MODELS): document the registry slug-naming convention
Codifies the slug body for NEW models: <engine>/<model>-<topology>-<quant>[-<feature>]
— the compose path components flattened, engine first (e.g. vllm/gemma-12b-dual-bf16-mtp).
Previously only the engine PREFIX rule + quant-slug=weights_variant + path layout were
documented; the body composition was convention-by-example and the catalog was
inconsistent (qwen 'vllm/dual' vs gemma-31b 'vllm/gemma-bf16-mtp' vs gemma-12b's explicit
scheme). Existing slugs are explicitly grandfathered — renaming shipped slugs breaks
switch.sh <slug>, so the convention applies to new models/variants only.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-04 20:39:02 +00:00
noonghunnaandClaude Opus 4.8 87b43f14d6 gemma-4-12b: normalize gemma-12b slug naming + prune the no-MTP bases
Self-descriptive <engine>/gemma-12b-<topology>-<quant>[-mtp] slugs:
  vllm/gemma-12b-mtp        -> vllm/gemma-12b-dual-bf16-mtp
  vllm/gemma-12b-int8-mtp   -> vllm/gemma-12b-single-int8-mtp
  beellama/gemma-12b        -> beellama/gemma-12b-single-q8kxl
  llamacpp/gemma-12b        -> llamacpp/gemma-12b-single-q8kxl

Pruned the two no-MTP base composes (MTP is output-lossless and fits the full
262144, so the bases bought nothing): removed vllm/gemma-12b (dual bf16 base) and
vllm/gemma-12b-int8 (single int8 base) + their compose files.

Cross-file: registry keys/entries, kv-calc COMPOSE_ALIAS_TEXT, calibration anchors
(dropped the removed dual-base anchor → kv-calc --calibration now 18/18, test
expectations updated), BENCHMARKS rows (rename 4 / collapse 2 pairs into the MTP
rows), UPSTREAM #39914 row, ADDING_MODELS slug example, disk-count 58/59 -> 56/57.
Hard rename, no back-compat aliases (slugs were day-old 🧪, no users). All stay 🧪
pending per-compose soaks + the ephemeral arch-preview image caveat.

Guard suite 41/41 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-04 18:56:59 +00:00
noonghunnaandClaude Opus 4.8 942c5c891f gemma-4-12b: drop vendored p-RoPE overlay — upstream config fix supersedes it
lucianommartins (gemma upstream) confirmed on vllm#39914 that the 12B 256K OOB
was a config.json bug, now fixed: google/gemma-4-12B-it (+ the -assistant draft)
ship max_position_embeddings=262144. With the corrected config the stock
vllm/vllm-openai:gemma4-unified image sizes the Gemma4 RoPE cos/sin cache to
262144 and serves the full 256K — the vendored vllm-gemma4-prope-longctx overlay
(which sized the cache from runtime max_model_len) is redundant.

Re-validated OVERLAY-FREE on 2x 3090 sm_86 TP=2 bf16 (2026-06-04): base + MTP both
boot 262144 on the stock image, NIAH exact-recall PASS at 140K/170K/200K/230K/241K,
MTP spec-decode active. No device-side asserts.

Changes:
  - models/gemma-4-12b.yml: bf16 hf_repo unsloth/gemma-4-12b-it -> google/gemma-4-12B-it
    (the unsloth mirror still ships 131072 as of 2026-06-04; google carries the fix).
    NOTE: re-introduces the Google license gate on base.yml — the MTP draft was
    already google-sourced, so the vLLM dual path is google-gated either way.
  - base.yml + mtp.yml: remove overlay mount + entrypoint install.sh invoke; rewrite
    Max-ctx / Status / weights headers (256K is stock now, no overlay).
  - patches.yml: drop the gemma-vllm-gemma4-prope-longctx entry.
  - engines/vllm-gemma4-unified.yml: vendored_overlays -> []; notes updated.
  - compose_registry.py: comment + both status_notes (no overlay).
  - diagnose_profile_cli.py: drop the patch->path map entries.
  - delete models/gemma-4-12b/vllm/patches/vllm-gemma4-prope-longctx/.
  - UPSTREAM.md: #39914 -> Resolved (config fix supersedes; overlay dropped).

Guard suite 41/41 green (incl. test-patch-attribution).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-04 16:04:24 +00:00
noonghunnaandClaude Opus 4.8 d391f3272f docs(UPSTREAM): record gemma4 p-RoPE fix shared on vllm#39914
Posted the runtime-sizing fix + club-3090 patch link as a follow-up on the
issue thread (issuecomment-4622760819). Tracker now reflects the engagement.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-04 13:50:37 +00:00
noonghunna 647584ef6d Merge pull request #307 from noonghunna/gemma-4-12b-catalog
Add Gemma-4-12B (gemma4_unified) — 256K all-engine; vLLM 256K+MTP via vendored p-RoPE overlay
2026-06-04 17:49:29 +05:00
noonghunnaandClaude Opus 4.8 d11f29dcf6 docs(WSL_SETUP): add 'Expose the API to your local network (LAN)' section
WSL2 NAT gotcha: binding 0.0.0.0 (or BIND_HOST) only reaches the WSL2 VM IP, not the
Windows host LAN IP; launch.sh's 'localhost:8020' is a cosmetic display string, not the
bind. Fix on the Windows side: (A) .wslconfig networkingMode=mirrored (Win11 22H2+,
cleanest), or (B) netsh interface portproxy + a firewall rule (any Windows; WSL IP
changes on reboot). Clarifies .env URL= is the client target, not the server bind.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-04 06:12:54 +00:00
noonghunnaandClaude Opus 4.8 872bb89808 gemma-4-12b vLLM: 256K via vendored gemma4 p-RoPE long-ctx overlay (#39914)
Implemented by Codex (mcp handoff); validated per the checkpoint report (Claude
re-validates live before the PR). Fixes the gemma4_unified prefill crash past 131072:
stock vllm/vllm-openai:gemma4-unified builds the RoPE cos/sin cache from
config.max_position_embeddings (131072), so positions above that index past the
AOT-compiled cache → CUDA device-side assert. Overlay sizes the cache from runtime
max_model_len and purges the stale TorchInductor cache (marker -cache-v2) so a fresh
262144 graph compiles.

- New overlay models/gemma-4-12b/vllm/patches/vllm-gemma4-prope-longctx/ (install.sh +
  guarded diff + README), mounted + install-invoked by both dual composes.
- vllm/gemma-12b + vllm/gemma-12b-mtp default to 262144; registry max_ctx=262144;
  models gemma-4-12b max_ctx_supported=262144; engine vendored_overlays + patches.yml
  (gemma-vllm-gemma4-prope-longctx, verified) + diagnose path hints; UPSTREAM #39914 row.
- Codex live-validated: base NIAH 155K + 200K exact recall @ 262144 (KV 495,924 tok);
  MTP spec-decode survives >131K. Cache shows rand_strided((262144,256/512)).

NOTE: test-compose-registry-disk still red until the single-card slugs are registered
(next commit). Re-test #39914 row: drop overlay when vLLM fixes it upstream.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-04 05:28:40 +00:00
noonghunnaandClaude Opus 4.8 d080757c2d docs(ADDING_MODELS): accommodate Codex registry-onboarding review
Surfaced by the gemma-4-12b registry handoff (Codex review):
- Registry slug prefix != filesystem dir: slugs are vllm/llamacpp/ik-llama/beellama
  (llamacpp, NOT llama-cpp — registry-emit special-cases it). Fixes the slug drift.
- Step 3 engine list: add ik-llama/beellama; ModelProfile engine enum: add beellama.
- ModelProfile schema block flagged ILLUSTRATIVE (family-specific) → point at real
  current profiles (gemma-4-12b/-31b dense-SWA fields, qwen hybrid, MoE) not a flat
  head_dim/attention_type skeleton.
- _entry sample: add status=/status_note= + emoji↔status mapping; llama.cpp-family
  note (drafter=None, kvcalc_key=SKIP); 'Registry entry != default' warning (no
  DEFAULTS row for experimental/preview/upstream-gated).
- Step 4b: broaden vendored-CHAT-TEMPLATE guidance → vendored RUNTIME overlays /
  install_scripts (patches.yml + engine vendored_overlays + compose mount/entrypoint
  + diagnose hint; e.g. the gemma4 p-RoPE fix).
- Guard caveats: test-compose-registry-disk globs disk (untracked scratch composes
  fail it → git ls-files preflight); test-switch-registry-parity engine allowlist.
- Step 6: CalibrationData is vLLM-only (SKIP-key llama.cpp-family entries → BENCHMARKS
  + learnings, no kv-calc anchors).
- Typo: bash → python3 tools/kv-calc.py.

Doc-only; no registry/code touched (those are Codex's in-flight WIP).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-04 05:12:42 +00:00
noonghunnaandClaude Opus 4.8 aff9890720 Wire gemma-4-12b into curated catalog (vLLM gemma4-unified, bf16 + MTP)
Registers the new gemma4_unified 12B model (vLLM PR #44429, merged 2026-06-03) as
catalog slugs vllm/gemma-12b (base) + vllm/gemma-12b-mtp (assistant drafter n=4),
so launch.sh/switch.sh resolve them by slug. Status: experimental.

- ModelProfile (family gemma4-unified; 48L/8 full+40 sliding, 16/8 GQA, head_dim
  256/512, SWA 1024, max_ctx 131072 — past that vLLM CUDA-OOBs, vllm#39914).
- Engine profile vllm-gemma4-unified pins the gemma4-unified PREVIEW image
  (NOT stable v0.22.0, which lacks the arch). Caveat: ephemeral tag — pin a digest
  before any Production promotion.
- Drafter gemma-12b-it-assistant (n=4, 0.85GB), bf16 weights, 2 registry entries,
  no DEFAULTS row (experimental). kv-calc made gemma-4-12b-aware via the shared
  Gemma dense path + measured calibration anchor (384,019 tok / 8.16 GiB @ MTP/TP2/131072).
- ADDING_MODELS.md: name the central registry (compose_registry.py SoT → both
  launchers) explicitly in the intro + path-3.

KNOWN: kv-calc under-predicts the live pool (~204K vs measured 384K tok, -47%) — the
shared Gemma dense formula over-prices gemma4_unified global-layer KV; --calibration
GB-verdict still PASSES (TIGHT). Recorded in the calibration YAML header; refine the
gemma4_unified global-KV model as a follow-up. Guard suite 41/41 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-04 01:17:19 +00:00
noonghunnaandClaude Opus 4.8 960cbf4763 docs(UPSTREAM): track Gemma-4-12B unified 256K large-prefill OOB (vllm#39914)
The new gemma4_unified arch (vllm PR #44429, merged 2026-06-03) advertises 256K
via p-RoPE but config.json caps max_position_embeddings=131072 (official google ==
unsloth mirror). On the gemma4-unified preview image, NIAH is clean to ~124K but a
single-shot prefill past 131072 CUDA-OOB-crashes (vllm#39914 p-RoPE large-prefill);
a YaRN rope_scaling override is ignored (arch reads rope_parameters). Ship 131072 as
the dual default; re-test 256K on #39914 fix / image maturity. Data point added to
the #39914 thread.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-04 00:28:40 +00:00
noonghunnaandClaude Opus 4.8 8f3ae5c62f docs: surface the mandatory compose Profile header to contributors
The Profile (at-a-glance) header + required Status field is gate-tested
(test-compose-status-drift) but was documented only in CLAUDE.md/AGENTS.md
(the agent guide) — the human-contributor surfaces never stated it, so a
submission could omit Status and only fail in CI. Surface the requirement
(link, don't duplicate the schema) on every path:

- CONTRIBUTING: new "Profile header on every compose" rule next to one-per-PR.
- PR template: a "Profile header complete" checkbox for compose PRs.
- ADDING_MODELS Step 3: a "Profile header (mandatory)" subsection.
- BRING_YOUR_OWN §4: a header bullet for contributed composes.

Also reciprocal-link the two onboarding docs: ADDING_MODELS now points paths
1-2 (serve/tune/validate without the catalog) to BRING_YOUR_OWN, framing
itself as the promotion step after a config validates there.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-03 16:38:40 +00:00
noonghunnaandClaude Opus 4.8 3b8e469f9f docs(BRING_YOUR_OWN): BYO models aren't registered — boot composes directly
launch.sh/switch.sh are registry-derived and only resolve cataloged slugs, so
they can't list or boot a BYO model. Make explicit: boot the compose directly
via `docker compose -f <path> up -d` + env, drive evals by endpoint
(--url / MODEL= / URL=) not by slug, and pull.sh emits a standalone compose
(--out) you run directly without registration. switch.sh --list is only for
finding a template to copy.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-03 16:31:19 +00:00
noonghunnaandClaude Opus 4.8 6ddfaca166 docs(BRING_YOUR_OWN): note INT8 KV is a vendored patch, not a stock dtype
Stock vLLM --kv-cache-dtype is only auto/fp8 (FP8 storage-only on Ampere).
The INT8 KV (INT8 per-token-head / PTH) this stack runs is a vendored engine
patch shipped via the int8.yml composes — you get it by using a patched
compose, not by setting a flag. Clarify so a BYO vLLM user doesn't expect
INT8 KV from stock vLLM.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-03 16:28:04 +00:00
noonghunnaandClaude Opus 4.8 a2d0af6053 docs(BRING_YOUR_OWN): split KV-quant guidance by engine
vLLM has a single --kv-cache-dtype for both K and V — no per-stream K/V
split. The -ctk/-ctv asymmetric K-high/V-low + -khad/-vhad pattern is
llama.cpp / ik-llama / beellama only. The prior text presented it as a
general lever, which would send a vLLM user after flags that don't exist.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-03 16:27:08 +00:00
noonghunnaandClaude Opus 4.8 93e6cd807d docs: add BRING_YOUR_OWN — serve/tune/validate your own model
A user-track front door for testing your own model/compose without the
catalog: serve (pull.sh for safetensors / copy-a-compose for GGUF, any
engine, single or dual) → tune with the fast scripts (verify-full /
verify-stress / bench / quality-test --full|--medium) → validate with the
full rebench-full gate (optional for self-use, mandatory for a registry
contribution). Includes a tuning guide: real context ceiling, NIAH, KV
quant (asymmetric K-high/V-low), MTP/DFlash n-sweeps, batch/ubatch, A/B
discipline. Indexed in docs/README user track + a FAQ pointer.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-03 15:52:03 +00:00
noonghunnaandClaude Opus 4.8 aa458bb34a docs(FAQ): fix Copilot LLM Gateway entry — vllm/tools-text retired
The Copilot entry recommended `vllm/tools-text`, deprecated 2026-05-31 with the
rest of the Genesis single-card vLLM family. Rewrote to current reality:
- 2× 3090 → vllm/dual (262K); 1× 3090 → no dedicated ≥48K vLLM tools compose
  remains, raise vllm/minimal's MAX_MODEL_LEN cautiously (single-card KV is tight,
  cf. #35).
- Genesis P68/P69 greeting-stall paragraph reframed as moot — those patches
  aren't in the stable v0.22.0 composes (vllm/dual, vllm/minimal).
- Added the qwen3_coder streaming-tool-call caveat (#145, open) since Copilot
  streams, with the qwen3_xml workaround.
- Kept the low-max_tokens client caveat; cross-linked the new temperature entry.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-03 02:55:38 +00:00
noonghunnaandClaude Opus 4.8 6bc91b5cc5 docs(FAQ): agent stops mid-task → set client temperature to 0.6 (#232)
Adds a FAQ entry for the #232 symptom (Hermes/Cline/OpenHands returns a
one-char/empty reply + finish_reason: stop mid-tool-task). Root cause is
sampling temperature 1.0 (Qwen3.6's model-card default); our composes default
to 0.6 server-side, but a client-sent temperature wins in vLLM, so agent
harnesses inheriting 1.0 must set it in their own provider config. Captures the
fix where a confused user will look instead of reopening #232.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-03 02:35:50 +00:00
noonghunnaandClaude Opus 4.8 f2b9dc2de4 Retract beellama v0.3.0 prose-DFlash "regression" — net-positive on tok/s
A careful tok/s re-test (bench.sh narrative n=5, MEASURED no-spec controls,
three v0.3.0 images: efe856397 / e0663be / 63abcd3) shows DFlash prose is
net-POSITIVE everywhere — Qwen single Q5 +27% (45.7 vs 35.9 no-spec), Qwen
dual Q8 +52% (35.6 vs 23.4), Gemma single Q4 +28-31% (44.6 vs 34.8). The
earlier "v0.3.0-wide prose-acceptance regression (~0.07 AR / net-negative)"
was a DOUBLE error: (1) over-reading the noisy/prompt-dependent acceptance-rate
diagnostic (the same efe856397 image we logged at ~0.07 now reads ~0.32 AR at
the same tok/s — Anbeeld's #288 AR caution was right), and (2) a wrong no-spec
baseline (we'd used ~37; the real dual-Q8 no-spec is 23.4). The new adaptive-DM
HEAD 63abcd3 is neutral (tok/s flat). Build-arch ruled out (a 3090 runs identical
sm_86 SASS from a fat or single-arch binary).

- compose_registry.py: 5 beellama status_notes (measured slugs assert net-positive;
  un-rebenched gemma-duals retract the claim without overclaiming).
- 5 beellama compose Caveats: same correction.
- docs/UPSTREAM.md row 38: regression clause retracted; prose-recovery half of
  the promotion gate dropped.
- BENCHMARKS.md: added the v0.3.0 DFlash-vs-no-spec A/B note (no-spec baselines).
- (learnings/qwen3.6-27b.md + gemma-4-31b.md got dated append-only retractions;
  reported to Anbeeld at discussion #288.)

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-03 01:56:10 +00:00
noonghunnaandClaude Opus 4.8 b7955acab3 docs: deprecate vLLM dual-dflash composes, redirect DFlash to beellama (#297)
DUAL_CARD.md still presented vllm/dual-dflash + dual-dflash-noviz as live
'peak code TPS' recommendations (pick-by-workload table + two sections with
setup steps), and the Gemma dflash row was a dead link (compose removed in
#451). They were pruned 2026-05-31 (superseded by vllm/dual; stranded on a
now-purged nightly). Add deprecation banners + redirect to the maintained
beellama DFlash duals; fix the stale UPSTREAM.md 'recommended DFlash path
today' line. Surfaces the rationale @hlo-world asked for in #297.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-02 12:26:21 +00:00
noonghunna 27b9fe5e45 feat(beellama): release v0.3.0 Q8_K_XL dual composes (experimental) + centralize image pin (#296)
Ships 3 dual-card beellama v0.3.0 Q8_K_XL composes 🧪 experimental for community testing (#288): qwen-mtp-dual :8064, qwen-dflash-dual :8065 (262K), gemma-q8-dflash-dual :8066 (192K); flips the q4ks gemma dual ⏸️🧪. Centralizes BEELLAMA_IMAGE injection (engine install.spec, one-line bump) at Anbeeld's official server-cuda-v0.3.0 tag + adds scripts/beellama-pin-bump.sh (manual, no auto-push). Catalog: q8kxl weights variants, 3 registry entries, beellama-local +mtp_gguf, unsloth-mtp-gguf engine_type fix. Also a stale test-model-default-resolver fix + UPSTREAM.md row 38. Gate 41/41.
2026-06-02 16:35:48 +05:00
noonghunnaandClaude Opus 4.8 cabdf1286b Add Results Card doc — standard format for sharing config results
Three-panel format (Serving · Quality · Takeaways) for posting a config's
measured serving + quality numbers. Spec-dec is its own column; core 8-pack
stays /150 with optional humaneval+/lcb/aider in a separate table. Linked
from the docs index; first instance is the Qwen3.6-27B thinking A/B in #221.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-01 19:04:44 +00:00
noonghunnaandClaude Opus 4.8 44358d135a docs(beellama): correct prose-regression attribution — v0.3.0-wide, not SWA
Qwen3.6-27B dual+single v0.3.0 control: prose acceptance collapses identically
(single 0.085 == dual 0.090), and Qwen is DeltaNet (NOT SWA-windowed) — so the
SWA-mismatch suspect floated for Gemma is a red herring. It's a cross-model
v0.3.0 DFlash-on-prose regression (code unaffected; Qwen dual code 145 TPS).
Multi-GPU DFlash fix confirmed on both model families.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-01 02:09:43 +00:00
noonghunnaandClaude Opus 4.8 8da27fdbdf docs(beellama): record v0.3.0 dual-3090 validation — multi-GPU DFlash fixed
Re-test trigger fired (Anbeeld v0.3.0 dev branch). Validated on 2x3090:
multi-GPU DFlash crash + --spec-draft-device CUDA0 abort FIXED; code DFlash
~157 TPS (4.2x no-spec). Two residual issues, neither multi-GPU: prose
acceptance regressed to ~0.07 (v0.3.0-wide, single==dual) and MTP unsupported
(gemma4_mtp arch). Compose stays parked pending a tagged release + prose fix.
Filed PR Anbeeld#48; published multiarch v0.3.0 image; reported #288 + beellama #39.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-01 01:56:24 +00:00
noonghunna 8e7f5a87a5 feat(gemma): gemma duals → vLLM v0.22.0 (rebase #40391 lean + re-instate #42006) (#287)
Both gemma duals on immutable v0.22.0. int8-mtp = #40391 (rebased, lean diff-apply) + #42006; bf16-mtp = #42006. #40391 rebased onto v0.22.0 (old full-module copies ImportError'd) + re-delivered as install_script diff (−13K lines). #42006 streaming-multi-tool fix re-instated on both (live-repro'd: streamed multi-tool dropped non-last args). Dropped #41800/#41991 (in stock v0.22.0); fixed stale #41800 patches.yml entry. int8 default 98K→262K. Engine-profile-injection gotcha documented in CLAUDE.md. Validated on real v0.22.0 (docker-inspect): int8 pool 447K@262K bench 95.7/125.8, bf16 pool 195K@131K, streaming multi-tool keeps all args on both. Suite 41/41.
2026-06-01 01:21:51 +05:00
noonghunna b327f0311a refactor(gemma): rename dual slugs + ladder gemma-bf16-mtp to 131K (#286)
Rename vllm/gemma-int8→gemma-int8-mtp + vllm/gemma-mtp→gemma-bf16-mtp (both carry MTP n=4; only KV format differs); kv-calc alias fix. Ladder gemma-bf16-mtp default 32K→131K (measured BF16 KV pool 196,527 tok @ 0.95; verify-stress 8/8, NIAH→120K, bench 118.8/154.3, zero TPS regression). Codify the dual-card max-context-priority rule in DUAL_CARD.md. Suite 41/41.
2026-06-01 01:20:46 +05:00
noonghunna 611c430f0a beellama Gemma-4 ctx: single 128K (caveats) + dual 262K parked/upstream-gated (#284)
Single beellama/gemma-dflash 128K (caveats; 140K OOMs under load, CTX_SIZE=102400 agent-safe). New dual beellama/gemma-dflash-dual parked upstream-gated (262K works but DFlash multi-GPU broken in 07ac3ce; fixes on v0.3.0 dev branch, no release). switch.sh --list hides upstream-gated (parked) like deprecated with its own note. UPSTREAM row tracks Anbeeld #39. Suite 38/38.
2026-05-31 21:57:11 +05:00
noonghunna 4ff14090c9 Gemma vLLM -> v0.22.0: bump dual gemma-mtp, deprecate gemma-mtp-tp1 (#278)
Bump vllm/gemma-mtp (dual, bf16+MTP) to stable v0.22.0 (validated 5/5 coherent). Deprecate vllm/gemma-mtp-tp1: fp8 KV is hardware-impossible for Gemma 4 on Ampere sm_86 (fp8e4nv kernel unsupported; fp8_e5m2 rejected by gemma4 attention allowlist; nvfp4 Blackwell-only), live-confirmed on v0.22.0. Remove the dead DEFAULTS[(gemma-4-31b,vllm,single)] row; repoint launch/setup/preflight single-card Gemma -> beellama/gemma-dflash. Also fixes a pre-existing unterminated NEXT_STEPS_NOTE string in setup.sh's gemma-4-31b arm. Suite 38/38.
2026-05-31 07:13:17 +05:00
bca55e54f2 Deprecate Genesis vLLM composes; vLLM single default → vllm/minimal (#276)
* Deprecate Genesis vLLM composes; repoint vLLM single default to vllm/minimal

Mark all 8 Genesis-loading qwen3.6-27b vLLM composes deprecated (registry
status + compose-header Status): vllm/default, vllm/long-text, vllm/long-text-no-mtp,
vllm/long-vision, vllm/bounded-thinking, vllm/tools-text, vllm/dual-turbo,
vllm/dual-tq3-mtp-genesis. Genesis is on hold pending Sandermage's next stable
release; the stack is moving to stable vLLM + beellama single-card.

Repoint DEFAULTS[(qwen3.6-27b, vllm, single)]: vllm/default -> vllm/minimal (the
Genesis-free fp8-KV config). The `vllm/default` token now resolves single ->
vllm/minimal, dual -> vllm/dual. The model single-card default stays beellama/dflash.

Resolver guard tests updated (vllm/default single -> vllm/minimal); SINGLE_CARD.md
example commands redirected off the deprecated slugs. Suite 38/38.

Follow-ups: (1) bump vllm/minimal + vllm/dual to v0.22.0 (Genesis-free -> stable);
(2) SINGLE_CARD.md narrative reframe (single-card vLLM deprecated, beellama default).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

* switch.sh --list: hide deprecated by default, reveal with --all

With 9 Genesis composes now deprecated, --list was cluttered. Hide deprecated
variants from the default --list (tally + display loops); --all reveals them
alongside other-topology variants. Footer shows "(+N deprecated hidden --all)"
so they stay discoverable, never silently dropped.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>

---------

Co-authored-by: noonghunna <[email protected]>
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-31 06:09:01 +05:00
662122b05d Promote beellama/gemma-dflash to single-card Gemma-4-31B default (#272)
Gemma single-card had NO functional default (vLLM single is upstream-gated at
head_dim=512; ik-llama walls ~24K; stock llama.cpp ~12 TPS). beellama is the
only viable fast single-card Gemma-4 path, so promote it to fill the gap.

Registry: beellama/gemma-dflash experimental -> caveats + new
DEFAULTS[(gemma-4-31b, beellama, single)]. Resolver now returns it for Gemma
single (beellama is #1 in ENGINE_PREFERENCE[single]); Gemma dual unchanged.

Validated #441: 131-200K ctx, 47/88 TPS, 8-pack 109/150 think-off /
114/150 think-on (reasoning net-positive on Gemma). Reuses the multi-arch
image from #271 (sm_86/89/120; sm_89/120 compiled-not-validated).

Docs: compose header (caveats + Quality + ctx ceiling), README Gemma row,
BENCHMARKS row marker + intro, UPSTREAM.md row. Resolver guard test flipped
from a degradation assertion to beellama/gemma-dflash; full suite 38/38.

Re-test trigger: re-point the default to the no-fork mainline path when
llama.cpp#23398 (Gemma-4 MTP) merges (docs/UPSTREAM.md).

Co-authored-by: noonghunna <[email protected]>
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-31 03:23:50 +05:00
2b671d0552 Promote beellama/dflash to single-card Qwen3.6-27B default (#271)
Make `beellama/dflash` the single-GPU default for Qwen3.6-27B, served via
an unofficial multi-arch image, and demote ik-llama to the balanced alt.

Decision basis (single-3090, 370 W; bench.sh n=5 + quality-test --full):
- Code TPS ~100 vs ik 69 — fastest single-card 3090 code path.
- 8-pack 107/150 (71%) think-off vs ik 99/150 (66%); 113/150 think-on
  (same-session). DFlash is output-lossless, so quality == the Q5_K_S target.
- Context ceiling ladder (measured): 130K comfortable, 160K usable
  (115K-tok prefill OK, 0.8 GB headroom), 200K boots but OOMs on prefill.
  Ships 102K default; raise to 160K via CTX_SIZE.
- ik still wins narrative TPS (63), VRAM, and shipped vision — kept as the
  balanced alt (`--variant ik-llama/iq4ks-mtp`).

Registry: `beellama/dflash` experimental -> caveats + a new
DEFAULTS[(qwen3.6-27b, beellama, single)] row. beellama is already #1 in
ENGINE_PREFERENCE[single], so the resolver now returns it for Qwen single.

Image: unofficial multi-arch ghcr build
`beellama-cpp:multiarch-b9459-07ac3ce` (sm_86/89/120 = RTX 3090/4090/5090),
built from Anbeeld/beellama.cpp .devops/cuda.Dockerfile with
CUDA_DOCKER_ARCH="86;89;120" + GGML_CUDA_FA_ALL_QUANTS=ON. Engine reports
`ARCHS = 860,890,1200`; cuobjdump confirms all 3 SASS. CAVEAT: sm_89/sm_120
are compiled but UNVALIDATED — only sm_86/3090 is verified on-rig.

Also bumps the gemma beellama compose to the same multi-arch image (stays
experimental — not promoted). Docs: README single-card framing,
INFERENCE_ENGINES.md, UPSTREAM.md row, BENCHMARKS.md Qwen beellama row.
Resolver guard tests flipped to the new default; full suite 38/38.

Co-authored-by: noonghunna <[email protected]>
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-31 03:07:31 +05:00
229d27701c chore(beellama): default to published ghcr image (sm86-b9459-07ac3ce) (#270)
Now that the unofficial sm_86 image is published + public on GHCR, flip the two
beellama composes' BEELLAMA_IMAGE default from the local-only beellama-cpp:local
to ghcr.io/noonghunna/beellama-cpp:sm86-b9459-07ac3ce (immutable commit-pinned
tag) — so 3090 users pull-and-run instead of building. Update caveats/quickstart
+ INFERENCE_ENGINES/UPSTREAM docs (pull for sm_86, build for other arches via
BEELLAMA_IMAGE override). Status stays experimental: the resolver still skips
(NA), so ik-llama remains the single-card default — no behavior change — pending
cross-rig validation before promotion.

Co-authored-by: noonghunna <[email protected]>
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-30 23:21:55 +05:00
d2e63b06b6 feat(beellama): add beellama.cpp DFlash as first-class compose engine (#268)
Onboards Anbeeld's llama.cpp fork (beellama.cpp) as a registry engine
with two single-card DFlash composes, both experimental pending a
published Docker image:

  - beellama/dflash       Qwen3.6-27B  Q5_K_S + Anbeeld DFlash-IQ4_XS,
                          q5_0/q4_1 KV, 102K ctx, port 8060
  - beellama/gemma-dflash Gemma-4-31B  Q4_K_S + Anbeeld DFlash-IQ4_XS,
                          q5_0/q4_1 KV, 102K ctx, port 8061

Composes reference the locally-built ${BEELLAMA_IMAGE:-beellama-cpp:local}
(entrypoint /app/llama-server) — upstream ships no pullable image, so
they ship as Status: Experimental and surface as (NA: experimental) in
--list (launch is --force-gated). Configs follow the fork's quickstart
docs (Qwen "Precision combo", Gemma "Balanced combo"), deviating only on
the stack-wide --reasoning off default.

Catalog wiring: engine profile beellama-local.yml; two DFlash GGUF
drafters (anbeeld-qwen-dflash, anbeeld-gemma-dflash); compose_registry.py
entries with kvcalc_key="SKIP" (llama.cpp-family, like ik-llama);
weights-map entries (target + draft GGUFs) on both models; q4_1 added to
rtx-3090 supported KV; INFERENCE_ENGINES + UPSTREAM notes; test counts
bumped (engines 8->9, drafters 6->8, registry 45->47, disk 46->48).

Default-resolver invariant preserved: beellama is #1 in
ENGINE_PREFERENCE[single], but its (NA) status + no DEFAULTS row means
the resolver skips it, so qwen3.6-27b single still resolves to
ik-llama/iq4ks-mtp (asserted by test-model-default-resolver.sh). It
auto-promotes only when a published image lands and the composes flip to
production. Full catalog suite green (only the pre-existing
test-submit-bench.sh fixture failure remains).

Co-authored-by: noonghunna <[email protected]>
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-30 22:47:19 +05:00