Jedna linijka kodu i działasz w Unii Europejskiej.
API jest zgodne z OpenAI. Istniejące SDK, frameworki i kod działają dalej: zmieniasz base_url i wybierasz tier zamiast nazwy modelu.
Szybki start: pierwsze wywołanie API
Utwórz klucz w swoim panelu w Ustawieniach, w sekcji Klucze API. Sekret zobaczysz dokładnie raz. Potem przechowujemy już tylko jego hash i prefiks. Trzymaj go w zmiennej środowiskowej, nigdy w repozytorium.
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": "Wyjaśnij mechanizm odwrotnego obciążenia w VAT."}]
}'import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["UNION_API_KEY"],
base_url="https://api.europeanailab.eu/v1", # jedyna linijka, która się zmienia
)
resp = client.chat.completions.create(
model="eu-standard",
messages=[{"role": "user", "content": "Wyjaśnij mechanizm odwrotnego obciążenia w VAT."}],
)
print(resp.choices[0].message.content)Node, Go, Java czy .NET?
https://api.europeanailab.eu/v1 i użyj swojego klucza Union. Implementujemy kontrakt chat completions, łącznie ze streamingiem, narzędziami i schematami JSON.Tiery modeli i okna kontekstu
W polu model podajesz tier, a nie nazwę modelu. Dzięki temu twoja integracja działa dalej, gdy wymienimy model pod spodem. A wymienimy, bo modele open-weight są wycofywane i wyprzedzane przez nowsze.
| Tier | Kontekst | Wejście / 1 mln | Wyjście / 1 mln | Do czego |
|---|---|---|---|---|
eu-lite | 131K | 0,40 € | 1,60 € | Szybkie i tanie zadania: klasyfikacja, ekstrakcja, krótkie odpowiedzi. |
eu-standard | 262K | 0,70 € | 3,50 € | Tier do wszystkiego. Domyślny dla czatu i większości ruchu w API. |
eu-long | 1000K | 1,00 € | 2,00 € | Całe akta spraw, umowy i bazy kodu w jednym prompcie. |
eu-pro | 1000K | 4,00 € | 12,00 € | Wymagające rozumowanie, agenci, złożony kod. |
Jeśli przekroczysz okno kontekstu tieru, dostaniesz 400 z podanym maksimum: nigdy nie obcinamy twojego promptu po cichu.
Streaming odpowiedzi
Streaming działa tak, jak się spodziewasz, z jedną ważną różnicą, o której musisz wiedzieć, bo dotyczy twoich pieniędzy.
Włącz include_usage
stream_options: {"include_usage": true} nie zobaczysz na końcu strumienia, ile kosztowało wywołanie. My i tak to naliczamy: chodzi o to, żebyś ty też mógł to zobaczyć i sprawdzić.stream = client.chat.completions.create(
model="eu-standard",
messages=[{"role": "user", "content": "Napisz podsumowanie."}],
stream=True,
# Bez tego nie ma obiektu usage i nie widzisz kosztu.
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: # ostatni chunk
print("\n", chunk.usage)Jeśli przerwiesz strumień w połowie, płacisz tylko za to, co zostało wygenerowane do tego momentu. Jeśli przez zerwane połączenie nie dotrze chunk z zużyciem, szacujemy je i korygujemy w codziennym uzgodnieniu z naszym dostawcą. Do czasu rozliczenia taka pozycja ma w twoim przeglądzie zużycia status estimated.
Function calling i narzędzia
Narzędzia korzystają ze znanego schematu. Jeśli model wygeneruje wywołanie narzędzia niezgodne z twoim schematem, logujemy to: w wersji 1 nie poprawiamy tego po cichu, bo ciche naprawianie twojego wyniku jest gorsze niż widoczny błąd.
tools = [{
"type": "function",
"function": {
"name": "find_invoice",
"description": "Wyszukaj fakturę po numerze.",
"parameters": {
"type": "object",
"properties": {"number": {"type": "string"}},
"required": ["number"],
},
},
}]
resp = client.chat.completions.create(
model="eu-standard", messages=messages, tools=tools
)Ustrukturyzowane odpowiedzi ze schematem JSON
Przekaż schemat JSON i waliduj odpowiedź po swojej stronie. Nasza rada: waliduj zawsze, nawet jeśli model zwykle działa poprawnie.
resp = client.chat.completions.create(
model="eu-standard",
messages=[{"role": "user", "content": "Wyciągnij imię i nazwisko oraz kwotę."}],
response_format={
"type": "json_schema",
"json_schema": {
"name": "invoice",
"schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"amount_eur": {"type": "number"},
},
"required": ["name", "amount_eur"],
},
},
},
)Nagłówki odpowiedzi: koszt, tier i routing
Każda odpowiedź mówi, co się stało. To nie dodatek do debugowania, tylko sedno sprawy: możesz sam sprawdzić, że dostałeś to, za co zapłaciłeś.
| Nagłówek | Znaczenie |
|---|---|
X-EU-Model-Tier | Tier, na którym wykonano to zapytanie. |
X-EU-Routed | Obecny, gdy zapytanie przekierowano do innego modelu, wraz z powodem: censorship albo error. |
X-EU-Degraded | true, gdy model zastępczy jest słabszy albo ma mniejsze okno kontekstu. Płacisz wtedy niższą z dwóch stawek. |
X-EU-Refusal-Class | Obecny przy odmowie, której nie dało się przekierować, na przykład A-unrouteable, gdy żadna alternatywa nie ma wystarczającego kontekstu. |
X-EU-Tokens-In / -Out | Naliczone tokeny za to zapytanie. |
X-EU-Cost-EUR | Ile to zapytanie zdjęło z twojego salda, w euro. |
X-EU-Balance-EUR | Saldo, które zostało po tym zapytaniu. |
Limity zapytań i limity wydatków
Jest limit na klucz i na konto, do tego limity, które ustawiasz sam. Te drugie są ważniejsze, niż się wydaje: bez limitu wyciek klucza albo nieskończona pętla we własnym kodzie potrafi wyczyścić saldo w ciągu jednej nocy.
- Zapytania na minutę, na klucz i na konto.
- Dzienny i miesięczny limit w euro, ustawiany osobno dla każdego klucza.
- Nowe konta: maksymalnie 25 € dziennie przez pierwsze 48 godzin, niezależnie od salda.
- Jeśli w ciągu godziny zobaczymy ponad dziesięciokrotność twojej średniej tygodniowej, automatycznie wstrzymujemy klucz i wysyłamy ci maila. Lepiej jeden fałszywy alarm niż pusty portfel.
- Zapytanie startuje dopiero wtedy, gdy masz na saldzie co najmniej 0,05 €.
Kody błędów i co z nimi zrobić
| Kod | Znaczenie | Co zrobić |
|---|---|---|
| 400 | Nieprawidłowe zapytanie albo prompt większy niż okno kontekstu. | Popraw zapytanie; maksimum jest w komunikacie błędu. |
| 401 | Nieznany, unieważniony albo wstrzymany klucz. | Sprawdź klucz w swoim panelu. |
| 402 | Niewystarczające saldo. | Doładuj konto. W odpowiedzi jest bezpośredni link. |
| 403 | Zapytanie wykracza poza zasady korzystania. | Zobacz fair use poniżej. |
| 429 | Osiągnięto limit zapytań albo wydatków. | Odczekaj i ponów; respektuj Retry-After. |
| 502 / 503 | Model po stronie dostawcy jest niedostępny i nie ma zastępstwa. | Ponów. Zajrzyj na stronę statusu. |
Nieudane zapytania nic cię nie kosztują: jeśli nie wróciła żadna użyteczna odpowiedź, nic nie schodzi z twojego salda.
Fair use i zasady korzystania
Odmawiamy instrukcji dotyczących broni, złośliwego oprogramowania i oszustw oraz materiałów krzywdzących dzieci. Te odmowy są ostateczne: nigdy nie przekazujemy takiego zapytania do innego modelu, żeby jednak wyciągnąć z niego odpowiedź.
Czym innym jest sytuacja, gdy model odmawia odpowiedzi na uzasadnione pytanie o politykę, historię albo drażliwy temat społeczny: traktujemy to jako wadę i wysyłamy zapytanie do modelu bez tej ślepej plamki. Widzisz to w nagłówku X-EU-Routed: censorship.
Jeden z naszych modeli ma licencję z własnymi zasadami korzystania. Te zasady obowiązują w całości: przekierowanie nie omija warunków licencji.
Nie wiesz, czy twój przypadek użycia się mieści? Napisz na hello@europeanailab.eu. Odpowiedź z góry jest tańsza dla obu stron niż zablokowany klucz po fakcie.
Najczęściej zadawane pytania
Pytania, które przychodzą mailem, zanim ktokolwiek utworzy klucz: z czym API jest zgodne, ile kosztuje zapytanie i gdzie to działa.
Które SDK OpenAI działają z API zgodnym z OpenAI?
Wszystkie oficjalne, bo to cienkie klienty nad kontraktem chat completions, a base URL przyjmują jako argument konstruktora. Najczęściej chodzi o SDK dla Pythona i Node, ale Go, Java i .NET działają tak samo. Zachowujesz swoją logikę ponawiania, obsługę streamingu i typy.
Czy mogę używać LangChain albo Vercel AI SDK?
Tak. Oba pozwalają ustawić base URL w konfiguracji providera OpenAI, więc wskazujesz tam nasz host i używasz klucza Union AI. Na tej samej zasadzie działa wszystko, co pozwala nadpisać base URL, w tym większość frameworków agentowych i narzędzi do ewaluacji.
Czy API obsługuje streaming i function calling?
Tak, jedno i drugie, a do tego structured output według schematu JSON. Odpowiedzi strumieniowane podają zużycie tokenów na końcu strumienia, więc streamowane zapytanie rozliczysz tak samo dokładnie jak zwykłe.
Jakie są limity zapytań w API?
Jest limit zapytań na minutę na klucz i na konto, do tego dzienne i miesięczne limity wydatków w euro, które ustawiasz sam. Nowe konta mają przez pierwsze 48 godzin limit 25 € dziennie, niezależnie od salda. Po przekroczeniu limitu dostajesz 429 z nagłówkiem Retry-After.
Jak obsługiwać błąd 429 i ponawianie zapytań?
Respektuj Retry-After zamiast ponawiać od razu i stosuj wykładniczy backoff z losowym rozrzutem, żeby seria zapytań nie zsynchronizowała się między workerami. Nie ponawiaj 402: to znaczy, że saldo jest puste, a pętla tylko powtórzy ten sam błąd. Zwykle wystarczy jedna ponowna próba, bo druga porażka rzadko daje inną odpowiedź.
Jak sprawdzić, ile kosztowało zapytanie do API?
Każda odpowiedź ma nagłówki: X-EU-Tokens-In i X-EU-Tokens-Out z naliczonymi tokenami, X-EU-Cost-EUR z kwotą pobraną z salda i X-EU-Balance-EUR z tym, co zostało. Twoje własne logi odpowiedzą więc na pytanie o koszt na funkcję albo na klienta, bez otwierania panelu.
Jaki model działa w każdym tierze?
Każdy tier odpowiada konkretnemu modelowi open-weight, opublikowanemu z licencją i oknem kontekstu na stronie Przejrzystość AI. Kupujesz tier, a nie nazwę modelu, więc możemy wymienić model pod spodem bez psucia twojej integracji. Kiedy to robimy, informujemy cię o tym.
Przeniesienie istniejącej integracji to trzy linijki: klucz, base URL i nazwa tieru. Całą zmianę, łącznie z tym, czego nie da się przenieść, opisujemy w tekście przejście w trzech linijkach. Coś jeszcze niejasne? Stawki za każdy tier są w cenniku, model i licencja za każdym tierem na stronie Przejrzystość AI, a to, co dzieje się podczas awarii, na stronie statusu. Dwie dłuższe lektury: ile kosztuje API AI za token i dokąd naprawdę trafiają twoje prompty.
Zacznij korzystać z AI dla Europejczyków.
Korzystaj z AI bez wysyłania danych za granicę: wszystko na europejskich serwerach, w europejskiej cenie.
13 € miesięcznie za czat, rezygnujesz, kiedy chcesz. Albo za tokeny, z doładowaniem od 10 €.
Nie wiesz jeszcze? Zrób 60-sekundowy quiz →