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, Q8_0, Q4_K_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.
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.
choice, score, and noul decision typesInstall 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:
adapter/.tokenizer/.decision_embeddings.safetensors.serving.json.Do not infer decision-token meaning from token order. The presented_slot
mapping in the serving contract is authoritative.
The full frozen 23,900-row DecisionBench evaluation completed with zero row errors. Probabilities were read from the model's full candidate logits.
| evaluation | rows | accuracy | ECE | NLL |
|---|---|---|---|---|
| DecisionBench overall | 23,900 | 81.1841% | 0.0659 | 0.6491 |
| Reasoning slice | 1,200 | 43.0833% | 0.2019 | 1.1805 |
The complete result submission, including all 129 aggregate views and immutable
model/data revisions, is tracked in
Hanno-Labs/decision-bench-results.
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.
| file | what |
|---|---|
adapter/ | LoRA adapter weights and PEFT configuration |
config.json | Transformers registration and immutable Bosun loader configuration |
configuration_bosun.py | BosunConfig for AutoConfig |
modeling_bosun.py | BosunForDecision loader, prompt compiler, and decision readout |
decision_embeddings.safetensors | learned Bosun decision-token embedding rows |
tokenizer/ | exact tokenizer and decision-token vocabulary used in training |
serving.json | authoritative prompt, stable-slot, base-revision, and runtime contract |
manifest.json | content-addressed inference-package manifest and metrics |
Hanno-Labs/decision-bench-resultsHanno-Labs/bosun-xsHanno-Labs/bosun-4bFrom Hanno Labs.
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, Q8_0, Q4_K_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.
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.
choice, score, and noul decision typesInstall 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:
adapter/.tokenizer/.decision_embeddings.safetensors.serving.json.Do not infer decision-token meaning from token order. The presented_slot
mapping in the serving contract is authoritative.
The full frozen 23,900-row DecisionBench evaluation completed with zero row errors. Probabilities were read from the model's full candidate logits.
| evaluation | rows | accuracy | ECE | NLL |
|---|---|---|---|---|
| DecisionBench overall | 23,900 | 81.1841% | 0.0659 | 0.6491 |
| Reasoning slice | 1,200 | 43.0833% | 0.2019 | 1.1805 |
The complete result submission, including all 129 aggregate views and immutable
model/data revisions, is tracked in
Hanno-Labs/decision-bench-results.
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.
| file | what |
|---|---|
adapter/ | LoRA adapter weights and PEFT configuration |
config.json | Transformers registration and immutable Bosun loader configuration |
configuration_bosun.py | BosunConfig for AutoConfig |
modeling_bosun.py | BosunForDecision loader, prompt compiler, and decision readout |
decision_embeddings.safetensors | learned Bosun decision-token embedding rows |
tokenizer/ | exact tokenizer and decision-token vocabulary used in training |
serving.json | authoritative prompt, stable-slot, base-revision, and runtime contract |
manifest.json | content-addressed inference-package manifest and metrics |
Hanno-Labs/decision-bench-resultsHanno-Labs/bosun-xsHanno-Labs/bosun-4bFrom Hanno Labs.