Release · October 7, 2026

Introducing Saina Helm

Saina is the decision layer for automation: models built only for the choosing step in a workflow. Helm is the first of them, and the best decision model under 1 billion parameters for intent classification and routing. Open weights, and v1.0 is out today.

Saina · October 7, 2026 · 5 min read

A lot of what automations do isn't writing. It's choosing. Which team takes this ticket, whether it needs a reply today, which tags apply, whether this invoice can be paid without a second look. Most teams answer those questions with a chat model and a parser, because that's the model they already have.

Saina is the decision layer for automation: models built only for that choosing step. You describe the situation, ask typed questions, list the options, and get back a probability for every option. Nothing is generated, so there's no free text to parse and no answer that falls outside your list. If you're new to the idea, the decision model page covers the category, including hosted options.

Saina Helm is the first of them: the best decision model under 1 billion parameters, with open weights, and v1.0 is out today. Best depends on the use case, of course. Where Helm is best is intent classification and routing, where it beats models many times its size; the benchmarks show where it stands and what's still in training.

Why a family

Different decisions need different trade-offs: a small model you can run on a CPU next to your data, larger ones for harder judgment calls. We expect to ship more than one model, and we'd rather you never have to rewrite a workflow to switch between them.

So every Saina model will speak the same contract: /v1/ask, the same four question types, the same answer shape. Helm is the first model to implement it. When the next one arrives, changing the model field should be the only change you make.

What Helm does

Helm takes a state (a ticket, an email, a JSON record, anything you can put in text) and between 1 and 256 questions in a single call. Each question has one of four types:

Every answer comes back with its probabilities. In decision mode, Helm also tells you whether it's sure enough to act on, which matters more than the answer itself.

Here's a real ticket that's half billing problem and half login problem:

from saina import Saina

client = Saina('https://your-saina-server', api_key='...')

result = client.ask(
    model='saina-helm-0.8b',
    mode='decision',
    threshold=0.8,
    state="Hi, I was charged twice for my October invoice and I can't log in "
          "to download the receipt. Our finance close is Friday.",
    questions={
        'team': {
            'type': 'single_choice',
            'question': 'Which team should handle this ticket?',
            'options': {
                'billing': 'Billing: charges, refunds, invoices',
                'technical': 'Technical support: login, bugs, outages',
                'sales': 'Sales: plans, upgrades, quotes',
            },
        },
        'urgent': {'type': 'yes_no', 'question': 'Does this need a reply today?'},
        'tags': {
            'type': 'multi_choice',
            'question': 'Which topics does the ticket mention?',
            'threshold': 0.5,
            'options': {
                'duplicate_charge': 'Duplicate charge',
                'login': 'Login problem',
                'receipt': 'Receipt or invoice request',
                'cancellation': 'Cancellation',
            },
        },
    },
)

And what came back (real output from the demo Space on 2026-10-07, rounded):

{
  "team":   { "selection": null, "reason": "below_threshold",
              "probabilities": { "billing": 0.42, "technical": 0.58, "sales": 0.00 } },
  "urgent": { "selected": null, "reason": "below_threshold",
              "yes": 0.60, "no": 0.40 },
  "tags":   { "selections": ["duplicate_charge", "receipt"], "reason": "accepted",
              "memberships": { "duplicate_charge": 0.97, "login": 0.38,
                               "receipt": 0.72, "cancellation": 0.04 } }
}

(The answer field differs by type: selection for choices, selected for yes/no, selections for tags.)

Helm leaned towards technical support but split 58/42 with billing, which is fair for this ticket. A chat model would have picked one and moved on. Helm returned no selection and a reason, so the workflow can send the ticket to a person. The urgency call is also too close to automate. The tags are confident enough to apply. They missed the login problem (0.38), which is the kind of thing you find by testing on your own tickets, not by trusting a demo.

That's the core of the design:

Where it runs

Helm is meant to run where your data already is.

The n8n routing guide walks through the support-routing workflow end to end.

You decide when the model changes

Helm v1.0 is pinned: tag v1.0 on Hugging Face and 0.8b-v1.0 on Ollama. A new version only reaches you when you choose it, and the version numbers mean something:

The same rule will apply to every Saina model.

What Helm v1.0 doesn't do yet

What's next

Try it

Questions or integration help: [email protected].