Repository navigation
EPIC E7 0.74: Any Model #4001
Description
owner: aprender-w5032 (re-owned 2026-10-19 by aprender-triage-worker at the cop's word: previous owner session absent; picks up children only as batch constituents after its current timed task)
Spec: APR-EPIC-001 §2 · Epic: E7 · Train: 0.74 · Successor at cut: S3
Theme
Any Model
done_when
one TRAITS table is the only quant dispatch; typed TensorStorage; a new architecture lands as config plus a small delta.
Budget
At most 3 open children (docs/roadmaps/epics.yaml). Repo-wide cap 100 open issues; andon at 95.
Absorbs
Prior body
Theme: Any Model (operator 2026-09-23)
".74 is unified model support style in the ticket alfredo metnioned, i.e. quicker ability to support ANY model and we leverage llama.cpp and rachets in each release"
Alfredo's tickets: #3423 (EPIC: inference dispatch & architecture consolidation), #3422 (shared attention/FFN blocks exist but 0% adopted, so a new architecture costs ~1,600 lines), #3418 (quant-type dispatch duplicated across ~30 files).
Goal. Supporting a new model is configuration plus a small declared delta, not a new forward path. Leverage llama.cpp as the reference: its GGUF architecture metadata and tensor naming as the input vocabulary, and its outputs as the correctness oracle for a new architecture before apr claims it.
Exit bar (to be sharpened by the quorum).
- Adding a new, previously unsupported architecture in the llama.cpp-supported set takes ≤ N lines, measured on a real addition during the release, not a claim.
- Every supported architecture routes through the shared blocks (ARCH: shared attention/FFN building blocks exist but 0% adopted — new architectures still cost ~1,600 lines each #3422 adoption at 100% for the certified set) and one quant dispatch (ARCH: quant-type dispatch is duplicated across ~30 files with no single source of truth — propose a dedicated consolidation release #3418).
- New-architecture correctness is proven against llama.cpp's output on the same GGUF (a CRUX-style oracle with a positive control).
Must-carry
- EPIC: Inference dispatch & architecture consolidation (dedicated cycle) #3423, ARCH: shared attention/FFN building blocks exist but 0% adopted — new architectures still cost ~1,600 lines each #3422, ARCH: quant-type dispatch is duplicated across ~30 files with no single source of truth — propose a dedicated consolidation release #3418; PP-QUANT (EPIC: PP-QUANT-001 — quant-type dispatch, Phase 0/1 (0.69 train) #3421, spec(PP-QUANT-001): quant-type dispatch consolidation — design, contract, Phase 0 gate #3420), PP-ARCH (spec(PP-ARCH-001): shared-block forward-path consolidation — the axis that actually sets new-model cost #3424), PP-TENSOR (EPIC: PP-TENSOR-001 — a tensor that has no bytes is a different type from one that does (MoE / tied-embedding placeholders) #3428). These move here from 0.73's enablers: consolidation is 0.74's core.
- Ratchet slice 5 of 5 (close-out, ≥80% cleared): EPIC S3 standing: Debt Ratchet #3997
Members not listed above (27, every other open 0.74.0 issue)
Rule (operator 2026-09-24, applied by the cop aprender-cf): a milestone is an epic only if this issue lists its members, and tickets without an epic go to backlog. This list was derived from the milestone's open issues on 2026-09-24 by aprender-dd (#4159).
- Phi-2/Phi-3 GGUF never GPU-eligible: LayerNorm kernel exists but isn't wired into forward_gpu_resident #3075
- Docs: publish a GPU-vs-CPU model architecture support table (no user-facing doc exists today) #3077
- P1: ONNX import — and resolve the advertised-but-stubbed ONNX export #3152
- P1: graph intermediate representation (IR) — burn-ir has one, aprender has none; ONNX import and fusion both need it #3165
- Model-format discovery:
apr validatereads an APR v2 header with non-v2 offsets — warns on the tensor count as if it were flags (7 defects on the "what is in this file?" path) #3275 - PP-QUANT-001 M3: regression fixtures — #1749 #1789 #2535 #3341 (+ #3091 reopen) on tiny synthetic GGUFs, observed RED→GREEN #3429
- PP-QUANT-001 M2: reconciliation gate —
GgmlTypevs the vendoredggml.hid list at a pinned sha; exhaustive matches, no_ =>#3431 - PP-TENSOR-001 T1: typed
TensorStorage— a dense consumer cannot receive an MoE placeholder #3433 - PP-TENSOR-001 T2: sentinel ban —
qtype: 0+byte_size: 0may not be constructed; 0 is F32 #3434 - PP-TENSOR-001 T3: diagnostic contract — an absent tensor is reported as absent, never as truncated, corrupt, or F32 #3435
- PP-QUANT-001 Q3: tier-0 scalar dequant for 35/35 live ggml types — every unsupported-type refusal becomes a slow path #3441
- PP-QUANT-001 Q5: upstream drift job — a new
ggml_typeid upstream opens an issue here the day it lands #3442 - PP-QUANT-001 P4: #3077 support table GENERATED from
TRAITS(type × backend × tier) #3443 - core GgufTensor::byte_size sizes Q4_1 at 18 bytes/block — it shares an arm with Q4_0; upstream Q4_1 is 20 #3453
- ggml_dtype_element_size is ordered by its own comment, not by ggml id: BF16 reads 0.375 B/elem instead of 2.0, so the #2569 truncation check is fail-open on BF16 GGUFs #3583
- tokenizer parity: the APR/HF encode paths are sibling copies #3726 did not touch — aprender-core BpeTokenizer::pre_tokenize is a whitespace splitter, realizar apr/tokenizer::bpe_encode merges with no pre-tokenizer #3742
- estimate_model_params_from_name documents 0.0 as "assume large model" but its only caller tests params_b < 2.0 — an unsized filename silently gets the no-tools COMPACT prompt #3820
- A GPU-supported quant list is hardcoded in a user-facing error string — a third source of truth beside gpu_supported_ops() and the capability contract #3891
- Two f32_matmul functions with swapped argument orders and identical types — a wrong import is a silent transpose the compiler cannot see #3896
- detect_format_from_name's ordered substring table has produced three defects — one a correct fix that never executed; replace with exact keys #3918
- Enumerated conformance table: derive (qtype × op × backend) proof obligations from the dispatch registry — the test half of #3418 #3945
- Dedupe IQ decoders: aprender-serve onto trueno_quant::iq (one decoder, one oracle) #3959
- qwen3moe CUDA reaches run+qa only: chat rc 8, serve 501/500, code rc 1 — serve loads no mapped model and would route MoE to the CPU path #3987
- arch constraints: qwen35moe (Qwen3.5-35B-A3B) has is_moe=false; replace #3992's substring MoE predicate with a table entry + case table #4008
- certification: per-architecture carry-forward — a diff invalidates only the cells whose inference path it reaches (parked, after #4040) #4049
- binary-debt #8: sunset the 13 pre-monorepo crates.io names — a final release pointing at aprender, and the fleet's pins moved #4065
- clippy debt ratchet 5/5 (0.74): aprender-graph + remaining small crates (~376) → 0 #4157
Parked
Closed over budget (APR-EPIC-001 rule 5). Reopen = pull (rule 7).
- PP-QUANT-001 M3: regression fixtures — #1749 #1789 #2535 #3341 (+ #3091 reopen) on tiny synthetic GGUFs, observed RED→GREEN #3429 PP-QUANT-001 M3: regression fixtures — defect:
apr benchpanics on MoE GGUF models (matmul_fused.rs:211 index OOB) #1749 apr serve: matmul_fused.rs:211 panics with 'index out of bounds: len 0' on Qwen3-Coder-30B-MoE F32 weight #1789 MoE GGUF misdiagnosed as 'truncated/corrupt … file is incomplete' — the file is provably complete, and apr validate agrees #2535 CPU+GPU: Qwen3-Coder-30B MoE (Q4_0) fails with empty-buffer error on blk.0.ffn_gate.weight — possible #1789 regression #3341 (+ CPU: Qwen3.5 / Qwen3.8 hybrid GGUFs are refused entirely — no fallback exists #3091 reopen) — over E7 budget (rank 4/12) - PP-TENSOR-001 T1: typed
TensorStorage— a dense consumer cannot receive an MoE placeholder #3433 PP-TENSOR-001 T1: typedTensorStorage— a dense consumer cannot receive an MoE — over E7 budget (rank 5/12) - PP-TENSOR-001 T2: sentinel ban —
qtype: 0+byte_size: 0may not be constructed; 0 is F32 #3434 PP-TENSOR-001 T2: sentinel ban —qtype: 0+byte_size: 0may not be construc — over E7 budget (rank 6/12) - PP-TENSOR-001 T3: diagnostic contract — an absent tensor is reported as absent, never as truncated, corrupt, or F32 #3435 PP-TENSOR-001 T3: diagnostic contract — an absent tensor is reported as absent, — over E7 budget (rank 7/12)
- PP-QUANT-001 Q3: tier-0 scalar dequant for 35/35 live ggml types — every unsupported-type refusal becomes a slow path #3441 PP-QUANT-001 Q3: tier-0 scalar dequant for 35/35 live ggml types — every unsuppo — over E7 budget (rank 8/12)
- PP-QUANT-001 Q5: upstream drift job — a new
ggml_typeid upstream opens an issue here the day it lands #3442 PP-QUANT-001 Q5: upstream drift job — a newggml_typeid upstream opens an iss — over E7 budget (rank 9/12) - PP-QUANT-001 P4: #3077 support table GENERATED from
TRAITS(type × backend × tier) #3443 PP-QUANT-001 P4: Docs: publish a GPU-vs-CPU model architecture support table (no user-facing doc exists today) #3077 support table GENERATED fromTRAITS(type × backend × t — over E7 budget (rank 10/12) - one-engine 0.69.3 workstream D: dense CUDA+CPU backends on the Session trait (run, run --batch, chat, serve dense) #4268 one-engine 0.69.3 workstream D: dense CUDA+CPU backends on the Session trait (ru — over E7 budget (rank 11/12)
- one-engine D2b: serve dense cuda_batch_scheduler onto realizar::session::Session (split from #4268) #4280 one-engine D2b: serve dense cuda_batch_scheduler onto realizar::session::Session — over E7 budget (rank 12/12)
Superseded epics
- EPIC: PP-QUANT-001 — quant-type dispatch, Phase 0/1 (0.69 train) #3421 EPIC: PP-QUANT-001 — quant-type dispatch, Phase 0/1 (0.69 train) — superseded (A4); owner lines: Owner: unassigned.
- EPIC: Inference dispatch & architecture consolidation (dedicated cycle) #3423 EPIC: Inference dispatch & architecture consolidation (dedicated cycle) — superseded (A4); owner lines: Owner: unassigned.
- EPIC: PP-TENSOR-001 — a tensor that has no bytes is a different type from one that does (MoE / tied-embedding placeholders) #3428 EPIC: PP-TENSOR-001 — a tensor that has no bytes is a different type from one th — superseded (A4); owner lines: Exposure, measured on
a672677f4: 63 non-test files inaprender-serve/srcread.ffn_{up,gate,down}_weight; 14 c
Children tracked here (REDUCE-1022)
- PP-TENSOR-001 T1: typed
TensorStorage— a dense consumer cannot receive an MoE placeholder #3433 — PP-TENSOR-001 T1: typedTensorStorage— a dense consumer cannot receive an MoE placeholder (open) - New model architectures at low cost: one quant dispatch table and shared attention/FFN blocks #5315 — New model architectures at low cost: one quant dispatch table and shared attention/FFN blocks (closed: not planned)
- Declarative recipes for finetune, distill and merge (CRUX-001/002) #5316 — Declarative recipes for finetune, distill and merge (CRUX-001/002) (closed: not planned)
- aprender-viz: draw titles and axis labels, ship runnable Facet/Coord examples #5334 — aprender-viz: draw titles and axis labels, ship runnable Facet/Coord examples (closed: not planned)
- CRUX competitor: BitNet (bitnet.cpp) — build ternary 1.58-bit inference (TQ2_0 kernels, bitnet arch, LUT/W2A8 borrow list) #5375 — CRUX competitor: BitNet (bitnet.cpp) — build ternary 1.58-bit inference (TQ2_0 kernels, bitnet arch, LUT/W2A8 borrow list) (closed: not planned)
- CRUX competitor: unslothai/unsloth (fine-tuning), gated on fine-tuning perfected (0.7x.x) #5477 — CRUX competitor: unslothai/unsloth (fine-tuning), gated on fine-tuning perfected (0.7x.x) (closed: not planned)
- cargo deny advisories is blind to RUSTSEC-2026-0378/0379 on main's lock; only cargo audit sees them #5791 — cargo deny advisories is blind to RUSTSEC-2026-0378/0379 on main's lock; only cargo audit sees them (closed: not planned)
- EPIC E9 0.76: Classical ML + AutoML #4164 — EPIC E9 0.76: Classical ML + AutoML (closed: not planned)
- EPIC E8 0.75: CRUX Fine-Tune/Distill #4002 — EPIC E8 0.75: CRUX Fine-Tune/Distill (closed: not planned)
Activity
noahgift commentedon Sep 23, 2026
Plan posted: PR #4014
Re-measured with #3422's own commands: shared-block adoption is 0 of 8 production forward files,
forward_qwen35.rsgrew from 939 to 1,474 lines in 6 days, and 42 files match on quant type. Quorum: 3 lanes, all gemini (the gpt pool is 429 until about 09-27), so the result is advisory. Nothing is applied: no child issues and no milestone moves. The PR is not armed.docs(roadmap): correct the triage after the quorum -- 3 moves reverte…
feat(session): one engine — Session<ArchForward> owns generation for …
noahgift commentedon Sep 24, 2026
Folded into this epic by issue triage (evidence /mnt/nvme-raid0/cop-inbox/evidence/triage-1623.md). Each row was a separate issue, now closed as folded; reopen any if it needs its own thread:
GgmlTypevs the vendoredggml.hid list at a pinned sha; exhaustive matches, no_ =>#3431[-]EPIC 0.74.0: Any Model — unified model support (Alfredo #3423/#3422/#3418), new architecture ≈ config + small delta, llama.cpp as reference[/-][+]EPIC E7 0.74: Any Model[/+]feat(contracts): qwen3_moe model-family contract first, with falsifie…
GgmlTypevs the vendoredggml.hid list at a pinned sha; exhaustive matches, no_ =>#3431TensorStorage— a dense consumer cannot receive an MoE placeholder #3433