Community model/runner profiles for hal0 — one TOML file per profile, schema-validated, PR-reviewed.
A profile is a versioned, named recipe: which model, which runner, which lane, which flags — the exact configuration someone ran to get a given result. hal0-profiles is the registry: versioned profile files (llama.cpp args, slot configs, quant choices) with JSON schema CI, reviewed through the same PR flow as benchmark submissions. Each profile card on the gallery links to the bench runs that used it (joined on profile slug), so "this config produced these numbers" ties the profile registry to the benchmark pipeline.
One TOML file per profile at profiles/<slug>.toml. Field names are load-bearing — hal0-web's gallery and the future hal0 profile install read them directly. Schema version 1, exactly this shape:
schema = 1
[profile]
slug = "strix-mtp-max" # ^[a-z0-9][a-z0-9-]{2,63}$ ; must equal filename stem
title = "Speculative decode, everything on"
summary = "draft-mtp with an f16 KV cache. The fastest tokens this box produces, at the cost of 19 GB resident and no room for a second big slot."
intent = "chat" # chat | coding | agent | vision | draft | moe | embedding
author = "hal0-ci" # github handle, no leading @
first_party = true # optional, default false
[runner]
kind = "llama-server" # llama-server | flm | onnx | vllm
lane = "rocm" # rocm | vulkan_radv | default | npu
min_build = "b9219" # optional
image = "ghcr.io/hal0ai/amd-strix-halo-toolboxes:rocm-7.2.4-rocmfp4-server" # optional
[model]
id = "chadrock3-6-35b-uncensored-mtp-strix-lean" # primary model id (roster id form)
quant = "q4_k_xl" # optional
compatible = ["chadrock-35b-ace-saber", "qwen3.6-35b-a3b-crown-halo-mtp-dynamic"] # optional
[args]
raw = "-ngl 99 -c 2048 -fa 1 -ctk f16 -ctv f16 --parallel 1 -b 512 --draft-max 4 --draft-min 1 --mtp on"
[requires] # optional table
gtt_gb = 24
exclusive = false
[[history]] # newest first; history[0].v is the current version
v = 4
date = 2026-06-19
note = "pin build b9219 — draft-mtp accept regressed on b9101"Profile files never carry throughput, TTFT, or memory numbers. Those live in first-party bench data and get joined to a profile by slug at hal0-web build time. A profile describes how to run something; the numbers describing how well it ran are a separate, independently-submitted dataset. This keeps a profile's history clean (config changes only) and lets multiple bench runs accumulate against the same profile without rewriting it.
hal0-profiles/
README.md # this file
CONTRIBUTING.md # submission guide
LICENSE # Apache-2.0
package.json # smol-toml, ajv, ajv-formats; "test", "validate"
schema/profile.schema.json # JSON Schema (draft 2020-12) for the parsed TOML
lib/validate.mjs # parse + schema + cross-checks
scripts/validate.mjs # CLI: validate file args, or all profiles with none
scripts/test/ # validator test suite + fixtures
profiles/<slug>.toml # one file per profile
.github/workflows/validate.yml # CI: validates changed profiles on PRs, all on push to main
.github/pull_request_template.md
Eight seed profiles ship in profiles/, carried over verbatim from real sweep-derived data: agent-27b-tools, coder-next-40b, kv-q8-longctx, lean-9b-daily, strix-mtp-max, tiny-draft-0-8b, vision-27b, vulkan-fallback.
npm install
npm test # validator's own test suite
npm run validate # validates every profile in profiles/
npm run validate -- profiles/strix-mtp-max.toml # validate specific files
Browse and filter the full gallery at hal0.dev/profiles (coming soon). Installing a profile straight from the CLI — hal0 profile install <slug> — is planned and may trail the gallery slightly. Until then, this repo is the source of truth: read the TOML, copy the args.
Apache-2.0.