Ministral 3 3B โ€” amberlin-tools

A fine-tune. mistralai/Ministral-3-3B-Instruct-2512-BF16 with a LoRA adapter merged in, trained to make Amber Linux's tool calls and to answer from what they return. It is the CPU tier: the model a machine without a GPU runs. These are the merged bf16 weights. The adapter alone is -adapter, and the builds the desktop loads are -onnx. Its larger sibling is ministral-3-8b-amberlin-tools.

Amberlin is Amber Linux's speech-first assistant. Its tools come from a local tool server, amberlin-tools; the 3B is offered the eight that read: 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 one tool round, then an answer written as one JSON object, {"summary", "answer"}. The summary is spoken and the answer is drawn.

What it fixes

The untuned 3B called some tool for almost anything: on 29 of 31 requests for a tool it is not offered (write a note, run git, draw a picture) and on 3 of 16 that needed none, a greeting answered with the clock. With its one round spent it sometimes wrote another call into the answer, which reaches the user as an empty reply.

Measured

119 held-out turns, run whole as the broker runs the 3B: one tool round on the answer branch, each call executed against the live tool server, then the answer under the answer grammar with no tools offered. Generation is the int4 CPU build in -onnx; the untuned row is the conversion, same split, same server.

untuned this model
right tool on the first call 64 / 72 70 / 72
every gold argument 48 / 72 66 / 72
no call when none was needed 13 / 16 16 / 16
asked for a tool it is not offered, declined 3 / 31 28 / 31
broken answers, all turns 9 / 119 0 / 119
the 119 turns, on an i7-13700K 59 min 47 min

A broken answer does not parse, ran to the 1,024-token budget, or carries a stray }, an open fence, a ```json or nothing. The turns run faster because it makes fewer calls.

The same split spoken by Amber Linux's own text-to-speech and transcribed by its speech recognition, on the CUDA build: the right tool on 56 of 72 against 55, a request for an unoffered tool declined 30 times in 31 against 2, no broken answer against 9. Every routing miss there is a file path said aloud.

What it does not fix. It reads a result wrong now and then: asked for 3:30pm London in Tokyo it called the tool correctly, got 23:30 back and answered 9:30pm. Nothing in these numbers scores whether an answer carries the result it was given. 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.83 to 1.02 over training while the turn scores improved; that split's targets are hand-written gold calls, so the turns are what count, and they picked the first epoch.

How it was trained

The data is distilled, for this model's turn. 1,091 whole turns written by a teacher, RadixArk/Qwen3.8-27B-NVFP4 (Apache 2.0), given the request the broker sends the 3B โ€” one tool round โ€” 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: 386 answered from a tool result, 310 recovered from a failed call, 178 answered with no tool, 124 calls to a private read trained without its result, 93 declined a tool not offered. The held-out prompts are excluded.

A turn is trained in the context it is served in. The system prompt is the broker's for the 3B, the tools are the offered eight, the answer after the round is trained with no tools offered, and every call's arguments are in the schema's property order, which the grammar enforces one way. Tool results and prompts are masked; only the calls and the answers are trained.

setting value
base mistralai/Ministral-3-3B-Instruct-2512-BF16
LoRA r 16, alpha 32, dropout 0.05
target q, k, v, o, gate, up and down projections of every language layer; the vision tower is untouched
epochs 3 trained, the first published (112 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 3 min for the three epochs

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
20
Safetensors
Model size
4B 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-3b-amberlin-tools

Adapter
(26)
this model
Quantizations
1 model

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