POST /v1/decisions obsługuje Decisions API od OpenAI:
request zawiera input (tekst lub wiadomości użytkownika z tekstem i obrazami) oraz
listę typowanych pytań, a każda odpowiedź jest prawdopodobieństwem, wyborem lub
oceną (score) zamiast dowolnego tekstu.
Endpoint jest dostępny, gdy skonfigurowany jest provider openai, jev lub
openrouter. Bez żadnego z nich odpowiada 404.
W każdym przypadku odpowiedź ma kształt OpenAI, więc SDK OpenAI działają bez zmian.
Request i odpowiedź
base_url na gateway:
Jev i Kev
Modeljev odpowiada na ten sam request przez System One, który zadaje te
same trzy rodzaje pytań: predicate to noul, a choice i
score zachowują swoje nazwy. GoModel tłumaczy request i odpowiedź, więc
możesz przełączać się między OpenAI a Jev lub robić failover z jednego na drugi
bez zmiany kodu klienta.
Niektóre części requestu tłumaczą się z ograniczeniami:
- Obrazy działają w hostowanym Jev, wysyłane jako data URL z base64 PNG lub JPEG
(
data:image/png;base64,...). Każdy z nich staje się zasobem obrazu System One, umieszczonym w stanie w tym miejscu, w którym był w input, a GoModel dodaje nagłówekTypeSafe-Danger-Zone-Images: truewymagany przez TypeSafe. GoModel nie pobiera obrazów z linków dla Jev, więc URL obrazuhttpszwraca400;detailjest ignorowane. TypeSafe oznacza obsługę obrazów jako eksperymentalną i ogranicza każdy obraz do 280–1568 pikseli na bok. Serwer Kev czyta tylko tekst, więc request z obrazem do modelu Kev zwraca400: GoModel traktuje providerajevjako serwer Kev, chyba że jego bazowy URL to hostowane API TypeSafe (https://api.typesafe.ai). - Wartości choice to stringi lub wartości logiczne; wartość logiczna jest wysyłana jako
"true"lub"false"i wraca jako wartość logiczna. String"true"i wartość logicznatruew jednym pytaniu kolidują i są odrzucane. prompt_cache_key,prompt_cache_optionsisafety_identifiersą usuwane.- Pytanie, na które System One nie odpowie, wraca jako
refusal, na co Decisions API pozwala dla dowolnego pytania. - Błędy upstreamu zachowują status i komunikat TypeSafe; błędnie sformułowane pytanie wskazuje swój klucz System One.
Co robi gateway
Podobnie jak w System One, endpoint rozwiązujemodel (w tym modele wirtualne i
przypięte wersje Jev), stosuje listę dozwolonych modeli wywołującego, rate limity i
budżety, uruchamia guardrails promptu na input,
obsługuje identyczne requesty z dokładnego cache’u odpowiedzi,
robi failover na kolejny cel przy błędach dostępności i zapisuje audyt oraz
użycie pod modelem, który odpowiedział. Filtruj log audytowy po typie requestu
Decisions.
Użycie na /v1/decisions jest wyceniane wyłącznie za tokeny wejściowe, każdy według
stawki wejściowej modelu, tak jak OpenAI rozlicza Decisions API: tokeny wyjściowe, odczytu z cache’u i
zapisu do cache’u są tam darmowe, nawet dla modelu takiego jak gpt-6-luna, którego
cennik w katalogu ma stawki czatowe. Progi długiego kontekstu nadal wyznaczają stawkę wejściową. OpenRouter
raportuje naliczoną kwotę jako usage.cost; przetłumaczona odpowiedź ją zachowuje, a
użycie zapisuje ją jako koszt requestu.
Guardrails widzą każdą wiadomość wejściową jako wiadomość użytkownika z jej częściami tekstowymi i
obrazowymi; zmiany trafiają do providera, a nietknięte części zachowują dokładny JSON.
Zmiany, na które request decyzyjny nie ma miejsca, takie jak wstrzyknięty system prompt,
są odrzucane z ostrzeżeniem. Obowiązuje tylko faza promptu: odpowiedź to typowane
wartości (prawdopodobieństwa, wybory, oceny), a nie completion, więc guardrails fazy odpowiedzi i
streamu nie są na niej uruchamiane, a odpowiedź jest przekazywana bez zmian.
Workflow, który wybiera takie guardrails dla requestu Decisions, loguje jedno ostrzeżenie
na guardrail.
Modele decyzyjne mogą też oceniać inny ruch: guardrail
llm_judge z modelem
decyzyjnym zadaje mu pytanie tak/nie o politykę dla każdego promptu czatu lub
Responses i blokuje na podstawie prawdopodobieństwa. To wywołanie przechodzi tą
samą ścieżką co ten endpoint, w ramach ścieżki użytkownika guardraila.
Łańcuch failoveru może mieszać providerów: każdy cel otrzymuje request we
własnej postaci, a cel u providera bez Decisions API albo taki, który
nie potrafi odczytać obrazów z requestu (serwer Kev lub model jev, któremu przekazano link
do obrazu), jest pomijany bez zużywania próby. Gdy pierwszy cel łańcucha
nie potrafi odczytać obrazów, request zaczyna się od pierwszego celu, który to potrafi, więc
poniższy łańcuch wysyła tekst do Kev, a obrazy do OpenAI.