Commit Graph
44 Commits
Author SHA1 Message Date
noonghunnaandClaude Opus 4.8 eb81c5f0af profiles: wire hf_repo for 5 verified weight variants
Fill in the HuggingFace source repo for five weight variants that had no direct
download recipe (were "manual"), each verified live against the HF API:
  - gemma-4-31b:bf16          → google/gemma-4-31B-it
  - qwen3.6-27b:awq           → cyankiwi/Qwen3.6-27B-AWQ-INT4
  - qwen3.6-35b-a3b:gptq_int4 → palmfuture/Qwen3.6-35B-A3B-GPTQ-Int4
  - qwen3.6-35b-a3b:dflash    → z-lab/Qwen3.6-35B-A3B-DFlash
  - qwen3.6-35b-a3b:dflash_gguf → abhinand/Qwen3.6-35B-A3B-DFlash-GGUF

These are now fetchable via `WEIGHT_KEY=<model>:<variant> bash scripts/setup.sh
<model>` (and, once a compose adopts them, one-click in the c3 Download UX).
Weights-registry tests green.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-22 02:06:14 +00:00
noonghunnaandClaude Opus 4.8 79173b12d5 Record measured pi-reasoning rebench-full results + BENCHMARKS row
Full rebench-full (--with-8pack-thinking=both) completed 2026-06-18 for
llamacpp/qwen27b-pi-reasoning-single. Replaces the earlier inferred "≈ base
50/59 @370W" note (+ the PENDING-ladder caveats) with the measured numbers, and
adds the BENCHMARKS.md single-card row.

- Bench @370W: 47.9/55.3 decode narr/code (n=5, CV<2%); @230W cap 28.5/32.9.
- verify-stress 8/8 (NIAH->183K), 8-pack 104/150 off / 106/150 on, soak PASS
  (0 MiB growth, 0/100 silent-empty, p50 54.5, 102% retention).
- MTP head NOT weaker than base: matched-power A/B dead-even (73% vs 72% accept);
  47.9/55.3 @370W ~on par with base 50.3/58.9. Power-sensitive (mainline -42%
  370->230W) — the earlier "slow" 28/33 was the rig's 230W cap, not the model.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-18 02:23:00 +00:00
noonghunnaandClaude Opus 4.8 78c4038850 Correct pi-reasoning bench framing: 230W power-cap artifact, MTP head ≡ base
The merged llamacpp/qwen27b-pi-reasoning-single docs claimed its embedded MTP
head was "~45% below base / weaker" — that was a power-cap measurement artifact,
not a model property. A matched-power A/B (230W, same engine/KV/n=2/prompt) shows
the head performs IDENTICALLY to the base Qwen3.6-27B MTP head: 73% vs 72% draft
acceptance, 41.2 vs 41.2 t/s. The base llamacpp/default 50.3/58.9 figure I
compared against is a 370W BENCHMARKS number; mainline is -42% from 370->230W, so
the comparison was only valid at matched power (cf. the ik-llama/iq4ks-mtp
BENCHMARKS row, which documents exactly this trap). The 28.5/33.4 decode numbers
are correct AS 230W measurements; at 370W this config matches base's 50/59.
Corrected the status_note, compose header, and weights manual_note.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-17 23:46:31 +00:00
5da4eab12e Add llamacpp/qwen27b-pi-reasoning-single (Qwen3.6-27B Pi-style coding agent, mainline llama.cpp + MTP) (#425)
bytkim/Qwen3.6-27B-MTP-pi-reasoning Q4_K_M GGUF (embedded MTP head) — a "Pi-style"
reasoning-supervised CODING / terminal-agent fine-tune — on MAINLINE llama.cpp
(server-cuda-b9246, PR #22673), single 3090, q4_0/q4_0 KV + MTP, reasoning-ON.

- New compose: models/qwen3.6-27b/llama-cpp/compose/single/pi-reasoning-q4km/mtp.yml
- Registry slug llamacpp/qwen27b-pi-reasoning-single (experimental, port 8063).
- Weights entry pi-reasoning-q4km; drafter qwen-mtp-builtin (spec_method mtp).

CONFIG FOLLOWS THE MODEL CARD: temp 1.0 / top-p 0.95 / top-k 0 / min-p 0 (NOT the
stack's 0.6/20), reasoning ON, q4_0/q4_0 KV, --jinja -ngl 99 -fa. Card recommends
MTP n=3; on-rig A/B found n=2 marginally faster (within noise) — kept n=2,
MTP_DRAFT_N_MAX=3 matches the card. presence-penalty 1.5 is a documented knob for
the card's DIRECT/instruct (REASONING=off) mode.

CONTEXT (measured 2026-06-17, GPU0/GPU1): default 200K-alloc fills ~188K usable with
correct needle recall (22.7 GB / ~1.8 GB free; ~23 t/s decode at ~188K depth). Do NOT
alloc 262K — the FA scratch grows with the allocation, so 262K OOMs at ~176K (LESS
usable than 200K); full 262K usable is beellama-only. Author tested only 128K, so
128-188K is engine-proven but past the card's validated window (CTX_SIZE=131072 for
strict compliance).

BENCH (canonical bench.sh n=3, thinking-off, short-prompt): narrative 28.5 wall / 28.7
decode, code 32.9 / 33.4, PP 743 tok/s — ~45% below base llamacpp/default (50/59) on
identical engine/KV/MTP, i.e. this fine-tune's embedded MTP head is weaker. Engine A/B:
mainline ~25% faster than a beellama q4_0/q4_1 path → mainline chosen. Stays
experimental (--force): verify-stress / soak / quality ladder pending.

Co-authored-by: noonghunna <[email protected]>
Co-authored-by: Claude Opus 4.8 <[email protected]>
2026-06-18 03:56:28 +05:00
noonghunnaandClaude Opus 4.8 d3cacfad0c feat(vibethinker-3b): add llamacpp/vibethinker-3b-single (Q8, incubating)
The performance-max VibeThinker path — prithivMLmods Q8_0 GGUF on mainline
llama.cpp, single 3090, q8_0 KV, full 131K, -b 4096 -ub 2048. A sibling to
the vLLM bf16 compose (#418), and the better one on every axis.

Why it's better than the vLLM sibling:
- ~166 TPS decode (vs ~110 vLLM bf16), ~6.2 GB at full 131K (vs ~9.8 GB),
  prefill ~6,630 tok/s (-b 4096/-ub 2048 = +20%), boot ~9s.
- Q8_0 is near-lossless → quality INTACT, where vLLM's fp8 weight-quant broke
  this quant-sensitive 3B (non-terminating empty output). KV quant is fine
  (storage-only); fp8 *weights* are the problem.

Validated 2026-06-16 (tool-free packs, temp 0.6, thinking-on):
  gsm-symbolic-30 100% · instructfollow-15 100% · reasonmath-15 80% ·
  structoutput-15 80% · dataextract-15 40%.
  dataextract is a genuine extraction ceiling — full temp sweep {0:27%,
  0.6:40%, 1.0:27%} can't lift it (value mismatches persist). A reasoning
  specialist, not an extractor. No tool-calling. verify-full 5/9 by design.

Wiring: registry entry + dense-family added to llama-cpp-local engine +
prithivmlmods-q8 weights variant + disk/registry counts (51/52). No MTP head
in the GGUF (plain qwen2 conversion) → no spec-dec. Guard suite 47/47.

Status: 🐣 incubating (hidden from switch.sh --list; --force to launch).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-16 19:53:05 +00:00
noonghunnaandClaude Opus 4.8 35a69650fe feat(catalog): add 🐣 Incubating status tier + VibeThinker-3B (incubating)
Introduce a new pre-experimental status tier, `incubating`, for composes that
work but aren't ready for the actionable list — niche specialists or models
that fail the standard functional gate by design. Incubating composes are
HIDDEN from `switch.sh --list` by default (revealed by `--list --all`) and
launch-gated behind `--force` (non-functional), so a half-validated model is
catalogued and discoverable without cluttering the recommended set.

Tier wiring (reuses the existing status plumbing — no new emit column):
- compose_registry.py: `incubating` in STATUS_VALUES + `🐣` in COMPOSE_STATUS_EMOJI
  (stays out of FUNCTIONAL_STATUSES → --force-gated, never auto-defaulted)
- switch.sh: both --list filters skip incubating unless --all, with a
  `(+N incubating hidden — --all)` header note
- AGENTS.md: Status enum row + Caveats-required references
- docs/ADDING_MODELS.md: new rule — NEW MODELS START at 🐣 Incubating, promote
  up the enum (🐣 → 🧪 → ⚠️/✅) as they earn the actionable list

First occupant — VibeThinker-3B (WeiboAI, Qwen2 dense reasoning fine-tune):
- `vllm/vibethinker-3b-single` — bf16 weights + fp8_e5m2 KV, single 3090,
  full 131072 ctx, mem_util 0.40 (~9.8 GB, single-concurrency sized),
  --reasoning-parser qwen3, no tool-calling
- Live-validated 2026-06-16: serves clean correct reasoning/code (~110 TPS),
  qwen3 parser splits <think>. fp8 WEIGHTS rejected (break the quant-sensitive
  3B: non-terminating empty output). Always-reasoning + no-tools → fails
  verify-full's fixed-small-budget checks (5/9) by design → incubating, not gate-passing.

Guard suite 47/47 green (nex-n2-mini parked aside; it's an unrelated local experiment).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-16 15:03:06 +00:00
noonghunnaandClaude Opus 4.8 186ab9b2b6 feat(qwen3.6-27b): add beellama/carnice-v2-dual-q8-mtp dual compose (#403)
Dual-GPU Carnice-V2-27B Q8_0 + embedded MTP head on beellama v0.3.2-preview
(layer-split -ts 0.55,0.45, q8_0/q8_0 KV, 262K). The dual / quality-max
follow-through requested in discussion #403.

Validated via rebench-full (2026-06-16, 2x 3090 PCIe):
- bench n=5: narr 40.7 / code 44.0 decode TPS, TTFT ~79 ms, PP 1197 t/s
- verify-full all-pass; verify-stress 8/8 (NIAH ladder -> 240K)
- soak fresh 20x5 PASS (0 growth, 0/100 silent-empty, p50 42.2, 100% retention)
- 8-pack think-OFF 103/150 / think-ON 105/150 (wash; in-band vs qwopus-coder)

Key decisions (measured A/Bs, captured in compose header + learnings):
- q8_0 KV over the requested kvarn6: +17% prefill (1003 vs 860 t/s; escapes
  KVarN software-compression compute, q4=q8=1004 so it's the path not the
  bit-width), higher fidelity, reference-aligned, fits 262K on dual. KVarN's
  compression only pays off on a tight single card.
- MTP-only; DFlash ruled out (only base-27B drafters exist -> ~10% accept on
  the fine-tune; no Carnice-matched drafter).
- n=2 = +13% validated opt-in (DRAFT_N_MAX=2); n=1 default.
- -b/-ub/--no-mmap A/B'd flat -> KV type was the only prefill lever.

Status: experimental (beellama v0.3.2 is a rolling pre-release; #455 un-park gate).

Catalog wiring: registry entry + qwen3.6-27b.yml carnice-v2-q8 weights variant
+ disk-count bump. Full guard suite green (47/47).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-16 11:57:35 +00:00
8c3c0cb40f Pin hauhaucs-35ba3b-dual weights to morikomorizz commit 49a080d (#319) (#413)
First use of the new `revision:` lever (#408). Pins the
morikomorizz/Qwen3.6-35B-A3B-Uncensored-HauhauCS-MTP fetch to commit
49a080db7406cd98f94f0f2a18539bbcc1520444 — the exact bytes the BENCHMARKS
row and #411 Results Card were measured against.

Verified: repo last-modified 2026-06-10 predates our 2026-06-14 download,
and the HF x-linked-etag at this sha equals our local file's sha256
(76a0d4c2...). weights.py round-trips revision: -> WEIGHT_REVISION; guard
suite green. Guards against a silent upstream re-quant (the #316 class).

Co-authored-by: noonghunna <[email protected]>
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-15 06:50:20 +05:00
2abe025513 Add llamacpp/hauhaucs-35ba3b-dual uncensored MTP compose (🧪) (#410)
Wires morikomorizz/Qwen3.6-35B-A3B-Uncensored-HauhauCS-MTP (Q6_K_P GGUF
with an embedded nextn MTP head) as a dual-card mainline llama.cpp b9570
compose: -ts 0.55,0.45, q8_0 KV, MTP n=3, 262K, reasoning-on by default.

The MTP head loads clean on mainline ("speculative decoding context
initialized") — the prior HauhauCS-MTP ret=-3 was an ik-llama/older-build
issue, not the model arch. The -ts 0.55,0.45 split rebalances the MTP draft
card (even 1,1 skews ~3 GB at 262K).

Validated 2026-06-14: verify-stress 8/8 (NIAH ceiling ladder -> 240K),
bench.sh n=3 @262K (narr 113.4 / code ~150 decode TPS, CV<1%), soak fresh
20x5 PASS (0 growth, 0/100 silent-empty, p50 162.4, 99.6% retention),
8-pack think-OFF 103/150 / think-ON 105/150 (wash). n=3 vs n=1 @262K =
-9% prose / +10% code (code-leaning default by request; n=1 prose-best via
MTP_DRAFT_N_MAX=1).

Status 🧪 Experimental: community GGUF (digest-unpinned) + uncensored.
No DEFAULTS row — opt-in only. Guard suite green.

Co-authored-by: noonghunna <[email protected]>
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-15 06:28:08 +05:00
87a6dbb924 Add Carnice-V2-27B beellama single-card compose (beellama/carnice-v2-single-q5km-mtp) (#406)
* Add Carnice-V2-27B beellama single-card compose (beellama/carnice-v2-single-q5km-mtp)

stuchapin Carnice-V2-27B Q5_K_M GGUF (kai-os/Carnice-V2-27b, a Hermes-style agentic
SFT of Qwen3.6-27B) with embedded MTP head, on beellama v0.3.2-preview KVarN — single
3090, kvarn4/kvarn4 KV, MTP n=1, reasoning-on default.

Validated 2026-06-14 (rebench-full, reasoning-on): engine-compat PASS (beellama loads
the PR#22673-fused GGUF — the card's "mainline fails to load" does not apply),
verify-stress 8/8 (NIAH clean to 150K), soak PASS (0-growth, 0/100 silent-empty,
100.5% retention), bench 46.8/50.5 TPS narr/code, MTP accept ~94%. 8-pack reasoning-on
110/150 — beats sibling beellama/qwopus-coder 103/150 (edge is agentic/instruct).

- compose: models/qwen3.6-27b/beellama/compose/single/carnice-v2-q5km/mtp-kvarn4.yml
- drafter profile: scripts/lib/profiles/drafters/carnice-mtp-gguf.yml (n_default/n_max=1
  — mtp_num_hidden_layers=1; author warns n=3 is wrong)
- weights_variant carnice-v2-q5km + compose_registry entry (port 8068, kvcalc SKIP)
- bump test count assertions (registry 47, disk 48, drafters 11)

Stays experimental (beellama v0.3.2 is a rolling pre-release, the #455 engine gate),
not for any quality reason. n=1 is the card-faithful default; n=2 is a documented
+12%-TPS opt-in (DRAFT_N_MAX=2, does not crash on our single-card kvarn4) pending a
dedicated soak.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

* setup.sh: add WEIGHTS=carnice-v2 fetch knob for beellama/carnice-v2-single-q5km-mtp

UX parity with WEIGHTS=qwopus-coder — maps to qwen3.6-27b:carnice-v2-q5km so
`WEIGHTS=carnice-v2 bash scripts/setup.sh qwen3.6-27b` fetches the GGUF.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

---------

Co-authored-by: noonghunna <[email protected]>
Co-authored-by: Claude Opus 4.8 <[email protected]>
2026-06-14 17:04:47 +05:00
520f5b909b catalog: add beellama/qwopus-coder (Qwopus3.6-27B-Coder, KVarN-4) — first KVarN compose (#391)
* catalog: add beellama/qwopus-coder (Qwopus3.6-27B-Coder, KVarN-4) — first KVarN compose

Wires the Qwopus3.6-27B-Coder Q5_K_M GGUF (Jackrong, embedded MTP head) into
the curated catalog on beellama + the new KVarN-4 KV format. Single 3090,
kvarn4/kvarn4 @ 160K + MTP (230K no-MTP env opt-in). 🧪 experimental (--force),
gated on the v0.3.2-preview KVarN engine build (digest-pinned, merged earlier).

- engines/beellama-local.yml + hardware/rtx-3090.yml: register `kvarn4` KV format
- drafters/qwopus-mtp-gguf.yml: embedded-MTP-GGUF drafter (Jackrong)
- models/qwen3.6-27b.yml: qwopus-coder-mtp-q5km weights entry (Jackrong GGUF)
- compose_registry.py: `beellama/qwopus-coder` slug (kvcalc_key SKIP, port 8067)
- compose mtp.yml: git-tracked; image fallback → the KVarN digest (the v0.3.0
  multiarch fallback rejects kvarn*)
- setup.sh: `WEIGHTS=qwopus-coder` fetch knob
- bump stale count asserts (drafters 9→10, registry 45→46, disk 46→47)

Validated 2026-06-12 (sm_86): embedded MTP loads, verify-full all-pass, NIAH
@72K = q5_0/q4_1 control, bench ~46/58 TPS (KVarN decode-neutral), 8-pack
104/103 ≈ q5_0/q4_1 102/107 (quality-neutral; disc #329). scripts/tests/*.sh
green in a clean tree (the lone test-compose-registry-disk red is pre-existing
untracked nex-n2-mini WIP, #473 — not in this commit). pending soak.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

* qwopus-coder: soak PASS + launcher-path validated — drop pending-soak note

Launcher path (switch.sh beellama/qwopus-coder --force → KVarN digest injected →
kvarn4 boots → serves :8067) + verify-full all-pass + soak-continuous PASS
(0 MiB growth, 0/25 silent-empty, 100% TPS retention). Stays 🧪 (pre-release
engine); full verify-stress NIAH ladder is the only gate left for ⚠️ promotion.

Co-Authored-By: Claude Opus 4.8 <[email protected]>

---------

Co-authored-by: noonghunna <[email protected]>
Co-authored-by: Claude Opus 4.8 <[email protected]>
2026-06-13 03:27:58 +05:00
noonghunnaandClaude Opus 4.8 eae0e36f81 setup: fix fp8 weights nits after #369 (typo, help string, manual_note)
Follow-up cleanup to the merged #369:
- error message said "WEIGHTS=ft8" → "WEIGHTS=fp8"
- the unrecognized-WEIGHTS help string now lists 'fp8'
- the fp8 entry's manual_note said "no direct pull recipe wired" — now
  that hf_repo is set, document the WEIGHTS=fp8 setup.sh path (hf-download.sh
  kept as the stall-resistant manual option for the 29 GB layer-split repo)

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-12 11:08:36 +00:00
hlo-world 64821ac4a4 chore: make setup script work with WEIGHTS=FP8 and qwen3.6-27b (#369) 2026-06-12 16:07:02 +05: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 93acbf979f Promote Deckard-40B to ✅ Production; fix arch + slug naming
The arch-confirm blocker named in the 🧪 status note is resolved: the GGUF
header reports general.architecture=qwen35 (standard GQA, 97 layers), NOT the
Qwen3-Next/DeltaNet hybrid the original scaffold guessed. Corrected the profile
to family=qwen35-dense and dropped the fictional GDN/linear-attention fields.

Fixes found while correcting the profile:
- Restored the required `attention_k_eq_v: false` field (compat.py reads it with
  bracket notation — dropping it broke load_profiles for the whole catalog).
- Fixed a duplicate-key bug in the weights block: a second `hf_repo:` (DavidAU
  base, no MTP head) shadowed PiehSoft's MTP GGUF under yaml.safe_load
  last-key-wins — setup.sh would have fetched the wrong, head-less repo.
- Added qwen35-dense to llama-cpp-local supported_model_families (the C10 gate).

Renamed the weights slug mtp-q6k → piehsoft-q6k to follow the provider-quant
idiom used by every other GGUF compose (ubergarm-iq4ks, unsloth-q4km,
byteshape-iq4xs) and to drop the redundant mtp in mtp-q6k/mtp.yml. The serving
filename stays mtp.yml (KV isn't encoded in GGUF-engine filenames). Renamed the
compose dir + on-disk weights dir + all path references in lockstep.

Validation (2× 3090, server-cuda-b9570): verify-full 8/8, verify-stress 8/8
(ceiling ladder filled to 120K / 91% of n_ctx, 0 MiB VRAM growth, needle recall
clean through 90K), 8-pack 105/150 with MTP off==on (spec-dec lossless),
soak-continuous PASS. Guard suite 42/0.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-10 00:38:15 +00:00
noonghunnaandClaude Opus 4.8 d6725faf02 Deckard-40B: fix provenance — GGUF is PiehSoft's, wire hf_repo fetch
The MTP-injected GGUF is NOT a local build (the scaffold's comment was wrong) —
it's published at PiehSoft/Qwen3.6-40B-Deckard-MTP-Q6_K. Wire hf_repo + files so
setup.sh/launch.sh auto-fetch it, and correct the compose/profile comments.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-09 23:04:14 +00:00
noonghunna 5dafaa61fe feat: add Qwen3.6-40B-Deckard to catalog (llamacpp/deckard40B-dual-mtp)
Dense 40B uncensored Qwen3.6 community merge, dual-3090 llama.cpp with
embedded MTP head (Q6_K GGUF, 31 GB). First dual llama.cpp compose in
the catalog; first 'category' field in the registry (uncensored).

Changes:
- Compose: models/qwen3.6-40b-deckard/llama-cpp/compose/dual/mtp-q6k/mtp.yml
  Status: 🧪 Unverified (quality /150 + soak pending)
  Config: -ngl 99 -ts 1,1 -fa on --spec-type draft-mtp --spec-draft-n-max 2
          --cache-type-k q8_0 --cache-type-v q8_0 -c 131072
- Registry: llamacpp/deckard40B-dual-mtp (category=uncensored, experimental)
- DEFAULTS: (qwen3.6-40b-deckard, llamacpp, dual) → slug
- Model profile: scripts/lib/profiles/models/qwen3.6-40b-deckard.yml
- Drafter: qwen-mtp-builtin model_compat extended with qwen3.6-40b-deckard
- LiteLLM route: deckard-40b → :8199
- launch.sh: suggest_default_variant case for Deckard
- BENCHMARKS.md: new section with validated MTP n=2 numbers
- Test fixtures: registry count 43→44, disk 44→49, models 5→6

Wrinkle decisions (see PR description):
1. Dual llama.cpp: uses 'count: all' + '-ts 1,1' (tensor-split layer-split),
   matching the validated serving config. No launcher changes needed — the
   compose's deploy section handles GPU reservation directly.
2. Engine pin: uses rolling server-cuda tag (matching engine profile spec),
   not the b9246 pin other composes use. The validated build (2026-06-09
   digest 1c4ff61a) is newer than b9246 and has draft-mtp working. No engine
   pin bump for other models.

NOT DONE (live validation — GPUs busy with quality eval):
- Boot/bench/soak/quality NOT run — maintainer to validate post-eval
- Status stays 🧪 until full gate passes
2026-06-09 21:59:13 +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
d77d4acfac Add Qwen3.6-27B fast/max tiers across dual + multi4 (4 slugs) (#340)
A symmetric 4-slug family for the Qwen vLLM path:
  *-fast = AutoRound INT4 + fp8_e5m2 KV  (peak TPS, the proven path)
  *-max  = official FP8     + int8-PTH KV (higher fidelity @ 262K)

Slugs:
  vllm/qwen-27b-dual-fast   alias of vllm/dual (AutoRound INT4, TP=2) — production
  vllm/qwen-27b-dual-max    FP8 + int8-PTH, TP=2 — 🧪 live-validated 2026-06-07
  vllm/qwen-27b-multi-fast  AutoRound INT4, TP=4 — 🧪 cross-rig (dual is the proxy)
  vllm/qwen-27b-multi-max   FP8 + int8-PTH, TP=4 — 🧪 cross-rig (dual-max is the proxy)

dual-max validated live on this 2-card rig: FP8 weights load via MarlinFP8
W8A16 on Ampere sm_86, int8_per_token_head KV keeps the full 262K (KV pool
295K tok / 1.13x concurrency), MTP n=3 active, coherent. The multi4 configs
are byte-identical to their dual sibling apart from TP + gpu-count, so they
ship Experimental until a real >=4x 3090 host validates them (this dev rig
has 2 cards). No multi4 DEFAULT added — the resolver degrades to vllm/dual
(honest; no model carries a multi default), and the slugs stay reachable by name.

Catalog wiring:
- models/qwen3.6-27b.yml: new fp8 weights_variant (official e4m3 release,
  layer-split safetensors + embedded mtp.safetensors + vision tower)
- vllm-stable.yml: + fp8 weight format (Marlin W8A16 on Ampere) and
  + int8_per_token_head KV — NATIVE on stock v0.22.0 for uniform-head-dim
  models (qwen3-next); features flag stays false (no overlay, unlike Gemma's
  #40391-provided int8-PTH on vllm-gemma-stable)
- compose_registry.py: 4 entries; test-compose-registry-disk counts 38->42 / 40->43

Full gate green (42/42); compat C4/C5/C10/C14 pass for all 4 slugs.

Co-authored-by: noonghunna <[email protected]>
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-07 19:34:26 +05:00
noonghunna 579a717201 Experimental Gemma-4 QAT W4A16 vLLM composes + kv-calc int4 fix (#339)
Two 🧪 experimental QAT-W4A16 vLLM slugs (vllm/gemma-12b-qat-w4a16-single, vllm/gemma-31b-qat-w4a16-dual) + the standalone kv-calc gemma-12B int4 weight-pricing fix. 12B needs the gemma4-unified-vision-unquant sitecustomize workaround (vLLM #44494, both bugs, self-contained); 31B boots clean on stock vllm-gemma-stable. Full suite 42/0.
2026-06-07 05:26:16 +05:00
noonghunnaandClaude Opus 4.8 95e47fedc9 kv-calc: per-sequence KV-pool floor (capped at 1 GB), fix KV-light false-FAIL
The C12 budget verdict used a flat absolute floor (`MIN_KV_GB = 0.05 if
qwen3-next-moe else 1.0`) and FAILed any config leaving <1 GB for the growing
KV pool. That false-FAILs KV-light models that demonstrably boot: gemma-4-26b
-a4b single-card AWQ + MTP projects 0.78 GB growing pool, yet the live boot
holds 17,490 tok >= 16,384 max_ctx and serves (sliding_window=1024 makes 25/30
layers' KV trivially cheap).

vLLM's real pre-check is token-capacity based: it boots iff the capped pool
holds >= ONE max_model_len sequence, NOT iff KV >= 1 GB. Growing KV scales
linearly with max_num_seqs, so one sequence's KV is
`kv_pool_requested_gb / max_num_seqs`. Use that as the floor — which also
generalizes (and removes) the old qwen3-next-moe 0.05 special-case.

CAP the floor at the legacy 1 GB: for dense/long-KV configs one sequence needs
many GB and a hard per-seq threshold would false-FAIL measured-working configs
sitting inside the estimator's +-1.5 GB band (e.g. gemma-dual-int8 @262K:
10.71 GB avail vs 10.84 GB/seq, 1.2% short but boots). Net: relax the floor
ONLY for KV-light models, leave dense on its exact prior >=1 GB behavior.

The fix lives in the estimator (where the gap is), NOT in disabling
kv_calc_supported for a config we actively ship the drafter on. Design
bounced with Codex (per-sequence floor); capped-at-1-GB refinement added here
after the pure per-seq form regressed the gemma-4-31b dense duals.

Verdicts after: gemma-26ba4b-single FAIL -> TIGHT (correct); dense duals
unchanged; --calibration still 7/7; full gate 42/42.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-06 01:41:10 +00:00
noonghunnaandClaude Opus 4.8 121330c95e fix(35b-a3b): correct AutoRound INT4 hf_repo (#316)
The autoround-int4 weights entry pointed at
Qwen/Qwen3-MoE-A3B-Instruct-AutoRound-Int4-mixed, which never existed on
HF — a fresh `setup.sh qwen3.6-35b-a3b` 404'd on download (#316). Correct
to the real repo Intel/Qwen3.6-35B-A3B-int4-mixed-AutoRound (ungated;
11 safetensors byte-match our on-disk copy).

It stayed hidden because the weights were pre-downloaded on the maintainer
rig (never re-fetched) and the weights-registry guard test asserted the
same bad string. Guard corrected too; resolve-check hardening filed as
#320 and a revision-pin schema as #319.

Note: upstream renamed Intel/Qwen3.6-35B-A3B-int4-AutoRound -> -int4-mixed-
AutoRound and re-quantized 2026-05-01; current HEAD 65f69c7 re-validated on
2x3090 stock v0.22.0 TP=2 (verify-full 8/8, decode ~172 TPS, coherent).

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-05 06:36:15 +00:00
noonghunnaandClaude Opus 4.8 b4441892d3 gemma-4-12b: add single-card vLLM INT8 compose (full 256K on one 3090)
New compose vllm/gemma-12b-int8 — Intel/gemma-4-12B-it-int8-AutoRound (W8A16) on
the stock gemma4-unified image, TP=1. Validated single 3090 sm_86 2026-06-04:
  - int8 AutoRound loads on sm_86, coherent output
  - KV pool ~433K tokens (gemma4 KV ~32 KB/tok) holds the FULL 262144 — NIAH
    exact-recall 140K/170K/200K/230K/241K, 0 crashes
  - bench 50.0/50.1 TPS narr/code, TTFT 65 ms, ~22.5 GB peak (one card)
  - the high-fidelity single-card vLLM path (INT8 ≈ Q8); ≈ dual bf16's TPS, no TP-comm

Plumbs INT8 AutoRound as a first-class weight format end-to-end (it wasn't wired):
  - engines/vllm-gemma4-unified.yml: + autoround to supported_weight_formats
  - models/gemma-4-12b.yml: + autoround-int8 weights variant (size_gb 13)
  - compose_registry.py: + vllm/gemma-12b-int8 entry (tp=1, 262144, port 8037)
  - kv-calc.py: g12spec gets weights_int8_gb; gemma4-swa-dense selector + int8
    branch; --weights-variant CLI gains int8; --compose alias gemma-single-int8
  - compat.py: _kv_calc_weights_variant maps autoround-int8 -> int8 (was falling
    to the bf16 fallback -> false 122%-budget FAIL)
  - test-compose-registry-disk.sh: 56/57 -> 57/58

Also refreshes the BENCHMARKS Gemma-4-12B dual rows + section header, which still
described the p-RoPE overlay dropped in PR #309 (config fix supersedes).

Guard suite 41/41 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-04 17:16:00 +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 8b459afa58 gemma-4-12b: register single-card slugs beellama/gemma-12b + llamacpp/gemma-12b
Registers the two validated single-card 256K composes (NIAH-clean to 246K) into the
central registry so launch.sh/switch.sh resolve them. Both Q8_K_XL GGUF, 256K via
--override-kv, experimental, no DEFAULTS row, kvcalc_key=SKIP (llama.cpp-family).
- compose_registry: beellama/gemma-12b (8067, q5_0 KV) + llamacpp/gemma-12b (8069, q8_0 KV).
- models/gemma-4-12b.yml: GGUF weight variants beellama-q8kxl + unsloth-q8kxl.
- engines beellama-local + llama-cpp-mainline: + gemma4-unified family.
- fixtures: registry-disk count 54→56 / disk 55→57; switch-parity scan + beellama.
- dropped the non-functional llama-cpp mtp.yml ghost (gemma4-assistant arch unmerged, #23398).
Guard 41/41 green; switch --list shows all 4 gemma-12b slugs; kv-calc 19/19.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-06-04 05:37:16 +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 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
noonghunna 08d4dda6f3 feat(35b-a3b): byteshape IQ4_XS ik-llama single-card preset — validated (#299)
Intake of @Rhonstin's #293 byteshape IQ4_XS 35B-A3B preset into the curated catalog + first-party validation on 1x 3090: verify-full/stress 8/8 (NIAH→240K), bench n=5 (narrative 113/code 129 wall TPS), 8-pack 110/150 (≈ author's 111/150), soak-continuous PASS. Registry ik-llama/byteshape-iq4xs-mtp, ⚠️ Production w/ caveats. Intake fixes vs #293: image cu13, port 8058. Credit @Rhonstin. Gate 41/41.
2026-06-02 20:15:48 +05: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
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
noonghunnaandClaude Opus 4.8 45686808cb Prune Gemma vLLM variants (9->3) and pin survivors to v0.21.0
Every gemma-4-31b vLLM compose pinned a purged Docker Hub nightly
(e47c98ef / bf610c2f), un-bootable for fresh users (#250, #167 class).
Prune the 9-variant set to 3 and repoint survivors onto the immutable
stable release tag vllm/vllm-openai:v0.21.0 (never :latest).

Survivors: vllm/gemma-mtp (bf16 dual, default), vllm/gemma-int8 (int8-PTH
dual), vllm/gemma-mtp-tp1 (fp8 single). Dropped: gemma-dflash,
gemma-dflash-int8, gemma-int8-tq3, gemma-bf16, gemma-awq; the 262K path
folds into gemma-int8 via a CTX env override. Gemma is decoupled from the
shared Qwen nightly profiles via a new vllm-gemma-stable engine profile;
Qwen nightly profiles are untouched.

Diagnose decoupling: the pruned gemma dflash patch dirs doubled as the
diagnose tool's cross-model disk-source proxies for two Qwen overlays
(vllm-pr41703-dflash, vllm-pr42102-dflash-kv-quant). Those capabilities
are image-baked in the pinned nightly, not mountable files, so mark them
image_baked and have diagnose skip the disk-source check for image-baked
overlays. Runtime-neutral (no Qwen compose mounts them).

switch.sh launcher: handle the new VLLM_IMAGE engine-pin export (the twin
loop in launch.sh had it; switch.sh did not -> "unexpected engine pin
export"), and guard the VLLM_NIGHTLY_SHA echo for the image-only stable
profile (was unbound under set -u).

Validated on 2x RTX 3090 (Ampere, v0.21.0): full scripts/tests/*.sh suite
35/0; live boots of gemma-mtp (bf16) and gemma-int8 serve coherent output,
qwen vllm/dual regression-clean. gemma-mtp-tp1 (fp8_e4m3) is correctly
SM-gated (required_sm=9.0) -- confirmed Ampere-incompatible (Triton
"fp8e4nv not supported on sm_86"), a documented 32 GB+/Hopper variant;
beellama remains the single-card gemma path on Ampere.

Refs #451, #250, #167.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-05-29 07:59:42 +05:00
458c473908 feat(ik-llama): PRISM-PRO-DQ + APEX-MTP presets, conformed to the <quant>/ layout
Ports VykosX's #223 preset families onto the post-refactor convention
(PR-A #231 layout + PR-B #234 registry-derived launchers).

- 8 ik-llama presets under models/<model>/ik-llama/compose/<topology>/<quant>/:
  - qwen3.6-27b: ex0bit-prism-pro-dq/{mtp,long,two-stage} (single) + {mtp,mtp-vision} (dual)
  - qwen3.6-35b-a3b: mudler-apex-compact/{mtp,long} (single) + mudler-apex-quality/mtp (dual)
    [one repo, two quant files — the canonical two-slug case]
- +1 ../ depth on all relocated mounts (models-cache + APEX chat-template).
- weights variants added to models/*.yml: ex0bit-prism-pro-dq, mudler-apex-compact,
  mudler-apex-quality.
- 8 compose_registry.py entries (weights_variant=slug, kvcalc_key=SKIP); launchable
  via the registry — no launch.sh edits needed (PR-B derives them).
- catalog-size guard 47 -> 55.

Dropped from #223 as obsolete/out-of-convention: the launch.sh hardcoded-array edits
(superseded by PR-B) and the root UPSTREAM_CHANGES.md.

Validation: 7/7 gates PASS (registry-disk incl. quant-slug<->weights, mounts-resolve,
model-weights-registry, switch+launch parity, default-resolver, launch-compat) +
kv-calc 22/22. Structurally validated; live boot is weights-gated (community GGUFs not
on our rig) — ships community-experimental, crediting VykosX's reported numbers.

Co-Authored-By: VykosX <[email protected]>
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-26 19:51:00 +00:00
noonghunnaandClaude Opus 4.7 9821c94efb refactor(compose): insert <quant> layer + make the registry the single source of truth
Restructure all 47 composes to
models/<model>/<engine>/compose/<topology>/<quant-slug>/<serving>.yml and centralize
defaults as registry pointers. Move + path-rewire only — no compose runtime-config
changes (plus the +1 ../ depth bump each moved file requires, and descriptive names
for the former docker-compose.yml defaults).

- <quant-slug> = 1:1 with a weights artifact == compose_registry weights_variant ==
  weights.py key (provider-quant form). Fixes the prior coarse `gguf` and the
  bf16/int8-files-mislabeled-as-autoround_int4 weights_variant.
- default = DEFAULTS[(model,engine,topology)] pointer in compose_registry.py; no
  default.yml / docker-compose.yml. KV-dtype variants (bf16/int8) stay as files
  under autoround-int4/.
- +1 ../ on every relative mount in moved composes (cache/patches/scripts/models-cache).
- Rewired: compose_registry (47 compose_path + weights_variant + DEFAULTS), launch.sh,
  gpu-mode.sh, bench-row-formatter, profile *.yml, generate_compose.py, weights.py
  (+ back-compat ALIASES), AGENTS.md, ADDING_MODELS.md, BENCHMARKS + doc path refs.
- New guard tests: test-compose-registry-disk.sh, test-compose-mounts-resolve.sh.
- Variant keys (vllm/dual, ik-llama/iq4ks-mtp, ...) unchanged — launch/switch UX preserved.

Validation: docker compose config 47/47 · parity/launch-compat/registry-disk/
mounts-resolve/profiles-compat/model-weights-registry PASS · kv-calc 22/22 · leak-clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-26 15:58:08 +00:00
noonghunna 5f37ae6d4d Add profile-backed model weight fetch registry 2026-05-24 16:08:21 +00:00
noonghunnaandClaude Opus 4.7 818b79ccb5 v0.8.0 Pull-Gate P2: transformers deriver + ModelProfile/confidence + variant-scoped hf_repos schema
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-16 20:56:19 +00:00
noonghunna d7804107c9 Reapply "fix(qwen3.6-27b): route non-TQ3 composes to vllm-nightly-clean"
This reverts commit d32e168a89.
2026-05-15 20:52:21 +00:00
noonghunna d32e168a89 Revert "fix(qwen3.6-27b): route non-TQ3 composes to vllm-nightly-clean"
This reverts commit 3b2d940d26.
2026-05-15 18:40:12 +00:00
noonghunna 39e18733aa feat(kv-calc): model v0.7.3 MoE architectures 2026-05-15 22:18:09 +05:00
noonghunnaandClaude Opus 4.7 0053444e84 feat(gemma-4-26b-a4b): AWQ path via vLLM PR #40886 overlay
The Intel AutoRound INT4 quants for Gemma 4 26B-A4B are structurally
blocked on SM86 (moe_intermediate_size=704 not aligned to Marlin's
group_size=128 = 5.5x; no SM86 WNA16 kernel handles unaligned K-dim).
The AWQ-4bit variant ships in compressed-tensors format, which routes
through a different vLLM kernel path that DOES handle arbitrary K
shapes — but vLLM's gemma4.py::_weight_iterator (as of bf610c2f) lacks
the _packed/_scale key remapping for compressed-tensors MoE experts.

vLLM PR #40886 (open, last updated 2026-04-25, author tested on RTX
3090 24 GB) adds the 4 remapping branches that yield per-expert
weight_packed / weight_scale keys for FusedMoE's loader. +23 / -0
in vllm/model_executor/models/gemma4.py.

This commit:

* `models/gemma-4-26b-a4b/vllm/patches/vllm-pr40886-awq-moe-keys/`
  install.sh: anchor-based Python patcher that inserts the 4 branches
  into the in-container gemma4.py at runtime. Idempotent (sentinel
  comment), drift-resistant (anchors on existing branch line, not
  line numbers). Smoke-tested against bf610c2f: sentinel count=1
  after first install, no-op on second install, file remains valid
  Python after patching.
  README.md: full vendor context, usage pattern, drop trigger.

* `models/gemma-4-26b-a4b/vllm/compose/dual/awq.yml` (new):
  TP=2, port 8042, bf16 KV, max_ctx 32K, no drafter. Targets
  /mnt/models/huggingface/gemma-4-26b-a4b-awq-4bit (17 GB on disk).
  Entrypoint runs install.sh before vllm serve. Routes through
  vllm-nightly-clean (bf610c2f, no Genesis).

* ModelProfile gemma-4-26b-a4b.yml updates:
  - autoround_int4_mixed: status flipped to "ampere-blocked" with
    a one-line forensic note (was "production", incorrect on SM86)
  - awq_compressed_tensors: new variant pointing at the cyankiwi
    AWQ-4bit weights, marked production via PR #40886 overlay
  - default_weight_variant: switched to awq_compressed_tensors
    (Ampere users get the variant that boots by default)

* COMPOSE_REGISTRY: new "vllm/gemma-a4b-awq" entry for the dual AWQ
  path at port 8042.

* vllm-nightly-clean engine: supported_weight_formats gains
  "compressed-tensors" so fits() C14 accepts the AWQ variant.

All 7 test suites still pass; test-profiles-compat now validates
40 COMPOSE_REGISTRY entries.

Track in docs/UPSTREAM.md: drop overlay when PR #40886 merges upstream
AND vllm-nightly-clean pin bumps past the merge commit.

Refs: #138 (the user-facing trigger that surfaced the AWQ-on-Ampere path
   was issue #137 / #138 territory — here we deliver the alternative
   that unblocks Gemma 26B-A4B for the v0.7.3 ship).

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-15 22:18:09 +05:00
noonghunnaandClaude Opus 4.7 3b2d940d26 fix(qwen3.6-27b): route non-TQ3 composes to vllm-nightly-clean
Per the TQ3-only Genesis policy (Genesis is strictly required only for
turboquant_3bit_nc KV — Cliff 2 mitigations are recommended but not
required to boot), the Qwen 27B composes that don't use TQ3 KV no longer
need to be anchored to the Genesis-locked SHA. They can ride the latest
unconstrained nightly (vllm-nightly-clean → bf610c2f).

Composes moved from vllm-nightly-mtp to vllm-nightly-clean (8 entries):
- vllm/tools-text         single/tools-text.yml      fp8_e5m2
- vllm/minimal            single/minimal.yml         fp8_e5m2
- vllm/dual               dual/docker-compose.yml    fp8_e5m2
- vllm/dual-bf16          dual/bf16.yml              bf16
- vllm/dual-carnice-bf16mtp dual/carnice-bf16mtp.yml fp8_e5m2
- vllm/dual-qwopus-bf16mtp  dual/qwopus-bf16mtp.yml  fp8_e5m2
- vllm/dual-nvlink        dual/nvlink.yml (extends)  fp8_e5m2
- vllm/dual4              multi4/docker-compose.yml  fp8_e5m2

TQ3-using composes (vllm/default, vllm/long-text, vllm/long-text-no-mtp,
vllm/long-vision, vllm/bounded-thinking, vllm/dual-turbo,
vllm/dual-tq3-mtp, vllm/dual-tq3-mtp-genesis, vllm/dual-tq3-nomtp,
vllm/dual-nvlink-turbo) stay on vllm-nightly-mtp.

Model profile update:
- qwen3.6-27b.requires_genesis flipped true → false.
  Strictly bootable on any qwen3-next-hybrid-capable vLLM nightly.
  Genesis is required only for TQ3 KV format; that's enforced at the
  compose level via Engine-profile selection.

Engine profile update:
- vllm-nightly-clean.supported_model_families adds qwen3-next-hybrid.
- Notes corrected to reflect the TQ3-only policy and broader family
  coverage.

Test updates:
- to_compose_name strict match: updated to expect vllm-nightly-clean
  for fp8/tp=2 long-ctx Qwen.
- C6 test reframed: under the TQ3-only policy no model declares
  requires_genesis=true, so the Genesis enforcement happens at C15
  (engine feature) level, not C6. Test now asserts positive (Qwen +
  fp8 on non-Genesis engine is valid) AND negative (Qwen + TQ3 on
  non-Genesis engine fails C15).

All compat tests pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-15 22:18:09 +05:00
noonghunnaandClaude Opus 4.7 f7f6f444b9 feat(moe): wire Gemma 4 26B-A4B + Qwen 3.6 35B-A3B composes through fits()
Adds the v0.7.3 critical-path plumbing for both MoE models:

* Compose files:
  - models/gemma-4-26b-a4b/vllm/compose/single/docker-compose.yml
    (vllm-nightly-clean, TP=1, port 8040, bf16 KV, no drafter)
  - models/qwen3.6-35b-a3b/vllm/compose/single/preview.yml
    (vllm-nightly-clean, TP=1, port 8050, fp8_e5m2 KV, preview-only)

* COMPOSE_REGISTRY entries 'vllm/gemma-a4b' and 'vllm/qwen-a3b-preview'.

* DrafterProfile: new gemma-26b-it-assistant for the 26B-A4B
  (google/gemma-4-26B-A4B-it-assistant — separate weights from 31B);
  qwen-mtp-builtin.model_compat extended with qwen3.6-35b-a3b.

* vllm-nightly-clean.supported_model_families adds qwen3-next-moe as a
  preview/smoke route; notes clarify Cliff 2 / TQ3 unavailable here.

* Qwen 3.6 35B-A3B model: requires_genesis flipped false → upstream is
  strictly bootable on post-#42521 nightlies; Genesis is RECOMMENDED for
  production (TQ3 KV + Cliff 2 mitigations), not strictly required to boot.

* ModelProfile gains kv_calc_supported (defaults true). Both new MoE
  models set false because tools/kv-calc.py only models qwen3.6-27b and
  gemma-4-31b today (MoE + asymmetric KV + DeltaNet+attention hybrid all
  require new MODEL_SPECS + activation coefficients — queued for Codex).
  fits() now skips C12 for kv_calc_supported=false instead of failing.

All compat tests pass; both new composes fit on 1x-3090 (Gemma) and
1x-3090/2x-3090/1x-5090 (Qwen preview).

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-15 22:18:09 +05:00
noonghunnaandClaude Opus 4.7 abf0e327f9 feat(profiles): add Gemma 4 26B-A4B ModelProfile + num_global_kv_heads field
Onboards Gemma 4 26B-A4B (gemma4-swa-moe family) as the fourth
ModelProfile. Real values sourced from
/mnt/models/huggingface/gemma-4-26b-a4b-autoround-int4-mixed/config.json
(file downloaded but checkpoint still streaming in background as of
this commit).

Schema extension: new optional field `num_global_kv_heads`. Gemma 4
26B-A4B has asymmetric KV head counts (8 sliding / 2 global) — distinct
from Gemma 4 31B which uses 16 for both. Field is None for symmetric
models; existing Gemma 4 31B + Qwen models work unchanged.

Confirmed architectural facts (from config.json):
- 30 total hidden layers (smaller than estimated 40-48)
- 5 full_attention layers at indices [5, 11, 17, 23, 29]
  (one global per 6-layer block; last layer always global)
- 25 sliding_attention layers (sliding_window=1024)
- num_kv_heads=8 (sliding), num_global_kv_heads=2 (global) — ASYMMETRIC
- head_dim=256 (sliding), global_head_dim=512 (global)
- attention_k_eq_v: TRUE (K=V tied)
- num_experts: 128, top_k_experts: 8 (active per token)
- moe_intermediate_size: 704
- Multimodal: vision_config + audio token IDs present
- requires_genesis: false (Gemma 4 doesn't need Genesis like Qwen)

KV math implication: per-token growing KV at bf16 is
5 × 2 × 512 × 1 (K=V tied) = 5,120 bytes
vs Gemma 4 31B's 10 × 16 × 512 × 1 = 81,920 bytes per token
=> Gemma 4 26B-A4B has ~16x smaller growing-KV per token than 31B,
   making long context dramatically cheaper. KV_MATH.md MoE section
   estimates need refresh.

Drafter compat note: references gemma-it-assistant (the existing 31B
drafter). TODO Codex: extend that DrafterProfile's model_compat to
include gemma-4-26b-a4b, OR split into a separate
gemma-26b-it-assistant DrafterProfile (google/gemma-4-26B-A4B-it-assistant
is downloading in background alongside the main model).

Tests pass: 41 tests, kv-calc 18/18 invariant held.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-15 22:18:09 +05:00
noonghunnaandClaude Opus 4.7 937871492a feat(profiles): add Qwen 3.6 35B-A3B ModelProfile (MoE schema extensions)
Onboards Qwen 3.6 35B-A3B (qwen3-next-moe family) as the third
ModelProfile in the v0.7.0 profile catalog. Architectural values sourced
from the actual config.json at /mnt/models/huggingface/qwen3.6-35b-a3b-
autoround-int4/config.json, NOT estimates.

Schema extensions (additive, optional — existing dense models work
unchanged):
- num_experts, num_experts_per_tok
- moe_intermediate_size, shared_expert_intermediate_size
- active_params_b (documentation only)
- mtp_num_hidden_layers (built-in MTP indicator)
- attn_output_gate (gated attention bool)
- vision_capable (multimodal support flag)

Confirmed architectural facts (from config.json):
- 40 total hidden layers
- 10 full_attention layers at indices [3,7,11,15,19,23,27,31,35,39]
  (full_attention_interval=4)
- 30 linear_attention (Gated DeltaNet) layers
- num_kv_heads=2 caps valid TP at [1, 2]
- 256 experts, 8 active per token (corrects KV_MATH.md's 128 estimate)
- mtp_num_hidden_layers=1 — built-in MTP drafter
- vision_config present — multimodal

5 weight variants on disk:
- autoround_int4 (production, 20 GB)
- gptq_int4 (experimental, 22 GB)
- gguf (production, 90 GB)
- dflash + dflash_gguf (experimental)

What's NOT in this commit (still to do for v0.7.3):
- Build first vllm/dual compose for the new model
- Take down llama estate fixtures + boot the new compose
- Capture boot log + back-solve per_token_bytes against KV math
- 4+ calibration anchors → calibration YAML
- kv-calc activation coefficients for Qwen 3.6 35B-A3B
- BENCHMARKS rows
- learnings/qwen3.6-35b-a3b.md
- KV_MATH.md MoE section update (remove "calibration pending", fill in
  measured coefficients)

Tests:
- test-profiles-compat.sh: 41 tests pass (was 34 pre-v0.7.2 topology
  + 7 topology + bumped model count 2 → 3)
- kv-calc --calibration: 18/18 = 100% (held)
- All 7 other test suites pass

Branch reasoning: feature branch for Codex review before merge to
master. Live boot + calibration discipline benefits from Codex's
focused-session bench rigor.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
2026-05-15 22:18:09 +05:00
noonghunna 69825d7dae feat(profiles): ship v0.7.0 data layer 2026-05-14 14:46:42 +00:00