OsaurusAI/Raptor-0.6-4B-JANG_6M
Raptor 0.6 — a Spark-X2.5-4B tuned on Osaurus harness decisions, quantized to 3.41 GiB for Apple Silicon.
Iteration 2 (2026-09-28). The weights in this repo were replaced with a new, stronger tune (
model_version2 inosaurus.json, so Osaurus can tell you when your local copy is the older iteration). Iteration 1 — the attention-only tune first published on 2026-09-10 — is described in this repo's history. The release write-up at osaurus.ai/models/raptor-06 and the announcement at osaurus.ai/blog/raptor-06 describe iteration 1.
Raptor 0.6 is a supervised fine-tune of XHToken/Spark-X2.5-4B (4.112B dense, reasoning + tool use), built for life inside Osaurus: when to call a tool and when to just answer, which tool to use, how to recover from errors, when to ask, and how to hand work to sub-agents — with reasoning on (<think>) and off. Tokenizer and chat template are unchanged from the base.
This is a JANG_6M bundle: attention and the tied embedding at 8-bit, the MLP at 6-bit, group size 64, every group scale in bfloat16, and the per-head attention gate and all norms kept in full precision.
Different backbone from Raptor v0.5 and the withdrawn 0.6 preview. Raptor 0.6 runs on the
spark2_5architecture; none of the runtime, parser or cache assumptions of v0.5 (Ling-3.0-tiny hybrid MoE) or the Nanbeige-based preview carry over.
What changed vs iteration 1
- A wider tune. LoRA SFT (rank 16, α 32) on attention and MLP — 180 matrices, merged into the weights — where iteration 1 touched attention only.
- A harness-built corpus. ~3.5k decisions: on-policy self-distilled answers (the base model's own accepted replies replace hand-written ones where it already gets them right), plus targeted batches for the weaknesses found in iteration 1 — MCP ambiguity, undo/recovery, answer-vs-ask, scheduling, legacy tool discovery, act-don't-claim, acting despite history, confirm-before-destructive, and no-folder onboarding.
- Per-decision loss (every decision weighs the same regardless of length), early checkpoint (6 of 16 updates) — the dose that kept the gains without the fabrication rise seen later.
Behaviour vs iteration 1 on the Osaurus harness suite (3 seeds per model, seed-averaged per case, bootstrap 95% CI, Bonferroni per category):
| comparison vs iteration 1 | cases | delta [95% CI] | significant gains | significant losses |
|---|---|---|---|---|
| Osaurus main semantics (parallel calls valid) | 488 | +4.3 [+2.0, +6.7] | no-tool answers +17, sandbox +20 | none |
| Original harness scoring | 488 | +7.3 [+4.8, +9.8] | no-tool +17, sandbox +23 | none |
| All 3 system prompts | 1464 | +4.8 [+2.9, +6.7] | clarification +13, no-tool +13, sandbox +14 | none |
| JANG_6M precision (emulated) | 488 | +4.9 [+2.5, +7.4] | clarification +12, delegation +20 | none |
Quality of this quantization — measured, not estimated
KL divergence (nats per next-token position) and top-1 agreement against the model's own bf16 weights, full-sequence forward on two held-out sets that were never in calibration.
| held-out set | tokens | this bundle (AWQ + GPTQ + imatrix) | same tiers, uncalibrated rounding |
|---|---|---|---|
| Harness conversations + own generations (reasoning on/off, tool calls) | 113,883 | mean KL 0.0140 · top-1 96.75% | 0.0402 · 94.42% |
| Mixed prompts (harness, code, tool calls, general) | 307,300 | mean KL 0.0102 · top-1 97.45% | 0.0268 · 95.82% |
Calibration cuts the KL 2.6–2.9× at identical size and speed; the gain is largest on harness conversations (reasoning-on −69%, reasoning-off −62%). These sets are long reasoning and tool traces and are harder per token than the set on the iteration-1 card, so the numbers are not comparable with that card's.
| iteration 2 (this repo) | iteration 1 | |
|---|---|---|
| Size on disk | 3.41 GiB | 3.41 GiB |
| bits/weight | 7.126 | 7.126 |
| decode | 105.4 tok/s | 104.8 tok/s |
| prefill | 5042 tok/s | 5087 tok/s |
Median of 4 probes at a fixed condition (512-token prompt, 128 generated), first probe discarded, M5 Max; the two bundles are within measurement spread of each other.
There is no stock-MLX comparison row, and that is not an omission. mlx-lm has no spark2_5 architecture, so no stock MLX quantization of this model exists to score against; the uncalibrated-rounding column above is the closest equivalent. The MLX runtime ships with the Osaurus harness.
Calibration
1.69M tokens captured on these tuned weights (the tune moved attention and MLP, so iteration 1's statistics were not reused), taken from Osaurus harness conversations — system prompt + real Osaurus tool schemas, multi-turn, tool calls and grouped tool results, errors and recovery, no-folder turns — with reasoning on and off, plus the model's own generations on harness, code, tool-call and general prompts. One capture drives activation-aware scaling (72/72 norm fold sites, 36/36 attention gate projections), per-channel importance, and the error-corrected fit (180/181 tensors; the holdout is the tied embedding, a lookup with no input activation to condition on).
The capture has no Chinese, academic multiple-choice or >4K-token text. The Chinese-answer behaviour check passes, but quantization fidelity on those slices is not separately measured.
Running it in Osaurus
Requires Osaurus 0.25.0 or newer (declared in osaurus.json). Point Osaurus at the repo and it serves with the sampling, reasoning and tool-call contract below already declared in the bundle.
No working folder attached: the model does not reliably learn the "please add a folder" reply from training alone. When no folder is attached, append this to the system prompt — on 12 fresh requests it produced the right reply 96% of the time with reasoning on and 85% with reasoning off, versus 0% without it:
Workspace status: no folder is attached to this chat, so you cannot see or change any files on the user's Mac and no file tools exist. If the user asks for anything involving their files, folders, code or documents, do not call a tool: reply that no folder is attached and tell them to click the + button in this chat and add the folder that contains it. Offer to help as soon as it is added.
from mlx_lm import load, generate
from mlx_lm.sample_utils import make_sampler
model, tok = load("OsaurusAI/Raptor-0.6-4B-JANG_6M")
prompt = tok.apply_chat_template(
[{"role": "user", "content": "What is 84 * 3 / 2?"}],
add_generation_prompt=True,
)
print(generate(model, tok, prompt=prompt, max_tokens=512,
sampler=make_sampler(temp=1.0, top_p=0.95)))
A bare mlx_lm.load will not resolve spark2_5 on its own — the runtime ships with the harness.
GGUF: OsaurusAI/Raptor-0.6-4B-GGUF (for llama.cpp-family runtimes and Osaurus for Windows) is still built from iteration 1 weights. Osaurus on Mac runs this MLX bundle, not the GGUF.
Serving contract
- Sampling:
temperature=1.0,top_p=0.95,top_k=-1, no repetition penalty — carried in bothgeneration_config.jsonandjang_config.json. - Reasoning is ON by default. The generation prompt ends with
<|Bot|><think>; withenable_thinking=falseit ends<|Bot|></think>. A reasoning parser that waits for a literal<think>in the output stream will never see one. - Give reasoning room. Traces on hard prompts can exceed 8,192 output tokens.
- Tools render into the first system block (
## Toolsplus a<tools>JSON list), so a tool-set change is a full re-prefill, not a suffix append. - Tool call shape, no newlines:
<tool_call>NAME<arg_key>k</arg_key><arg_value>v</arg_value></tool_call>. Several independent calls may be emitted in one message; Osaurus runs them in parallel. Tool results go in a<|Tool|>block; consecutive tool messages are merged. generation_config.jsoncarries the base model's nonstandardmax_tokenskey and nomax_new_tokens; pass your own cap.
Known limits — please read before deploying
This is a 4B agent model, not a zero-failure model. Measured against iteration 1 (3 seeds):
- Multi-step tasks: it finishes early without the required action more often (4.5% vs 2.1%).
- Safety approvals: it runs a forbidden tool without approval slightly more often (27/160 vs 17/140 pooled). Keep your harness's approval step for mutations.
- Outside a harness, keep a system prompt. With reasoning off and no system prompt at all, a tool offered mid-conversation can get a written answer instead of a call (4/12 sampled runs call correctly — 3/12 on this model's own bf16 weights, so it is not quantization damage). A one-line instruction to call available tools restores it (11/12); with reasoning on it is 12/12.
- Ordinary 4B mistakes remain: wrong tool names, schema and JSON slips, unsupported success claims, invented identifiers, and arithmetic or recall errors.
- Identity responses are not enforced; the model may describe itself as Spark.
Provenance
Quantized by Jinho Jang (eric@osaurus.ai). Base model XHToken/Spark-X2.5-4B (rev 5e10fcc), apache-2.0. Iteration 2 — see osaurus.json (model_version) for the bundle iteration and required_osaurus_version for the minimum runtime.
History: iteration 1 was first published on 2026-09-10 as Raptor-0.6.1-preview-JANG_6M and renamed to this repo for the 0.6 release on 2026-09-15 (the old name redirects here); its last revision is 41328ca. Iteration 2 replaced the weights on 2026-09-28.
License
Raptor 0.6 is a derivative of XHToken/Spark-X2.5-4B by the SparkLLM Team, released under the Apache License, Version 2.0. The full license text is in the LICENSE file, carried over unchanged from the base model.
This model is distributed under the same Apache License, Version 2.0. In accordance with Section 4 of that license, the changes made to the original work are: (1) a supervised fine-tune of the attention and MLP projections (rank-16 LoRA on 180 matrices, merged into the weights; embeddings, norms and the attention gate unchanged), and (2) quantization of the merged weights to the JANG_6M format (affine 6-bit MLP, 8-bit attention and embedding, group size 64) with AWQ, GPTQ and importance-matrix calibration. The tokenizer, chat template and generation defaults are unchanged from the base model. Osaurus, Raptor and the Osaurus banner are trademarks of Osaurus and are not covered by the Apache license.
If you use this model, please also credit the base model:
@misc{sparkx2.5,
title = {Spark-X2.5 4B&1.7B: Pushing the Limits of Agentic Capabilities in On-Device Models},
author = {SparkLLM Team},
year = {2026}
}