alt.freeweights.text / basal-omni-1.0-ultra
From: Remek <huggingface.co/Remek>Newsgroups: alt.freeweights.textSubject:

basal-omni-1.0-ultra

Date: 2026-11-15Commit: a5ff50cSigned: 2DC28CC7B26A283B ✓

Text generation model with 31.3B parameters. Safetensors weights, 62.6 GB in all. Published by Remek under Apache-2.0.

31.3B params62.6GBbasal-omni-1.0-ultrasafetensorspermissive
FactsParams31.3BSize62.6 GBFormatssafetensorsTasktext generationLicenseApache-2.0From sourcepermissive
$ fw get Remek/basal-omni-1.0-ultra
# manifest sha256 c53443653a32… · 62.6 GB · 19 files
$ fw verify ./basal-omni-1.0-ultra Remek/basal-omni-1.0-ultra
From sourceHosted (signed)Remek/basal-omni-1.0-ultraLast check: 2026-11-15 02:52 UTC

Get help: custom fine-tune or private deploy. We review your setup before we quote.

Fine-tune of gemma-4-31B-it.

Works with

Overview

Size
62.6 GB
Weights
62.5 GB (safetensors)
Parameters
31.3B
Formats
safetensors
Task
text generation
License
Apache-2.0 (permissive)
Files
19, each with a sha256
Publisher
Remek
Added
2026-11-15
Section
alt.freeweights.text
Lineage

Original release from the publisher.

Base model: google/gemma-4-31B-it

Where these bytes come from
Publisher at the pinned commit→You

Sources are tried in order. A file counts only when its size and sha256 match the manifest. Sources are checked when you ask for them, not on a timer.

Sources
BadgeHostLast checkResult
From sourcehuggingface.co2026-11-15 02:52 UTCpassed

Model card

From the publisher at commit a5ff50c. Shown as plain text with links; images open at the publisher.

basal-omni-1.0-ultra (experimental)#

GitHub Website

basal-omni-1.0-ultra (31B) is the largest model of basal-omni, basal's line on Google Gemma 4. It is an experimental release: it is trained on text decisions only, and it also answers the same questions about images, read by Gemma 4's own image encoder without media training (zero-shot; media training comes in the next releases). The 31B base has no audio encoder, so this tier takes no audio. It answers the same typed questions as basal-1.5, over the same API.

What it is. Inspired by System 1 (fast, intuitive) decision models such as Jev. Instead of writing an answer, the model reads a state (a message, a document, retrieved passages, an agent trace, a web page as JSON). It then answers a typed question about it (choice, yes/no noul, score, and in the basal engine multi, act and tool; a tool question over OpenAI or MCP tool definitions picks the tool, not its arguments). The answer is a calibrated probability for each allowed answer, in one forward pass, without generating text. The answer never falls outside the options you give, and the probability says how sure the model is.

What is new against basal-1.5-max.

  • A Gemma 4 base (31B) instead of Bielik (11B).
  • Up to 255 options per question (basal-1.5: 10).
  • One option order by default (basal-1.5 averaged two).
  • Images in the same request ("media", served with --media on), zero-shot; no audio.
  • Trained on about 640,000 Polish and English typed decisions, with soft targets from basal-1.5.

Results#

Served with the basal engine: basal-omni-1.0-ultra on one H200 and basal-omni-1.0-max on one H100, both with --mode eager, bf16, one option order; basal-1.5-max as released (--mode fast, both option orders). Same items and the same clients for all three. Measured with basal 2.0; basal 2.1 gives the same top answer on 23,278 of 23,278 served-check rows.

benchmarkbasal-omni-1.0-ultra (31B)basal-omni-1.0-max (12B)basal-1.5-max (11B)
Werdykt v1, macro (hidden PL + EN, 10 categories × 2 languages)0.8790.8230.773
PL decisions (held-out test of basal-1.0, 7,081 items)0.9790.9540.940
PL general (knowledge, exams, reading; 3,079 items)0.8230.8100.797
PL-Real (300 real Polish documents)0.9730.9800.970
EN external panel (10 public English decision tasks, 3,842 items)0.8550.7890.737
Coverage at 1% error (share decided automatically with the shipped threshold)56.8%¹47.4%62.2%
  • Against basal-omni-1.0-max: ahead on PL decisions (+2.5 points, 95% interval +2.0 to +3.1), the English corpus test of 1,479 items (0.751 vs 0.724, +0.6 to +4.7) and the English external panel (+6.9 points over its items; ahead on 9 of 10 tasks: WinoGrande 0.863 vs 0.710, BIG-Bench Hard 0.883 vs 0.809, JudgeBench 0.700 vs 0.600; behind on FinancialPhraseBank, 0.947 vs 0.967). Level on Polish general knowledge (+1.3, 0.0 to +2.7) and PL-Real (−0.7), whose intervals include zero.
  • Against basal-1.5-max: PL decisions +3.9 points (+3.3 to +4.5), Polish general knowledge +2.6 (+1.1 to +4.1), English corpus test 0.751 vs 0.659, English panel +11.8; level on PL-Real (+0.3).
  • ¹ Coverage: per question type, at 0.47% observed error (max: 47.4% at 0.47%). A type without a certified threshold is deferred: at the 1% target, score questions go to a person. basal-1.5-max's 62.2% used one threshold pooled over all types; under that rule this model reaches 77.5% at 0.75% error.
  • Werdykt v1: 0.879 (95% interval 0.871–0.887; Polish 0.881, English 0.877), 5.6 points above basal-omni-1.0-max (0.823) and 10.6 above basal-1.5-max, served with --deterministic on one H200 (one request per forward). Ahead of max in all 10 categories; weakest categories: rules (0.550; compute exact thresholds and dates in code), contracts (0.822) and long documents (0.854).

Accuracy by document length#

Accuracy of basal-omni-1.0-ultra on Werdykt (5,000 items, Polish and English; a hidden set, so only these totals are shown) by the length of the state, in characters (a token is about 2 characters; 1,000 characters is about half a page). 87.9% overall. 95% Wilson intervals in brackets.

state lengthitemsaccuracy
0-1k70977.9% [75, 81]
1k-2k259886.5% [85, 88]
2k-4k79697.6% [96, 98]
4k-8k39498.7% [97, 99]
8k-16k12891.4% [85, 95]
16k+37583.5% [79, 87]

Short states are mostly rules and abstention items, which are harder for every basal model, so read the rows as accuracy per bucket, not as the effect of length alone. The long-document family keeps the task and varies only the length:

state length (long-document family)itemsaccuracy
8k-20k22688.1% [83, 92]
20k-30k19487.1% [82, 91]
30k+8073.8% [63, 82]

Run 2026-10-15 with basal-serve --mode eager on one NVIDIA H200 (bf16). The intervals are about the items, not about run-to-run noise.

By prompt length in tokens (held-out tests)#

The held-out tests of the Results table by the length of the whole prompt as served (state, question and options; this model's tokenizer), with the Results table's predictor. Accuracy (items):

prompt tokensPL decisions (7,081)EN corpus test (1,479)PL-Real (300)
0-25597.8% (3,219)75.2% (1,122)–
256-51198.5% (2,255)75.2% (270)–
512-1,02397.4% (1,598)72.4% (87)100.0% (8)
1,024-2,047100.0% (9)–97.3% (185)
2,048-4,095––97.2% (107)

Quick start#

1. Install into a fresh uv environment:

uv venv --python 3.12 --allow-existing ~/basal-env && source ~/basal-env/bin/activate
uv pip install torch==2.11.0 torchvision==0.26.0 --index-url https://download.pytorch.org/whl/cu128
uv pip install "basal[media] @ https://github.com/rkinas/basal/archive/refs/tags/v2.8.0.tar.gz"

2. Start the server. It prints basal: model ... ready:

basal-serve --model Remek/basal-omni-1.0-ultra --mode eager --media on --port 8000

The eager mode runs the model in PyTorch, bf16 (about 62 GB of GPU memory for the weights; on one 80 GB GPU, states up to about 10,000 tokens, see Limitations). For text only, the FP8 checkpoint basal-omni-1.0-ultra-FP8 runs on --mode vllm. Since basal 2.3, text-only requests can also use the fast mode (shared prefix, CUDA graphs): the default without --mode on Hopper GPUs with the flash_attn_3 package and on Blackwell workstation GPUs (2.3.1 or later), eager on other GPUs. Details: OMNI.md.

3. Ask questions, exactly as with basal-1.5:

curl -s localhost:8000/v1/systemone -H 'content-type: application/json' -d '{
  "state": "Klient: od wczoraj nie mogę zalogować się do bankowości internetowej, system pokazuje błąd hasła.",
  "questions": {
    "dept":   {"type": "choice", "instructions": "Do którego działu skierować zgłoszenie?",
               "criteria": {"cards": "Reklamacje kart", "online": "Wsparcie bankowości elektronicznej", "loans": "Kredyty"}},
    "urgent": {"type": "noul", "instructions": "Czy klient nie może korzystać z usługi?"}}}'

Full API (multi, act, tool, option keys, max_error): API.

Images#

With --media on, a request may carry images with its state. They are placed where the state text goes, before it, in the order given; the state text may be empty.

IMG=$(base64 < paragon.jpg | tr -d '\n')
curl -s localhost:8000/v1/systemone -H 'content-type: application/json' -d '{
  "state": "", "lang": "pl",
  "media": [{"type": "image", "data": "'"$IMG"'"}],
  "questions": {
    "card": {"type": "noul", "instructions": "Czy zapłacono kartą?"},
    "vat":  {"type": "choice", "instructions": "Jaka jest najwyższa stawka VAT na paragonie?",
             "criteria": {"23": "23%", "8": "8%", "5": "5%", "0": "0% lub zwolniony"}}}}'
  • "media": a list of {"type": "image", "data": "<base64>"} (a data: URL works too), any format Pillow reads. Audio is refused with HTTP 422 (this model does not take audio (it takes: image)): the 31B base has no audio encoder.
  • "detail": "default" (280 image tokens) or "high" (1,120; small print, slower).
  • "lang": "pl" or "en", the prompt language when the state text does not show it (a state that is only media).
  • Limits: 8 items and 20 MB each per request, 50 MP per image.
  • Every question of a request sees all of its images. For the steadiest answers, send each question with only the images it is about.
  • Answers carry "calibration": "text": the temperatures and the certified thresholds were fitted on text; validate the thresholds on your own media before automating with them.

On omni-probe-pl, our small Polish probe (each item asked from the image and from its text):

probeitemsfrom the imagefrom the textuntrained Gemma 4 31B, from the image
decision from an image of a rendered document1600.8940.931 (the document's text)0.769
decision about a real photo1500.8000.613 (the question alone)0.833
  • Rendered documents are read almost as well as their text (4 points behind) and 12.5 points better than by the untrained base (95% interval +5.6 to +19.4).
  • Photos add 19 points over the question alone. The text training did not improve photos: 3.3 points below the untrained base, within the probe's noise (95% interval −9.3 to +2.7).

Speed#

One question per request, one option order, on one H200 (--mode eager, bf16, --media on):

measurementresult
sequential, 200 requests80 ms p50 / 188 ms p95 per question
32 concurrent clients, 1,000 requests8.6 decisions/s
  • basal-omni-1.0-max on one H100, same test: 66 ms p50 and 19.0 decisions/s; basal-1.5-max in its fast engine: 27.3 ms p50 and 33.4 decisions/s.
  • --orders 2 costs about twice as much per question.
  • Long states are prefilled in 2,048-token chunks; the longest state a GPU serves is under Limitations.

Quantised modes (basal >= 2.5.0)#

basal 2.5.0 serves this model in three quantised modes of its CUDA graph engine. Each mode loads its own calibration file from this repository, fitted on that mode's readouts; without it, int8 and nvfp4 refuse the model. The files are fitted for one option order (the default). Details: QUANTIZATION.md.

modeGPUagainst bf16files
--mode fp8one 80 GB GPU (H100)1.35x the decisions per second; 53 GB of GPU memory at peak instead of 74 GB; the state cache is off (--state-cache-gb is not used; it was announced for 2.5.1 and is not delivered yet)CALIBRATION.fp8.json
--mode nvfp4Blackwell2.3x faster; 2.4% of the top answers changeCALIBRATION.nvfp4.json, NVFP4_AMAX.json
--mode int8Ampere or newerthe same top answer on 99.4% of decisionsCALIBRATION.int8.json

Files#

  • model-*.safetensors, tokenizer, chat_template.jinja, processor_config.json: the model.
    • Gemma 4 architecture, 31B, 262k vocabulary.
    • Gemma's image encoder is included and unchanged (this release is trained on text); the engine reads images through it with --media on (processor_config.json). The 31B base has no audio encoder.
  • CALIBRATION.json: per-type temperatures and certified confidence thresholds for 1% / 5% error, fitted on the served engine (--mode eager, bf16, one option order).
  • CALIBRATION.o2.json: the same for --orders 2 (both option orders averaged).
  • basal.json: prompt format 2 and the readout protocol.

How it works#

The model receives a fixed chat prompt with the state, the question and coded options (A–Z, then two-character codes, up to 255). The assistant turn is prefilled with {"answer": ", and the decision is the softmax over the next-token logits of the option codes only: one forward pass, no text generation. The server applies the calibrated temperature of the question type from CALIBRATION.json.

Use the confidence. CALIBRATION.json stores thresholds for a target error of 1% or 5% among accepted decisions. They were chosen on calibration data before testing; on the test data they accept 56.8% / 94.2% of decisions at 0.47% / 3.8% observed error (at the 1% target score questions have no certified threshold and are deferred). Accept decisions above the threshold automatically and route the rest to a person.

Training#

  • Base and method: fine-tuned from google/gemma-4-31B-it with LoRA (rank 32) on the language-model layers, merged into the weights. The image encoder was not trained.
  • Data: about 640,000 typed decisions in Polish and English: rules and deadlines, real documents, long documents, retrieval decisions, contracts, routing, ordinal scores, judging answers, agent and tool decisions, and "cannot be determined" answers.
  • Distillation: basal-1.5 provides soft targets on the decisions it answers correctly.
  • Schedule: 10,000 of the 12,741 planned steps of 64 decisions (640,000 of the basal-1.7 mix's 815,386, without its 1,931 items longer than 6,144 tokens) at peak learning rate 3e-5 with cosine decay; stopped at step 10,000 because the dev panel had stopped improving (0.908, 0.909 and 0.909 at steps 8,000, 9,000 and 10,000), then the LoRA was merged into the weights in float64 and rounded once to bf16.

Limitations#

  • Experimental. It is the first model of a new base; validate it on your own documents before relying on it.
  • Images are zero-shot. Gemma 4's encoder reads them, but this model was trained on text decisions only; image answers are weaker than text where the image itself is hard (phone photos), see "Images". Their calibration is the text calibration. No audio: the 31B base has no audio encoder.
  • Size and speed: 31B parameters, about 62 GB in bf16, about 2× slower than basal-omni-1.0-max (see Speed). With engine 2.3.1 it answers states of up to 82,000 tokens on one 80 GB H100, in --mode fast (the state is prefilled in chunks; 82k tokens with five questions: 46 s) and in --mode eager (99 s), also while short requests are being served. A request that still runs out of GPU memory gets HTTP 503 (retry later or elsewhere), the server frees its memory and keeps serving. Engine 2.2 and earlier: about 10,000 tokens on an 80 GB H100 (8,000 with --orders 2) and 32,000 on a 141 GB H200, with HTTP 422 beyond that.
  • Exact arithmetic and thresholds are a weak spot of one-pass decisions: compute them in code.
  • Option order: one order is asked by default; --orders 2 reduces sensitivity to option order at twice the cost.
  • tool with no fitting tool: ultra usually answers "no suitable tool" (4 of 6 out-of-scope requests), but is sometimes unsure between that and "ask the user" (1 of 6 near 0.5).
  • Review: decisions with serious consequences for people should be reviewed by a person.

Citation#

@software{kinas2026basal20,
  title   = {basal-2.0: typed-decision models and inference engine for Polish and English},
  author  = {Kinas, Remigiusz},
  year    = {2026},
  version = {2.0.0},
  url     = {https://github.com/rkinas/basal}
}

@techreport{kinas2026basal,
  title       = {basal-1.0: Reliable, Highly Optimized Typed Decisions for Polish},
  author      = {Kinas, Remigiusz},
  institution = {ai5},
  year        = {2026},
  type        = {Technical report},
  doi         = {10.5281/zenodo.23022986},
  url         = {https://doi.org/10.5281/zenodo.23022986}
}

License and attribution#

Apache-2.0. Fine-tuned from google/gemma-4-31B-it (Apache-2.0).

Files

19 files · 62.6 GBWeights 62.5 GB (safetensors). Sizes and sha256 from the signed manifest.
Hide all 19 files with their sha256
FileSizesha256
.gitattributes1.57 KB34448b82c17d60fec9b65b1f093c115ddbaadc04beb1b0140b6bfed2e012a930
CALIBRATION.fp8.json4.49 KBbb57361499511ccc0dfaadcf1d6a922ff38eaf65c1974ddad5166b34e05a8d61
CALIBRATION.int8.json4.50 KB689227d39dc2fa829c16959f56a356c986cae2003f62bdc029843589973a48c1
CALIBRATION.json5.84 KBf09ef731555f9c83a26ccfa2aa99bbcb5ac1823518d8f8a0c664ee8bf7532e1b
CALIBRATION.nvfp4.json4.49 KB3efbc32f0dd8ea9a403c36ca8d2f973674acedac5519af51c0e8983df267a6ac
CALIBRATION.o2.json5.82 KBe491705d2ba4d6599e9f222ceccedaaae3666cc7f27506ebb5b0b20487005966
NVFP4_AMAX.json9.37 KBa403f33f13a1d79ab1f62ecc4a89041818178c5457106860b99fc8ddbcc4f3bf
README.md16.6 KB5697eddf13cb5c2ac3e609596ec66ea676c747d82f4a576f34501888b9543f16
SHA256SUMS1.47 KB384cd98df683af862e972ef78a55c1d16f6519819d479ff822fb6a4920fb4add
basal.json482 B39699f0526f4f9d0420f92b6b9844aaacce7c29b7d8af2e0f07f3c3821a25219
chat_template.jinja18.7 KBae53464bf3be25802b3a5b37def7fd89667067d7577049b3b2d74c4d8de4c6d4
config.json5.43 KBbe2991c38b2aabb5a1bd08461b0d1d52c702ee4c6d98c1f235a976223f1e0dc7
generation_config.json204 Bab62926273a435bed81af368050f3a0ba5b7298d8b09f0e7615ccc41bc787103
model-00001-of-00002.safetensors49.9 GB2afee89c3008d3e57a6913d62db1c0b9c24f4ffd542589398898a0a4cac59859
model-00002-of-00002.safetensors12.6 GB91409cdee34b78ebb4977ec4f640f1fed49d3de7022a42a701e692cd8e79ba5d
model.safetensors.index.json120 KB390b7f9a0a502e4526cf20862d22954c911cc318d8aba2cdb745c6fbd98264f6
processor_config.json1.69 KB32bdf45d2ad4cc29a0822ddd157a182de76644f0419a6228d151495256e9813c
tokenizer.json32.2 MBcc8d3a0ce36466ccc1278bf987df5f71db1719b9ca6b4118264f45cb627bfe0f
tokenizer_config.json3.68 KB2cd8ebfa6e4a2bc45fe54ba404aabf094b6d967bad7268bb9e5669fe546c3e80
VersionsEach time the pinned upstream commit or file list changed in this repo. Newest first.
Upstream commitDateContents
a5ff50c5cf pinned now2026-11-15 02:52 UTC19 files · 62.6 GB

Use it

$ fw get Remek/basal-omni-1.0-ultra
# manifest sha256 c53443653a32… · 62.6 GB · 19 files
$ fw verify ./basal-omni-1.0-ultra Remek/basal-omni-1.0-ultra
fw.pyChecks the signature and every sha256, tries each source in order, resumes.
$ python3 fw.py get https://freeweights.allternit.com/manifests/Remek/basal-omni-1.0-ultra.json --dir ./basal-omni-1.0-ultra $ python3 fw.py verify ./basal-omni-1.0-ultra ./Remek__basal-omni-1.0-ultra.json
hfThe Hugging Face CLI with one setting. Same repo id.
$ HF_ENDPOINT=https://freeweights.allternit.com hf download Remek/basal-omni-1.0-ultra --revision a5ff50c5cfd59abd2c81b4ad412089f9d397d067 --local-dir ./basal-omni-1.0-ultra
transformersLoad the weights in Python.
import os os.environ["HF_ENDPOINT"] = "https://freeweights.allternit.com" from transformers import AutoModelForCausalLM, AutoTokenizer tok = AutoTokenizer.from_pretrained("Remek/basal-omni-1.0-ultra", revision="a5ff50c5cfd59abd2c81b4ad412089f9d397d067") model = AutoModelForCausalLM.from_pretrained("Remek/basal-omni-1.0-ultra", revision="a5ff50c5cfd59abd2c81b4ad412089f9d397d067", device_map="auto")
vLLMServe an OpenAI-compatible API.
$ HF_ENDPOINT=https://freeweights.allternit.com vllm serve Remek/basal-omni-1.0-ultra --revision a5ff50c5cfd59abd2c81b4ad412089f9d397d067

License

Name
Apache License 2.0
Id
Apache-2.0
Class
Permissive
Redistribution
yes
Listing
Hosted (signed)
Decided
License as declared by the publisher. No person read it. 2026-11-15
Text in
README.md
Text sha256
5697eddf13cb5c2ac3e609596ec66ea676c747d82f4a576f34501888b9543f16
Terms gate
No extra terms beyond the license.

Read the license text

Licenses are checked against the license table. A custom license passes only after a person reads it.

Provenance

From: Remek <huggingface.co/Remek>Newsgroups: alt.freeweights.textSubject: basal-omni-1.0-ultraDate: 2026-11-15Commit: a5ff50cSigned: 2DC28CC7B26A283B ✓
Upstream
Remek/basal-omni-1.0-ultra
Pinned commit
a5ff50c5cfd59abd2c81b4ad412089f9d397d067
Manifest
basal-omni-1.0-ultra.json · .minisig
Manifest sha256
c53443653a32c45d185e9a989e9c4db4031139018798da3214f2eb08a90aac3e
Signature
minisign, Ed25519, key 2DC28CC7B26A283B
Created
2026-11-15 02:52 UTC
Generator
freeweights-manifest/0.1.0
Takedowns
None.

How to verify

$ curl -O https://freeweights.allternit.com/manifests/Remek/basal-omni-1.0-ultra.json $ curl -O https://freeweights.allternit.com/manifests/Remek/basal-omni-1.0-ultra.json.minisig $ minisign -Vm basal-omni-1.0-ultra.json -P RWQ7KGqyx4zCLXtUFOqvfv8L3g+8fpKJ1FsuxPyOYMF+4KufbUxKq1Oq $ shasum -a 256 <file> # compare with the Files tab

A manifest whose signature fails must be rejected. A file whose size or sha256 does not match must be discarded. Verify a download

Model tree

Parent

google/gemma-4-31B-it · this model is a finetune of it

1 model in the catalog name this one as their parent.

Quantizations
1
Get it
Download
$ HF_ENDPOINT=https://freeweights.allternit.com hf download Remek/basal-omni-1.0-ultra
Open in Freeweights Studio

Pull, verify and run it in the Allternit app on Desktop, web or phone.

Signed manifest
minisign, key 2DC28CC7B26A283B. basal-omni-1.0-ultra.json. Provenance. Takedown history: none.

Variants

1 quantized or adapter build of basal-omni-1.0-ultra. Each has its own license check and page.

From: laion <huggingface.co/laion>Subject: a2-rl-e2egit_large-50-32B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_e2egit-large-15-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_e2egit-v2-10-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_pymethods2test-large-80-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_exp_rpt_unitsyn-python-large-10-8B
From: laion <huggingface.co/laion>Subject: a3-rl-DCAgent_mix_h2_language_proportional-65-8B