Saina Helm 2 Omni 0.8B
A small decision model that reads text, images and audio. Give it some state, up to 8 images and 4 audio clips, and any number of typed questions (yes/no, single choice, multiple choice or rating), and it returns a probability for every answer. No text is generated.
Every question in a request is answered from one pass over the shared state and media, like Saina Helm 2 0.8B, the text-only model it sits beside. Images are read by the Qwen3.5 vision tower; each audio clip is turned into a log-mel spectrogram image and read the same way, so there are no separate audio weights.
Intended use
Decisions where a wrong answer is recoverable or reviewed before it takes effect:
routing a support message with its screenshot, checking a receipt against a claim,
flagging a call whose voice may be synthetic, tagging sounds, spoken commands or
instruments. Where a wrong answer has a cost, run with mode='decision' so
low-confidence questions escalate instead of guessing. Validate on your own labelled
data, for your own label space, before use.
Out of scope
- Generating text of any kind; the model only scores the options you supply.
- Final, unreviewed decisions with material consequences for a person (credit, employment, medical, legal), even at high confidence. A synthetic-voice score is a signal for extra verification, not proof of fraud.
- Identifying or classifying people: faces, voices of specific individuals, personal attributes, demographics, or anything used to profile individuals.
- Safety filtering, harm detection or content moderation; not trained or evaluated for it.
- Reading long documents from images: images are read at up to 1.6 megapixels, so fine print is unreliable. Speech transcription: the model hears short clips as spectrograms and can recognise short words, not follow long speech.
- Video, and audio longer than 10 seconds (refused, never cut).
- Non-English text and speech are largely untested.
- Decisions taken directly on untrusted content. Text, images and audio can all carry instructions that steer the answers; bound the authority you grant the output.
Usage
pip install "saina[local,media]>=0.4.0"
from saina.transformers import HelmModel
helm = HelmModel.from_pretrained('run-saina/saina-helm-2-omni-0.8b', revision='<commit>', device='cuda:0')
answers = helm.ask(
model='saina-helm-2-omni-0.8b',
state='Inbound call to the bank: a short recording of English speech. '
'The caller asks to raise their daily transfer limit.',
audios=['call.wav'], # paths, URLs, bytes, (samples, rate) arrays or base64 data URLs
questions={
'spoof': {'type': 'yes_no',
'question': 'Is this speech synthesized or voice-converted by a computer (a spoof)?'},
'action': {'type': 'single_choice', 'question': 'How should the agent proceed?',
'options': {'proceed': 'Proceed with normal checks',
'verify': 'Require extra verification because the voice may be fake',
'block': 'Refuse and flag the account'}},
},
)
answers = helm.ask(
model='saina-helm-2-omni-0.8b',
state={'claimed_usd': 244.80, 'policy': 'Client meals up to $300 with an itemized receipt.'},
images=['receipt.png'],
questions={'total_matches': {'type': 'yes_no', 'question': 'Does the receipt total match the claimed amount?'}},
)
Pin revision to a commit. The saina package builds
the exact prompt the model was trained on, places the images and spectrograms where
training put them, and applies the trained head; scores depend on that, so use it rather
than a custom prompt or generate(). No remote code is executed. This checkpoint needs
saina 0.4 or newer; older versions refuse it.
The same package runs an authenticated HTTP server (pip install "saina[local,server,media]",
see run-saina/saina), and the hosted API at
saina.run serves this model as saina-helm-2-omni-0.8b.
Other formats
| Format | Where | Notes |
|---|---|---|
| GGUF (llama.cpp) | run-saina/saina-helm-2-omni-0.8b-GGUF | F16 backbone + vision projector, runner and score.py; built from aea9ac53; maximum probability difference 0.000478 on six CPU parity cases |
| Ollama | run-saina/saina-helm-2-omni-0.8b | Needs the Saina Ollama build; images, and audio as spectrogram images; managed separately; its current weights and parity were not verified in this Hugging Face audit |
| MLX (Apple silicon) | run-saina/saina-helm-2-omni-0.8b-MLX | FP16 with FP32 RMSNorm, stock mlx-vlm; built from aea9ac53; maximum probability difference 0.001547 on a four-case Linux CPU smoke suite (FP32 computation); Apple GPU execution not revalidated |
Inputs
| Input | Formats | Limits | How it is read |
|---|---|---|---|
| Text | state (string or JSON) and the questions |
context window below | as in Helm 2 |
| Images | PNG, JPEG, WebP | 8 per request, 10 MB each | resized to at most 1.6 megapixels, aspect kept; one input token per 32 × 32 pixels |
| Audio | WAV, FLAC, MP3, Ogg, WebM | 4 per request, 10 MB and 10 s each | mono 16 kHz log-mel spectrogram image (a 10 s clip is 124 input tokens) |
Every question sees all the media. Images and audio count as input tokens: usage.input_tokens
includes them, and the X-Saina-Media-Tokens header gives that part alone.
Question types
| Type | You provide | You get |
|---|---|---|
yes_no |
question, optional descriptions: {yes, no} |
yes, no, confidence |
single_choice |
question, options: {key: description or None} (2–255) |
probabilities, selection, confidence |
multi_choice |
question, options (2–255) |
independent memberships per option |
rating |
question, ordered levels (2–10) |
probabilities per level, expected_level, confidence |
Decision mode. Pass mode='decision' with a threshold (default 0.8) and, for
yes_no / single_choice, an optional min_margin; both can be overridden per question.
Answers then include selected / selection / selections / level, set to None with
a reason (below_threshold, below_margin, tie) when the model is not confident
enough, so you can abstain and escalate instead of guessing.
Writing questions about audio
Audio answers are most reliable when the state says what the clip is ("a short recording of English speech", "a 5 s excerpt of a dawn soundscape") and the options name the sound plainly ("The spoken word "left"", "American crow (Corvus brachyrhynchos)"). Short, literal questions about what is audible work better than questions that need several steps of inference from the sound.
Evaluation
Audio. On 4,120 held-out clips with human or dataset labels from 21 public
sources, sent through saina exactly as an API request would be (raw audio in, the
package's own spectrogram), the model picks the labelled answer 70.7% of the
time across 5,572 single-answer questions. By source:
| Source | What is asked | Questions | Correct |
|---|---|---|---|
| Medley-solos-DB | solo instrument | 176 | 99% |
| GuitarSet | guitar chord and key | 27 | 96% |
| ASVspoof 2019 LA | synthetic or converted voice vs real speech | 392 | 93% |
| MusicNet | instruments and composer | 222 | 93% |
| LibriSpeech | voice and speech properties | 149 | 83% |
| FSD50K | everyday sound events | 345 | 78% |
| MIMII | normal vs faulty machine sounds | 392 | 77% |
| Lakh MIDI, rendered | instruments and chords | 682 | 75% |
| Western US birdsong | bird species | 165 | 75% |
| VocalSound | laughs, coughs, sneezes and other vocal sounds | 219 | 72% |
| Free Music Archive | genre | 84 | 70% |
| Speech Commands | spoken command words | 498 | 70% |
| Hawaii birdsong | bird species | 66 | 68% |
| Powdermill dawn chorus | bird species | 76 | 66% |
| NSynth | instrument family and how the note was produced | 932 | 62% |
| Coffee farm birdsong (Colombia, Costa Rica) | bird species | 203 | 62% |
| Sapsucker Woods birdsong | bird species | 242 | 56% |
| Sierra Nevada birdsong | bird species | 42 | 55% |
| FLEURS | spoken language | 306 | 54% |
| Southwestern Amazon birdsong | bird species | 318 | 44% |
| DCASE few-shot bioacoustics | animal call types (e.g. hyena) | 36 | 28% |
Questions have 2 to 8 options, so chance differs by source.
Text. The text path is the same shared-pass contract as Helm 2. On the public part of Decision Index 0.3 (all 140,178 scored requests, text only, self-run with the reproducible harness in run-saina/saina-decision-index; the board's official Full score adds private tests), these weights score 37.44: Tools & Automation 59.8, Retrieval & Classification 50.2, Language Understanding 39.2, Arts & Human Taste 23.6, Knowledge & Reasoning 15.3. Scores are chance-corrected (0 = random, 100 = perfect).
Images. No labelled image benchmark is reported yet. Training included image questions about photos, text in images, scenes and rendered plots, with answers from a larger vision-language teacher model.
Training
Fine-tuned from Qwen/Qwen3.5-0.8B
(2fc06364) with all weights trained, including the last four vision-tower blocks,
on four kinds of data: decision questions over text with answers from a larger teacher
model; image questions with teacher answers (photos from COCO and Visual Genome, text in
images from TextVQA, CLEVR scenes, video frames, and rendered plots, chess boards and
colour palettes); audio clips with gold labels from permissively licensed datasets (CC0,
CC BY, CC BY-SA, ODC-By); and Saina's text decision data.
Files
| File | Contents |
|---|---|
model.safetensors |
Language model and vision tower, bfloat16 |
head.safetensors, experts.safetensors |
Answer head and 16 routed residual experts |
head-config.json |
Answer codes, prompt format, routing and image policy |
preprocessor_config.json |
The image processor used in training |
config.json |
Qwen3.5 config plus saina_checkpoint_format: 3 and saina_inputs |
artifact-manifest.json |
SHA-256 of every other file |
License
Apache 2.0, like the base model. The audio and image examples you send are not stored by the model; the hosted API's data handling is described at saina.run/privacy.