From 482349fd2265298c6914291efee3e05264d3c380 Mon Sep 17 00:00:00 2001 From: Ankur Goyal Date: Mon, 2 Nov 2026 00:52:45 +0000 Subject: [PATCH 1/2] feat: mark models that answer decision requests Add `supports_decisions` to the model schema for models that serve decision requests (POST /v1/decisions), which return typed answers to questions about an input instead of generated text. Mark gpt-6-luna, which serves both chat and OpenAI's Decisions API, and TypeSafe's Jev models, which only answer decisions. The TypeSafe sync sets the flag on the Jev models it generates. Co-Authored-By: Claude Opus 5.5 --- packages/proxy/schema/model_list.json | 5 +++++ packages/proxy/schema/models.ts | 6 ++++++ packages/proxy/scripts/sync_typesafe.test.ts | 1 + packages/proxy/scripts/sync_typesafe.ts | 1 + 4 files changed, 13 insertions(+) diff --git a/packages/proxy/schema/model_list.json b/packages/proxy/schema/model_list.json index d8df0c95..3e3e4ba2 100644 --- a/packages/proxy/schema/model_list.json +++ b/packages/proxy/schema/model_list.json @@ -610,6 +610,7 @@ "gpt-6-luna": { "format": "openai", "flavor": "chat", + "supports_decisions": true, "multimodal": true, "input_cost_per_mil_tokens": 0.1, "output_cost_per_mil_tokens": 0.5, @@ -23545,6 +23546,7 @@ "jev-1.14.0": { "format": "typesafe", "flavor": "evaluation", + "supports_decisions": true, "input_cost_per_mil_tokens": 0.042, "output_cost_per_mil_tokens": 0, "displayName": "Jev 1.14", @@ -23555,6 +23557,7 @@ "jev-preview": { "format": "typesafe", "flavor": "evaluation", + "supports_decisions": true, "input_cost_per_mil_tokens": 0.042, "output_cost_per_mil_tokens": 0, "displayName": "jev-preview", @@ -23566,6 +23569,7 @@ "jev-latest": { "format": "typesafe", "flavor": "evaluation", + "supports_decisions": true, "input_cost_per_mil_tokens": 0.042, "output_cost_per_mil_tokens": 0, "displayName": "jev-latest", @@ -23577,6 +23581,7 @@ "jev-1.13.0": { "format": "typesafe", "flavor": "evaluation", + "supports_decisions": true, "input_cost_per_mil_tokens": 0.042, "output_cost_per_mil_tokens": 0, "displayName": "Jev 1.13", diff --git a/packages/proxy/schema/models.ts b/packages/proxy/schema/models.ts index 76c741f4..07c15982 100644 --- a/packages/proxy/schema/models.ts +++ b/packages/proxy/schema/models.ts @@ -164,6 +164,12 @@ export const ModelSchema = z.object({ .boolean() .nullish() .describe("The model supports native streaming responses."), + supports_decisions: z + .boolean() + .nullish() + .describe( + "The model answers decision requests (POST /v1/decisions): typed answers to questions about an input instead of generated text.", + ), streaming_only: z .boolean() .nullish() diff --git a/packages/proxy/scripts/sync_typesafe.test.ts b/packages/proxy/scripts/sync_typesafe.test.ts index c79b89d4..53daf3d8 100644 --- a/packages/proxy/scripts/sync_typesafe.test.ts +++ b/packages/proxy/scripts/sync_typesafe.test.ts @@ -102,6 +102,7 @@ Output tokens are free.`, expect(model).toMatchObject({ format: "typesafe", flavor: "evaluation", + supports_decisions: true, available_providers: ["typesafe"], input_cost_per_mil_tokens: 0.042, output_cost_per_mil_tokens: 0, diff --git a/packages/proxy/scripts/sync_typesafe.ts b/packages/proxy/scripts/sync_typesafe.ts index 32dafe14..69ee9260 100644 --- a/packages/proxy/scripts/sync_typesafe.ts +++ b/packages/proxy/scripts/sync_typesafe.ts @@ -110,6 +110,7 @@ export function parseTypesafePricing(markdown: string): ModelCatalog { models[modelId] = { format: "typesafe", flavor: "evaluation", + supports_decisions: true, input_cost_per_mil_tokens: pricePerMillionTokens, output_cost_per_mil_tokens: 0, displayName: rows[0][0], From dd02c3ee765654023f409578f7bb9718419ea5e7 Mon Sep 17 00:00:00 2001 From: Ankur Goyal Date: Mon, 2 Nov 2026 16:35:39 -0800 Subject: [PATCH 2/2] docs(models): clarify Decisions API support --- packages/proxy/schema/models.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/proxy/schema/models.ts b/packages/proxy/schema/models.ts index c1f92270..51f9941d 100644 --- a/packages/proxy/schema/models.ts +++ b/packages/proxy/schema/models.ts @@ -169,7 +169,7 @@ export const ModelSchema = z.object({ .boolean() .nullish() .describe( - "The model also answers decision requests in addition to its native request flavor.", + "The model answers decision requests (POST /v1/decisions): typed answers to questions about an input.", ), streaming_only: z .boolean()