ai newsDo., 15. Okt.
EilmeldungMeta and Apple team up to make Muse AI models run better on Macs

OpenAI Decisions API im Vergleich zu System One: gleiche Anfrage, zwei Formate

Die Decisions API von OpenAI mit GPT-6 Luna Decisions ist seit Oktober 2026 als öffentliche Beta verfügbar. Sie deckt sich inhaltlich mit dem System-One-Anfrageformat, sodass bestehender Code für das eine Format sich nahezu 1:1 ins andere übertragen lässt.

dev.toFreitag 07:47 · 09.10.DE3 Min. Lesezeit
Bild: dev.to

OpenAIs Decisions API (POST /v1/decisions, GPT-6 Luna Decisions, öffentliche Beta seit dem 06.10.2026) und der System-One-Request, den TypeSafes Jev eingeführt hat, sagen dasselbe in unterschiedlichen Worten. Wer bereits Code für eines von beiden hat, muss das andere nur mechanisch übersetzen. Dieser Beitrag bildet die beiden Schnittstellen Feld für Feld ab, listet die zwei Stolperfallen auf, die still und leise falsche Antworten liefern, und zeigt, wie man OpenAI-förmige Requests an die anderen zwölf Entscheidungsmodelle sendet.

Geprüft am 08.10.2026 gegen die API-Referenz von OpenAI und OpenRouters /api/alpha/decisions.

Die Preisgestaltung hat auf beiden Seiten dieselbe Form: nur Eingabetokens werden berechnet. GPT-6 Luna Decisions kostet 0,10 Dollar pro Million Eingabetokens, Jev 0,042 Dollar, und keines der Entscheidungsmodelle, die ich getestet habe, rechnet Ausgaben ab.

Bilder. OpenAI akzeptiert input_image-Parts mit einer Data-URL. OpenRouters Decisions API liest Bilder ausschließlich als image_url-Parts im Chat-Stil. Sendet man ihr einen input_image-Part, wirft das keinen Fehler, sondern das Modell antwortet auf Basis des Base64-Codes, der als Text gelesen wird. In meinem Test antworteten drei Bildmodelle auf ein einfarbig rotes Quadrat mit „blau“, bis der Part-Typ geändert wurde.

Obergrenzen bei Optionen. Nicht jedes Modell beantwortet jede Frage. Upstages Solar Decide akzeptiert höchstens 26 Auswahlmöglichkeiten und Togethers Tev1 höchstens 20; Respas Span-01-Modelle beantworten nur Ja/Nein-Fragen. Leitet man einen Klassifizierer mit 77 Intents an eines dieser Modelle, wird der Request abgelehnt.

type OaiQ = | { type: " predicate "; name?: string; instructions: string } | { type: " choice "; name?: string; instructions: string; choices: { value: string; description?: string }[] } | { type: " score "; name?: string; instructions: string; levels: { label: string; description?: string }[] }; export function toSystemOne ( input: string, questions: OaiQ []) { const q: Record < string, unknown > = {}; questions. forEach (( x, i ) => { const id = `q ${ i } `; if ( x. type === " predicate " ) q [ id ] = { type: " noul ", instructions: x. instructions, criteria: { true: " Yes ", false: " No " } }; if ( x. type === " choice " ) q [ id ] = { type: " choice ", instructions: x. instructions, criteria: Object. fromEntries ( x. choices. map (( c ) => [ c. value, c. description || c. value ])) }; if ( x. type === " score " ) q [ id ] = { type: " score ", instructions: x. instructions, criteria: x. levels. map (( l ) => ( l. description? ` ${ l. label }: ${ l. description } `: l. label )) }; }); return { state: input, questions: q }; } // Die Antworten kommen unter den Schlüsseln q0, q1,... zurück; liest man sie in dieser Reihenfolge, lässt sich OpenAIs Array rekonstruieren.

POSTet man das Ergebnis zusammen mit einem Modell an https://openrouter.ai/api/alpha/decisions, funktioniert es für jedes der dreizehn Modelle, die GET https://openrouter.ai/api/v1/models?output_modalities=decisions auflistet.

Wenn man gar nicht übersetzen möchte, habe ich auf meiner Website einen OpenAI-kompatiblen Endpunkt vor alle dreizehn Modelle gesetzt, sodass das offizielle SDK unverändert funktioniert:

import OpenAI from " openai "; const client = new OpenAI ({ baseURL: " https://jev-agent.com/api/v1 ", apiKey: process. env. JAGENT_KEY }); const res = await client. decisions. create ({ model: " liquid/d1 ", // oder jev-latest, gpt-6-luna, cloudflare/clef,... input: " I was charged twice for September and I'm cancelling on Friday unless it's refunded. ", questions: [ { type: " choice ", name: " team ", instructions: " Which team should handle this?

", choices: [{ value: " billing " }, { value: " technical " }] }, { type: " predicate ", name: " churn ", instructions: " The customer threatens to cancel. " }, ], }); Welches Modell man wählt, hängt von der Entscheidung ab: Bei einer einfachen Schranke liegen alle innerhalb weniger Punkte beieinander; bei Dutzenden von Optionen und einer Aktion, die durch einen Konfidenzschwellenwert ausgelöst wird, tun sie das nicht. Ich habe alle dreizehn Modelle an denselben 633 Elementen gemessen, und zwar Genauigkeit, die Rate der selbstbewusst falschen Antworten, Latenz und Kosten, in diesem Bericht, mit Rohdaten in jev-measured.

Ich betreibe jev-agent.com (Jagent), eine unabhängige Website; es besteht keine Verbindung zu OpenAI, TypeSafe oder OpenRouter.

Automatisch übersetzt. Das Original auf Englisch ist unten aufklappbar.

Original (Englisch) anzeigen

OpenAI's Decisions API ( POST /v1/decisions, GPT-6 Luna Decisions, public beta since 2026-10-06) and the System One request that TypeSafe's Jev introduced say the same things in different words. If you already have code for one, the other is a mechanical translation. This post maps the two field by field, lists the two gotchas that silently give wrong answers, and shows how to send OpenAI-shaped requests to the other twelve decision models.

Checked 2026-10-08 against OpenAI's API reference and OpenRouter's /api/alpha/decisions.

Pricing has the same shape on both sides: input tokens only. GPT-6 Luna Decisions is $0.10 per million input tokens, Jev $0.042, and no decision model I tested bills output.

Images. OpenAI takes input_image parts carrying a data URL. OpenRouter's Decisions API reads images only as chat-style image_url parts. Send it an input_image part and it does not error — it answers from the base64 read as text. In my test a solid red square came back "blue" from three image models until the part type was changed.

Option caps. Not every model takes every question. Upstage's Solar Decide accepts at most 26 choice options and Together's Tev1 at most 20; Respan's Span-01 models answer yes/no only. Route a 77-intent classifier to one of those and the request is refused.

type OaiQ = | { type: " predicate "; name?: string; instructions: string } | { type: " choice "; name?: string; instructions: string; choices: { value: string; description?: string }[] } | { type: " score "; name?: string; instructions: string; levels: { label: string; description?: string }[] }; export function toSystemOne ( input: string, questions: OaiQ []) { const q: Record < string, unknown > = {}; questions. forEach (( x, i ) => { const id = `q ${ i } `; if ( x. type === " predicate " ) q [ id ] = { type: " noul ", instructions: x. instructions, criteria: { true: " Yes ", false: " No " } }; if ( x. type === " choice " ) q [ id ] = { type: " choice ", instructions: x. instructions, criteria: Object. fromEntries ( x. choices. map (( c ) => [ c. value, c. description || c. value ])) }; if ( x. type === " score " ) q [ id ] = { type: " score ", instructions: x. instructions, criteria: x. levels. map (( l ) => ( l. description? ` ${ l. label }: ${ l. description } `: l. label )) }; }); return { state: input, questions: q }; } // Answers come back keyed q0, q1,... — read them in that order to rebuild OpenAI's array. Enter fullscreen mode Exit fullscreen mode POST the result, plus a model, to https://openrouter.ai/api/alpha/decisions and it works for any of the thirteen models listed by GET https://openrouter.ai/api/v1/models?output_modalities=decisions.

If you would rather not translate at all, I put an OpenAI-compatible endpoint in front of all thirteen on my site, so the official SDK works unchanged:

import OpenAI from " openai "; const client = new OpenAI ({ baseURL: " https://jev-agent.com/api/v1 ", apiKey: process. env. JAGENT_KEY }); const res = await client. decisions. create ({ model: " liquid/d1 ", // or jev-latest, gpt-6-luna, cloudflare/clef,... input: " I was charged twice for September and I'm cancelling on Friday unless it's refunded. ", questions: [ { type: " choice ", name: " team ", instructions: " Which team should handle this?

", choices: [{ value: " billing " }, { value: " technical " }] }, { type: " predicate ", name: " churn ", instructions: " The customer threatens to cancel. " }, ], }); Enter fullscreen mode Exit fullscreen mode Which model to pick depends on the decision: on a simple gate they all land within a few points; with dozens of options and an action triggered by a confidence threshold, they don't. I measured all thirteen on the same 633 items — accuracy, the rate of confident wrong answers, latency and cost — in this write-up, with raw data in jev-measured.

I run jev-agent.com (Jagent), an independent site; not affiliated with OpenAI, TypeSafe or OpenRouter.

Originaltitel: OpenAI's Decisions API vs System One: the same request in two shapes, and how to call 13 decision models with the OpenAI SDKQuelle: dev.to (dev.to). Original öffnen