karpo-decision-31B

A decision model: given a state (a web page, a document, a conversation: any text or JSON) and typed questions about it, it returns a probability for every option of every question in one forward pass, without generating text. Fine-tuned from google/gemma-4-31B-it, with a linear readout over the options.

  • Parameters: 31.3B in bf16, plus a 255 Γ— 5,376 readout in fp32
  • Questions: choice (up to 255 options), noul (true or false), score (a level on a scale)
  • Context: 32,768 tokens per sequence; a longer request is split by questions, each part with the full state
  • Licence: Apache-2.0

Lineage

google/gemma-4-31B β†’ google/gemma-4-31B-it β†’ karpo-decision-31B (fine-tuned)

Use

Inference code: github.com/machinepulse-ai/karpo-decision. One GPU; the weights take 62.5 GB, long requests more.

pip install "karpo-decision @ git+https://github.com/machinepulse-ai/karpo-decision"
from huggingface_hub import snapshot_download
from karpo_decision.decider import Decider

path = snapshot_download("MachinePulseAI/karpo-decision-31B")
decider = Decider.from_pretrained(path, device="cuda")
response = decider.decide({
    "state": "Order 1182: the customer asks to return a blender bought 45 days ago. Policy: returns within 30 days.",
    "questions": {
        "eligible": {"type": "noul", "instructions": "Is the return eligible under the policy?"},
        "action": {"type": "choice", "instructions": "What should the agent do?",
                   "criteria": {"refund": "Issue a full refund", "decline": "Politely decline the return",
                                "escalate": "Escalate to a supervisor"}},
    },
})
print(response["answers"])
# {"eligible": {"type": "noul", "noul": P(true)},
#  "action": {"type": "choice", "choice": <key>, "probabilities": {<key>: p, ...}, "confidence": c}}

HTTP server (POST /v1/systemone, GET /healthz):

torchrun --standalone --nproc_per_node 1 -m karpo_decision.serve.server --checkpoint "$path" --port 18440

Decision Index kit:

python -m decision_index run --engine karpo_decision.serve.engine:DecisionIndexEngine \
    --option checkpoint="$path" --out runs/karpo-decision-31B

Results

Decision Index 0.3 public suite, self-reported: 140,178 scored requests, 11 unsupported (a question over 32,768 tokens with its state). Results: runs/karpo-decision-31B.

score
Public index (chance-corrected) 75.05
Raw index 80.90
Breadth 74.69
Knowledge & Reasoning 65.46
Language Understanding 76.78
Retrieval & Classification 76.42
Tools & Automation 88.39
Arts & Human Taste 68.21

The Full score (the leaderboard's private tests) will be added once published.

Limitations

  • Text only: the vision weights are in the checkpoint but unused.
  • Not a chat or text-generation model; generation was not evaluated.
  • Probabilities are not calibrated (temperature 1.0).
  • A question that does not fit in 32,768 tokens with its state is refused, never truncated.
  • It always picks one of the given options.

Licence

Apache-2.0 (LICENSE), for the weights and the inference code. A modified version of google/gemma-4-31B-it (Apache-2.0): decoder weights fine-tuned, readout added.

Downloads last month
3
Safetensors
Model size
31B params
Tensor type
BF16
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for MachinePulseAI/karpo-decision-31B

Finetuned
(358)
this model

Collection including MachinePulseAI/karpo-decision-31B

Evaluation results

  • Decision Index 0.3, public index (chance-corrected, self-reported) on Decision Index 0.3 public suite (140,178 scored requests; the index averages 37 benchmarks)
    self-reported
    75.050