Dokumentacja

Referencja API

Uwierzytelnianie, powierzchnia endpointów zgodna z OpenAI, streaming, reasoning i taksonomia błędów.

Uwierzytelnianie

Każde żądanie do /v1/* uwierzytelnia się wirtualnym kluczem w nagłówku Authorization: Bearer. Klucze tworzysz w Konsoli; sekret jest pokazywany tylko raz, a przechowywany jest wyłącznie jego hash. Klucz niesie własne limity zapytań, budżet, tagi oraz opcjonalną listę dozwolonych modeli (pusta = dowolny model).

Żądanie, którego model nie znajduje się na niepustej liście dozwolonych modeli klucza, zostaje odrzucone zapieczętowanym 403 permission_error zanim cokolwiek zostanie wysłane; sama odmowa trafia do łańcucha audytu.

Utworzenie klucza produkcyjnego wymaga zweryfikowanego adresu e-mail.

curl https://api.sluis.ai/v1/models \
  -H "Authorization: Bearer $SLUIS_KEY"

# a model outside the key's allow-list never dispatches:
# → 403 permission_error · the refusal is sealed in the audit chain

Endpointy

Sluis udostępnia poniższą powierzchnię zgodną z OpenAI. Endpointy bez dedykowanej obsługi są przekazywane dosłownie do wyznaczonego dostawcy, wraz ze streamingiem, więc zgodne z OpenAI usługi nadrzędne zachowują pełną wierność.

EndpointPrzeznaczenie
POST /v1/chat/completionsChat completions, główna powierzchnia: routing, ochrona danych, buforowanie, streaming.
POST /v1/completionsStarsze text completions.
POST /v1/embeddingsEmbeddingi; zasilają też cache semantyczny.
POST /v1/moderationsKlasyfikacja moderacji.
POST /v1/responsesAPI OpenAI Responses.
GET /v1/modelsModele, które Twoja polityka i poświadczenia faktycznie osiągają, nic hipotetycznego.
GET /v1/models/{id}Metadane pojedynczego modelu.
POST /v1/audio/*Transkrypcja, tłumaczenie, mowa · przekazywane do wyznaczonego dostawcy.
POST /v1/images/*Generowanie i edycja obrazów · przekazywane.
POST /v1/video/generationsGenerowanie wideo · przekazywane.
/v1/filesOperacje na plikach · przekazywane.

Streaming

Ustaw stream: true, a odpowiedź nadchodzi jako server-sent events: każda ramka to delta chat.completion.chunk, a strumień kończy się data: [DONE]. Strumienie nigdy nie są buforowane w bramie: przepływają przez nią rozgałęzieniem (tee), a zapieczętowanie audytu i pomiar następują nawet wtedy, gdy klient rozłączy się wcześniej.

Poproś o stream_options.include_usage a ostatnia ramka niesie dokładne zużycie tokenów, te same liczby, które brama mierzy i rozlicza.

stream = client.chat.completions.create(
    model="mistral/mistral-large-latest",
    messages=[{"role": "user", "content": "Write a haiku"}],
    stream=True,
    stream_options={"include_usage": True},
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")

Rozumowanie

Przekaż parametr OpenAI reasoning_effort (minimal | low | medium | high) na dowolnym modelu zdolnym do myślenia. Sluis tłumaczy go zależnie od dostawcy (poziom myślenia Gemini, adaptacyjny wysiłek myślowy Claude) i pomija go tam, gdzie model by go odrzucił, więc jeden parametr działa w całym katalogu.

resp = client.chat.completions.create(
    model="vertex/claude-opus-4-8",
    messages=[{"role": "user", "content": "Prove it step by step…"}],
    reasoning_effort="high",  # minimal | low | medium | high
)

Kody błędów

Błędy używają koperty błędów OpenAI; wartość error.type odzwierciedla status HTTP, więc obsługa błędów w Twoim SDK działa bez zmian.

KodKiedy
400 invalid_request_errorNieprawidłowy body żądania lub parametry.
400 invalid_request_errorIdentyfikator modelu bez prefiksu dostawcy. Każdy wywoływalny identyfikator to provider/model, np. mistral/mistral-large-latest; treść odpowiedzi brzmi: model must be provider-prefixed.
401 authentication_errorBrakujący lub nieznany klucz API.
402 insufficient_quotaWyczerpany darmowy limit lub osiągnięty budżet. Aktywuj plan albo podnieś budżet; żądanie nigdy nie dociera do dostawcy.
403 permission_errorKlucz nie ma uprawnień, na przykład model nie jest na jego liście dozwolonych.
422 invalid_request_errorOdrzucone przed wysyłką, na przykład ochrona danych w trybie block dopasowała żądanie.
429 rate_limit_errorOsiągnięty limit zapytań. Egzekwowane na bramie; żądanie nigdy nie dociera do dostawcy.
451 permission_errorZablokowane przez politykę rezydencji: żadna dozwolona jurysdykcja nie obsłuży żądania. Body zawiera powód.
5xx api_errorAwaria dostawcy nadrzędnego po ponowieniach; bezpiecznik kieruje ruch z pominięciem niesprawnych dostawców.