OpenAI
GPT-6 Luna
Jak GPT-6 Luna od OpenAI zvládá skutečné firemní dokumenty: přesnost, skutečná cena, rychlost a kde chybuje.
Ceníková cena: 2,30 Kč za 1 mil. vstupních tokenů, 11,50 Kč za 1 mil. výstupních tokenů · openai/gpt-6-luna
Výsledky
| Úloha · dokumenty | Pořadí | Správná pole | Doklady bez chyby | Za 1000 dokladů | K opravě / 1000 | Rychlost (medián) | Laťka |
|---|---|---|---|---|---|---|---|
| Klauzule ze smluv · čeština | 5/10 | 100,0 % | 100 % | 6,21 Kč | 0 | 2,6 s | splní laťku |
| Klauzule ze smluv · angličtina (USA) | 6/10 | 99,8 % | 99 % | 4,62 Kč | 13 | 2,7 s | splní laťku |
| Klauzule ze smluv · němčina | 1/10 | 100,0 % | 100 % | 6,12 Kč | 0 | 3,0 s | splní laťku |
| Třídění e-mailů · čeština | 5/10 | 97,9 % | 81 % | 4,10 Kč | 187 | 2,6 s | splní laťku |
| Třídění e-mailů · angličtina (USA) | 5/10 | 97,5 % | 77 % | 3,10 Kč | 227 | 2,5 s | splní laťku |
| Třídění e-mailů · němčina | 5/10 | 97,0 % | 73 % | 3,51 Kč | 273 | 2,8 s | splní laťku |
| Vytěžování faktur · čeština | 6/10 | 99,3 % | 93 % | 11,62 Kč | 67 | 3,2 s | splní laťku |
| Vytěžování faktur · angličtina (USA) | 4/10 | 99,7 % | 97 % | 11,67 Kč | 33 | 3,4 s | splní laťku |
| Vytěžování faktur · němčina | 4/10 | 99,2 % | 91 % | 12,53 Kč | 87 | 3,7 s | splní laťku |
| Vytěžování faktur · španělština | 2/10 | 99,1 % | 88 % | 12,70 Kč | 120 | 3,9 s | splní laťku |
| Vytěžování faktur · francouzština | 4/10 | 98,9 % | 86 % | 13,01 Kč | 143 | 3,8 s | splní laťku |
| Hledání osobních údajů · čeština | 5/10 | 99,6 % | 97 % | 2,75 Kč | 27 | 1,8 s | splní laťku |
| Hledání osobních údajů · angličtina (USA) | 7/10 | 99,6 % | 97 % | 2,43 Kč | 27 | 1,8 s | splní laťku |
| Hledání osobních údajů · němčina | 8/10 | 99,6 % | 97 % | 2,70 Kč | 27 | 2,2 s | splní laťku |
Kde chybuje
Pole, ve kterých chybuje nejčastěji, a druhy chyb, ze všech dokumentů benchmarku.
Klauzule ze smluv · čeština
Na této úloze bez chyb.
Klauzule ze smluv · angličtina (USA)
Nejslabší pole
- Poskytovatel98,7 %
- Objednatel98,7 %
Druhy chyb (počet polí)
Klauzule ze smluv · němčina
Na této úloze bez chyb.
Třídění e-mailů · čeština
Nejslabší pole
- Nálada82,7 %
- Priorita98,7 %
Druhy chyb (počet polí)
Třídění e-mailů · angličtina (USA)
Nejslabší pole
- Nálada79,3 %
- Priorita98,0 %
Druhy chyb (počet polí)
Třídění e-mailů · němčina
Nejslabší pole
- Nálada73,3 %
- Priorita99,3 %
Druhy chyb (počet polí)
Vytěžování faktur · čeština
Nejslabší pole
- Dodavatel95,3 %
- DIČ / VAT ID98,0 %
- IČO / ID dodavatele98,7 %
- Splatnost99,3 %
Druhy chyb (počet polí)
Vytěžování faktur · angličtina (USA)
Nejslabší pole
- Variabilní symbol / reference98,0 %
- Číslo dokladu99,3 %
- Účet99,3 %
Druhy chyb (počet polí)
Vytěžování faktur · němčina
Nejslabší pole
- Účet94,0 %
- IČO / ID dodavatele98,7 %
- Datum vystavení98,7 %
- DIČ / VAT ID99,3 %
Druhy chyb (počet polí)
Vytěžování faktur · španělština
Nejslabší pole
- Účet91,0 %
- Variabilní symbol / reference98,0 %
- Dodavatel99,0 %
Druhy chyb (počet polí)
Vytěžování faktur · francouzština
Nejslabší pole
- Účet90,8 %
- DIČ / VAT ID98,0 %
- Dodavatel99,0 %
- IČO / ID dodavatele99,0 %
Druhy chyb (počet polí)
Hledání osobních údajů · čeština
Nejslabší pole
- Adresy97,3 %
Druhy chyb (počet polí)
Hledání osobních údajů · angličtina (USA)
Nejslabší pole
- Jména98,7 %
- Adresy98,7 %
Druhy chyb (počet polí)
Hledání osobních údajů · němčina
Nejslabší pole
- Adresy97,3 %
Druhy chyb (počet polí)
Jazyková daň
O kolik víc tokenů model potřebuje na stejný text než v angličtině.
- čeština 1,71×
- němčina 1,29×
- francouzština 1,34×
- španělština 1,31×
- polština 1,77×
Compliance
- V EU ano
- Bez ukládání (ZDR) ano
- DPA ano
- Otevřené váhy ne
EU a ZDR: Azure. Přímo u OpenAI: rezidence dat v EU jen po schválení.
Použijte to hned
Přesně ten požadavek, který posílá benchmark (stejné zadání, JSON schéma, teplota 0), připravený pro volání GPT-6 Luna přes OpenRouter.
Klauzule ze smluv · čeština
import json
import os
import httpx
PROMPT = "Vytěžte klíčové podmínky smlouvy níže a vraťte pouze JSON s těmito klíči:\n\nprovider_name strana, která plní (poskytovatel, prodávající, pronajímatel, zhotovitel),\n přesně jak je uvedena, včetně právní formy\nprovider_id IČO této strany, pokud je uvedeno\nclient_name strana, která platí (objednatel, kupující, nájemce, nabyvatel)\nclient_id IČO této strany, pokud je uvedeno\ncontract_type jedna z hodnot: services, supply, lease, license, maintenance\nprice sjednaná cena bez DPH (číslo)\ncurrency kód měny podle ISO 4217 (CZK, EUR, USD, …)\nprice_period jedna z hodnot: one_time, monthly, yearly\neffective_date datum účinnosti smlouvy (YYYY-MM-DD)\nend_date konec doby určité (YYYY-MM-DD); null, je-li smlouva na dobu neurčitou\nnotice_period_months výpovědní lhůta v měsících (číslo); null, pokud žádná není\npenalty_pct_per_day smluvní pokuta za prodlení s platbou v procentech dlužné částky za den\n (např. 0.05 pro 0,05 %); null, pokud žádná není\ngoverning_law kód státu rozhodného práva podle ISO 3166 (např. CZ); státy USA jako US-XX\n\nPravidla:\n- Relativní data („dnem podpisu“, „prvním dnem následujícího měsíce“) přepočtěte vůči datu podpisu.\n- Datum podpisu není datum účinnosti, pokud to smlouva neříká.\n- Záloha, jistota a pevné pokuty za jiná porušení nejsou cena ani pokuta za prodlení s platbou.\n- Pokud hodnota ve smlouvě není, vraťte null. Nehádejte.\n- Částky jako čísla s desetinnou tečkou, bez oddělovačů tisíců a bez symbolu měny.\n"
SCHEMA = json.loads("{\"type\":\"object\",\"properties\":{\"provider_name\":{\"type\":[\"string\",\"null\"]},\"provider_id\":{\"type\":[\"string\",\"null\"]},\"client_name\":{\"type\":[\"string\",\"null\"]},\"client_id\":{\"type\":[\"string\",\"null\"]},\"contract_type\":{\"type\":[\"string\",\"null\"],\"enum\":[\"services\",\"supply\",\"lease\",\"license\",\"maintenance\",null]},\"price\":{\"type\":[\"number\",\"null\"]},\"currency\":{\"type\":[\"string\",\"null\"]},\"price_period\":{\"type\":[\"string\",\"null\"],\"enum\":[\"one_time\",\"monthly\",\"yearly\",null]},\"effective_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"end_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"notice_period_months\":{\"type\":[\"integer\",\"null\"]},\"penalty_pct_per_day\":{\"type\":[\"number\",\"null\"]},\"governing_law\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"provider_name\",\"provider_id\",\"client_name\",\"client_id\",\"contract_type\",\"price\",\"currency\",\"price_period\",\"effective_date\",\"end_date\",\"notice_period_months\",\"penalty_pct_per_day\",\"governing_law\"],\"additionalProperties\":false}")
def run(document_text: str) -> dict:
"""Text of the document in, the extracted fields as a dict out."""
response = httpx.post(
"https://openrouter.ai/api/v1/chat/completions",
headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
json={
"model": "openai/gpt-6-luna",
"temperature": 0,
"messages": [{"role": "user", "content": f"{PROMPT}\n\n---\n{document_text}"}],
# For a scan or photo, send [{"type": "text", "text": PROMPT},
# {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}] instead.
"response_format": {
"type": "json_schema",
"json_schema": {"name": "contracts", "strict": False, "schema": SCHEMA},
},
},
timeout=120,
)
response.raise_for_status()
return json.loads(response.json()["choices"][0]["message"]["content"])
Třídění e-mailů · čeština
import json
import os
import httpx
PROMPT = "Třídíte e-maily zákaznické podpory. Přečtěte si e-mail níže a vraťte pouze JSON s těmito klíči:\n\ncategory jedna z hodnot: billing (faktury, platby, vyúčtování), delivery (kde je objednávka,\n doprava, změna adresy), complaint (poškozené, chybné nebo vadné zboží, reklamace),\n technical (přihlášení, chyby aplikace či systému, napojení), cancellation (zrušení\n objednávky, výpověď smlouvy či předplatného), sales (poptávka, ceny, zájem před nákupem)\npriority jedna z hodnot: urgent, high, normal, low (pravidla níže)\nsentiment jedna z hodnot: positive, neutral, negative (tón zákazníka)\ncustomer_name celé jméno zákazníka, který požadavek napsal\norder_number číslo objednávky zákazníka, pokud je uvedeno\ninvoice_number číslo faktury, pokud je uvedeno\namount částka, které se požadavek týká (číslo)\ncurrency kód měny té částky podle ISO 4217 (CZK, EUR, USD, …)\ndeadline datum, do kdy zákazník chce vyřešení nebo odpověď (YYYY-MM-DD)\n\nPravidla priority:\n- urgent: zákazník teď nemůže pracovat, nebo je termín nejvýše 1 den po datu e-mailu\n- high: termín je nejvýše 7 dní po datu e-mailu, nebo zákazník hrozí ukončením spolupráce\n či eskalací (právník)\n- low: zákazník výslovně píše, že to nespěchá\n- normal: vše ostatní\n\nPravidla:\n- Vlákno: hodnoťte nejnovější zprávu; čísla objednávek, faktur a částky mohou pocházet z citovaných\n starších zpráv. Přeposlaný e-mail: zákazníkem je původní odesílatel, ne kolega, který ho přeposlal.\n- Relativní termíny („do pátku“, „zítra“, „do konce měsíce“) přepočtěte vůči datu zprávy,\n která je uvádí.\n- Čísla tiketů podpory, IČO, DIČ a telefonní čísla nejsou čísla objednávek ani faktur.\n- Pokud hodnota v e-mailu není, vraťte null. Nehádejte.\n- Částky jako čísla s desetinnou tečkou, bez oddělovačů tisíců a bez symbolu měny.\n"
SCHEMA = json.loads("{\"type\":\"object\",\"properties\":{\"category\":{\"type\":[\"string\",\"null\"],\"enum\":[\"billing\",\"delivery\",\"complaint\",\"technical\",\"cancellation\",\"sales\",null]},\"priority\":{\"type\":[\"string\",\"null\"],\"enum\":[\"urgent\",\"high\",\"normal\",\"low\",null]},\"sentiment\":{\"type\":[\"string\",\"null\"],\"enum\":[\"positive\",\"neutral\",\"negative\",null]},\"customer_name\":{\"type\":[\"string\",\"null\"]},\"order_number\":{\"type\":[\"string\",\"null\"]},\"invoice_number\":{\"type\":[\"string\",\"null\"]},\"amount\":{\"type\":[\"number\",\"null\"]},\"currency\":{\"type\":[\"string\",\"null\"]},\"deadline\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"}},\"required\":[\"category\",\"priority\",\"sentiment\",\"customer_name\",\"order_number\",\"invoice_number\",\"amount\",\"currency\",\"deadline\"],\"additionalProperties\":false}")
def run(document_text: str) -> dict:
"""Text of the document in, the extracted fields as a dict out."""
response = httpx.post(
"https://openrouter.ai/api/v1/chat/completions",
headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
json={
"model": "openai/gpt-6-luna",
"temperature": 0,
"messages": [{"role": "user", "content": f"{PROMPT}\n\n---\n{document_text}"}],
# For a scan or photo, send [{"type": "text", "text": PROMPT},
# {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}] instead.
"response_format": {
"type": "json_schema",
"json_schema": {"name": "emails", "strict": False, "schema": SCHEMA},
},
},
timeout=120,
)
response.raise_for_status()
return json.loads(response.json()["choices"][0]["message"]["content"])
Vytěžování faktur · čeština
import json
import os
import httpx
PROMPT = "Z přiloženého dokladu vytěž údaje a vrať pouze JSON s těmito klíči:\n\nsupplier_name název dodavatele (přesně jak je na dokladu, včetně diakritiky a právní formy)\nsupplier_id IČO dodavatele\nvat_id DIČ dodavatele\ninvoice_number číslo dokladu\npayment_reference variabilní symbol\nissue_date datum vystavení (YYYY-MM-DD)\ntax_point_date datum uskutečnění zdanitelného plnění, DUZP (YYYY-MM-DD)\ndue_date datum splatnosti (YYYY-MM-DD)\nnet_by_rate základ daně podle sazeb DPH, např. {\"21\": 18450.00, \"12\": 1200.00}\nvat_by_rate DPH podle sazeb, např. {\"21\": 3874.50}\ntotal celkem k úhradě (číslo, záporné u dobropisu)\ncurrency měna podle ISO 4217 (CZK, EUR, …)\nbank_account číslo účtu dodavatele (tvar předčíslí-číslo/kód banky) nebo IBAN\n\nPravidla:\n- Údaje odběratele nevracej, jen dodavatele.\n- Pokud údaj na dokladu není, vrať null. Nic si nedomýšlej.\n- Pokud doklad neobsahuje rozpis DPH (neplátce, zálohová faktura), vrať net_by_rate a vat_by_rate jako null.\n- Částky jako čísla s desetinnou tečkou, bez oddělovačů tisíců a bez měny.\n"
SCHEMA = json.loads("{\"type\":\"object\",\"properties\":{\"supplier_name\":{\"type\":[\"string\",\"null\"]},\"supplier_id\":{\"type\":[\"string\",\"null\"]},\"vat_id\":{\"type\":[\"string\",\"null\"]},\"invoice_number\":{\"type\":[\"string\",\"null\"]},\"payment_reference\":{\"type\":[\"string\",\"null\"]},\"issue_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"tax_point_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"due_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"net_by_rate\":{\"type\":[\"object\",\"null\"],\"additionalProperties\":{\"type\":\"number\"}},\"vat_by_rate\":{\"type\":[\"object\",\"null\"],\"additionalProperties\":{\"type\":\"number\"}},\"total\":{\"type\":[\"number\",\"null\"]},\"currency\":{\"type\":[\"string\",\"null\"]},\"bank_account\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"supplier_name\",\"supplier_id\",\"vat_id\",\"invoice_number\",\"payment_reference\",\"issue_date\",\"tax_point_date\",\"due_date\",\"net_by_rate\",\"vat_by_rate\",\"total\",\"currency\",\"bank_account\"],\"additionalProperties\":false}")
def run(document_text: str) -> dict:
"""Text of the document in, the extracted fields as a dict out."""
response = httpx.post(
"https://openrouter.ai/api/v1/chat/completions",
headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
json={
"model": "openai/gpt-6-luna",
"temperature": 0,
"messages": [{"role": "user", "content": f"{PROMPT}\n\n---\n{document_text}"}],
# For a scan or photo, send [{"type": "text", "text": PROMPT},
# {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}] instead.
"response_format": {
"type": "json_schema",
"json_schema": {"name": "invoices", "strict": False, "schema": SCHEMA},
},
},
timeout=120,
)
response.raise_for_status()
return json.loads(response.json()["choices"][0]["message"]["content"])
Hledání osobních údajů · čeština
import json
import os
import httpx
PROMPT = "Najděte v textu níže všechny osobní údaje fyzických osob (pro anonymizaci) a vraťte pouze JSON\ns těmito klíči, každý jako seznam řetězců (prázdný seznam, když žádný není):\n\nperson_names celá jména osob, každou osobu jednou, jak jsou v textu\nemail_addresses e-mailové adresy osob\nphone_numbers telefonní čísla osob, jak jsou v textu\npostal_addresses adresy bydliště nebo doručení osob, jak jsou v textu (ulice, obec, PSČ)\nbirth_dates data narození (YYYY-MM-DD)\nnational_ids národní identifikační čísla (např. rodné číslo, SSN)\nbank_accounts čísla bankovních účtů osob, jak jsou v textu\n\nPravidla:\n- Jen údaje fyzických osob. Názvy firem, IČO, DIČ a jiná čísla firem, obecné firemní adresy jako\n info@ nebo support@, čísla objednávek a tiketů nejsou osobní údaje: vynechte je.\n- Data, která nejsou datem narození (porady, dodání, nástup), nejsou osobní údaje.\n- Hodnoty nevymýšlejte ani nedoplňujte; opište je z textu.\n"
SCHEMA = json.loads("{\"type\":\"object\",\"properties\":{\"person_names\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"email_addresses\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"phone_numbers\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"postal_addresses\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"birth_dates\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"national_ids\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"bank_accounts\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}}},\"required\":[\"person_names\",\"email_addresses\",\"phone_numbers\",\"postal_addresses\",\"birth_dates\",\"national_ids\",\"bank_accounts\"],\"additionalProperties\":false}")
def run(document_text: str) -> dict:
"""Text of the document in, the extracted fields as a dict out."""
response = httpx.post(
"https://openrouter.ai/api/v1/chat/completions",
headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
json={
"model": "openai/gpt-6-luna",
"temperature": 0,
"messages": [{"role": "user", "content": f"{PROMPT}\n\n---\n{document_text}"}],
# For a scan or photo, send [{"type": "text", "text": PROMPT},
# {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}] instead.
"response_format": {
"type": "json_schema",
"json_schema": {"name": "pii", "strict": False, "schema": SCHEMA},
},
},
timeout=120,
)
response.raise_for_status()
return json.loads(response.json()["choices"][0]["message"]["content"])
Odznak
Vložte si aktuální výsledek na svůj web; odznak se aktualizuje s každým během.
<a href="https://modelverdict.ai/cs/models/gpt-6-luna/"><img src="https://modelverdict.ai/badge/gpt-6-luna/contracts-cs.svg" alt="GPT-6 Luna on ModelVerdict"></a><a href="https://modelverdict.ai/cs/models/gpt-6-luna/"><img src="https://modelverdict.ai/badge/gpt-6-luna/contracts-en.svg" alt="GPT-6 Luna on ModelVerdict"></a><a href="https://modelverdict.ai/cs/models/gpt-6-luna/"><img src="https://modelverdict.ai/badge/gpt-6-luna/contracts-de.svg" alt="GPT-6 Luna on ModelVerdict"></a><a href="https://modelverdict.ai/cs/models/gpt-6-luna/"><img src="https://modelverdict.ai/badge/gpt-6-luna/emails-cs.svg" alt="GPT-6 Luna on ModelVerdict"></a><a href="https://modelverdict.ai/cs/models/gpt-6-luna/"><img src="https://modelverdict.ai/badge/gpt-6-luna/emails-en.svg" alt="GPT-6 Luna on ModelVerdict"></a><a href="https://modelverdict.ai/cs/models/gpt-6-luna/"><img src="https://modelverdict.ai/badge/gpt-6-luna/emails-de.svg" alt="GPT-6 Luna on ModelVerdict"></a><a href="https://modelverdict.ai/cs/models/gpt-6-luna/"><img src="https://modelverdict.ai/badge/gpt-6-luna/invoices-cs.svg" alt="GPT-6 Luna on ModelVerdict"></a><a href="https://modelverdict.ai/cs/models/gpt-6-luna/"><img src="https://modelverdict.ai/badge/gpt-6-luna/invoices-en.svg" alt="GPT-6 Luna on ModelVerdict"></a><a href="https://modelverdict.ai/cs/models/gpt-6-luna/"><img src="https://modelverdict.ai/badge/gpt-6-luna/invoices-de.svg" alt="GPT-6 Luna on ModelVerdict"></a><a href="https://modelverdict.ai/cs/models/gpt-6-luna/"><img src="https://modelverdict.ai/badge/gpt-6-luna/invoices-es.svg" alt="GPT-6 Luna on ModelVerdict"></a><a href="https://modelverdict.ai/cs/models/gpt-6-luna/"><img src="https://modelverdict.ai/badge/gpt-6-luna/invoices-fr.svg" alt="GPT-6 Luna on ModelVerdict"></a><a href="https://modelverdict.ai/cs/models/gpt-6-luna/"><img src="https://modelverdict.ai/badge/gpt-6-luna/pii-cs.svg" alt="GPT-6 Luna on ModelVerdict"></a><a href="https://modelverdict.ai/cs/models/gpt-6-luna/"><img src="https://modelverdict.ai/badge/gpt-6-luna/pii-en.svg" alt="GPT-6 Luna on ModelVerdict"></a><a href="https://modelverdict.ai/cs/models/gpt-6-luna/"><img src="https://modelverdict.ai/badge/gpt-6-luna/pii-de.svg" alt="GPT-6 Luna on ModelVerdict"></a>