basal-omni-1.0-ultra i silnik basal 2.1
Najbardziej zaawansowany model rodziny basal: basal-omni-1.0-ultra (31B) ma 0,879 w Werdykcie, o 5,8 punktu więcej niż Jev 1.14, i jest na równi z Liquid d1-ultra. Silnik basal 2.1 dodaje eksperymentalne zadania classify, verify, compress i extract, a pozostałe odpowiedzi zostawia bez zmian. Do zadań dochodzi eksperymentalny basal-omni-1.1-max.
basal-omni-1.0-ultra to najbardziej zaawansowany model rodziny basal: 31 mld parametrów na Google Gemma 4, to samo API decyzji, tekst i obrazy w jednym zapytaniu. W Werdykcie, naszym ukrytym benchmarku polskich i angielskich decyzji, ma 0,879: więcej niż basal-omni-1.0-max w każdej z 10 kategorii i o 5,8 punktu więcej niż Jev 1.14. Z Liquid d1-ultra jest na równi.
Razem z nim wydajemy silnik basal 2.1 z czterema eksperymentalnymi zadaniami: classify, verify, compress i extract. Wszystkie pozostałe odpowiedzi silnika są takie same jak w 2.0. Do zadań dochodzi eksperymentalny basal-omni-1.1-max; domyślnym modelem 12B pozostaje basal-omni-1.0-max.
basal-omni-1.0-ultra
ultra działa jak pozostałe modele basal: czyta stan i odpowiada na typowane pytania, zwracając skalibrowane prawdopodobieństwo każdej dozwolonej odpowiedzi, bez generowania tekstu. Przyjmuje tekst i obrazy. Dźwięku nie przyjmuje, bo model bazowy 31B nie ma kodera audio; do nagrań służą basal-omni-1.0-mini i max.
- Wagi bf16: 59 GB. Serwer
--mode eager --media onpotrzebuje karty z 80 GB pamięci; na takiej karcie ultra odpowiada na stany do ok. 10 000 tokenów. - FP8: 33 GB. Wersja basal-omni-1.0-ultra-FP8 działa przez
--mode vllmi czyta tylko tekst. Na pytaniach z 2–10 opcjami wybiera to samo co bf16 w 98,1% decyzji, a trafność różni się o −0,4 punktu (jedno H100). - Dostępność. Oba repozytoria ultra pojawią się na Hugging Face w sobotę 17 października o 9:00 (Warszawa).
Wyniki ultra
Werdykt to 5 000 ukrytych decyzji po polsku i angielsku w 10 kategoriach; każdy system dostaje te same pytania. ultra odpowiadał w trybie --deterministic, systemy API przez OpenRouter.
| System | Werdykt | Polski | Angielski |
|---|---|---|---|
| basal-omni-1.0-ultra · 31B | 0,879 [0,871–0,887] | 0,881 | 0,877 |
| Liquid d1-ultra · API | 0,881 [0,873–0,890] | 0,879 | 0,883 |
| basal-omni-1.0-max · 12B | 0,823 [0,813–0,832] | 0,824 | 0,821 |
| Jev 1.14 · API | 0,822 [0,811–0,831] | 0,824 | 0,819 |
- Wobec basal-omni-1.0-max: +5,6 punktu i wyższy wynik w każdej z 10 kategorii, najbardziej w długich dokumentach (0,854 wobec 0,742), zasadach (0,550 wobec 0,418) i kolejnym kroku agenta (0,928 wobec 0,838).
- Wobec Jev 1.14: +5,8 punktu (0,879 wobec 0,822).
- Wobec Liquid d1-ultra: remis statystyczny. Różnica wynosi −0,2 punktu, a jej 95% przedział (od −1,0 do +0,7) obejmuje zero. ultra prowadzi w 6 kategoriach (najwięcej w umowach: +3,2), d1-ultra w 3 (najwięcej w rozpoznawaniu, że odpowiedzi nie da się ustalić: +7,4), w wyszukiwaniu jest remis.
- Kalibracja: błąd kalibracji (ECE) 0,038. Przy celu 1% błędu ultra przyjmuje automatycznie 72,0% decyzji, z obserwowanym błędem 1,37% (d1-ultra na tej samej tablicy: 72,7% przy błędzie 1,25%). d1-ultra jest lepiej skalibrowany (ECE 0,018).
- Polski egzamin lekarski (LEK), nasz pomiar: 86,9% po polsku i 87,0% w wersji angielskiej (basal-omni-1.0-max: 75,0% i 80,9%), na tych samych pytaniach i według tego samego protokołu co w artykule o 2.0.
Szybkości ultra jeszcze nie zmierzyliśmy osobnym przebiegiem, dlatego na tablicy Werdyktu czas i koszt ultra są puste. Pełna tabela: Werdykt.
Silnik basal 2.1: zadania
Silnik v2.1.0 dodaje cztery typy zadań w tym samym API, dla modeli, które już uruchamiasz. Każde zadanie silnik rozkłada na decyzje modelu nad wspólnym stanem, więc model nadal nie pisze tekstu, a każda część odpowiedzi ma prawdopodobieństwo.
classify: etykiety z krótkim opisem każdej; wynik to etykieta i prawdopodobieństwo każdej z nich.verify: dla każdego twierdzenia: potwierdzone, zaprzeczone albo niewynikające ze stanu.compress: zdania, wiersze lub akapity potrzebne do pytania, jako krótszy tekst dla innego modelu.extract: pola schematu JSON skopiowane dokładnie z dokumentu, z pozycją znaków, albo wybrane z listy.
| Zadanie | Zbiór | Pytania | Wynik |
|---|---|---|---|
classify | CLINC150 „plus”, 151 etykiet z out-of-scope | 1 000 | 85,4% trafności |
classify | BANKING77, 77 etykiet | 1 000 | 74,6% trafności |
verify | VitaminC, trzy odpowiedzi | 1 000 | 80,3% trafności |
verify | RAGTruth, odpowiedź vs źródło | 1 000 | 80,3% trafności |
compress | QASPER, akapity, 30% znaków | 248 | 90,1% potrzebnych akapitów zachowanych |
extract | syntetyczne faktury PL / EN, 12 pól | 400 | 90,1% pól poprawnych |
{"state": "I was charged twice for my card payment yesterday.",
"questions": {"intent": {"type": "classify", "none": true, "labels": [
{"name": "card_payment_duplicate", "rubric": "a card payment was taken more than once"},
{"name": "card_lost", "rubric": "the card is lost or stolen"},
{"name": "refund_status", "rubric": "asks about a refund in progress"}]}}}
→ answers.intent (basal-omni-1.0-max, v2.1.0, bf16):
{"label": "card_payment_duplicate", "confidence": 0.9996,
"scores": {"card_payment_duplicate": 0.9996, "card_lost": 0.0002, "refund_status": 0.0000, "none": 0.0002},
"automated": {"0.01": null, "0.05": null}}Pole automated ma wartość tylko z progiem certyfikowanym dla danego zadania w pliku kalibracji. Bez takiego progu jest null: progi zwykłych decyzji nie przenoszą się na nowe zestawy etykiet (przy celu 1% od 2 do 9% automatycznych odpowiedzi było błędnych).
Reszta silnika bez zmian. Zadania to nowa ścieżka; zwykłe pytania obsługuje ten sam kod co w 2.0. Na basal-omni-1.0-max 23 276 z 23 278 decyzji z testów wydania ma w silniku 2.1 tę samą odpowiedź co w 2.0. Dwie różnice to niemal remisy dwóch opcji. Szczegóły: zadania na stronie serwera i TASKS.md.
basal-omni-1.1-max: eksperymentalny model do zadań
basal-omni-1.1-max to basal-omni-1.0-max po krótkim dodatkowym treningu na formatach zadań. Jest lepszy w zadaniach i nieco słabszy w ogólnych decyzjach, dlatego domyślnym modelem 12B pozostaje basal-omni-1.0-max.
- Zadania: średnia z sześciu zbiorów z tabeli wyżej rośnie z 83,5 do 85,1. Kontrola nakładania się danych: 27 pytań testowych (12 VitaminC, 15 QASPER) dzieli 13-wyrazowy fragment z danymi treningowymi; bez nich zyski wynoszą +4,2 i +2,7 pkt, a średnia nadal 85,1.
- Werdykt: 0,821 wobec 0,823 (w granicach przedziału). Przy celu 1% błędu przyjmuje automatycznie mniej decyzji: 57,7% wobec 60,1%.
- ContractNLI: −13,7 punktu (0,583 wobec 0,720; 95% przedział od −19,3 do −7,7). W zwykłych pytaniach o wynikanie 1.1-max zbyt często wybiera „tekst nie mówi tego wystarczająco”. Do takich pytań poza
verifyużywaj 1.0-max. - Dostępność. Na Hugging Face od soboty 17 października, 9:00.
Co się nie zmienia
basal-omni-1.0-mini i basal-omni-1.0-max mają te same wagi co w premierze 14 października; nie wydajemy nowego mini. Modele basal-2.0 również pozostają bez zmian. Silnik 2.1 obsługuje je tak samo jak 2.0.
Ograniczenia
- Zadania są eksperymentalne. Ich API może się zmienić w wersji pośredniej.
extractnie zwraca jeszcze list obiektów (pozycji faktury) ani pól tekstowych z obrazu. - ultra nie słyszy. Przyjmuje tekst i obrazy; FP8 tylko tekst. Szybkości ultra jeszcze nie zmierzyliśmy osobnym przebiegiem.
- 1.1-max to kompromis. Zyskuje w zadaniach, traci w ContractNLI i w automatyzacji przy celu 1%.
- Obliczenia zostaw kodowi. Reguły, terminy i dokładne progi to najsłabszy punkt decyzji w jednym przebiegu.
- Zachowaj nadzór nad istotnymi decyzjami. Decyzje o poważnych skutkach dla ludzi wymagają kontroli człowieka.
Jak zacząć
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.1.0.tar.gz"
basal-serve --model Remek/basal-omni-1.0-ultra --mode eager --media on --port 8000uv pip install vllm==0.31.0 "basal @ https://github.com/rkinas/basal/archive/refs/tags/v2.1.0.tar.gz"
basal-serve --model Remek/basal-omni-1.0-ultra-FP8 --mode vllm --max-len 16384 --gpu-memory 0.9 --port 8000Repozytoria ultra i 1.1-max publikujemy w sobotę 17 października od 9:00. Silnik v2.1.0 jest już na GitHubie; z mini i max działa od razu. Zadania wysyłasz jako POST do /v1/basal albo /v1/systemone.