# Który model AI najlepiej zapisuje przepisy? Test 21 modeli na polskich i angielskich przepisach

21 modeli AI, 50 przepisów polskich i angielskich, wzorzec sprawdzony ręcznie. Czołówka to remis, a dostawca potrafi zepsuć dobry model.

**Canonical:** https://spoko.space/pl/blog/wybor-modelu-ai-zapiszprzepis/  
**Language:** pl  
**Published:** 2026-10-26  
**Updated:** 2026-10-27  
**Tags:** AI, LLM, OpenAI, OpenRouter, Groq, Ollama, Bielik, ZapiszPrzepis  
**Category:** AI

---
**Każdy przepis zapisany w ZapiszPrzepis przechodzi przez model AI.** Model wyciąga z niego składniki, ilości, kroki, temperatury i czasy, porządkuje je według reguł aplikacji, a przepis z obcej strony jeszcze tłumaczy. Zaczęło się od tłumaczenia, bo przepisy z angielskich blogów zapisywały się przetłumaczone w połowie: „1 funt” obok gramów, „mięso mielone z indyka (94% chude)”, „mały makaron (np. ditalini, alfabet)” i krok „Umieścić mięso mielone z indyka w misce”. Poprawiłem prompt i kod, a potem sprawdziłem, który model ma tę pracę wykonywać. Najpierw 11 modeli pod kątem formatu, potem 21 modeli pod kątem tego, czy zapisany przepis zgadza się z oryginałem.

W skrócie:

- **Czołówka to remis.** Claude Haiku 5.5, Gemini 3.5 Flash, Gemini 3.1 Flash-Lite, gpt-4.1-mini i gpt-5.4-mini mieszczą się w tych samych przedziałach ufności.
- **W aplikacji zostaje gpt-5.4-mini.** Na pełnym wejściu ma 0,09 błędu krytycznego na przepis, czyli mniej więcej jeden na jedenaście przepisów, i odpowiada w 4,4 sekundy.
- **Droższy model nie był lepszy.** Claude Sonnet 5.5 kosztował około dziesięć razy więcej niż Claude Haiku 5.5 i nie wypadł lepiej.
- **Dostawca znaczy więcej niż rozmiar modelu.** Ten sam gpt-oss przez OpenRouter robił od zera do ponad 12 błędów krytycznych na odpowiedź, zależnie od tego, kto go uruchomił.
- **Więcej rozumowania nie pomogło** gpt-5.4-mini.
- **Polszczyzna modeli w chmurze nie różnicuje.** W mojej ślepej ocenie wszystkie 20 odpowiedzi z różnych modeli dostało 5 na 5.
- **Modele lokalne wypadają najsłabiej**, zwłaszcza na angielskich przepisach. qwen3:14b pisze wtedy łamaną polszczyzną.

## Jak ZapiszPrzepis wyciąga przepis {#jak-zapiszprzepis-wyciąga-przepis}

[ZapiszPrzepis](https://spoko.space/pl/zapiszprzepis/) zapisuje przepis z linku: pobiera stronę, a model językowy zamienia jej tekst w JSON z tytułem, składnikami, krokami, czasem i kategorią. Składnik ma cztery pola: ilość, jednostkę, nazwę i miarę domową, na przykład 480 ml, a obok „2 szklanki”. Prompt ma około 40 reguł, od kategorii po formę kroków: bezokolicznik i żadnej narracji, czyli „Przełożyć do miski”, a nie „Teraz przekładamy…”.

Przepis z obcej strony ten sam prompt musi jeszcze przetłumaczyć i dopasować do polskiej kuchni. Miał na to jedno zdanie: przetłumacz na polski i zamień amerykańskie miary na metryczne (szklanka ≈ 240 ml, łyżka ≈ 15 ml). O funtach, uncjach, stopniach Fahrenheita i markach nie mówił nic.

## Dlaczego nie DeepL {#dlaczego-nie-deepl}

Pierwszy odruch to dołożyć DeepL. Tylko że tłumaczenie to jeszcze nie lokalizacja. DeepL zamieniłby „finely grated” na „drobno starte”, a glosariusz przypiąłby „ground turkey” do „mięsa mielonego z indyka”. Trzech rzeczy by jednak nie zrobił:

- nie przeliczy funtów na gramy ani °F na °C,
- nie przeniesie notatki („pokrojone”, „wyciśnięta”) z pola miary do nazwy składnika,
- nie zamieni amerykańskiej marki składnika na produkt, który kupisz w polskim sklepie.

Byłaby to też druga płatna usługa i drugi przebieg, który tłumaczy krótkie pola JSON bez kontekstu, a samotne „splash” łatwo zostaje „pluskiem”. Z sześciu zgłoszonych problemów zostałyby cztery.

## Co zmieniłem {#co-zmieniłem}

Zmiana ma trzy części.

1. **Język źródła rozpoznaje kod, zanim zapyta model.** Liczy polskie znaki diakrytyczne i częste słowa polskie i angielskie w tekście strony. Atrybut `lang` jest tylko podpowiedzią, bo wiele polskich blogów ma w szablonie `lang="en-US"`.
2. **Obce źródło dostaje dodatkowy blok reguł**, doklejany do wspólnego promptu: przelicz funty, uncje, kostki masła i °F (także w krokach), przetłumacz każde słowo, pisz kroki tak jak polska książka kucharska, nazywaj produkty tak jak polskie sklepy (literki, kółka, kolanka), pomijaj amerykańskie oznaczenia chudości mięsa. Marka zostaje, gdy jest samą potrawą (domowe SpaghettiOs), i znika, gdy jest składnikiem. Osobnego promptu po angielsku nie pisałem, bo rozjechałby się ze wspólnym przy pierwszej zmianie reguł.
3. **Kontrole w kodzie, bo model części reguł nie słuchał.** Dwa błędy przetrwały próby na gpt-4.1-mini mimo reguł w prompcie, więc kod pilnuje ich sam. W polu miary domowej zostaje tylko polska miara („półtorej szklanki”, „płaska łyżka”, „1 saszetka”). Notatka trafia do nazwy, amerykańska waga znika, gdy są gramy, a miara, która powtarza ilość, też znika. Ta kontrola działa dla każdego źródła: z 53 miar zapisanych w bazie zmieniła 14 i każda była notatką albo amerykańską jednostką. Dla obcych źródeł kod usuwa jeszcze procent przed „chude” i zostawia szklankę albo łyżkę tylko wtedy, gdy podaje ją oryginał.

Przed i po, na trzech przepisach z howsweeteats.com, od których wszystko się zaczęło:

| Przed | Po |
| --- | --- |
| 450 g · mielone indyka · obok gramów: 1 funt | 450 g · mięso mielone z indyka, bez miary domowej |
| szalotka · obok gramów: finely grated | szalotka drobno starta |
| mięso mielone z indyka (94% chude) | mięso mielone z indyka (najlepiej chude) |
| mały makaron (np. ditalini, alfabet) | drobny makaron do zup, np. małe rurki (ditalini), literki |
| 225 g · makaron · obok gramów: ½ funta, po pierwszej poprawce 1/2 szklanki | 225 g · makaron, bez miary domowej |
| Umieścić mięso mielone z indyka w misce | Przełożyć mięso mielone z indyka do miski |
| temperatura wewnętrzna 175 do 180 stopni (°F czytane jak °C) | 75–80°C |

Dwie rzeczy nadal nie są idealne. Model napisał „Spaghettios” zamiast „SpaghettiOs”, jak w oryginale. A kontrola szklanek sprawdza cały przepis, nie każdy składnik, więc wymyślone „1/2 szklanki” przejdzie, jeśli oryginał podaje „1/2 cup” przy innym składniku.

## Pierwszy test: czy model trzyma się formatu {#pierwszy-test-czy-model-trzyma-się-formatu}

Pierwszy test sprawdzał, czy model przestrzega reguł aplikacji: 26 przepisów (25 polskich i jeden angielski), 11 modeli (5 z OpenAI, 3 z darmowego Groqa i 3 lokalne), każdy przepis dwa razy. Wynik oceniał kod aplikacji na surowym JSON-ie, zanim zadziałają kontrole.

Liczby to sumy z 52 ekstrakcji na model. Błąd formatu jest jednego z trzech rodzajów:

| Kolumna | Co liczę jako błąd |
| --- | --- |
| miara obok gramów | Aplikacja ma osobne pole na miarę domową, którą pokazuje obok gramów: „2 szklanki”, „1 łyżka”. Błąd to wszystko inne, co model tam wpisze: notatka („pokrojone”, „do dekoracji”), amerykańska jednostka („1 funt” obok 450 g mięsa) albo powtórzona ilość („3 łyżki” obok 3 łyżek). |
| forma kroków | Krok ma być w bezokoliczniku, jak w książce kucharskiej: „Dodać mąkę”. Błąd to tryb rozkazujący („Dodaj mąkę”) albo narracja („Teraz dodajemy mąkę”). |
| złe pole | Miara wpisana do innego pola składnika: „320 g” jako ilość, zamiast 320 w ilości i „g” w jednostce, albo „2 szklanki” jako jednostka. Tę kolumnę dodałem w trakcie testu, bo kontrola miary obok gramów takiego składnika nie widzi: jego pole miary domowej jest puste. |
| razem | Suma trzech kolumn powyżej. |

**Błędy formatu na model, sam markdown (pierwszy test)**

| Model | Gdzie | Błędy |
| --- | --- | --- |
| gpt-5.4-mini | OpenAI API (płatne) | 26 |
| qwen3.8-27b | Groq (darmowy plan) | 48 |
| gpt-oss-120b | Groq (darmowy plan) | 80 |
| gpt-4o-mini | OpenAI API (płatne) | 80 |
| gpt-4.1-mini | OpenAI API (płatne) | 96 |
| gpt-5-mini | OpenAI API (płatne) | 108 |
| gpt-oss-20b | Groq (darmowy plan) | 150 |
| gpt-5-nano | OpenAI API (płatne) | 234 |
| qwen3:14b | lokalnie (Ollama) | 434 |
| Bielik 11B v3.0 | lokalnie (Ollama) | 562 |
| Bielik 11B v2.3 | lokalnie (Ollama) | 577 |

Mniej znaczy lepiej. Rodzaje błędów opisuje tabela wyżej.

gpt-5.4-mini zrobił najmniej błędów formatu, prawie nie mylił formy kroków i odpowiadał najszybciej z modeli OpenAI, więc po tym teście zastąpił w aplikacji gpt-4o-mini. Bielik wypadł najgorzej: w ponad 200 składnikach wpisywał miarę do złego pola i nie pisał kroków w bezokoliczniku.

Ten test mówił jednak tylko, czy model trzyma się formatu. Nie mówił, czy zapisany przepis jest prawdziwy: czy ilości i temperatury zgadzają się z oryginałem i czy niczego nie brakuje. Do tego potrzebny był drugi test.

## Drugi test: czy zapisany przepis zgadza się z oryginałem {#drugi-test-czy-zapisany-przepis-zgadza-się-z-oryginałem}

### Przepisy i wzorzec {#przepisy-i-wzorzec}

Zestaw to 50 przepisów zapisanych w aplikacji: 25 z polskich stron i 25 z angielskich blogów z USA, Wielkiej Brytanii, Australii i Indii. Trzy odpadły, bo zapisana strona nie zawierała przepisu (paywall albo pusta strona). Dwa kolejne odpadły tylko w wariancie z samym markdownem, bo przepis zaczynał się za pierwszymi 10 tysiącami znaków.

Dla każdego przepisu powstał wzorzec: składniki z ilościami, kroki, temperatury, czasy, porcje i zdjęcia przypisane do kroków. Przygotowały go niezależnie dwa modele: Claude Fable 5.1 (w Claude Code) i Gemini 3.5 Flash z wysokim poziomem rozumowania. Tam, gdzie się zgadzały, wzorzec był gotowy. Każdą różnicę rozstrzygałem sam, na ślepo, bez wiedzy, który model co napisał. Do tego sprawdziłem z oryginałem 31 losowo wybranych miejsc, w których się zgadzały, i wszystkie 31 były poprawne. Ustaliłem też trzy zasady: wartość z podanego zakresu jest poprawna, przepis musi zachować oba tryby piekarnika (góra-dół i termoobieg), a policzony czy oszacowany łączny czas nie jest błędem.

Jedno zastrzeżenie wprost: wzorzec przygotowały modele z tych samych rodzin co część zawodników (Claude i Gemini). To ryzyko zmniejsza moja kontrola różnic, ale go nie usuwa, a modele Claude i Gemini są akurat w czołówce.

### Co liczę jako błąd {#co-liczę-jako-błąd}

| Waga | Co to znaczy |
| --- | --- |
| krytyczny | Kto ugotuje według zapisu, dostanie inne danie albo mu nie wyjdzie: brakujący składnik, ilość różna od oryginału o więcej niż 5%, zgubiony krok, zła albo brakująca temperatura piekarnika (tolerancja ±5°C). |
| poważny | Przepis wyjdzie, ale coś się nie zgadza: zły czas, brakujące zdjęcie kroku albo zdjęcie główne użyte jako zdjęcie kroku, nieprzeliczone amerykańskie jednostki. |
| drobny | Składnik opcjonalny, pozostawione angielskie słowa, odstępstwa od formatu aplikacji z pierwszego testu. |
| błędy polszczyzny | LanguageTool 6.6 (lokalnie, pl-PL) na tytule, nazwach składników i krokach: gramatyka, składnia, szyk i literówki w słowach, których nie ma na stronie źródłowej. Na 80 trafieniach sprawdzonych ręcznie 46 było prawdziwymi błędami („Piecić”, „ostudzć”, „drożdże suchy”), a reszta to głównie luki w słowniku, które trafiają każdy model tak samo. Różnice poniżej 1 błędu na 1000 słów nic więc nie znaczą. |

Model oceniam tylko z tego, co dostał na wejściu. Przedziały ufności to 95%, liczone metodą bootstrap po przepisach (2000 losowań). Każdy przepis szedł przez każdy model dwa razy, z tym samym promptem co w produkcji.

Polszczyznę oceniłem też sam: 20 odpowiedzi z różnych modeli, na ślepo. Wszystkie dostały 5 na 5, więc płynność języka nie odróżnia tych modeli, a sędzia AI nie miałby czego się ode mnie nauczyć. Dlatego go nie użyłem.

### Dwa warianty wejścia {#dwa-warianty-wejścia}

W produkcji model dostaje tekst strony w markdownie i jej HTML, każde do 20 tysięcy znaków. Darmowy Groq tego nie przyjmie: limit to 8000 tokenów na minutę i to jest zarazem największe zapytanie, jakie można wysłać, a pełne zapytanie ma 10–13 tysięcy tokenów. Dlatego test ma dwa warianty: **pełny** (markdown i HTML, jak w produkcji) i **sam markdown** (pierwsze 10 tysięcy znaków). Wariant z samym markdownem przeszły wszystkie modele, więc w nim porównanie jest pełne.

### Modele {#modele}

- **5 z OpenAI**, bezpośrednio: gpt-4o-mini, gpt-4.1-mini, gpt-5-mini, gpt-5-nano i gpt-5.4-mini, ten ostatni także z wyższym poziomem rozumowania (`low`);
- **10 przez OpenRouter**: Claude Haiku 5.5 i Sonnet 5.5, Gemini 3.5 Flash i 3.1 Flash-Lite, Gemma 4 31B, GLM 5.3, Qwen 3.7 Plus, DeepSeek v4 Flash, Mistral Medium 3.1 i Llama 4 Maverick;
- **3 na darmowym Groqu**: gpt-oss-120b, gpt-oss-20b i qwen3.8-27b. Oba gpt-oss puściłem też przez OpenRouter, żeby porównać dostawców;
- **3 lokalne, przez Ollamę**: Bielik 11B v2.3 i v3.0 (kwantyzacja Q4_K_M) oraz qwen3:14b.

| Element | Ustawienia |
| --- | --- |
| Laptop | karta NVIDIA RTX PRO 3000 (12 GB VRAM), 64 GB RAM DDR5-5600, procesor Intel Core Ultra 9 275HX |
| Ollama | 0.40.5, `num_ctx` 24 576, `format: json`, temperatura 0,3, KV cache q8_0, flash attention |
| Groq, plan darmowy | 8000 tokenów na minutę, 1000 zapytań i 200 000 tokenów dziennie na model (25.10.2026) |
| OpenRouter | dostawcę wybierał OpenRouter; koszt z jego rozliczenia każdego zapytania |
| Poziom rozumowania | najniższy dostępny dla każdego modelu; gpt-5.4-mini dodatkowo na `low` |

## Wyniki {#wyniki}

Dwa wyjątki od pełnego zestawu. Darmowy Groq odrzuca każde zapytanie dłuższe niż 8000 tokenów, a sześć angielskich przepisów nie mieści się w tym limicie nawet z samym markdownem (przy gpt-oss-20b trzy). Wiersze Groqa oznaczam znakiem †: są liczone bez tych najdłuższych przepisów, o czym trzeba pamiętać przy każdym porównaniu. Modelom lokalnym ograniczyłem odpowiedź do 4096 tokenów, bo qwen3:14b na jednym przepisie zapętlił się na ponad 17 tysięcy tokenów (zwykły przepis to około 1300). Ucięta odpowiedź liczy się jako zepsuty JSON. Kolumna „Przepisy PL/EN” mówi, ile przepisów każdy model dostał.

Kolor słupka mówi, jak wywołałem model, a nie kto go zrobił: przez API OpenAI, przez OpenRouter, na darmowym Groqu albo lokalnie przez Ollamę. Dlatego gpt-oss, model OpenAI, ma kolor Groqa albo OpenRoutera.

**Błędy krytyczne na przepis, sam markdown**

| Model | Gdzie | Krytyczne na przepis | Przedział 95% |
| --- | --- | --- | --- |
| Claude Haiku 5.5 | OpenRouter (płatny) | 0,01 | 0,00–0,03 |
| Gemini 3.5 Flash | OpenRouter (płatny) | 0,02 | 0,00–0,07 |
| Gemini 3.1 Flash-Lite | OpenRouter (płatny) | 0,03 | 0,00–0,09 |
| gpt-4.1-mini | OpenAI API (płatne) | 0,04 | 0,00–0,10 |
| Gemma 4 31B | OpenRouter (płatny) | 0,06 | 0,00–0,13 |
| Claude Sonnet 5.5 | OpenRouter (płatny) | 0,06 | 0,00–0,14 |
| gpt-5-mini | OpenAI API (płatne) | 0,06 | 0,00–0,14 |
| GLM 5.3 | OpenRouter (płatny) | 0,07 | 0,01–0,13 |
| gpt-5.4-mini | OpenAI API (płatne) | 0,08 | 0,02–0,16 |
| qwen3.8-27b † | Groq (darmowy plan) | 0,09 | 0,01–0,17 |
| Qwen 3.7 Plus | OpenRouter (płatny) | 0,11 | 0,01–0,26 |
| DeepSeek v4 Flash | OpenRouter (płatny) | 0,15 | 0,00–0,42 |
| gpt-4o-mini | OpenAI API (płatne) | 0,20 | 0,07–0,37 |
| gpt-oss-120b (Groq) † | Groq (darmowy plan) | 0,24 | 0,05–0,56 |
| gpt-5.4-mini @low | OpenAI API (płatne) | 0,24 | 0,08–0,44 |
| Mistral Medium 3.1 | OpenRouter (płatny) | 0,26 | 0,09–0,43 |
| Llama 4 Maverick | OpenRouter (płatny) | 0,37 | 0,18–0,56 |
| gpt-oss-20b (Groq) † | Groq (darmowy plan) | 0,40 | 0,12–0,73 |
| gpt-oss-20b (OpenRouter) | OpenRouter (płatny) | 0,59 | 0,31–0,87 |
| Bielik 11B v2.3 | lokalnie (Ollama) | 0,62 | 0,36–0,93 |
| Bielik 11B v3.0 | lokalnie (Ollama) | 0,64 | 0,36–0,92 |
| gpt-oss-120b (OpenRouter) | OpenRouter (płatny) | 0,67 | 0,21–1,24 |
| gpt-5-nano | OpenAI API (płatne) | 0,72 | 0,36–1,30 |
| qwen3:14b | lokalnie (Ollama) | 1,00 | 0,55–1,59 |

Mniej znaczy lepiej. Kreska pod słupkiem to 95-procentowy przedział ufności. † darmowy Groq odrzucił najdłuższe angielskie przepisy (limit 8000 tokenów na zapytanie), więc te wiersze są liczone bez nich.

**Poprawność, sam markdown**

| Model | Gdzie | Krytyczne [95%] | Poważne | Drobne | Polszczyzna |
| --- | --- | --: | --: | --: | --: |
| Claude Haiku 5.5 | OpenRouter (płatny) | 0,01 [0,00–0,03] | 0,39 | 0,52 | 2,8 |
| Gemini 3.5 Flash | OpenRouter (płatny) | 0,02 [0,00–0,07] | 0,38 | 1,46 | 1,5 |
| Gemini 3.1 Flash-Lite | OpenRouter (płatny) | 0,03 [0,00–0,09] | 0,61 | 1,30 | 1,5 |
| gpt-4.1-mini | OpenAI API (płatne) | 0,04 [0,00–0,10] | 0,52 | 2,00 | 1,5 |
| Gemma 4 31B | OpenRouter (płatny) | 0,06 [0,00–0,13] | 0,33 | 0,49 | 3,0 |
| Claude Sonnet 5.5 | OpenRouter (płatny) | 0,06 [0,00–0,14] | 0,40 | 0,98 | 2,7 |
| gpt-5-mini | OpenAI API (płatne) | 0,06 [0,00–0,14] | 1,28 | 2,36 | 2,9 |
| GLM 5.3 | OpenRouter (płatny) | 0,07 [0,01–0,13] | 0,44 | 1,36 | 4,3 |
| gpt-5.4-mini | OpenAI API (płatne) | 0,08 [0,02–0,16] | 0,46 | 0,68 | 2,1 |
| qwen3.8-27b † | Groq (darmowy plan) | 0,09 [0,01–0,17] | 0,38 | 1,04 | 2,3 |
| Qwen 3.7 Plus | OpenRouter (płatny) | 0,11 [0,01–0,26] | 0,30 | 1,83 | 2,7 |
| DeepSeek v4 Flash | OpenRouter (płatny) | 0,15 [0,00–0,42] | 0,40 | 0,24 | 2,0 |
| gpt-4o-mini | OpenAI API (płatne) | 0,20 [0,07–0,37] | 0,67 | 1,70 | 0,8 |
| gpt-oss-120b (Groq) † | Groq (darmowy plan) | 0,24 [0,05–0,56] | 1,26 | 1,47 | 2,8 |
| gpt-5.4-mini @low | OpenAI API (płatne) | 0,24 [0,08–0,44] | 0,54 | 0,36 | 1,5 |
| Mistral Medium 3.1 | OpenRouter (płatny) | 0,26 [0,09–0,43] | 0,36 | 0,64 | 2,5 |
| Llama 4 Maverick | OpenRouter (płatny) | 0,37 [0,18–0,56] | 0,79 | 2,56 | 4,4 |
| gpt-oss-20b (Groq) † | Groq (darmowy plan) | 0,40 [0,12–0,73] | 0,55 | 3,50 | 4,1 |
| gpt-oss-20b (OpenRouter) | OpenRouter (płatny) | 0,59 [0,31–0,87] | 0,91 | 2,69 | 3,5 |
| Bielik 11B v2.3 | lokalnie (Ollama) | 0,62 [0,36–0,93] | 3,36 | 37,88 | 2,9 |
| Bielik 11B v3.0 | lokalnie (Ollama) | 0,64 [0,36–0,92] | 3,09 | 22,29 | 1,9 |
| gpt-oss-120b (OpenRouter) | OpenRouter (płatny) | 0,67 [0,21–1,24] | 1,66 | 1,34 | 3,7 |
| gpt-5-nano | OpenAI API (płatne) | 0,72 [0,36–1,30] | 1,54 | 3,37 | 4,5 |
| qwen3:14b | lokalnie (Ollama) | 1,00 [0,55–1,59] | 1,31 | 7,02 | 17,0 |

Krytyczne, poważne i drobne to średnia liczba błędów na przepis; w nawiasie 95-procentowy przedział ufności. Krytyczne PL i EN liczą osobno przepisy z polskich i angielskich stron. Polszczyzna to błędy LanguageTool na 1000 słów. † darmowy Groq odrzucił najdłuższe angielskie przepisy, więc te wiersze są liczone bez nich.

**Koszt i niezawodność, sam markdown**

| Model | Gdzie | Mediana | Koszt | Odrzucone | Zepsuty JSON | Przepisy PL/EN |
| --- | --- | --: | --: | --: | --: | --: |
| Claude Haiku 5.5 | OpenRouter (płatny) | 15,2 s* | 0,0022 USD | 0 | 0 | 23/22 |
| Gemini 3.5 Flash | OpenRouter (płatny) | 8,2 s* | 0,0189 USD | 0 | 0 | 23/22 |
| Gemini 3.1 Flash-Lite | OpenRouter (płatny) | 8,7 s* | 0,0065 USD | 0 | 0 | 23/22 |
| gpt-4.1-mini | OpenAI API (płatne) | 7,3 s | – | 0 | 0 | 23/22 |
| Gemma 4 31B | OpenRouter (płatny) | 26,6 s* | 0,0012 USD | 0 | 0 | 23/22 |
| Claude Sonnet 5.5 | OpenRouter (płatny) | 9,9 s* | 0,0215 USD | 0 | 0 | 23/22 |
| gpt-5-mini | OpenAI API (płatne) | 10,6 s | – | 0 | 0 | 23/22 |
| GLM 5.3 | OpenRouter (płatny) | 8,2 s* | 0,0038 USD | 0 | 0 | 23/22 |
| gpt-5.4-mini | OpenAI API (płatne) | 4,6 s | – | 0 | 0 | 23/22 |
| qwen3.8-27b † | Groq (darmowy plan) | 2,9 s | – | 12 | 0 | 23/16 |
| Qwen 3.7 Plus | OpenRouter (płatny) | 24,3 s* | 0,0027 USD | 0 | 0 | 23/22 |
| DeepSeek v4 Flash | OpenRouter (płatny) | 133,5 s* | 0,0025 USD | 0 | 19 | 18/21 |
| gpt-4o-mini | OpenAI API (płatne) | 9,2 s | – | 0 | 0 | 23/22 |
| gpt-oss-120b (Groq) † | Groq (darmowy plan) | 3,4 s | – | 12 | 0 | 23/16 |
| gpt-5.4-mini @low | OpenAI API (płatne) | 7,2 s | – | 0 | 0 | 23/22 |
| Mistral Medium 3.1 | OpenRouter (płatny) | 8,5 s* | 0,0034 USD | 0 | 0 | 23/22 |
| Llama 4 Maverick | OpenRouter (płatny) | 51,2 s* | 0,0011 USD | 0 | 0 | 23/22 |
| gpt-oss-20b (Groq) † | Groq (darmowy plan) | 1,8 s | – | 6 | 0 | 23/20 |
| gpt-oss-20b (OpenRouter) | OpenRouter (płatny) | 17,4 s* | 0,0002 USD | 0 | 2 | 23/22 |
| Bielik 11B v2.3 | lokalnie (Ollama) | 53,2 s | – | 0 | 0 | 23/22 |
| Bielik 11B v3.0 | lokalnie (Ollama) | 56,5 s | – | 0 | 0 | 23/22 |
| gpt-oss-120b (OpenRouter) | OpenRouter (płatny) | 9,2 s* | 0,0006 USD | 0 | 2 | 23/22 |
| gpt-5-nano | OpenAI API (płatne) | 8,7 s | – | 0 | 0 | 23/22 |
| qwen3:14b | lokalnie (Ollama) | 85,8 s | – | 0 | 5 | 23/20 |

Mediana to czas jednej ekstrakcji; gwiazdka oznacza czas przez OpenRouter zmierzony osobno na 6 przepisach. Koszt to kwota za przepis z rozliczenia OpenRoutera; OpenAI i Groq nie podawały jej w odpowiedzi, a modele lokalne nic nie kosztują, więc tam kreska. Odrzucone to zapytania, których darmowy Groq nie przyjął (limit 8000 tokenów). Zepsuty JSON to odpowiedzi, których nie dało się odczytać, w tym ucięte limitem 4096 tokenów u modeli lokalnych. Przepisy PL/EN mówią, ile przepisów model dostał.

**Błędy krytyczne na przepis, pełne wejście (jak w aplikacji)**

| Model | Gdzie | Krytyczne na przepis | Przedział 95% |
| --- | --- | --- | --- |
| gpt-5-mini | OpenAI API (płatne) | 0,07 | 0,01–0,16 |
| gpt-5.4-mini | OpenAI API (płatne) | 0,09 | 0,01–0,17 |
| gpt-4.1-mini | OpenAI API (płatne) | 0,09 | 0,02–0,16 |
| gpt-4o-mini | OpenAI API (płatne) | 0,19 | 0,03–0,38 |
| gpt-5-nano | OpenAI API (płatne) | 0,66 | 0,27–1,26 |
| gpt-oss-120b (OpenRouter) | OpenRouter (płatny) | 0,77 | 0,37–1,22 |
| Bielik 11B v2.3 | lokalnie (Ollama) | 0,82 | 0,39–1,46 |
| qwen3:14b | lokalnie (Ollama) | 1,17 | 0,71–1,77 |
| gpt-oss-20b (OpenRouter) | OpenRouter (płatny) | 1,31 | 0,55–2,11 |
| Bielik 11B v3.0 | lokalnie (Ollama) | 1,68 | 0,84–2,71 |

Mniej znaczy lepiej. Darmowy Groq nie przyjmuje tak dużych zapytań, a przez OpenRouter w tym wariancie szły tylko modele gpt-oss.

**Poprawność, pełne wejście**

| Model | Gdzie | Krytyczne [95%] | Krytyczne PL | Krytyczne EN | Poważne | Drobne | Polszczyzna |
| --- | --- | --: | --: | --: | --: | --: | --: |
| gpt-5-mini | OpenAI API (płatne) | 0,07 [0,01–0,16] | 0,04 | 0,10 | 2,22 | 2,90 | 3,2 |
| gpt-5.4-mini | OpenAI API (płatne) | 0,09 [0,01–0,17] | 0,07 | 0,10 | 0,41 | 0,56 | 1,5 |
| gpt-4.1-mini | OpenAI API (płatne) | 0,09 [0,02–0,16] | 0,11 | 0,06 | 0,82 | 2,68 | 1,5 |
| gpt-4o-mini | OpenAI API (płatne) | 0,19 [0,03–0,38] | 0,33 | 0,06 | 0,79 | 2,46 | 1,1 |
| gpt-5-nano | OpenAI API (płatne) | 0,66 [0,27–1,26] | 0,37 | 0,94 | 2,77 | 4,38 | 6,8 |
| gpt-oss-120b (OpenRouter) | OpenRouter (płatny) | 0,77 [0,37–1,22] | 0,43 | 1,08 | 1,88 | 1,65 | 4,1 |
| Bielik 11B v2.3 | lokalnie (Ollama) | 0,82 [0,39–1,46] | 0,35 | 1,27 | 5,05 | 44,40 | 0,9 |
| qwen3:14b | lokalnie (Ollama) | 1,17 [0,71–1,77] | 0,04 | 2,25 | 1,88 | 7,30 | 18,5 |
| gpt-oss-20b (OpenRouter) | OpenRouter (płatny) | 1,31 [0,55–2,11] | 0,35 | 2,23 | 1,27 | 2,55 | 4,1 |
| Bielik 11B v3.0 | lokalnie (Ollama) | 1,68 [0,84–2,71] | 1,70 | 1,67 | 4,77 | 22,72 | 2,0 |

Krytyczne, poważne i drobne to średnia liczba błędów na przepis; w nawiasie 95-procentowy przedział ufności. Krytyczne PL i EN liczą osobno przepisy z polskich i angielskich stron. Polszczyzna to błędy LanguageTool na 1000 słów. † darmowy Groq odrzucił najdłuższe angielskie przepisy, więc te wiersze są liczone bez nich.

**Koszt i niezawodność, pełne wejście**

| Model | Gdzie | Mediana | Koszt | Odrzucone | Zepsuty JSON | Przepisy PL/EN |
| --- | --- | --: | --: | --: | --: | --: |
| gpt-5-mini | OpenAI API (płatne) | 11,9 s | – | 0 | 0 | 23/24 |
| gpt-5.4-mini | OpenAI API (płatne) | 4,4 s | – | 0 | 0 | 23/24 |
| gpt-4.1-mini | OpenAI API (płatne) | 7,7 s | – | 0 | 0 | 23/24 |
| gpt-4o-mini | OpenAI API (płatne) | 10,8 s | – | 0 | 0 | 23/24 |
| gpt-5-nano | OpenAI API (płatne) | 8,9 s | – | 0 | 0 | 23/24 |
| gpt-oss-120b (OpenRouter) | OpenRouter (płatny) | 9,2 s* | 0,0008 USD | 0 | 2 | 23/24 |
| Bielik 11B v2.3 | lokalnie (Ollama) | 59,6 s | – | 0 | 0 | 23/24 |
| qwen3:14b | lokalnie (Ollama) | 125,8 s | – | 0 | 2 | 23/24 |
| gpt-oss-20b (OpenRouter) | OpenRouter (płatny) | 17,4 s* | 0,0004 USD | 0 | 4 | 23/24 |
| Bielik 11B v3.0 | lokalnie (Ollama) | 66,8 s | – | 0 | 0 | 23/24 |

Mediana to czas jednej ekstrakcji; gwiazdka oznacza czas przez OpenRouter zmierzony osobno na 6 przepisach. Koszt to kwota za przepis z rozliczenia OpenRoutera; OpenAI i Groq nie podawały jej w odpowiedzi, a modele lokalne nic nie kosztują, więc tam kreska. Odrzucone to zapytania, których darmowy Groq nie przyjął (limit 8000 tokenów). Zepsuty JSON to odpowiedzi, których nie dało się odczytać, w tym ucięte limitem 4096 tokenów u modeli lokalnych. Przepisy PL/EN mówią, ile przepisów model dostał.

### Jakie to błędy {#jakie-to-błędy}

Błędy krytyczne według rodzaju, zliczone ze wszystkich odpowiedzi w wariancie z samym markdownem:

| Model | brakujący składnik | zła ilość | zgubiony krok | zła temperatura |
| --- | --: | --: | --: | --: |
| Claude Haiku 5.5 | 0 | 1 | 0 | 0 |
| Gemini 3.5 Flash | 0 | 2 | 0 | 0 |
| Gemini 3.1 Flash-Lite | 2 | 1 | 0 | 0 |
| gpt-4.1-mini | 0 | 4 | 0 | 0 |
| Gemma 4 31B | 2 | 3 | 0 | 0 |
| Claude Sonnet 5.5 | 4 | 0 | 0 | 1 |
| gpt-5-mini | 1 | 2 | 0 | 2 |
| GLM 5.3 | 1 | 5 | 0 | 0 |
| gpt-5.4-mini | 3 | 0 | 0 | 4 |
| qwen3.8-27b † | 3 | 4 | 0 | 0 |
| Qwen 3.7 Plus | 6 | 3 | 1 | 0 |
| DeepSeek v4 Flash | 11 | 0 | 1 | 0 |
| gpt-4o-mini | 4 | 6 | 0 | 8 |
| gpt-oss-120b (Groq) † | 11 | 2 | 0 | 6 |
| gpt-5.4-mini @low | 11 | 7 | 0 | 4 |
| Mistral Medium 3.1 | 20 | 3 | 0 | 0 |
| Llama 4 Maverick | 30 | 2 | 0 | 1 |
| gpt-oss-20b (Groq) † | 17 | 12 | 0 | 5 |
| gpt-oss-20b (OpenRouter) | 33 | 9 | 2 | 9 |
| Bielik 11B v2.3 | 29 | 9 | 0 | 18 |
| Bielik 11B v3.0 | 8 | 21 | 0 | 29 |
| gpt-oss-120b (OpenRouter) | 30 | 1 | 5 | 13 |
| gpt-5-nano | 51 | 7 | 0 | 7 |
| qwen3:14b | 49 | 20 | 0 | 9 |

**Mediana czasu odpowiedzi, sam markdown**

| Model | Gdzie | Mediana |
| --- | --- | --- |
| gpt-oss-20b (Groq) | Groq (darmowy plan) | 1,8 s |
| qwen3.8-27b | Groq (darmowy plan) | 2,9 s |
| gpt-oss-120b (Groq) | Groq (darmowy plan) | 3,4 s |
| gpt-5.4-mini | OpenAI API (płatne) | 4,6 s |
| gpt-5.4-mini @low | OpenAI API (płatne) | 7,2 s |
| gpt-4.1-mini | OpenAI API (płatne) | 7,3 s |
| Gemini 3.5 Flash * | OpenRouter (płatny) | 8,2 s |
| GLM 5.3 * | OpenRouter (płatny) | 8,2 s |
| Mistral Medium 3.1 * | OpenRouter (płatny) | 8,5 s |
| Gemini 3.1 Flash-Lite * | OpenRouter (płatny) | 8,7 s |
| gpt-5-nano | OpenAI API (płatne) | 8,7 s |
| gpt-4o-mini | OpenAI API (płatne) | 9,2 s |
| gpt-oss-120b (OpenRouter) * | OpenRouter (płatny) | 9,2 s |
| Claude Sonnet 5.5 * | OpenRouter (płatny) | 9,9 s |
| gpt-5-mini | OpenAI API (płatne) | 10,6 s |
| Claude Haiku 5.5 * | OpenRouter (płatny) | 15,2 s |
| gpt-oss-20b (OpenRouter) * | OpenRouter (płatny) | 17,4 s |
| Qwen 3.7 Plus * | OpenRouter (płatny) | 24,3 s |
| Gemma 4 31B * | OpenRouter (płatny) | 26,6 s |
| Llama 4 Maverick * | OpenRouter (płatny) | 51,2 s |
| Bielik 11B v2.3 | lokalnie (Ollama) | 53,2 s |
| Bielik 11B v3.0 | lokalnie (Ollama) | 56,5 s |
| qwen3:14b | lokalnie (Ollama) | 85,8 s |
| DeepSeek v4 Flash * | OpenRouter (płatny) | 133,5 s |

Skala logarytmiczna. * czas zmierzony osobno na 6 przepisach, bo główny przebieg przez OpenRouter mierzył tylko czas do nagłówków odpowiedzi.

## Co z tego wynika {#co-z-tego-wynika}

### Czołówka to remis {#czołówka-to-remis}

Najmniej błędów krytycznych na samym markdownie mają Claude Haiku 5.5 (0,01), Gemini 3.5 Flash (0,02), Gemini 3.1 Flash-Lite (0,03) i gpt-4.1-mini (0,04). Ich przedziały ufności nakładają się jednak z gpt-5.4-mini (0,08), więc przy 50 przepisach nie da się uczciwie powiedzieć, który z nich jest najlepszy. Różnica, którą da się zmierzyć, dzieli czołówkę od reszty: modele lokalne, gpt-5-nano, gpt-oss przez OpenRouter i Llama 4 Maverick robią wielokrotnie więcej błędów krytycznych.

### W aplikacji zostaje gpt-5.4-mini {#w-aplikacji-zostaje-gpt-54-mini}

W ustawieniu takim jak w aplikacji, z HTML strony, gpt-5.4-mini ma 0,09 błędu krytycznego na przepis, najmniej błędów poważnych (0,41) i drobnych (0,56) spośród modeli w tym wariancie oraz medianę 4,4 sekundy. Zmiana na model z czołówki nie dałaby mierzalnej poprawy, a gpt-5.4-mini wygrał też pierwszy test, ten z formatem.

### Droższy model nie był lepszy {#droższy-model-nie-był-lepszy}

Claude Sonnet 5.5 kosztował przez OpenRouter 0,0215 USD za przepis i miał 0,06 błędu krytycznego na przepis. Claude Haiku 5.5 za 0,0022 USD miał 0,01, a Gemini 3.1 Flash-Lite za 0,0065 USD miał 0,03. Przy tysiącu przepisów to około 21,50 USD wobec 2,20 USD, bez lepszego wyniku za wyższą cenę.

### Ten sam model, inny dostawca, inny wynik {#ten-sam-model-inny-dostawca-inny-wynik}

To największe zaskoczenie testu. OpenRouter rozdzielał zapytania do gpt-oss między ponad dziesięć firm, które uruchamiają ten model u siebie, przy tych samych ustawieniach zapytania. Wynik zależał od tej firmy bardziej niż od rozmiaru modelu:

**gpt-oss przez OpenRouter: błędy krytyczne według dostawcy**

| Dostawca | Model | Krytyczne na odpowiedź |
| --- | --- | --- |
| CoreWeave | gpt-oss-120b | 4,47 |
| AkashML | gpt-oss-120b | 0,28 |
| BaseTen | gpt-oss-120b | 0,25 |
| Crusoe | gpt-oss-120b | 0,22 |
| Near AI | gpt-oss-120b | 0,19 |
| Novita | gpt-oss-120b | 0,17 |
| DeepInfra | gpt-oss-120b | 0,00 |
| DekaLLM | gpt-oss-120b | 0,00 |
| Mancer 2 | gpt-oss-120b | 0,00 |
| Parasail | gpt-oss-120b | 0,00 |
| SiliconFlow | gpt-oss-20b | 12,20 |
| DekaLLM | gpt-oss-20b | 1,67 |
| AkashML | gpt-oss-20b | 0,77 |
| Darkbloom | gpt-oss-20b | 0,44 |
| CoreWeave | gpt-oss-20b | 0,38 |
| Parasail | gpt-oss-20b | 0,32 |
| DeepInfra | gpt-oss-20b | 0,00 |

Dostawcy z co najmniej 5 odpowiedziami. Odpowiedzi na dostawcę jest mało, więc patrz na kolejność, nie na części dziesiętne.

To tłumaczy, dlaczego gpt-oss-120b wywołany bezpośrednio na Groqu nie zrobił żadnego błędu krytycznego na polskich przepisach, a przez OpenRouter miał ich 0,80 na przepis. Jeśli używasz OpenRoutera do zadania, w którym liczy się dokładność, wskaż w zapytaniu dostawców, których sprawdziłeś. Inaczej trafisz na losowego.

### Więcej rozumowania nie pomogło {#więcej-rozumowania-nie-pomogło}

gpt-5.4-mini na poziomie rozumowania `low` miał 0,24 błędu krytycznego na przepis, a na najniższym (`none`) 0,08. Przedziały na skraju się nakładają, więc nie twierdzę, że rozumowanie szkodzi, ale na pewno nie pomogło: model generował więcej tokenów, odpowiadał wolniej (7,2 zamiast 4,6 sekundy) i częściej gubił składniki.

### HTML nie zmniejsza liczby błędów krytycznych {#html-nie-zmniejsza-liczby-błędów-krytycznych}

Modele OpenAI miały na samym markdownie mniej więcej tyle samo błędów krytycznych co z HTML, przy około połowie wejścia: gpt-5.4-mini 0,08 wobec 0,09, gpt-4o-mini 0,20 wobec 0,19. HTML zostaje jednak w aplikacji, bo z niego biorą się zdjęcia kroków.

### Polszczyzna: ślepa ocena nie widzi różnicy {#polszczyzna-ślepa-ocena-nie-widzi-różnicy}

W ślepej ocenie wszystkie odpowiedzi dostały ode mnie 5 na 5. LanguageTool znajduje między modelami różnice: na pełnym wejściu od 0,9 błędu na 1000 słów u Bielika 11B v2.3 i 1,1 u gpt-4o-mini do 6,8 u gpt-5-nano. Przy jego trafności to sygnał kolejności, nie ocena.

Wyjątkiem jest qwen3:14b z wynikiem 18,5 błędu na 1000 słów. Na angielskich przepisach pisze łamaną polszczyzną, a jego błędy zostały sprawdzone ręcznie i są prawdziwe: „pudr”, „vanilię”, „nacisknij”, „wyciąnij”, „mikrowarce”, „auberginy” zamiast bakłażanów.

### Bielik i modele lokalne {#bielik-i-modele-lokalne}

Modele lokalne wypadają najsłabiej, a po dołożeniu angielskich przepisów jeszcze słabiej. Na samym markdownie Bielik 11B v2.3 ma 0,62 błędu krytycznego na przepis, v3.0 0,64, a qwen3:14b 1,00. Na pełnym wejściu odpowiednio 0,82, 1,68 i 1,17, więc tam nowszy Bielik wypada gorzej niż 2.3.

Polskie przepisy idą im znacznie lepiej niż angielskie. Bielik 11B v2.3 ma na polskich 0,24 błędu krytycznego na przepis, a na angielskich 1,02 (sam markdown). qwen3:14b na polskich prawie się nie myli (0,02), a na angielskich ma 2,13. Bielik najczęściej gubi składniki i myli temperatury, a do tego nie trzyma formatu aplikacji: v2.3 ma 37,9 drobnych błędów na przepis. Polszczyznę ma przy tym poprawną, z najmniejszą liczbą błędów na pełnym wejściu (0,9 na 1000 słów), co zgadza się z pierwszym testem: zna polski, ale nie trzyma formatu.

Lokalnie przepis trwa niecałą minutę na Bieliku i półtorej minuty na qwen3:14b na samym markdownie, a z HTML dłużej. qwen3:14b z kontekstem 24 tysięcy tokenów nie mieści się w 12 GB pamięci karty, więc część modelu liczy procesor z pamięci RAM. Stąd jego czasy; na komputerze z większą kartą byłby szybszy.

### Inne obserwacje {#inne-obserwacje}

- **DeepSeek v4 Flash** w 19 odpowiedziach nie oddał poprawnego JSON-a, generował średnio ponad 12 tysięcy tokenów na odpowiedź i potrzebował ponad dwóch minut.
- **Mistral Medium 3.1** i **Llama 4 Maverick** najczęściej gubią składniki: odpowiednio 20 i 30 razy.
- **gpt-5-nano**, najtańszy model OpenAI, ma na samym markdownie najwięcej błędów krytycznych spośród modeli w chmurze, głównie przez brakujące składniki (51).

## Czego ten test nie mówi {#czego-ten-test-nie-mówi}

- **Wzorzec przygotowały modele.** Sprawdziłem każdą ich różnicę i próbkę zgodności, ale gdyby oba modele tak samo źle odczytały ten sam fragment poza próbką, nie zauważyłbym tego. Fable i Gemini należą do tych samych rodzin co część zawodników.
- **Darmowy Groq odrzucił najdłuższe angielskie przepisy** (limit 8000 tokenów na zapytanie), więc jego wiersze (†) ich nie obejmują i nie są w pełni porównywalne z resztą.
- **Modele lokalne miały odpowiedź ograniczoną do 4096 tokenów.** Ucięta odpowiedź liczy się jako zepsuty JSON (qwen3:14b: 2 na pełnym wejściu, 5 na samym markdownie).
- **50 przepisów i dwa przebiegi** wystarczą, żeby oddzielić czołówkę od końca tabeli, ale nie żeby ustawić kolejność w czołówce.
- **Polszczyznę ocenił jeden człowiek** na 20 odpowiedziach, a LanguageTool trafia w prawdziwy błąd w około 57% przypadków.
- **Czasy przez OpenRouter** (gwiazdka) zmierzyłem osobno na 6 przepisach i zależą od dostawcy i pory dnia.
- **Koszt** podaję tam, gdzie rozliczył go OpenRouter. **Ceny** są z 25 i 26 października 2026.
- **Promptu pod Bielika ani pod inne modele nie pisałem.** Wszystkie dostały prompt, który powstawał przy modelach OpenAI.

## Podsumowanie {#podsumowanie}

- Kilka modeli zapisuje przepisy niemal bez błędów krytycznych, a różnice między nimi mieszczą się w niepewności pomiaru. Wybór w tej grupie to kwestia ceny, szybkości i tego, z czyjego API już korzystasz.
- W ZapiszPrzepis zostaje gpt-5.4-mini: około jednego błędu krytycznego na jedenaście przepisów i odpowiedź w 4,4 sekundy.
- Droższy model ani wyższy poziom rozumowania nie poprawiły wyniku.
- Na OpenRouterze sprawdzaj dostawcę, nie tylko model.
- Lokalne modele, w tym Bielik, są darmowe w pieniądzach, ale wolne i z tym promptem robią więcej błędów.

A Ty jak wybierasz model do swojej aplikacji: na benchmarkach, na własnych danych, czy po prostu bierzesz ten, który już znasz? Chętnie się dowiem, co sprawdza się u Ciebie.

## Najczęściej zadawane pytania {#faq}

### Który model AI najlepiej zapisuje przepisy? {#faq-który-model-ai-najlepiej-zapisuje-przepisy}

Nie ma jednego zwycięzcy. Najmniej błędów krytycznych na samym markdownie mają Claude Haiku 5.5, Gemini 3.5 Flash, Gemini 3.1 Flash-Lite i gpt-4.1-mini, ale ich przedziały ufności nakładają się z gpt-5.4-mini, więc to remis. W ZapiszPrzepis zostaje <strong>gpt-5.4-mini</strong>: na pełnym wejściu, takim jak w aplikacji, ma 0,09 błędu krytycznego na przepis, najmniej błędów poważnych i drobnych oraz medianę 4,4 sekundy.

### Czy droższy model zapisuje przepisy lepiej? {#faq-czy-droższy-model-zapisuje-przepisy-lepiej}

W tym teście nie. Claude Sonnet 5.5 kosztował przez OpenRouter około 0,02 USD za przepis i miał 0,06 błędu krytycznego na przepis, a Claude Haiku 5.5 za około 0,002 USD miał 0,01. Przedziały ufności się nakładają, więc Sonnet nie wypadł lepiej, choć był mniej więcej dziesięć razy droższy.

### Czy na OpenRouterze ma znaczenie, który dostawca obsłuży zapytanie? {#faq-czy-na-openrouterze-ma-znaczenie-który-dostawca-obsłuży-zapytanie}

Tak, i to duże. Ten sam gpt-oss-120b u kilku dostawców nie zrobił żadnego błędu krytycznego, a u CoreWeave miał ich średnio 4,47 na odpowiedź. gpt-oss-20b u SiliconFlow miał 12,2. Jeśli liczy się dokładność, wskaż w zapytaniu dostawców, których sprawdziłeś.

### Czy do tłumaczenia przepisów nie wystarczy DeepL? {#faq-czy-do-tłumaczenia-przepisów-nie-wystarczy-deepl}

Nie. DeepL tłumaczy tekst, ale nie przelicza funtów na gramy ani °F na °C, nie przenosi notatki z pola miary do nazwy składnika i nie zamienia amerykańskiej marki na produkt z polskiego sklepu. Do tego to druga płatna usługa i drugi przebieg, który tłumaczy krótkie pola bez kontekstu.

### Czy Bielik nadaje się do zapisywania przepisów? {#faq-czy-bielik-nadaje-się-do-zapisywania-przepisów}

Z moim promptem słabo. Na samym markdownie Bielik 11B v2.3 miał 0,62 błędu krytycznego na przepis, a nowszy v3.0 0,64. Na polskich przepisach idzie mu lepiej (0,24 i 0,43), na angielskich gorzej. Polszczyznę ma dobrą, ale gubi składniki, myli temperatury i nie trzyma ścisłego formatu JSON. Promptu pisanego pod Bielika nie próbowałem, więc to wynik dla tego zadania, a nie ocena modelu.

### Czy warto wysyłać modelowi HTML strony razem z tekstem? {#faq-czy-warto-wysyłać-modelowi-html-strony-razem-z-tekstem}

Do samego zapisania przepisu nie: modele OpenAI miały na samym markdownie mniej więcej tyle samo błędów krytycznych co z HTML, przy około połowie wejścia. Aplikacja używa jednak HTML także do zdjęć kroków, więc go nie wyrzucam.

### Czy lokalny model jest darmowy? {#faq-czy-lokalny-model-jest-darmowy}

W pieniądzach tak, w czasie nie. Na laptopie z kartą RTX PRO 3000 (12 GB) Bielik potrzebował niecałej minuty na przepis, a qwen3:14b półtorej. gpt-5.4-mini robi to samo w kilka sekund.

### Jak sprawdziłeś, czy zapisany przepis jest poprawny? {#faq-jak-sprawdziłeś-czy-zapisany-przepis-jest-poprawny}

Dla każdego przepisu dwa modele, Claude Fable 5.1 i Gemini 3.5 Flash, niezależnie przygotowały wzorzec z oryginalnej strony. Każdą różnicę między nimi rozstrzygnąłem na ślepo, a 31 z 31 losowo wybranych miejsc, w których się zgadzały, potwierdziłem z oryginałem. Wynik każdego modelu porównałem z tym wzorcem kodem.


## Źródła {#sources}

- [Ewaluacja modeli do wyciągania przepisów (ZapiszPrzepis)](https://github.com/spokospace/zapiszprzepis/blob/master/context/foundation/extraction-model-eval-2026-10.md) — Pierwszy test: pięć modeli OpenAI, metoda, wyniki i ograniczenia.
- [Lokalizacja przepisów z obcych stron (PR #525)](https://github.com/spokospace/zapiszprzepis/pull/525) — Rozpoznawanie języka źródła, reguły dla obcych stron i kontrola pola miary domowej.
- [Polskie nazwy produktów i kroków (PR #528)](https://github.com/spokospace/zapiszprzepis/pull/528) — Druga runda poprawek i kontrole w kodzie tam, gdzie prompt nie wystarczył.
- [Zmiana modelu na gpt-5.4-mini (PR #531)](https://github.com/spokospace/zapiszprzepis/pull/531) — Jednolinijkowa zmiana modelu po pierwszym teście.
- [OpenRouter: wybór dostawcy](https://openrouter.ai/docs/guides/routing/provider-selection) — Jak wskazać albo wykluczyć dostawców, do których OpenRouter kieruje zapytanie.
- [Cennik API OpenAI](https://developers.openai.com/api/docs/pricing) — Ceny modeli, sprawdzone 25 października 2026.
- [Limity zapytań w Groq](https://console.groq.com/docs/rate-limits) — Limity tokenów na minutę i na dzień w planie darmowym.
- [LanguageTool](https://github.com/languagetool-org/languagetool) — Otwarty korektor językowy, którym liczyłem błędy polszczyzny.
- [Ollama](https://github.com/ollama/ollama) — Serwer, na którym uruchamiałem modele lokalnie.
- [Bielik 11B v2.3 Instruct](https://huggingface.co/speakleash/Bielik-11B-v2.3-Instruct) — Polski model językowy SpeakLeash na Hugging Face.
- [Bielik 11B v3.0 Instruct](https://huggingface.co/speakleash/Bielik-11B-v3.0-Instruct) — Nowsza wersja Bielika, też testowana.
