Downloads · 30 days
35
6% of all-time downloads
keakai/keak-nova-GGUF
keak-nova-GGUF is a machine learning model from keakai. Use it for the machine learning task on the model card, and read the license before you ship it in a product.
NOVA-V2-RESULTS.md documented Nova v2's guard collapse (0.629 base - 0.303 final) and, at the time, diagnosed it as fine-tuning generically eroding safety alignment. That diagnosis was later found to have the right di…
Downloads · 30 days
35
6% of all-time downloads
All-time downloads
613
Public
Repo size
32.7 GB
Likes
0
Public
Click a slice to open those files.
.gguf21.3 GB · 100%
From the Hugging Face model README
NOVA-V2-RESULTS.md documented Nova v2's guard collapse (0.629 base -> 0.303 final) and, at the
time, diagnosed it as fine-tuning generically eroding safety alignment. That diagnosis was later
found to have the right direction but the wrong mechanism: mlx_vlm.lora's --steps N silently
truncates the dataset from the front with no shuffling, and v2's training window never contained a
single guard row (they were suite-grouped near the end of the file). Full details in
train/mlx_vlm_patches/README.md, "THE BIG ONE" section.
The fix: shuffle the training file once (train/data/split-v9-shuffled/) and use --steps 0,
which this codebase special-cases to a true full pass (len(dataset) // batch_size). This run is
the test of whether that fix actually resolves the regression, versus needing to also oversample
guard rows (the fallback split-v9-guardboost/ variant, built but unused).
Full keakbench.run, base model as control (out/nova-v4-bench/base.json) vs the epoch_0
checkpoint (out/nova-v4-bench/epoch_0_nova-v4.json), both against the live mlxvlm: provider
with the base-vs-adapter control discipline run-nova.sh requires:
| suite | base (untrained) | epoch_0_nova-v4 | delta |
|---|---|---|---|
| repair | 0.806 | 0.944 | +0.138 |
| vocab | 0.800 | 0.992 | +0.192 |
| command | 0.809 | 1.000 | +0.191 |
| route | 0.768 | 1.000 | +0.232 |
| speak | 0.875 | 1.000 | +0.125 |
| tongue | 0.663 | 1.000 | +0.337 |
| guard | 0.629 | 0.970 | +0.341 |
| decompose | 0.872 | 0.878 | +0.006 |
| OVERALL | 0.778 | 0.973 | +0.195 |
Guard's 2 remaining failures (2/66) are both capability (answered, wrong) — zero
SAFETY (complied when it should refuse) failures. This is the number that matters: training on
the shuffled full-pass data improved safety behaviour rather than eroding it, the opposite of
what v2 showed. That confirms the truncation bug, not fine-tuning itself, was the cause of v2's
collapse.
clip_gradients=1.0) — delayed to step 794, still died. mx.clip
cannot rescue an already-nan value; the real trigger is a forward-pass overflow, not a large
but finite gradient.train_epoch was @mx.compile'd — the guard's Python branch
was traced once on clean early batches and the "apply the update" path got baked in permanently;
the guard's own warnings kept printing (a side effect outside the traced graph) while the
compiled graph ignored the check entirely. Every batch from ~step 600 onward corrupted the
model regardless of the "skip" logging.@mx.compile removed from train_epoch — the guard genuinely works now (2302 real skips
logged), but nan onset in the resumed second epoch still occurs (this time ~step 560-600),
just later than before and non-destructively. Epoch 0 alone, from a zero-initialized adapter,
has completed cleanly in all four attempts. Only the second-epoch continuation (resuming an
already-adapted checkpoint) has ever failed — the failure step varies run to run (322, 794,
~560-600) despite identical starting checkpoint and identical data order, which is consistent
with LoRA dropout's randomness interacting with a structural instability specific to continuing
training on already-adapted weights, not a single bad training example (checked: no anomalies
in the data around any of the three failure windows).epoch_0_nova-v4.safetensors as-isnova-v4-safe2.safetensors, ~560
additional good steps before the skip-guard correctly froze it) scored lower on guard (0.886)
than epoch_0 alone — a second epoch is not obviously worth the risk here, at least not without
further work (lower LR for the continuation, or genuine per-epoch reshuffling, are the next
levers if a second epoch is revisited later).