Skip to main content
POST /v1/systemone obsługuje System One API od TypeSafe: request niesie state (tekst lub rekord do oceny) oraz mapę typowanych pytań, a odpowiedzią jest skalibrowane prawdopodobieństwo dla każdego pytania. To API decyzyjne, a nie generator tekstu, więc GoModel przekazuje je natywnie i nigdy nie tłumaczy go na czat ani z czatu. Aby korzystać z tych samych modeli przy strukturach requestów i odpowiedzi OpenAI, użyj Decisions API, które GoModel tłumaczy na System One. Endpoint jest dostępny, gdy skonfigurowano providera jev (hostowany Jev lub self-hosted serwer Kev) albo providera openrouter. Bez nich odpowiada 404.

Request i odpowiedź

Odpowiedź pochodzi od samego providera i jest przekazywana bez zmian:
SDK TypeSafe wysyłają POST {base_url}/v1/systemone, więc skieruj je na główny adres gatewaya (base_url="http://localhost:8080") z Twoim kluczem GoModel; zobacz Jev / Kev.

Trasy

Trasy Kev zachowują się jak /v1/systemone. Są odrzucane dla OpenRoutera, który obsługuje tylko trasę oceny; hostowany provider TypeSafe jev zwraca dla nich własne 404.

Co robi gateway

  1. Rozwiązuje model jak w każdym innym endpoincie: gołą nazwę, nazwę z providerem (jev/jev-latest) lub model wirtualny, a następnie stosuje listę dozwolonych modeli wywołującego, rate limity i budżety.
  2. Uruchamia guardrails promptu z workflow na state.
  3. Serwuje identyczny wcześniejszy request z cache’u odpowiedzi.
  4. Przekazuje body, zmieniając jedynie model (rozwiązaną nazwę) i state (jeśli edytował je guardrail). Pytania, kryteria i wszystkie inne pola docierają do providera bajt w bajt.
  5. Przekazuje odpowiedź bez zmian i zapisuje ją w logu audytowym (typ requestu Decisions) oraz w użyciu.

Obrazy

Requesty z obrazami TypeSafe działają w wysłanej postaci: assets w body JSON albo formularz multipart/form-data TypeSafe, w którym request JSON jest pierwszą częścią o nazwie request, a każdy obraz to część plikowa, którą asset wskazuje przez part. SDK TypeSafe wysyłają ten formularz dla obiektów Image. GoModel wstawia każdą część z obrazem do jej assetu jako data_base64 i przekazuje jeden request JSON, więc guardrails, cache i failover obsługują obie formy tak samo. Obraz musi być w formacie PNG lub JPEG; format assetu jest zachowywany, gdy go podano, a w przeciwnym razie wynika z bajtów obrazu. Formularz, który TypeSafe by odrzucił – np. część nieużywana przez żaden asset, asset wskazujący brakującą część albo obraz niebędący PNG ani JPEG – zwraca 400. Wysyłaj nagłówek TypeSafe-Danger-Zone-Images: true, jak wymaga TypeSafe; gateway go przekazuje. Serwery Kev odczytują wyłącznie tekst.

Modele

Modele System One są wymienione w GET /v1/models jako modele narzędziowe bez trybu generowania. TypeSafe wymienia tylko swoje aliasy, ale przyjmuje dowolne wersjonowane ID, więc przypięta wersja działa bez deklarowania: GoModel kieruje model, którego nie ma na liście, do providera jev, gdy nazwa wskazuje, do którego (jev/jev-1.13.0), albo – przy gołej nazwie – gdy skonfigurowany jest dokładnie jeden provider jev. Model wirtualny może przypiąć wersję w ten sam sposób. OpenRouter sam przyjmuje jev-latest, ale GoModel routuje według ID z jego katalogu. Aby zwykłe jev-latest (wartość domyślna SDK TypeSafe) działało przez OpenRoutera, dodaj model wirtualny:

Cache

Przy włączonym cache’u odpowiedzi identyczny request (ta sama trasa, rozwiązany model, guardrails i body po edycjach guardrails) otrzymuje odpowiedź z cache’u dokładnego (X-Cache: HIT (exact)) i jest zapisywany w użyciu jako cache hit. Cache semantyczny nigdy nie obsługuje System One: stan, który jest jedynie podobny, to nie ta sama decyzja. Wyślij Cache-Control: no-cache, aby pominąć cache dla jednego requestu.

Failover

Model wirtualny ze strategią failover przenosi request do kolejnego targetu, gdy bieżący zawodzi z błędem dostępności (domyślnie 429 lub 5xx, w tym 529 od TypeSafe; zobacz Failover). Każdy target otrzymuje request we własnej formie System One. Target bez tego API, np. model czatu, jest pomijany bez zużywania próby failoveru, a błędy klienta, takie jak źle sformułowane pytanie (422), są zwracane bez failoveru:
Log audytowy pokazuje każdą próbę, użycie jest zapisywane pod targetem, który odpowiedział, a odpowiedź z failoveru nie trafia do cache’u.

Guardrails

Guardrails widzą state jako pojedynczą wiadomość użytkownika: stan będący stringiem – jako jej tekst, każdą inną wartość JSON – jako zakodowany JSON, który po edycji nadal musi być poprawnym JSON-em. Tego potrzebują guardrails anonimizujące i blokujące; na przykład reguła string_replace maskująca numery kart działa na state, zanim opuści on gateway. Pytania to stały schemat Twojej aplikacji i nie są udostępniane. Edycje, na które request decyzyjny nie ma miejsca, np. system prompt wstrzyknięty przez guardrail obejmujący też modele czatu, są pomijane. Gateway loguje jedno ostrzeżenie dla każdego rodzaju pominiętej edycji, a powtórzenia loguje na poziomie debug. Guardrail, który sam odpowiedziałby na request, zamiast tego go blokuje, ponieważ wywołujący System One oczekują typowanych odpowiedzi, a nie tekstu. Stosowana jest wyłącznie faza promptu. Odpowiedź to typowane wartości, a nie completion, więc guardrails fazy response i stream nie są na niej uruchamiane i jest ona przekazywana bez zmian; workflow, który wybiera je dla requestu System One, loguje jedno ostrzeżenie na guardrail.

Błędy i niewłaściwe użycie

Endpoint nigdy nie tłumaczy i informuje o tym, gdy request nie może zadziałać:

Audyt, użycie i koszt

Każde wywołanie jest wpisem audytowym pod swoją trasą, z żądanym i rozwiązanym modelem, providerem, body requestu i odpowiedzi, wynikami guardrails i próbami failoveru; filtruj log audytowy według typu requestu Decisions. W użyciu zapisywane są input_tokens i output_tokens odpowiedzi pod modelem, który odpowiedział. OpenRouter raportuje własne usage.cost, które jest zapisywane jako koszt requestu; dla hostowanego Jev zadeklaruj ceny na providerze (zobacz Jev / Kev).
Ostatnia modyfikacja 24 października 2026