All articles
New release17 min read

basal-2.0 and basal-omni — more decisions per second, better calibration, images and audio

Three open basal-2.0 decision models for Polish and English: 1.4–5.2× more decisions per second than basal-1.5, better-calibrated probabilities, up to 255 options per question and ports with their own calibration. Alongside them, experimental basal-omni: two Gemma 4-based models that also read images and audio. We also explain where the new models do not improve, and how they rank in Werdykt.

Remigiusz Kinas · ai5

basal-2.0 is a new family of three open decision models for Polish and English: mini (1.5 billion parameters), 4.5B and max (11 billion). Compared with basal-1.5 on the Werdykt leaderboard, the new models handle 1.4–5.2× more decisions per second on the same GPU type, return better-calibrated probabilities and accept up to 255 options per question. They gain 0.7–1.2 percentage points in Werdykt. This is a small change, and on several tests 2.0 does not perform better. We show all results below.

Alongside basal-2.0, we are releasing basal-omni, an experimental basal line based on Google Gemma 4: basal-omni-1.0-mini (4B) and basal-omni-1.0-max (12B). They answer the same questions through the same API and also accept images and audio. They beat basal-1.5 by about 5 points in Werdykt, but run more slowly than basal-2.0. We cover them in a separate section. Both releases have open weights under Apache 2.0.

1.5B / 4.5B / 11Bthree basal-2.0 sizes
×1.4–5.2decisions per second vs basal-1.5 on the Werdykt leaderboard (H100)
+ images and audiobasal-omni 4B and 12B on Gemma 4, experimental

What is basal?

basal reads a state— a message, document, search excerpts or an agent's workflow — and answers a question about it. It chooses only from the options you supply and returns a calibrated probability for each. It does this in one model pass, without generating text. Because classes are described in the request, one model handles many tasks without additional training: ticket routing, rules and policy checks, long-document questions, RAG decisions, urgency and risk ratings, answer evaluation and selecting an agent's next step or tool.

The question types remain: choice (one option), noul (yes/no), score (scale), multi (multiple labels) and act (cost-based action). Add max_error to a question, and an answer the model is not confident enough about returns with "deferred": true and can be sent to a person.

Each model has its role. basal-2.0 (4.5B) balances accuracy and speed and is the main model. basal-2.0-max (11B) is the most accurate. basal-2.0-mini (1.5B) is the fastest and is distilled from max. All three share the same API. The two basal-omni models (4B and 12B, on Gemma 4) share that API and also read images and audio (below).

What's new since basal-1.5

  • More decisions per second. Each decision is one pass with one option order (basal-1.5 read two orders). The new v2.0.0 engine packs requests into compact batches. On one H100 with 16 clients, mini handles 106.4 decisions/s instead of 20.5, 4.5B handles 32.2 instead of 23.0, and max handles 16.2 instead of 10.2 (basal-1.5 and 1.5-max on SGLang, as on the Werdykt leaderboard). When both releases use the default basal-serve mode, 4.5B is 4.0× and max 3.5× faster.
  • Better calibration. Calibration error (ECE) in Werdykt falls: mini from 0.086 to 0.035, 4.5B from 0.068 to 0.060, max from 0.074 to 0.044. We fitted a separate temperature for each question type and option-count range, on question families unseen during training.
  • Up to 255 options per question. basal-1.5 answered questions with at most 10 options. In the public JDI 0.2.1 decision index (150,317 requests), it left 17.2% unanswered. basal-2.0 4.5B and max answer all of them; mini leaves 26 unanswered.
  • Long documents. Context length is 32,768 tokens (mini: 8,192). The engine queues long requests (over 2,048 tokens) behind short ones. With mixed traffic and 32 clients, short requests get an answer after 0.81 s instead of 1.38 s (median), while long requests take about 7% longer.
  • Polish medical final exam (LEK). Max improves from 70.0% to 75.6% in Polish and from 67.6% to 74.1% in English.
  • FP8, GGUF and MLX ports with their own calibration. Each port has its own calibration file, fitted to that port's outputs.
  • Thinking mode in 4.5B: experimental and off by default. It lowers the Werdykt score, so we do not recommend it (details below).
  • Images and audio in basal-omni: experimental. Two new Gemma 4-based models accept images and recordings in requests (details below).

Results vs basal-1.5

Werdykt is our hidden benchmark: 5,000 decisions in Polish and English across 10 categories. We do not publish the questions, to keep them out of any model's training data, including ours. Each 2.0 size is compared with its basal-1.5 counterpart. We froze the weights before evaluation and measured each model once, in bf16 on one H100.

Werdykt v1

Accuracy, speed and calibration side by side

Higher is better for accuracy and speed, lower is better for calibration error. Eight basal models on the Werdykt leaderboard: 5,000 decisions, one H100.

Werdykt v1: accuracy, decisions per second with 16 clients, calibration error and leaderboard rank
ModelAccuracyDecisions/sECERank
basal-omni-1.0-max (12B)0.8234.2not reported14 of 94
basal-2.0-max (11B)0.78416.20.04431 of 94
basal-1.5-max (11B)0.77310.20.07434 of 94
basal-omni-1.0-mini (4B)0.7698.7not reported37 of 94
basal-2.0 (4.5B)0.72932.20.06045 of 94
basal-1.5 (4.5B)0.72123.00.06846 of 94
basal-2.0-mini (1.5B)0.618106.40.03580 of 94
basal-1.5-mini (1.5B)0.60720.50.08682 of 94

In Werdykt, basal-2.0 gains 0.7 to 1.2 points over basal-1.5, handles 1.4× to 5.2× more decisions per second and has lower calibration error at every size. Experimental basal-omni-1.0-max has the highest accuracy (0.823), but the lowest decisions per second (4.2).

Accuracy: mean across 20 Werdykt v1 cells (10 categories, Polish and English); “31 of 94” is the rank in the full table.

Speed: Werdykt leaderboard rows with 16 clients on one H100: basal-1.5 and 1.5-max on SGLang, mini 1.5 on the basal engine, basal-2.0 on v2.0.0, basal-omni in eager mode. Logarithmic scale: each grid line marks a tenfold change.

Calibration: ECE, the average gap between model confidence and accuracy. We do not report basal-omni ECE in this comparison.

Werdykt v1 · accuracy (mean across 20 cells), calibration and automation
SizeAccuracy 1.5 → 2.0PL / EN (2.0)ECE 1.5 → 2.0Automated at a 5% error target, 1.5 → 2.0
mini · 1.5B0.607 → 0.6180,628 / 0,6090.086 → 0.03521.9% → 25.4%
4.5B0.721 → 0.7290,729 / 0,7280.068 → 0.06050.1% → 51.3%
max · 11B0.773 → 0.7840,787 / 0,7810.074 → 0.04465.6% → 65.6%

basal-1.5: Werdykt leaderboard rows (4.5B and max on SGLang, mini on the basal engine); basal-2.0: v2.0.0 engine. Each release has its own calibration file. 95% confidence intervals for 2.0: mini [0.605; 0.631], 4.5B [0.717; 0.739], max [0.774; 0.795]. The 1.5 and 2.0 intervals overlap at every size. “Automated” means decisions above the confidence threshold. We select the threshold for 5% error on one half of the questions and test it on the other. Observed 2.0 error was 5.1% (mini), 5.1% (4.5B) and 4.5% (max).

The Werdykt gain is small. Larger changes appear in calibration: 2.0 probabilities better match actual accuracy, and mini more than halves calibration error. The largest category gains are agent next-step decisions (mini +8.6 pp, 4.5B +6.0) and answer evaluation (+3.0 to +3.8 across sizes). Max also improves “cannot determine” answers (+7.2). Long documents: 4.5B +1.4, max +2.4, mini −2.0. Mini and 4.5B lose about 3 points on RAG decisions. A category has roughly 500 questions, so differences of 2–3 points may be due to chance.

Calibration

Calibration error: basal-1.5 → basal-2.0

Lower is better. ECE in Werdykt v1: the average difference between confidence and accuracy. Each release uses its own calibration file.

Calibration error falls at every size: mini 0.086 → 0.035 (more than halved), 4.5B 0.068 → 0.060, max scores 0.074 → 0.044. The same values appear in the results table above.

JDI index and medical exam

In the JDI 0.2.1 decision index, mini improves from 16.41 to 26.69, and 4.5B from 27.65 to 39.86. Max 2.0 scores 44.07. There is no complete basal-1.5-max run, so we do not report its score. The many-options limitation also disappears: 1.5 left 25,782 of 150,317 requests unanswered; 4.5B and max 2.0 answer all of them.

LEK, the Polish Medical Final Examination, contains five-option questions from 2008–2026 sessions (NASK-PIB Reassess, CC BY-NC-SA 4.0). Text-model results in Polish / English: basal-2.0-max 75.6% / 74.1% (1.5: 70.0% / 67.6%), 4.5B 62.0% / 63.0% (1.5: 60.5% / 59.7%), mini 47.7% / 49.2% (1.5: 47.7% / 48.4%).

basal-omni · LEK · percentage of correct answers
ModelPolishEnglish
basal-omni-1.0-mini · 4B64.8%70.9%
basal-omni-1.0-max · 12B75.0%80.9%

Both basal-omni models were evaluated on the same questions under the same LEK protocol. Input was text only: the question and five possible answers.

We show LEK results only for basal models, without comparing other systems. Exam performance does not establish suitability for medical decisions. Those require a person.

The same questions, the same engine

In the other tests, both releases used v2.0.0 on the same questions. Differences are therefore paired; brackets show the 95% bootstrap interval.

basal-2.0 minus basal-1.5 · percentage points [95% interval]
Testmini4.5Bmax
PL-Holdout: hidden Polish test (4,000 decisions, task families outside training)−0.8 [−1.6; 0.0]+0.6 [−0.2; +1.3]−0.6 [−1.6; +0.4]
Polish decisions (7,081)−1.4 [−2.0; −0.8]+0.1 [−0.4; +0.7]−0.2 [−0.8; +0.4]
Real Polish documents (158 questions on documents outside training)0.0 [−3.8; +3.8]0.0 [−3.2; +3.2]+1.3 [−1.3; +3.8]
English panel (10 tasks)−1.5 [−2.9; −0.03]−3.6 [−5.3; −2.0]−2.5 [−4.0; −1.0]

English panel: differences and intervals at the individual-question level. 2.0 scores on real Polish documents: mini 91.8%, 4.5B 94.9%, max 97.5%. Full results, including tests used for model selection: basal-1.5 → basal-2.0.

All three 2.0 sizes score below 1.5 on the English panel; mini also loses 1.4 points on Polish decisions. Other differences fall within uncertainty intervals. If basal-1.5 is already working in your process, test 2.0 on your own data before upgrading.

Speed, cost and ports

Speed

Decisions per second: basal-1.5 → basal-2.0

Higher is better. One H100 80 GB, bf16, 16 clients. For 4.5B and max we show two basal-1.5 measurements: the Werdykt leaderboard row and default basal-serve.

Using the Werdykt leaderboard rows, basal-2.0 handles 5.2× (mini), 1.4× (4.5B) and 1.6× (max) more decisions per second. When both releases use default basal-serve mode, 4.5B is 4.0×, and max 3.5× faster. The same figures are in the table below.

Speed: basal-1.5 and 1.5-max used SGLang on the Werdykt leaderboard; mini 1.5 used the basal engine (also its default mode). We measured default basal-serve mode on separate machines with the same GPU type. Logarithmic scale: each grid line marks a tenfold change.

Werdykt leaderboard · bf16 · one H100 80 GB · basal-1.5 → basal-2.0
SizeDecisions/s with 16 clientsBoth in default mode basal-serveMedian, 1 clientp95, 1 clientCost per 1,000 decisions
mini · 1.5B20,5 → 106,4 (×5,2)same measurement14.2 → 15.5 ms346 → 94 ms0,054 → 0,010 $
4.5B23,0 → 32,2 (×1,4)8,0 → 32,2 (×4,0)33.8 → 25.0 ms270 → 188 ms0,048 → 0,034 $
max · 11B10,2 → 16,2 (×1,6)4,6 → 16,2 (×3,5)67.1 → 37.4 ms477 → 344 ms0,108 → 0,068 $

Werdykt leaderboard rows: basal-1.5 and 1.5-max on SGLang, mini 1.5 on the basal engine, basal-2.0 on v2.0.0. The second column shows both releases in default basal-serve mode (basal-1.5 on its own engine), on separate machines with the same GPU type. A decision is one question with one option order. Cost is H100 time at USD 3.95/h under full load. With one client, mini 2.0 responds 1.3 ms more slowly than mini 1.5.

We calculate speedup against the basal-1.5 rows on the Werdykt leaderboard. 4.5B and max used SGLang there, which was faster than their default basal-serve mode. With both releases in default mode, 4.5B is 4.0× and max 3.5× faster. basal-1.5 also had FP8 packages for vLLM, which were substantially faster than its bf16 version with many clients. basal-2.0 was not measured on that machine. If you serve mixed traffic with long, repeated documents, measure both versions on your own workload.

Ports with their own calibration

We check each port against the bf16 model: how often it chooses the same option, and how accuracy and calibration compare.

Agreement with bf16 and file size · mini / 4.5B / max
PackageRuns onAgreement with bf16Size
FP8NVIDIA Hopper and Blackwell GPUs93,3% / 94,8% / 97,0%1.8 / 4.9 / 12 GB
GGUF Q8_0Ollama, llama.cpp97,7% / 98,4% / 99,3%1.6 / 4.8 / 12 GB
GGUF Q5_K_MOllama, llama.cpp (smaller)93,4% / 95,7% / 97,7%1.1 / 3.2 / 7.5 GB
MLX 8-bitApple Silicon Mac97,9% / 97,9% / 99,3%1.7 / 4.9 / 12 GB

Agreement is measured on the development set for questions with 2–10 options. When bf16 clearly favours one option (margin at least 0.2), port agreement is 98.9–100%. All FP8, GGUF and MLX ports met their size-specific gates: accuracy differs from bf16 by at most 1 point, and ECE increases by at most 0.01.

Calibration fitted to bf16 does not transfer exactly to a quantised model. In basal-1.5, MLX and GGUF ports used bf16 calibration. FP8, GGUF (separately for llama.cpp and Ollama) and MLX now have their own files: CALIBRATION.<engine>.json. basal-serve automatically selects the engine's file and logs which one it used.

On H100 with 16 clients, FP8 handles 103.5 (mini), 38.6 (4.5B) and 19.9 (max) decisions/s. On an Apple M4 Pro Mac (24 GB), a single MLX 8-bit question takes a median of 93 ms for mini, 278 ms for 4.5B and 622 ms for max. Five questions about the same state take 223, 698 and 1,506 ms respectively.

Thinking mode Experimental

The 4.5B model has an experimental thinking mode. It is off by default, and we recommend leaving it off. A server started with --think auto writes a short note before deciding. It does so only for questions whose calibrated confidence falls below the type-specific 5% error threshold. It then reads the decision again, with a separate calibration file. A vLLM server generates the note, started by basal-serve in a separate process. Mini and max do not have this mode.

basal-2.0 4.5B · Werdykt · the same H100 80 GB for both rows
ServerAccuracyECEAutomated at 5%Median, 1 clientDecisions/s, 16 clients
--think off (default)0.7290.06051.3%23 ms31.2
--think auto0.7190.09947.1%499 ms11.5

With --think auto , 56.7% of questions triggered thinking, with a mean note length of 142 tokens.

In Werdykt, thinking reduced accuracy by 0.9 points, increased calibration error and lowered throughput from 31.2 to 11.5 decisions/s. We provide it as an experiment to test on your data, not a recommended configuration. On a server with --think auto , you can disable it for an individual request with "think": "off".

basal-omni: images and audio Experimental

Alongside basal-2.0, we are releasing basal-omni, a new basal line on Google Gemma 4 models. It launches with two models: basal-omni-1.0-mini (4B, based on Gemma 4 E4B) and basal-omni-1.0-max (12B, based on Gemma 4 12B). They answer the same typed questions (choice, noul, score, multi, act) through the same /v1/systemone API and support up to 255 options per question. The new field is "media": alongside state text, you can send images and audio recordings; the state can also consist entirely of media.

This is an experimental release. Both models were trained only on Polish and English typed text decisions. Gemma 4 encoders read images and audio without additional training (zero-shot). Media training is planned for future releases.

Werdykt results

Werdykt v1 · text questions · bf16 · one H100 · basal-1.5 → basal-omni
ModelAccuracy 1.5 → omniPL / EN (omni)Leaderboard rankRank in size class
basal-omni-1.0-mini · 4B0,721 → 0,769 (+4,8)0,775 / 0,76337 of 941 of 31 (3–5B)
basal-omni-1.0-max · 12B0,773 → 0,823 (+5,0)0,824 / 0,82114 of 941 of 14 (7–14B)

Reference: basal-1.5 (4.5B) for mini and basal-1.5-max (11B) for max, using Werdykt leaderboard rows. 95% confidence intervals: mini [0.758; 0.778], max [0.813; 0.832]. These do not overlap the basal-1.5 intervals. basal-omni ran in eager mode on the basal engine, with one option order.

The smaller omni model matches basal-1.5-max (11B, 0.773) in Werdykt. On the English panel (10 tasks), both score 5.2 points above their basal-1.5 counterpart; on Polish tests in the model cards, they match or exceed it. Rules and deadlines remain the weakest category: 0.352 (mini) and 0.418 (max).

Images and audio on a Polish probe

We tested media on a small Polish sample. Each question was asked twice: with an image or recording, and with its text substitute (document text, transcript, or just the question for photos).

basal-omni · images and audio

The same decision from media and text

Higher is better. Small Polish probe: each question asked with an image or recording and with its text substitute. The tick marks show Gemma 4 without our training.

From document images, max scores 0.838 vs 0.900 from text, and mini scores 0.725 vs 0.831. Mini handles recordings better: request intent 0.921 vs 0.943 from transcripts. Max scores 0.714 here, equal to Gemma 4 without training (0.700). All figures are in the table below.

Polish multimodal probe · accuracy from media / text
ProbeQuestionsminimaxGemma 4 without training, from media (E4B / 12B)
Decision from a document image1600,725 / 0,8310,838 / 0,9000,500 / 0,675
Decision about a real photo1500,667 / 0,5070,660 / 0,5270,640 / 0,680
Recorded request intent (MINDS-14)1400,921 / 0,9430,714 / 0,9290,900 / 0,700
Recorded excerpt topic1000,870 / 0,9000,510 / 0,9300,860 / 0,550
Decision based on recorded speech450,844 / 0,9560,556 / 0,9560,600 / 0,578

First value: image or audio answer; second: text answer. Last column: the base Gemma 4 without our training, asked about the same media. The sample is small, so differences of a few points may be due to chance.

Max reads document images almost as well as their text (6 points lower), while mini loses 11 points. Photos add 13–16 points over the question alone, but scores remain at the untrained Gemma 4 level. Mini reads audio better: intent and recording topic score 2–3 points below transcripts, while decisions from recorded speech score 11 points lower. Max loses 22–42 points on recordings and stays at base-model level. If you have a transcript, send it instead of audio.

One request can combine images and audio, and every question sees all media. In our test (20 document-image and recorded-request pairs), adding the second medium changed 5–15% of mini's answers and 10–25% of max's. The most stable answers come from sending a question only with relevant media. Responses include "calibration": "text": we fitted temperatures and confidence thresholds on text. Before automating image or audio decisions, validate thresholds on your data.

How to run it

TERMINAL · NVIDIA GPU · BASAL-OMNI
uv venv --python 3.12 ~/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.0.0.tar.gz"
basal-serve --model Remek/basal-omni-1.0-max --mode eager --media on --port 8000

The same v2.0.0 engine serves text-only basal-2.0 and basal-omni with images and audio; the [media] extra is needed only for basal-omni. Start the smaller model with --model Remek/basal-omni-1.0-mini. In eager mode, mini needs about 16 GB of GPU memory and max about 24 GB.

JSON · RECEIPT PHOTO, TWO QUESTIONS
{
  "state": "",
  "lang": "en",
  "media": [{"type": "image", "data": "<base64-encoded receipt photo>"}],
  "questions": {
    "card": {"type": "noul", "instructions": "Was the payment made by card?"},
    "vat": {
      "type": "choice",
      "instructions": "What is the highest VAT rate on the receipt?",
      "criteria": {"23": "23%", "8": "8%", "5": "5%", "0": "0% or exempt"}
    }
  }
}

Send a POST request to /v1/systemone. A "media" entry has the form {"type": "image" | "audio", "data": "<base64>"}; a data: URL also works. Images can use any format Pillow reads; audio can be WAV, FLAC, OGG or MP3, up to 30 s per recording. A request can contain up to 8 files of 20 MB each; images can be up to 50 MP. "detail": "high" (1,120 image tokens instead of 280) helps with small print, but increases latency. "lang" sets the language when the state consists only of media.

Speed. On the Werdykt leaderboard (16 clients, one H100), mini handles 8.7 decisions/s and max 4.2, with single-client medians of 67 and 76 ms. basal-2.0 on the same test: 32.2 (4.5B) and 16.2 (max). For short single-question requests with 32 clients, mini handles 35.2 and max 19.0 decisions/s.

basal-omni limitations

  • Experimental release. These are the first models on a new foundation. Test on your documents before relying on them in a workflow.
  • Media without additional training. Gemma 4 encoders read images and audio zero-shot. Where media itself is difficult (phone photos, speech), answers are weaker than from text.
  • Text-based calibration. Media responses use calibration fitted on text. Validate confidence thresholds on your images and recordings.
  • Images and audio only. The models do not accept video.
  • Only eager. There is no fast mode, no FP8, GGUF or MLX ports, and no thinking mode. On the Werdykt leaderboard, basal-omni handles 3.7–3.9× fewer decisions per second than basal-2.0.

basal-2.0 or basal-omni?

Choose basal-omni when the decision concerns an image or recording, such as a document photo or a recorded customer request. Also choose it when text accuracy matters most and an NVIDIA GPU with eager mode fits your needs. In Werdykt, basal-omni-1.0-max scores 0.823 vs basal-2.0-max's 0.784, and basal-omni-1.0-mini scores 0.769 vs basal-2.0 (4.5B)'s 0.729.

Choose basal-2.0 when throughput and latency matter: on the Werdykt leaderboard it handles 3.7–3.9× more decisions/s than similarly sized omni. It is also the choice for Mac, Ollama or FP8, for the smallest model (mini 1.5B), for experimental thinking in 4.5B, or for a Polish Bielik foundation. basal-2.0 is the main release; basal-omni is experimental. They share an API, so text requests work unchanged. Each model has its own calibration, however, so revalidate confidence thresholds.

How basal differs from other systems

1 pass
The answer is always from your list. basal does not generate text. It reads option-code probabilities, so no answer falls outside the list or cannot be parsed.
p(option)
A probability for every option, not just a label. Calibration is a separate file you can fit to your data with basal-calibrate.
max_error
Deferral instead of guessing. Questions below the confidence threshold go to a person. On question families held out from training, 4.5B with max_error: 0.05 automated 33.2% of decisions with 2.39% observed error. The calibration is conservative.
ms
Milliseconds per decision. Median latency for 4.5B on H100 is 25 ms. Leading independent API models on the same leaderboard respond in 2.2–3.3 s. Send several questions about the same state in one request.
local
On your hardware. basal runs on NVIDIA GPUs, Mac (MLX), Ollama or llama.cpp. It needs no external API. basal-omni currently runs only in eager mode on NVIDIA GPUs.

The trade-off is accuracy. Leading independent API models solve Werdykt almost perfectly (98.3–99.6%). Specialised decision APIs and open 27–31B models reach up to 85.4%, basal-omni-1.0-max 82.3%, and basal-2.0-max 78.4%. basal is useful where local data, predictable costs, response time and handoff to people under uncertainty matter.

Why basal for Polish companies

  • Data stays in your company. The model runs on your server or computer, so document content is not sent to an external model provider. This helps with GDPR assessment but does not replace your own review of lawful processing, logging and retention.
  • A Polish base model. basal-2.0 is built on Bielik models from SpeakLeash and ACK Cyfronet AGH: Bielik-1.5B-v3.0-Instruct, Bielik-4.5B-v3.0-Instruct and Bielik-PL-11B-v3.0-Instruct. Experimental basal-omni is built on Google Gemma 4 and trained on Polish and English typed decisions.
  • Polish on a par with English. Werdykt Polish / English scores: 4.5B 0.729 / 0.728, max 0.787 / 0.781, mini 0.628 / 0.609. basal-omni: max 0.824 / 0.821, mini 0.775 / 0.763.
  • Real Polish documents. On 158 questions about real Polish documents outside the training data, max scores 97.5%, 4.5B 94.9% and mini 91.8%.
  • Polish medical exam. Max scores 75.6% in Polish on LEK. An exam score does not replace evaluation for a specific use case.
  • Polish examples. Basal Lab shows Polish workflows: brand monitoring, documents, ERP imports, customer records, confidentiality and deliveries. Recordings used basal-1.0 and basal-1.5. Requests to 2.0 use the same /v1/systemone.
  • Open licence. Weights and engine are released under Apache 2.0, the same licence as Bielik and Gemma 4. Use them commercially, run them locally and fit calibration to your data.

Position on the Werdykt leaderboard

The Werdykt leaderboard covers 94 systems: API models and open models evaluated on one H100. basal-2.0-max ranks 31st, basal-2.0 (4.5B) 45th, and basal-2.0-mini 80th. Experimental basal-omni-1.0-max and basal-omni-1.0-mini rank 14th and 37th. Above basal-2.0-max are 13 API systems, 13 open models with 26–31 billion parameters and four 12B models, including basal-omni-1.0-max. Above basal-omni-1.0-max are eight API systems and five larger open models.

Werdykt leaderboard

Open models by size class

Higher is better (further right). Each dot is an open model from the Werdykt leaderboard, in its size-class row: total parameter count, with basal-omni-1.0-mini treated as 4B.

basal-omni-1.0-max leads the 7–14B class (0.823), while basal-2.0-max is 5. of 14. In the 3–5B class, basal-omni-1.0-mini is 1. of 31, and basal-2.0 (4.5B) ranks 3. . basal-2.0-mini leads the smallest class (1. of 5). The same ranks appear in the table below.

Classes: by total parameter count, so MoE models such as 26B-A4B belong to the 15–40B class. The number beside a class counts models included in its ranking.

Reference: black dots are basal-1.5. Older basal versions do not count toward class ranks; basal-1.0 is not shown.

Open models by total parameters · excluding older basal versions
Classbasal-2.0Rank in size classHigher in class
up to 2Bmini · 0.6181 of 5— (next: 0.587)
3–5B4.5B · 0.7293 of 31basal-omni-1.0-mini (0.769) and H2O-Lightning-4B v1.1 (0.753)
7–14Bmax · 0.7845 of 14basal-omni-1.0-max (0.823) and three 12B models (0.785–0.789)
15–40B——13 of 19 models in the 26–35B range score above max (up to 0.854)

Classes use total parameter count, so MoE models such as 26B-A4B belong to 15–40B. The smallest class has few entries. basal-omni-1.0-mini and max lead their classes (1 of 31 and 1 of 14). Full table: Werdykt.

MoE models deserve a separate note: they use 3–4 billion parameters per token but have 26–35 billion in total. Four score above basal-2.0 (4.5B): Surogate Rune 26B-A4B v3 (0.817), Bobcat Flash 1.2 (0.802), Xor 26B-A4B 1.0 (0.798) and Xor 1.2 (0.772). Their weights still occupy the memory of a 26–35B model.

basal-omni-1.0-max leads the 7–14B class (0.823), 3.9 points ahead of basal-2.0-max. Their confidence intervals do not overlap. The next three 12B models lead basal-2.0-max by 0.1–0.5 points with overlapping intervals, so we do not consider their order conclusive. In 3–5B, basal-omni-1.0-mini (0.769) leads basal-2.0 (4.5B) by 4.0 points, also with non-overlapping intervals. The top open model, René-1 31B FP8, scores 0.854: 7 points above basal-2.0-max and 3.1 above basal-omni-1.0-max.

The weakest category is rules and deadlines: mini 0.308, 4.5B 0.350, max 0.378 (basal-omni: mini 0.352, max 0.418). The best open model scores 0.540 here; leading API models score 1.000. Ticket routing, RAG decisions and real documents perform best: max scores 0.966–0.974. Results by category →

Limitations

  • Larger models and APIs are more accurate. If accuracy is the only priority and data can leave the company, leading API models solve Werdykt almost perfectly.
  • Not every test improves. All sizes lose 1.5–3.6 points on the English panel; mini also loses 1.4 points on Polish decisions.
  • Leave calculations to code. Rules, deadlines and exact thresholds are the weakest point of single-pass decisions. Calculate them in code or use "facts": "auto".
  • Calibration is conservative. With the supplied calibration file, max_error: 0.01 defers all decisions. Use 0.05 or fit thresholds on your own data. In Werdykt, the 5% target produced observed error of 4.5–5.1%.
  • Thinking mode is experimental. In Werdykt it worsens accuracy and calibration, while throughput falls almost threefold.
  • basal-omni is experimental. It reads images and audio without media training, uses text-fitted calibration and runs only in eager mode, without ports or thinking mode (details).
  • Experimental features. Experimental features include act, multi with multiple labels and textual evidence. Mini's context is 8,192 tokens.
  • Provide facts and current rules. Small models have limited knowledge, and regulations change.
  • Keep oversight of consequential decisions. Decisions with serious consequences for people require human oversight.

Getting started

Start with 4.5B. Choose mini for volume or smaller hardware, max when accuracy matters most. For images and audio, use basal-omni (installation in the basal-omni section). Each model has its own calibration file. When upgrading from basal-1.5, recheck confidence thresholds and automation coverage.

TERMINAL · NVIDIA GPU
uv venv --python 3.12 ~/basal-env && source ~/basal-env/bin/activate
uv pip install torch==2.11.0 --index-url https://download.pytorch.org/whl/cu128
uv pip install "basal[fp8] @ https://github.com/rkinas/basal/archive/refs/tags/v2.0.0.tar.gz"
basal-serve --model Remek/basal-2.0-4.5B --mode fast --port 8000
JSON · ONE STATE, TWO QUESTIONS, ERROR THRESHOLD
{
  "state": "Customer: since yesterday I cannot log in to online banking; the system reports a password error.",
  "questions": {
    "dept": {
      "type": "choice",
      "instructions": "Which department should handle this ticket?",
      "criteria": {"cards": "Card complaints", "online": "Online banking support", "loans": "Loans"},
      "max_error": 0.05
    },
    "urgent": {"type": "noul", "instructions": "Is the customer unable to use the service?"}
  }
}

Send a POST request to /v1/systemone. Each answer contains the probability of every option, the selected key and confidence. If the threshold is not met, the response contains "deferred": true.

TERMINAL · APPLE SILICON (MLX)
uv pip install "basal[mlx] @ https://github.com/rkinas/basal/archive/refs/tags/v2.0.0.tar.gz"
basal-serve --model Remek/basal-2.0-4.5B-MLX-8bit --mode mlx --port 8000
TERMINAL · OLLAMA (GGUF)
hf download Remek/basal-2.0-4.5B-GGUF --local-dir basal-2.0-4.5B-GGUF
cd basal-2.0-4.5B-GGUF && ollama create basal-2.0-4.5b:q8_0 -f Modelfile.Q8_0
basal-serve --model ./basal-2.0-4.5B-GGUF --mode ollama --ollama-model basal-2.0-4.5b:q8_0

Using ollama run alone returns only text. Typed answers with probabilities come from basal-serve running in front of Ollama. Process multiple items from a file with basal-run --input items.jsonl --output answers.jsonl.