Ministral 3 8B โ€” amberlin-tools

A fine-tune. mistralai/Ministral-3-8B-Instruct-2512-BF16 with a LoRA adapter merged in, trained to make Amber Linux's tool calls and to answer from what they return. These are the merged bf16 weights. The adapter alone is -adapter, and the build the desktop loads is -onnx.

Amberlin is Amber Linux's speech-first assistant. Its tools come from a local tool server, amberlin-tools: the clock, date arithmetic, time zones, this machine's readings, a search over notes, clipboard and terminal history, and reading, listing and searching files. A turn is up to two tool rounds, then an answer written as one JSON object, {"summary", "answer"}. The summary is spoken and the answer is drawn.

What it fixes

The untuned 8B routes well. What it got wrong was the answer after a tool call failed: it reached for one more call with no rounds left and wrote that call into the answer, which broke the object with a stray }, an open code fence or a loop. After a failed call it broke 17 of 39 answers. Neither a prompt change nor another round removed it. This adapter does.

Measured

119 held-out turns, run whole as the broker runs them: two tool rounds, each call executed against the live tool server, then the answer under the answer grammar with no tools offered. Generation is the int4 CUDA build in -onnx, constrained by a grammar built from the tool schemas, with the broker's loop cutter on. The untuned row is the conversion, same split, same server.

untuned this model
right tool on the first call 68 / 72 71 / 72
every gold argument 62 / 72 62 / 72
no call when none was needed 16 / 16 16 / 16
asked for a tool it is not offered, declined 14 / 31 20 / 31
broken answers, all turns 24 / 119 0 / 119
broken answers after a failed call 17 / 39 0 / 39
turns with a second call 32 8

A broken answer does not parse, ran to the 1,024-token budget, or carries a stray }, an open fence or a ```json.

After a failed call it now writes one sentence saying why (the path is outside the folders it may read, the file does not exist) and stops. The untuned model retried, usually in an allowed folder, and answered a question nobody asked from the user's real files.

What it does not fix. Asked for something only a tool it is not offered could do (write a note, run git, draw a picture), it still calls an offered tool on 11 of 31. The held-out prompts are written like the training prompts, so every rate here is in-distribution, not a production expectation. Loss on the held-out split rose from 0.615 to 0.814 over training while the turn scores improved; that split's targets are hand-written gold calls, not the teacher's turns, so the loss tracks wording and the turns are what count.

How it was trained

The data is distilled. 957 whole turns written by a teacher, RadixArk/Qwen3.8-27B-NVFP4 (Apache 2.0), served the request the broker sends and calling the same live tool server. Every call was executed; a turn was kept only if its calls passed the schemas and its answer passed mechanical checks (parses, no narration, no claimed action, no leaked call syntax). By kind: 371 answered from a tool result, 180 answered with no tool, 171 recovered from a failed call, 144 calls to a private read, trained without its result, 91 declined a tool not offered. The held-out prompts are excluded from capture.

A turn is trained in the context it is served in. The system prompt is the broker's, the tools are the offered subset, an answer after the rounds are spent is trained with no tools offered, and every call's arguments are in the schema's property order. That last one matters: the grammar follows the schema's order one way only, and a first run trained on the teacher's own order lost search_files' limit on 7 of 72 calls. Tool results and prompts are masked; only the calls and the answers are trained.

setting value
base mistralai/Ministral-3-8B-Instruct-2512-BF16
LoRA r 16, alpha 32, dropout 0.05
target q, k, v, o, gate, up and down projections of the 34 language layers; the vision tower is untouched
epochs 3, 198 steps, effective batch 16
learning rate 2e-4, cosine, 3 % warm-up
sequence 4,096 tokens, over-length turns dropped, never truncated
precision bf16
hardware one DGX Spark, 4 h 44 min

The pipeline is amberlin-trainstation.

Using it

The checkpoint is the base's image-text-to-text model with the language tower changed. Load it as the base loads, AutoModelForImageTextToText, and render prompts with its chat template. A call is [TOOL_CALLS]name[ARGS]{โ€ฆ}, both markers single special tokens. It was trained on Amberlin's system prompt and answer object; without them it is a Ministral 3 that calls tools somewhat more carefully.

Licence and attribution

Apache 2.0, inherited from the base model. The base weights are Mistral AI's work and the training turns were written by Qwen3.8-27B; this repository contributes the training and the measurements.

Downloads last month
17
Safetensors
Model size
9B params
Tensor type
BF16
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for hyperquader/ministral-3-8b-amberlin-tools

Adapter
(12)
this model
Quantizations
1 model

Collection including hyperquader/ministral-3-8b-amberlin-tools