hal0 v0.9.1
ROCmFPX llama.cpp runner support, plus a safer notes-aware self-update.
Highlights
- ROCmFPX runner support: GGUF quant-family detection,
rocmfpx-rocm/vkfpx-moeseed profiles, and a build/quantize agent skill. hal0 updatenow shows cosign-verified release notes and asks before applying (staged prepare → commit).
Added
- Updater
prepare/commitsplit.hal0 updatedownloads + cosign-verifies + extracts a release and shows its notes — with breaking/migration callouts — before activating anything;--yesskips the prompt for headless/cron. AddsPOST /api/updates/prepare+/commit(#1075). - Release notes in the update. The release build bundles
RELEASE_NOTES.md+release.jsoninto the cosign-verified tarball; a CHANGELOG section's### Highlights/### Breaking/### Migrationssubsections become thehal0 updatecallouts (#1078). - ROCmFPX quant detection — the registry classifies the
ROCmFPX/ROCmFP{3,4,6,8}quant family from a GGUF filename so FPX slots resolve their launch command (#1068). - ROCmFPX seed profiles
rocmfpx-rocm(ROCm0 dense) andvkfpx-moe(Vulkan0 MoE) for the custom ROCmFPX runner (#1069, renamed in #1076). vkfpx-denseseed profile — the Vulkan0 lane for DENSE ROCmFP4, for prefill-bound dense workloads (Vulkan wins prompt-processing); complements the decode-optimal ROCm0rocmfpx-rocm.hal0-quantizeagent skill — build the ROCmFPX toolchain and quantize a model to ROCmFP4/FPX (#1071).- ROCmFPX bench tooling: server-ab (MTP / concurrency) aggregation in the benchmark SUMMARY, FPX sweep cells, run provenance (#1072).
- Continuous batching — per-slot
parallelfield. A slot can now set
llama-server's--parallel/-npsequence-slot count so concurrent
requests share the once-loaded weights instead of serializing through a
single sequence and thrashing one prompt cache (the win the shared-slot
architecture already earns but never harvested — every seed profile pins
--parallel 1).Noneinherits the profile; a value >1 also emits
--kv-unifiedso--ctx-sizestays a SHARED pool (each request may use the
full context) rather than being silently split to ctx/N per slot. Emitted as
a slot override (beats the profile, loses to hand-authoredextra_args);
surfaced in the slot drawer with a shared-pool hint. The dead haloai
workersfield is deprecated (inert; a non-default value now logs at
launch). MTP x batching runs but logsmtp.batched_speculation(unproven on
gfx1151, bench-gated). Seed-profile defaults stay--parallel 1pending the
on-box-npsweep (server_ab.py --mode batch). See the
concurrency-batching plan handoff.
Changed
- The plain
rocm/vulkanseed profiles are reduced to basic flags
(-ngl 999 -fa on --jinja); per-model KV/batch tuning now lives in the
model'sdefaults.extra_args(#1076). - Seed-profile
intentlabels normalised to terse structural tags
(e.g.ROCmFPX · DENSE · MTP,VULKFPX · MOE · MTP,ROCm,Embeddings) —
no served-model names, no filler. - Slot units are re-rendered through the new code during an update's
commit
step, so a subsequent restart uses current argv (#1075).
Removed
- Legacy MTP toolbox seed profiles
rocm-moeandrocm-dnse(superseded by the
ROCmFPX profiles);rocmfpx-moerenamed tovkfpx-moeto indicate its Vulkan
lane (#1076).
Migrations
- Slots pinned to a removed/renamed seed profile (
rocm-moe,rocm-dnse,rocmfpx-moe) auto-fall-back to the backend's basic profile (rocm/vulkan) on launch — existing slots keep working with no operator action (#1076).