Three related [C0]/eligibility pull-gate fixes for the curated-swap surface —
an uncurated derive (abliterated / fine-tune) of a model we already serve.
1. Wrapper-arch alias. `pull.sh --profile-like` was false-aborting at [C0] with
"no arch_patches matrix row for 'Qwen3_5ForConditionalGeneration'". That is
the OUTER multimodal wrapper class the weights report; the patch matrix is
keyed on the inner canonical `Qwen3NextForCausalLM`. arch_patches.yml is a
closed key-set, so the alias lives in the editable arch_model_xref.
- profile_runtime.yml: `config_architectures: [Qwen3_5ForConditionalGeneration]`
on the Qwen3NextForCausalLM xref entry.
- generate_compose.py: `resolve_arch_from_config()` maps a config.json
architectures[0] string -> (canonical_arch, arch_row) via that alias.
- gates.py [C0]: resolve the wrapper arch via the alias before declaring
NO_ARCH_ROW. The hybrid now reports ENGINE_SUPPORTED.
2. GGUF axis. `supported_weight_formats` was declared on every engine but never
enforced (only `kv_format` was). The deriver blocks GGUF on the derive path,
but the curated registry / curated-swap path had no such guard. gates.py [C0]
now rejects a `gguf` weight_format on an engine whose supported_weight_formats
lacks `gguf` (structural axis; matches the `gguf` token only, so a derive's
raw dtype spelling bf16/float16 is never false-rejected).
3. Won't-fit size advisory. The eligibility no-fit-model abort for a hybrid/MoE
derive now appends (a) an actionable NOTE pointing at the curated-swap path +
docs/BRING_YOUR_OWN.md, and (b) a coarse weights-only VRAM verdict: when the
raw weights exceed the detected topology's total VRAM they won't fit at ANY
KV, so say so concretely (the huihui abliterated bf16 ~54 GB vs 2×24 GB case)
instead of a generic stop. `_weights_oversize_advisory()` is pure/total —
empty when it fits / size unknown / headless.
Docs + tests:
- BRING_YOUR_OWN.md: new section C — "Swap a curated model for a fine-tune /
abliterated variant -> reuse its compose" (artifact↔engine + quant + MTP
caveats, worked example).
- test-pullgate-gates.sh: wrapper-arch ALIAS [C0] case + resolve_arch_from_config()
unit + GGUF-on-vLLM runtime-incompatible + no-false-positive control +
_weights_oversize_advisory() unit (oversize / fits / headless / malformed).
Co-authored-by: noonghunna <[email protected]>
Co-authored-by: Claude Opus 4.8 <[email protected]>
club-3090 docs index
Two tracks. Pick the one that matches what you're doing.
- User track — "I have GPUs and a model; how do I serve it?"
- Contributor / maintainer track — "I'm working on the v0.8.0 pull pipeline, patches, or the calibration loop."
Every link below resolves to a file in this repo.
User track
Start here if you want to run a model.
| Doc | What it is |
|---|---|
GETTING_STARTED.md |
Start here — 5-minute clone-to-curl path. No decisions, no menus. |
SINGLE_CARD.md |
1× RTX 3090 — workload → curated config → quick start. |
DUAL_CARD.md |
2× RTX 3090 (PCIe / NVLink auto-detected) — workload → config → quick start. |
MULTI_CARD.md |
3+ GPUs — TP scaling math, derivation from dual.yml, valid TP values. |
PULL.md |
Any HF safetensors repo — evaluate against the KV math, honest about confidence. |
BRING_YOUR_OWN.md |
Serve + tune + validate your own model/compose (any engine, single or dual) without touching the catalog. |
HARDWARE.md |
Card-class questions — 4090/5090, power caps, NVLink, laptop EC power. |
GLOSSARY.md |
TPS / KV / MTP / TP and the rest of the vocabulary. |
FAQ.md |
Common setup and operational questions. |
COMPARISONS.md |
Self-host vs cloud APIs — cost crossover and when each wins. |
EXAMPLES.md |
Worked end-to-end usage examples. |
ai-studio/ |
Club 3090 AI Studio — chat-driven, all-modality creative studio (text · image · video · audio) on 2× 3090. Start here for the architecture + the full 8-lane matrix. |
ai-studio/image.md |
Image lanes — HiDream-O1 (top-quality/photoreal) · Ideogram-4 (design/logo/text) · Chroma (uncensored). |
ai-studio/video.md |
Video — LTX-2.3 (video+audio) + Sulphur (uncensored), text/image→video, 60 s+ chaining. |
ai-studio/audio.md |
Audio — Step-Audio-EditX (voice clone+edit) · Kokoro (narration) · ACE-Step (music) · Stable Audio (SFX). |
Contributor / maintainer track
The v0.8.0 pull pipeline (in pipeline order)
A model slug flows through these stages. Read them in order to understand the whole.
| Stage | Doc | What it owns |
|---|---|---|
[D] |
COMPOSE_GENERATOR.md |
The #141 compose generator — the substrate that owns the arch→patches matrix. |
| Gate | PULL_GATE.md |
scripts/pull.sh — the locked 6-stratum abort taxonomy, [C0]/[C2a]/[B]/[C1] gates, §4.1 confidence×verdict table. |
[E] |
PULL_EMIT_DERIVED.md |
Download → boot → smoke for a download-eligible derived model; writes the §6 capture artifacts. |
[F] |
LOOP.md |
The calibration loop — reads the capture bundle, classifies, runs the inbound-trust pipeline, dedups failures into the tracker. |
Patch & model contribution
| Doc | What it is |
|---|---|
PATCH_POLICY.md |
When/how a patch ships, the local-overlay vs upstream rules. |
PATCH_ATTRIBUTION.md |
The Phase-A patch-attribution matrix — arch → engine-pin → required patches. |
ADDING_MODELS.md |
How a new model gets added to the curated catalog. |
KV_MATH.md |
The KV-cache math the [B] fit verdict is computed from. |
Stack reference & ops
| Doc | What it is |
|---|---|
ARCHITECTURE.md |
Repo/stack architecture overview. |
UPSTREAM.md |
Upstream PR / issue tracker for this stack. |
NIGHTLY_BUMP_RUNBOOK.md |
Procedure for bumping the vLLM nightly pin. |
CONTAINER_RUNTIMES.md |
Docker / container runtime notes. |
Reference matrices & deep dives
These are cross-cutting references both tracks reach for.
| Doc | What it is |
|---|---|
scripts/switch.sh --list (runtime command, not a doc) |
The authoritative compose × slug matrix. Registry-derived from scripts/lib/profiles/compose_registry.py, so it's always current — every launchable slug with its topology, model, engine, KV format, and max ctx. Run this rather than trusting any hand-maintained table; the static lists in the per-topology docs are illustrative, this is the source of truth. |
engines/ |
Per-engine deep dives — vLLM, llama.cpp, SGLang. |
INFERENCE_ENGINES.md |
Engine picker — which engine for which workload, and structural gaps. |
CLIFFS.md |
The accumulated-context / prefill failure modes (Cliff 2, Cliff 2b) and how to detect them. |
DTYPE_MATRIX.md |
Supported dtype × model × engine matrix. |
KERNEL_MATRIX.md |
Quant-kernel availability and alignment constraints. |
QUALITY_TEST.md |
The quality-test harness and what it measures. |
RESULTS_CARD.md |
The standard 3-panel format (Serving · Quality · Takeaways) for sharing a config's measured results. |
ANNOUNCEMENT_TEMPLATE.md |
The "we shipped X" Announcements-post skeleton that wraps a Results Card (intro+credits · Results Card · getting it · run it · credits). |
STRUCTURED_COT.md |
The bounded-thinking / structured-CoT compose path. |
TQ3_MTP_GENESIS.md |
TQ3 KV × MTP × Genesis-patch results and config. |