Instructions to use hyperquader/ministral-3-8b-amberlin-tools with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use hyperquader/ministral-3-8b-amberlin-tools with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="hyperquader/ministral-3-8b-amberlin-tools") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("hyperquader/ministral-3-8b-amberlin-tools") model = AutoModelForMultimodalLM.from_pretrained("hyperquader/ministral-3-8b-amberlin-tools", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use hyperquader/ministral-3-8b-amberlin-tools with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "hyperquader/ministral-3-8b-amberlin-tools" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "hyperquader/ministral-3-8b-amberlin-tools", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/hyperquader/ministral-3-8b-amberlin-tools
- SGLang
How to use hyperquader/ministral-3-8b-amberlin-tools with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "hyperquader/ministral-3-8b-amberlin-tools" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "hyperquader/ministral-3-8b-amberlin-tools", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "hyperquader/ministral-3-8b-amberlin-tools" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "hyperquader/ministral-3-8b-amberlin-tools", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use hyperquader/ministral-3-8b-amberlin-tools with Docker Model Runner:
docker model run hf.co/hyperquader/ministral-3-8b-amberlin-tools
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
Model tree for hyperquader/ministral-3-8b-amberlin-tools
Base model
mistralai/Ministral-3-8B-Base-2512