CoolFace
Modelpublic

Hanno-Labs/bosun-v3.1-0.6b

sourceHugging Faceapache-2.0updated 3d agoView on Hugging Face
0likes746downloads
Model Card

Bosun v3.1 0.6B

Copyright 2026 Clause Logic Inc. Licensed under the Apache License, Version 2.0. See LICENSE and NOTICE.

[image]

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, and noul decision 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:

python
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:

  1. 1.Load the pinned Qwen base revision.
  2. 2.Apply the PEFT adapter from adapter/.
  3. 3.Load the tokenizer snapshot from tokenizer/.
  4. 4.Restore the learned decision-token rows from decision_embeddings.safetensors.
  5. 5.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.

evaluationrowsaccuracyECENLL
DecisionBench overall23,90081.1841%0.06590.6491
Reasoning slice1,20043.0833%0.20191.1805

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

filewhat
adapter/LoRA adapter weights and PEFT configuration
config.jsonTransformers registration and immutable Bosun loader configuration
configuration_bosun.pyBosunConfig for AutoConfig
modeling_bosun.pyBosunForDecision loader, prompt compiler, and decision readout
decision_embeddings.safetensorslearned Bosun decision-token embedding rows
tokenizer/exact tokenizer and decision-token vocabulary used in training
serving.jsonauthoritative prompt, stable-slot, base-revision, and runtime contract
manifest.jsoncontent-addressed inference-package manifest and metrics

Provenance

  • —Training rows: 130,000 (80,000 original plus 50,000 ecosystem)
  • —Epochs completed: 3
  • —Selected epoch: 2
  • —Seed: 20260918

Links

From Hanno Labs.