Přejít na obsah

Jeden řádek kódu a běžíš v Evropské unii.

API je kompatibilní s OpenAI. Stávající SDK, frameworky i kód fungují dál: vyměníš base_url a místo názvu modelu zvolíš úroveň.

Rychlý start: tvoje první volání API

Klíč si vytvoříš v dashboardu v Nastavení, API klíče. Tajný klíč uvidíš přesně jednou. Potom si uchováváme jen jeho hash a prefix. Ulož ho do proměnné prostředí, nikdy do repozitáře.

curl
curl https://api.europeanailab.eu/v1/chat/completions \
  -H "Authorization: Bearer $UNION_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "eu-standard",
    "messages": [{"role": "user", "content": "Vysvětli přenesenou daňovou povinnost u DPH."}]
  }'
python
import os

from openai import OpenAI

client = OpenAI(
    api_key=os.environ["UNION_API_KEY"],
    base_url="https://api.europeanailab.eu/v1",   # jediný řádek, který se mění
)

resp = client.chat.completions.create(
    model="eu-standard",
    messages=[{"role": "user", "content": "Vysvětli přenesenou daňovou povinnost u DPH."}],
)
print(resp.choices[0].message.content)

Node, Go, Java, .NET?

Funguje každé oficiální OpenAI SDK: nastav base URL na https://api.europeanailab.eu/v1 a použij svůj klíč od Union AI. Implementujeme kontrakt chat completions včetně streamingu, nástrojů a JSON schemat.

Úrovně modelů a kontextová okna

Do pole model předáváš úroveň, ne název modelu. Díky tomu tvoje integrace funguje dál, i když model pod ní vyměníme. A to se stane, protože open-weight modely se vyřazují a předbíhají.

ÚroveňKontextVstup / 1 mil.Výstup / 1 mil.Vhodné pro
eu-lite131K0,40 €1,60 €Rychlá a levná práce: klasifikace, extrakce, krátké odpovědi.
eu-standard262K0,70 €3,50 €Tažný kůň. Výchozí pro chat a většinu provozu přes API.
eu-long1 000K1,00 €2,00 €Celé spisy, smlouvy a codebase v jediném promptu.
eu-pro1 000K4,00 €12,00 €Náročné uvažování, agenti, složitý kód.

Když překročíš kontextové okno úrovně, dostaneš 400 s uvedeným maximem: tvůj prompt nikdy potichu nezkracujeme.

Streamované odpovědi

Streaming funguje tak, jak čekáš, s jedním důležitým rozdílem, o kterém musíš vědět, protože jde o tvoje peníze.

Zapni include_usage

Při streamingu kompatibilním s OpenAI API ve výchozím stavu neposílá spotřebu tokenů. Bez stream_options: {"include_usage": true} na konci streamu neuvidíš, kolik volání stálo. My to měříme tak jako tak: jde o to, abys to mohl vidět a zkontrolovat i ty.
python
stream = client.chat.completions.create(
    model="eu-standard",
    messages=[{"role": "user", "content": "Napiš shrnutí."}],
    stream=True,
    # Bez tohoto nepřijde objekt usage a cenu neuvidíš.
    stream_options={"include_usage": True},
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
    if chunk.usage:                      # poslední chunk
        print("\n", chunk.usage)

Když stream v půlce utneš, platíš jen za to, co se do té chvíle vygenerovalo. Pokud kvůli přerušenému spojení nepřijde chunk se spotřebou, spotřebu odhadneme a opravíme ji při denním vyúčtování s naším poskytovatelem. Do vypořádání je takový řádek ve tvém přehledu spotřeby označen jako estimated.

Function calling a používání nástrojů

Nástroje se řídí známým schématem. Když model vytvoří volání nástroje, které neodpovídá tvému schématu, zalogujeme ho: ve verzi 1 ho potichu neopravujeme, protože tiché opravování tvého výstupu je horší než viditelná chyba.

python
tools = [{
    "type": "function",
    "function": {
        "name": "find_invoice",
        "description": "Vyhledej fakturu podle čísla.",
        "parameters": {
            "type": "object",
            "properties": {"number": {"type": "string"}},
            "required": ["number"],
        },
    },
}]

resp = client.chat.completions.create(
    model="eu-standard", messages=messages, tools=tools
)

Strukturovaný výstup s JSON schema

Předej JSON schema a odpověď ověř na své straně. Naše rada: ověřuj vždycky, i když se model většinou chová slušně.

python
resp = client.chat.completions.create(
    model="eu-standard",
    messages=[{"role": "user", "content": "Vytáhni jméno a částku."}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "invoice",
            "schema": {
                "type": "object",
                "properties": {
                    "name": {"type": "string"},
                    "amount_eur": {"type": "number"},
                },
                "required": ["name", "amount_eur"],
            },
        },
    },
)

Hlavičky odpovědi: cena, úroveň a směrování

Každá odpověď ti řekne, co se stalo. Nejde o ladicí bonus, jde o podstatu: sám si ověříš, že jsi dostal to, za co jsi zaplatil.

HlavičkaVýznam
X-EU-Model-TierÚroveň, na které tento požadavek běžel.
X-EU-RoutedUvedena, když byl požadavek přesměrován na jiný model, i s důvodem: cenzura nebo chyba.
X-EU-Degradedtrue, když je náhradní model slabší nebo má menší kontextové okno. Pak platíš nižší z obou sazeb.
X-EU-Refusal-ClassUvedena u odmítnutí, které jsme nemohli přesměrovat, například A-unrouteable, když žádná alternativa nemá dost kontextu.
X-EU-Tokens-In / -OutNaměřené tokeny tohoto požadavku.
X-EU-Cost-EURKolik ti tento požadavek strhl ze zůstatku, v eurech.
X-EU-Balance-EURTvůj zbývající zůstatek po tomto požadavku.

Limity požadavků a stropy útraty

Platí limit na klíč a na účet a k tomu stropy, které si nastavíš sám. Ty druhé jsou důležitější, než to zní: bez stropu může uniklý klíč nebo nekonečná smyčka ve tvém vlastním kódu vyčerpat zůstatek přes noc.

  • Požadavky za minutu, na klíč a na účet.
  • Denní a měsíční strop v eurech, nastavitelný pro každý klíč.
  • Nové účty: prvních 48 hodin nejvýš 25 € denně bez ohledu na zůstatek.
  • Když během hodiny zaznamenáme víc než desetinásobek tvého týdenního průměru, klíč automaticky pozastavíme a pošleme ti e-mail. Radši jeden planý poplach než prázdná peněženka.
  • Požadavek se spustí, jen když máš zůstatek aspoň 0,05 €.

Chybové kódy a co s nimi

KódVýznamCo dělat
400Neplatný požadavek, nebo prompt přesahující kontextové okno.Oprav požadavek; maximum najdeš v chybové zprávě.
401Neznámý, zneplatněný nebo pozastavený klíč.Zkontroluj klíč v dashboardu.
402Nedostatečný zůstatek.Dobij kredit. Odpověď obsahuje přímý odkaz.
403Požadavek je mimo zásady používání.Viz férové používání níže.
429Dosažen limit nebo strop.Počkej a zkus to znovu; řiď se Retry-After.
502 / 503Upstream model je nedostupný a záloha není možná.Zkus to znovu. Podívej se na stránku stavu služby.

Neúspěšné požadavky tě nic nestojí: pokud nepřišla použitelná odpověď, ze zůstatku se nic neodečte.

Férové používání a zásady používání

Odmítáme návody na zbraně, malware a podvody a materiál, který škodí dětem. Tato odmítnutí jsou konečná: takový požadavek nikdy nepřepošleme jinému modelu, abychom z něj odpověď přece jen vymáčkli.

Něco jiného je, když model odmítne legitimní otázku o politice, historii nebo společensky citlivém tématu: to bereme jako vadu a pošleme ji modelu bez tohoto slepého místa. Uvidíš to v hlavičce X-EU-Routed: censorship.

Jeden z našich modelů má licenci s vlastními zásadami používání. Ty platí v plném rozsahu: přesměrováním se licenční podmínky obejít nedají.

Nevíš jistě, jestli tvůj případ použití vyhovuje? Napiš na hello@europeanailab.eu. Odpověď předem je pro oba levnější než zablokovaný klíč potom.

Časté dotazy

Otázky, které nám chodí e-mailem dřív, než si kdokoli vytvoří klíč: s čím je API kompatibilní, kolik stojí požadavek a kde běží.

Které OpenAI SDK fungují s API kompatibilním s OpenAI?

Všechna oficiální, protože jsou to tenké klienty nad kontraktem chat completions a base URL berou jako parametr konstruktoru. Nejčastěji jde o SDK pro Python a Node; Go, Java a .NET fungují stejně. Tvoje retry logika, zpracování streamu i typy zůstávají.

Dá se s tím používat LangChain nebo Vercel AI SDK?

Ano. Oba mají u svého OpenAI providera base URL jako konfigurační položku, takže ji nasměruješ na náš host a použiješ klíč od Union AI. Na stejném principu funguje cokoli, co dovolí přepsat base URL, včetně většiny agentních frameworků a nástrojů pro evaluaci.

Podporuje API streaming a function calling?

Ano, obojí, a navíc strukturovaný výstup podle JSON schema. Streamované odpovědi nesou spotřebu tokenů na konci streamu, takže streamovaný požadavek změříš stejně přesně jako běžný.

Jaké jsou limity API?

Platí limit počtu požadavků za minutu na klíč a na účet, k tomu denní a měsíční stropy v eurech, které si nastavíš sám. Nové účty mají prvních 48 hodin strop 25 € denně bez ohledu na zůstatek. Při dosažení limitu dostaneš 429 s hlavičkou Retry-After.

Jak správně řešit chybu 429 a opakování požadavků?

Řiď se hlavičkou Retry-After místo okamžitého opakování a čekej exponenciálně s náhodným rozptylem, aby se nárazová vlna nesynchronizovala napříč tvými workery. Chybu 402 neopakuj: znamená prázdný zůstatek a smyčka jen zopakuje stejné selhání. Obvykle stačí jeden pokus navíc, protože druhé selhání málokdy přinese jinou odpověď.

Jak zjistím, kolik požadavek stál?

Každá odpověď nese hlavičky: X-EU-Tokens-In a X-EU-Tokens-Out s naměřenými tokeny, X-EU-Cost-EUR s částkou, která ti odešla ze zůstatku, a X-EU-Balance-EUR s tím, co zbývá. Tvoje vlastní logy tak odpoví na otázku nákladů po funkcích nebo po zákaznících, aniž bys otevíral dashboard.

Jaký model běží za kterou úrovní?

Každá úroveň odpovídá konkrétnímu open-weight modelu, který i s licencí a kontextovým oknem zveřejňujeme na stránce Transparentnost AI. Kupuješ úroveň, ne název modelu, takže model pod ní můžeme vyměnit, aniž bychom ti rozbili integraci, a když to uděláme, dáme ti vědět.

Přesun stávající integrace jsou tři řádky: klíč, base URL a název úrovně. Celá změna i to, co se přenést nedá, je v článku přechod na tři řádky. Ještě něco nejasného? Ceny jednotlivých úrovní najdeš v ceníku, model a licenci za každou úrovní na stránce Transparentnost AI a co se děje při výpadku na stránce stavu služby. Dvě delší čtení: kolik stojí AI API za token a kam tvoje prompty doopravdy jdou.

Začni s AI pro Evropany.

Používej AI, aniž bys posílal svá data do zahraničí: vše na evropských serverech, za evropskou cenu.

13 € měsíčně za chat, zrušit můžeš kdykoli. Nebo po tokenech, s kreditem od 10 €.

Ještě nevíš? Zkus 60sekundový kvíz →