Inference engine for basal: fast, calibrated typed decisions (choice / yes-no / score) for Polish and English
Python
155
41 commits
updated Oct 17, 2026
Inference engine and models for basal-2.0 and basal-omni-1.0: small, fast, calibrated typed-decision models for Polish and English. The basal-omni models also take images and audio in a request (experimental).
What it is. basal is inspired by System 1 (fast, intuitive) decision models such as Jev: instead of a chatbot that writes an answer, the model reads a state (a message, a document, a case file, retrieved passages, an agent trace, a web page as JSON) and answers a typed question about it by returning a probability for each allowed answer, in one forward pass, without generating text. The answer can never fall outside the options you gave, and the probability says how sure the model is.
What it is for: a dynamic classifier. You describe the classes in the request, in plain language, per call, instead of training a classifier for them: routing tickets and documents (up to 255 options), rule and policy checks, questions about long documents, RAG decisions, scoring on ordered scales, the next step of an agent, judging answers, and triage with a confidence threshold that sends uncertain cases to a person.
The name comes from the basal ganglia, the part of the brain that selects one action among competing options.
tool question
type for agents, an MCP server, basal-calibrate and --deterministic serving.Full list: docs/WHATS_NEW.md and the release notes.
| model | params | use | Hugging Face |
|---|---|---|---|
| basal-2.0-mini | 1.5B | fastest; high-volume routing, laptops and small GPUs; context 8,192 tokens | Remek/basal-2.0-mini · -FP8 · -GGUF · -MLX-8bit |
| basal-2.0 | 4.5B | main model: best balance of accuracy and speed; experimental thinking mode | Remek/basal-2.0-4.5B · -FP8 · -GGUF · -MLX-8bit |
| basal-2.0-max | 11B | most accurate; long documents, judging, hard English decisions | Remek/basal-2.0-max · -FP8 · -GGUF · -MLX-8bit |
basal.json) and calibration files. -FP8: NVIDIA ModelOpt FP8
checkpoints for the basal engine (sm89+); -GGUF for Ollama and llama.cpp; -MLX-8bit for Apple Silicon. Every
port is checked against its bf16 model; its card has the numbers. Files in detail:
docs/INSTALL.md.basal-omni-1.0 (experimental; text, images and audio; built on Google Gemma 4):
| model | params | use | Hugging Face |
|---|---|---|---|
| basal-omni-1.0-mini | 4B (Gemma 4 E4B) | decisions about text, images and audio; about 16 GB of GPU memory | Remek/basal-omni-1.0-mini |
| basal-omni-1.0-max | 12B | highest Werdykt score of the basal models; text, images and audio; about 24 GB of GPU memory | Remek/basal-omni-1.0-max |
basal-serve --mode eager on an NVIDIA GPU (--media on for images and audio).Which one to choose: start with basal-2.0 (4.5B). Use max when accuracy on long or hard inputs matters more than latency, and mini for high volumes, laptops and small GPUs (its context is 8,192 tokens). All three use the same API, prompt format and calibration procedure. Use basal-omni (experimental) when a request carries images or audio, or when the highest accuracy matters more than speed and an eager-mode server is enough.
Werdykt: 10 categories in Polish and English, 5,000 decisions whose items are not published, one protocol for every model. Each basal-2.0 model against the basal-1.5 model of the same size:
| mini: 1.5 → 2.0 | 4.5B: 1.5 → 2.0 | max: 1.5 → 2.0 | |
|---|---|---|---|
| Werdykt macro accuracy | 0.607 → 0.618 | 0.721 → 0.729 | 0.773 → 0.784 |
| calibration error (ECE, lower is better) | 0.086 → 0.035 | 0.068 → 0.060 | 0.074 → 0.044 |
| decisions/s at 16 clients, bf16, one H100 | 20.5 → 106.4 | 23.0 → 32.2 | 10.2 → 16.2 |
| English panel (10 public tasks), points | −2.1 | −3.6 | −1.8 |
basal-1.5 (4.5B) and basal-1.5-max are measured on SGLang, their fastest configuration. basal-omni-1.0 scores 0.769 (mini) and 0.823 (max) on Werdykt. Hosted API models and larger open decision systems score above basal-2.0: the board lists every tested system with its accuracy, latency and cost. Intervals, calibration, other benchmarks and speed: docs/RESULTS.md.
NVIDIA GPU, with uv in a fresh environment:
uv venv --python 3.12 --allow-existing ~/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 --template-prefix off --port 8000
--template-prefix off for the 4.5B model (bf16 and -FP8); mini and max run with the default.pip install basal may take a torch built for a newer
CUDA than your driver. DGX Spark and B300: the cu130 build (docs/HARDWARE.md).--mode fast compiles the model (several minutes); --mode fast-nocompile starts in seconds.Apple Silicon:
uv venv --python 3.12 --allow-existing ~/basal-mlx && source ~/basal-mlx/bin/activate
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
Ask questions with curl. Several questions about one state go into one request and share the state:
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?"}}}'
Each answer has a probability for every option, the chosen key and the confidence:
{
"model": "basal-2.0-4.5B",
"answers": {
"dept": {"type": "choice", "choice": "<key>", "probabilities": {"cards": p, "online": p, "loans": p}, "confidence": p},
"urgent": {"type": "noul", "noul": p_yes, "probabilities": {"true": p, "false": p}, "confidence": p}
},
"usage": {"input_tokens": n, "output_tokens": 0, "questions": 2, "branches": 2, "latency_ms": t}
}
| other ways to run | |
|---|---|
| FP8 checkpoints (Hopper, Blackwell) | docs/INSTALL.md |
| vLLM or SGLang with bf16 weights | docs/INSTALL.md |
| Ollama and llama.cpp (GGUF) | docs/INSTALL.md |
| Apple Silicon in detail, CPU | docs/INSTALL.md |
| images and audio (basal-omni) | below |
| all seven engines compared | docs/INSTALL.md |
| a JSONL file, serving flags, benchmarking your GPU | docs/SERVING.md |
| Python client | docs/INSTALL.md |
POST /v1/systemone with a state (text or JSON) and named, typed questions; every answer has a calibrated
probability for each option and a confidence. Up to 255 options per question (basal-1.x models: 10); several
questions over one state are answered in one pass.
| type | answer | example |
|---|---|---|
choice | distribution over named options (up to 255) | route a ticket, pick the applicable rule, the intent among 150 |
noul | probability of yes (with optional descriptions of both sides) | "was the appeal filed on time?" |
score | distribution over ordered levels + expected level | urgency 0–3, severity, grade of an answer |
multi | independent probability per label + the selected set | "which of these issues does the message raise?" |
act | the action with the lowest expected cost under your cost matrix | approve / reject / send to a person |
tool | the next tool from OpenAI / MCP tool definitions, or answer directly / ask the user / no suitable tool | the next step of an agent |
To send uncertain decisions to a person, use act or tool with "max_error": 0.05: the answer says
"deferred": true below the certified confidence threshold. Request and response fields, every question type,
using the confidence, calibrating on your own data and how to ask: docs/API.md.
The basal-omni models answer the same questions, and with --media on a request may also carry images and audio
("media"):
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.0.0.tar.gz"
basal-serve --model Remek/basal-omni-1.0-mini --mode eager --media on --port 8000 # or Remek/basal-omni-1.0-max
They were trained on text decisions only: Gemma 4's encoders read the media zero-shot and the answers use the text calibration, so validate them on your own media. Request format and limits: docs/INSTALL.md; memory and engine details: docs/OMNI.md.
Experimental. With the basal[mcp] extra, basal-serve --mcp on also serves the decisions over the
Model Context Protocol at /mcp, with the read-only tools decide and
decide_many; basal-mcp is a stdio bridge for hosts that start local processes.
uv pip install "basal[fp8,mcp] @ https://github.com/rkinas/basal/archive/refs/tags/v2.0.0.tar.gz"
basal-serve --model Remek/basal-2.0-4.5B --mode fast --template-prefix off --host 127.0.0.1 --port 8000 --mcp on
claude mcp add --transport http basal http://127.0.0.1:8000/mcp # Claude Code; other hosts take the same URL
No authentication, like the HTTP API: bind --host 127.0.0.1 or put a gateway in front. Details:
docs/MCP.md.
| INSTALL | engines, the model files and every install path: NVIDIA (bf16, FP8), vLLM, SGLang, Apple Silicon, Ollama / llama.cpp, CPU, basal-omni |
| API | request, response, question types, using the confidence, how to ask |
| SERVING | serving modes and flags, inference on a JSONL file, benchmarking your GPU |
| RESULTS | results against basal-1.5: Werdykt, other benchmarks, speed |
| MCP · THINKING · OMNI | MCP server and bridge; the experimental thinking mode; basal-omni on the engine |
| FEATURES · CALIBRATION | multi, act, tool and evidence in detail; calibrating on your own data |
| FORMATS · FORMAT2 · SOAM | prompt formats, option orders and calibration files; the runtime contract; shared-state packing |
| HARDWARE · PORTS · GGUF · QUANTIZATION | which mode on which GPU; MLX and GGUF ports; FP8 and other low precision |
| WHATS_NEW · basal-1.0 report | the full list of changes in 2.0; the basal-1.0 technical report |
max_error: 0.01 defers every decision with the shipped files (except
choice with basal-2.0-max-GGUF's CALIBRATION.ollama.json, confidence 0.989); use 0.05 or fit thresholds on your
data. At the 1% target on Werdykt, basal-2.0 (4.5B) and max automate fewer decisions than basal-1.5."facts": "auto" for Polish dates and amounts.--context-overflow refuse).act, tool, multi over many labels and evidence spans are experimental; multi asks each label as an
independent yes/no question."calibration": "text"); validate it on your own media. It runs
in eager mode only, without the ports and the thinking mode of basal-2.0.basal-1.5 (October 2026; mini 1.5B, 4.5B, max 11B, with FP8 / NVFP4, MLX 4-bit / 8-bit and GGUF ports) remains
available on Hugging Face (collection)
and is served unchanged by this engine (--model Remek/basal-1.5-4.5B; two option orders by default). Its release
README, with the full Werdykt board of that release: v1.5.0.
basal-1.0 (September 2026; 4.5B and 1.5B, plus FP8 / NVFP4 ModelOpt checkpoints) remains available on Hugging Face
(Remek/basal-1.0-4.5B, Remek/basal-1.0-1.5B). Its full tables, methods and limitations are in the
basal-1.0 technical report and the v1.0.1 README.
The engine serves basal-1.0 models unchanged; fast-exit and the vllm mode with the ModelOpt checkpoints work as
before. The Apple Silicon engine modes (mps, gguf, mlx-q8) and the Apple Silicon engine study were contributed
by Paweł Kiszczak (#4).
@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}
}
basal-omni-1.0 (text, images and audio):
@software{kinas2026basalomni10,
title = {basal-omni-1.0: typed-decision models for text, images and audio in Polish and English},
author = {Kinas, Remigiusz},
year = {2026},
version = {1.0},
url = {https://huggingface.co/collections/Remek/basal-omni-10-6acea28e8b5baed2db475c1f}
}
Apache-2.0. The models are derivatives of Apache-2.0 base models (Bielik v3, SpeakLeash and ACK Cyfronet AGH, for basal-2.0; Gemma 4, Google, for basal-omni); see NOTICE.
3,004 followers · starred Oct 2026
163 followers · starred Sep 2026
70 followers · starred Oct 2026
Inference engine for basal: fast, calibrated typed decisions (choice / yes-no / score) for Polish and English
Python
155
41 commits
updated Oct 17, 2026
Inference engine and models for basal-2.0 and basal-omni-1.0: small, fast, calibrated typed-decision models for Polish and English. The basal-omni models also take images and audio in a request (experimental).
What it is. basal is inspired by System 1 (fast, intuitive) decision models such as Jev: instead of a chatbot that writes an answer, the model reads a state (a message, a document, a case file, retrieved passages, an agent trace, a web page as JSON) and answers a typed question about it by returning a probability for each allowed answer, in one forward pass, without generating text. The answer can never fall outside the options you gave, and the probability says how sure the model is.
What it is for: a dynamic classifier. You describe the classes in the request, in plain language, per call, instead of training a classifier for them: routing tickets and documents (up to 255 options), rule and policy checks, questions about long documents, RAG decisions, scoring on ordered scales, the next step of an agent, judging answers, and triage with a confidence threshold that sends uncertain cases to a person.
The name comes from the basal ganglia, the part of the brain that selects one action among competing options.
tool question
type for agents, an MCP server, basal-calibrate and --deterministic serving.Full list: docs/WHATS_NEW.md and the release notes.
| model | params | use | Hugging Face |
|---|---|---|---|
| basal-2.0-mini | 1.5B | fastest; high-volume routing, laptops and small GPUs; context 8,192 tokens | Remek/basal-2.0-mini · -FP8 · -GGUF · -MLX-8bit |
| basal-2.0 | 4.5B | main model: best balance of accuracy and speed; experimental thinking mode | Remek/basal-2.0-4.5B · -FP8 · -GGUF · -MLX-8bit |
| basal-2.0-max | 11B | most accurate; long documents, judging, hard English decisions | Remek/basal-2.0-max · -FP8 · -GGUF · -MLX-8bit |
basal.json) and calibration files. -FP8: NVIDIA ModelOpt FP8
checkpoints for the basal engine (sm89+); -GGUF for Ollama and llama.cpp; -MLX-8bit for Apple Silicon. Every
port is checked against its bf16 model; its card has the numbers. Files in detail:
docs/INSTALL.md.basal-omni-1.0 (experimental; text, images and audio; built on Google Gemma 4):
| model | params | use | Hugging Face |
|---|---|---|---|
| basal-omni-1.0-mini | 4B (Gemma 4 E4B) | decisions about text, images and audio; about 16 GB of GPU memory | Remek/basal-omni-1.0-mini |
| basal-omni-1.0-max | 12B | highest Werdykt score of the basal models; text, images and audio; about 24 GB of GPU memory | Remek/basal-omni-1.0-max |
basal-serve --mode eager on an NVIDIA GPU (--media on for images and audio).Which one to choose: start with basal-2.0 (4.5B). Use max when accuracy on long or hard inputs matters more than latency, and mini for high volumes, laptops and small GPUs (its context is 8,192 tokens). All three use the same API, prompt format and calibration procedure. Use basal-omni (experimental) when a request carries images or audio, or when the highest accuracy matters more than speed and an eager-mode server is enough.
Werdykt: 10 categories in Polish and English, 5,000 decisions whose items are not published, one protocol for every model. Each basal-2.0 model against the basal-1.5 model of the same size:
| mini: 1.5 → 2.0 | 4.5B: 1.5 → 2.0 | max: 1.5 → 2.0 | |
|---|---|---|---|
| Werdykt macro accuracy | 0.607 → 0.618 | 0.721 → 0.729 | 0.773 → 0.784 |
| calibration error (ECE, lower is better) | 0.086 → 0.035 | 0.068 → 0.060 | 0.074 → 0.044 |
| decisions/s at 16 clients, bf16, one H100 | 20.5 → 106.4 | 23.0 → 32.2 | 10.2 → 16.2 |
| English panel (10 public tasks), points | −2.1 | −3.6 | −1.8 |
basal-1.5 (4.5B) and basal-1.5-max are measured on SGLang, their fastest configuration. basal-omni-1.0 scores 0.769 (mini) and 0.823 (max) on Werdykt. Hosted API models and larger open decision systems score above basal-2.0: the board lists every tested system with its accuracy, latency and cost. Intervals, calibration, other benchmarks and speed: docs/RESULTS.md.
NVIDIA GPU, with uv in a fresh environment:
uv venv --python 3.12 --allow-existing ~/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 --template-prefix off --port 8000
--template-prefix off for the 4.5B model (bf16 and -FP8); mini and max run with the default.pip install basal may take a torch built for a newer
CUDA than your driver. DGX Spark and B300: the cu130 build (docs/HARDWARE.md).--mode fast compiles the model (several minutes); --mode fast-nocompile starts in seconds.Apple Silicon:
uv venv --python 3.12 --allow-existing ~/basal-mlx && source ~/basal-mlx/bin/activate
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
Ask questions with curl. Several questions about one state go into one request and share the state:
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?"}}}'
Each answer has a probability for every option, the chosen key and the confidence:
{
"model": "basal-2.0-4.5B",
"answers": {
"dept": {"type": "choice", "choice": "<key>", "probabilities": {"cards": p, "online": p, "loans": p}, "confidence": p},
"urgent": {"type": "noul", "noul": p_yes, "probabilities": {"true": p, "false": p}, "confidence": p}
},
"usage": {"input_tokens": n, "output_tokens": 0, "questions": 2, "branches": 2, "latency_ms": t}
}
| other ways to run | |
|---|---|
| FP8 checkpoints (Hopper, Blackwell) | docs/INSTALL.md |
| vLLM or SGLang with bf16 weights | docs/INSTALL.md |
| Ollama and llama.cpp (GGUF) | docs/INSTALL.md |
| Apple Silicon in detail, CPU | docs/INSTALL.md |
| images and audio (basal-omni) | below |
| all seven engines compared | docs/INSTALL.md |
| a JSONL file, serving flags, benchmarking your GPU | docs/SERVING.md |
| Python client | docs/INSTALL.md |
POST /v1/systemone with a state (text or JSON) and named, typed questions; every answer has a calibrated
probability for each option and a confidence. Up to 255 options per question (basal-1.x models: 10); several
questions over one state are answered in one pass.
| type | answer | example |
|---|---|---|
choice | distribution over named options (up to 255) | route a ticket, pick the applicable rule, the intent among 150 |
noul | probability of yes (with optional descriptions of both sides) | "was the appeal filed on time?" |
score | distribution over ordered levels + expected level | urgency 0–3, severity, grade of an answer |
multi | independent probability per label + the selected set | "which of these issues does the message raise?" |
act | the action with the lowest expected cost under your cost matrix | approve / reject / send to a person |
tool | the next tool from OpenAI / MCP tool definitions, or answer directly / ask the user / no suitable tool | the next step of an agent |
To send uncertain decisions to a person, use act or tool with "max_error": 0.05: the answer says
"deferred": true below the certified confidence threshold. Request and response fields, every question type,
using the confidence, calibrating on your own data and how to ask: docs/API.md.
The basal-omni models answer the same questions, and with --media on a request may also carry images and audio
("media"):
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.0.0.tar.gz"
basal-serve --model Remek/basal-omni-1.0-mini --mode eager --media on --port 8000 # or Remek/basal-omni-1.0-max
They were trained on text decisions only: Gemma 4's encoders read the media zero-shot and the answers use the text calibration, so validate them on your own media. Request format and limits: docs/INSTALL.md; memory and engine details: docs/OMNI.md.
Experimental. With the basal[mcp] extra, basal-serve --mcp on also serves the decisions over the
Model Context Protocol at /mcp, with the read-only tools decide and
decide_many; basal-mcp is a stdio bridge for hosts that start local processes.
uv pip install "basal[fp8,mcp] @ https://github.com/rkinas/basal/archive/refs/tags/v2.0.0.tar.gz"
basal-serve --model Remek/basal-2.0-4.5B --mode fast --template-prefix off --host 127.0.0.1 --port 8000 --mcp on
claude mcp add --transport http basal http://127.0.0.1:8000/mcp # Claude Code; other hosts take the same URL
No authentication, like the HTTP API: bind --host 127.0.0.1 or put a gateway in front. Details:
docs/MCP.md.
| INSTALL | engines, the model files and every install path: NVIDIA (bf16, FP8), vLLM, SGLang, Apple Silicon, Ollama / llama.cpp, CPU, basal-omni |
| API | request, response, question types, using the confidence, how to ask |
| SERVING | serving modes and flags, inference on a JSONL file, benchmarking your GPU |
| RESULTS | results against basal-1.5: Werdykt, other benchmarks, speed |
| MCP · THINKING · OMNI | MCP server and bridge; the experimental thinking mode; basal-omni on the engine |
| FEATURES · CALIBRATION | multi, act, tool and evidence in detail; calibrating on your own data |
| FORMATS · FORMAT2 · SOAM | prompt formats, option orders and calibration files; the runtime contract; shared-state packing |
| HARDWARE · PORTS · GGUF · QUANTIZATION | which mode on which GPU; MLX and GGUF ports; FP8 and other low precision |
| WHATS_NEW · basal-1.0 report | the full list of changes in 2.0; the basal-1.0 technical report |
max_error: 0.01 defers every decision with the shipped files (except
choice with basal-2.0-max-GGUF's CALIBRATION.ollama.json, confidence 0.989); use 0.05 or fit thresholds on your
data. At the 1% target on Werdykt, basal-2.0 (4.5B) and max automate fewer decisions than basal-1.5."facts": "auto" for Polish dates and amounts.--context-overflow refuse).act, tool, multi over many labels and evidence spans are experimental; multi asks each label as an
independent yes/no question."calibration": "text"); validate it on your own media. It runs
in eager mode only, without the ports and the thinking mode of basal-2.0.basal-1.5 (October 2026; mini 1.5B, 4.5B, max 11B, with FP8 / NVFP4, MLX 4-bit / 8-bit and GGUF ports) remains
available on Hugging Face (collection)
and is served unchanged by this engine (--model Remek/basal-1.5-4.5B; two option orders by default). Its release
README, with the full Werdykt board of that release: v1.5.0.
basal-1.0 (September 2026; 4.5B and 1.5B, plus FP8 / NVFP4 ModelOpt checkpoints) remains available on Hugging Face
(Remek/basal-1.0-4.5B, Remek/basal-1.0-1.5B). Its full tables, methods and limitations are in the
basal-1.0 technical report and the v1.0.1 README.
The engine serves basal-1.0 models unchanged; fast-exit and the vllm mode with the ModelOpt checkpoints work as
before. The Apple Silicon engine modes (mps, gguf, mlx-q8) and the Apple Silicon engine study were contributed
by Paweł Kiszczak (#4).
@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}
}
basal-omni-1.0 (text, images and audio):
@software{kinas2026basalomni10,
title = {basal-omni-1.0: typed-decision models for text, images and audio in Polish and English},
author = {Kinas, Remigiusz},
year = {2026},
version = {1.0},
url = {https://huggingface.co/collections/Remek/basal-omni-10-6acea28e8b5baed2db475c1f}
}
Apache-2.0. The models are derivatives of Apache-2.0 base models (Bielik v3, SpeakLeash and ACK Cyfronet AGH, for basal-2.0; Gemma 4, Google, for basal-omni); see NOTICE.
3,004 followers · starred Oct 2026
163 followers · starred Sep 2026
70 followers · starred Oct 2026