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ź
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
- Rozwiązuje
modeljak 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. - Uruchamia guardrails promptu z workflow na
state. - Serwuje identyczny wcześniejszy request z cache’u odpowiedzi.
- Przekazuje body, zmieniając jedynie
model(rozwiązaną nazwę) istate(jeśli edytował je guardrail). Pytania, kryteria i wszystkie inne pola docierają do providera bajt w bajt. - 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:
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).