Hanno-Labs/bosun-v3.1-0.6b
Bosun v3.1 0.6B
Copyright 2026 Clause Logic Inc. Licensed under the Apache License, Version 2.0. See LICENSE and NOTICE.
GGUF weights: Bosun v3.1 0.6B GGUF (F16, Q80, Q4K_M).
A small model for structured decisions. Bosun v3.1 evaluates typed questions against a shared state and returns native probability distributions over the available choices. It is built for decision points inside agents and software: classification, routing, scoring, abstention, policy checks, and other places where the useful output is a calibrated decision rather than generated prose.
This release is built on `Qwen/Qwen3-0.6B` at pinned revision c1899de289a04d12100db370d81485cdf75e47ca.
This is a custom Bosun decision model. Its Transformers model class loads the pinned base, PEFT adapter, tokenizer, stable decision-token embeddings, and serving contract together.
Changelog
v3.1 — typed decisions (current)
Bosun v3.1 moves from pairwise yes/no judgment to a general typed-decision contract. Candidate answers are assigned to stable presented slots and scored through learned decision-token logits, producing a normalized probability distribution without autoregressive JSON parsing.
- 256 learned decision tokens
- Up to 255 runtime choices plus one null slot
choice,score, andnouldecision types- 130,000 training rows: 80,000 original plus 50,000 ecosystem rows
- Three completed epochs; epoch 2 selected by macro-family accuracy
Loading contract
Install transformers, peft, safetensors, and accelerate, then load the complete Bosun runtime through Transformers remote code:
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"Hanno-Labs/bosun-v3.1-0.6b",
trust_remote_code=True,
dtype="auto",
device_map="auto",
)
choice = model.predict(
state={"request": "Customer cannot access their account."},
instructions="Choose the best support route.",
decision_type="choice",
row_id="example-1",
candidates=[
{"id": "billing", "label": "Billing", "description": "Payment issue"},
{"id": "access", "label": "Account access", "description": "Login issue"},
],
)
score = model.predict(
state={"ticket": "Duplicate charge; customer cannot buy groceries."},
instructions="Rate the support urgency.",
decision_type="score",
row_id="example-2",
candidates=[
{"id": "0", "label": "Low"},
{"id": "1", "label": "Medium"},
{"id": "2", "label": "High"},
],
)
noul = model.predict(
state={"ticket": "The bank confirmed a duplicate charge."},
instructions="Was the duplicate charge confirmed?",
decision_type="noul",
row_id="example-3",
candidates=[
{"id": "yes", "label": "Yes"},
{"id": "no", "label": "No"},
],
)
print(choice["probabilities"])
print(score["probabilities"])
print(noul["probabilities"])trust_remote_code=True is required because Bosun's typed-decision readout is not part of stock Transformers. model.forward(...) remains compatible with the underlying causal LM; model.decision_logits(...) returns all 256 stable slot logits, and model.predict(...) renders the verified prompt contract, masks unused slots, and maps probabilities back to the caller's candidate order.
serving.json remains the source of truth for the stable-slot contract:
- Load the pinned Qwen base revision.
- Apply the PEFT adapter from
adapter/. - Load the tokenizer snapshot from
tokenizer/. - Restore the learned decision-token rows from
decision_embeddings.safetensors. - Use the prompt schema, candidate masking, and stable-slot mapping recorded in
serving.json.
Do not infer decision-token meaning from token order. The presented_slot mapping in the serving contract is authoritative.
Results
DecisionBench
The full frozen 23,900-row DecisionBench evaluation completed with zero row errors. Probabilities were read from the model's full candidate logits.
The complete result submission, including all 129 aggregate views and immutable model/data revisions, is tracked in `Hanno-Labs/decision-bench-results`.
Checkpoint selection
The selected epoch reached 88.39% accuracy and 88.3907% macro-family accuracy on the frozen training-heldout evaluation. This evaluation covers families represented in training; it is not a DecisionBench result or evidence of unseen-task OOD generalization.
Inference files
Provenance
- Training rows: 130,000 (80,000 original plus 50,000 ecosystem)
- Epochs completed: 3
- Selected epoch: 2
- Seed: 20260918
Links
- DecisionBench results — `Hanno-Labs/decision-bench-results`
- Bosun-XS — `Hanno-Labs/bosun-xs`
- Bosun-4B — `Hanno-Labs/bosun-4b`
- Introducing Bosun — Hanno Labs field note
From Hanno Labs.
