From d88bb23fc2cbb548e7183eacfe9abb1a258e8da1 Mon Sep 17 00:00:00 2001 From: reanon <> Date: Fri, 14 Nov 2025 07:36:10 +0100 Subject: [PATCH] 5.1 --- src/info-page.ts | 2 ++ .../request/preprocessors/validate-context-size.ts | 6 ++++++ src/proxy/openai.ts | 4 ++-- src/service-info.ts | 2 ++ src/shared/api-schemas/openai-responses.ts | 2 +- src/shared/api-schemas/openai.ts | 2 +- src/shared/key-management/openai/provider.ts | 4 ++-- src/shared/models.ts | 5 +++++ src/shared/stats.ts | 2 ++ 9 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/info-page.ts b/src/info-page.ts index f3e9af9..51a5648 100644 --- a/src/info-page.ts +++ b/src/info-page.ts @@ -42,6 +42,7 @@ const MODEL_FAMILY_FRIENDLY_NAME: { [f in ModelFamily]: string } = { "gpt41-mini": "GPT-4.1 Mini", "gpt41-nano": "GPT-4.1 Nano", gpt5: "GPT-5", + gpt51: "GPT-5.1", "gpt5-mini": "GPT-5 Mini", "gpt5-nano": "GPT-5 Nano", "gpt5-pro": "GPT-5 Pro", @@ -84,6 +85,7 @@ const MODEL_FAMILY_FRIENDLY_NAME: { [f in ModelFamily]: string } = { "azure-gpt41-mini": "Azure GPT-4.1 Mini", "azure-gpt41-nano": "Azure GPT-4.1 Nano", "azure-gpt5": "Azure GPT-5", + "azure-gpt51": "Azure GPT-5.1", "azure-gpt5-mini": "Azure GPT-5 Mini", "azure-gpt5-nano": "Azure GPT-5 Nano", "azure-gpt5-pro": "GPT-5 Pro (Azure)", diff --git a/src/proxy/middleware/request/preprocessors/validate-context-size.ts b/src/proxy/middleware/request/preprocessors/validate-context-size.ts index e1f83ce..4ef1faa 100644 --- a/src/proxy/middleware/request/preprocessors/validate-context-size.ts +++ b/src/proxy/middleware/request/preprocessors/validate-context-size.ts @@ -67,6 +67,12 @@ export const validateContextSize: RequestPreprocessor = async (req) => { modelMax = 1000000; } else if (model.match(/^gpt-4\.1-nano(-\d{4}-\d{2}-\d{2})?$/)) { modelMax = 1000000; + } else if (model.match(/^gpt-5\.1(-\d{4}-\d{2}-\d{2})?$/)) { + modelMax = 400000; + } else if (model.match(/^gpt-5\.1-mini(-\d{4}-\d{2}-\d{2})?$/)) { + modelMax = 400000; + } else if (model.match(/^gpt-5\.1-nano(-\d{4}-\d{2}-\d{2})?$/)) { + modelMax = 400000; } else if (model.match(/^gpt-5(-\d{4}-\d{2}-\d{2})?$/)) { modelMax = 400000; } else if (model.match(/^gpt-5-mini(-\d{4}-\d{2}-\d{2})?$/)) { diff --git a/src/proxy/openai.ts b/src/proxy/openai.ts index b4e4d79..89a591d 100644 --- a/src/proxy/openai.ts +++ b/src/proxy/openai.ts @@ -487,13 +487,13 @@ function fixupMaxTokens(req: Request) { } } -// GPT-5, GPT-5-mini, and GPT-5-nano don't support certain parameters +// GPT-5, GPT-5.1, GPT-5-mini, and GPT-5-nano don't support certain parameters // Remove them if present to prevent API errors function filterGPT5UnsupportedParams(req: Request) { const model = req.body.model; // Only apply filtering to these specific models (gpt5-chat-latest supports all params) - const restrictedModels = /^gpt-5(-mini|-nano)?(-\d{4}-\d{2}-\d{2})?$/; + const restrictedModels = /^gpt-5(\\.1)?(-mini|-nano)?(-\d{4}-\d{2}-\d{2})?$/; if (!restrictedModels.test(model)) { return; // Not a restricted model, no filtering needed diff --git a/src/service-info.ts b/src/service-info.ts index 9e9a9b4..4887859 100644 --- a/src/service-info.ts +++ b/src/service-info.ts @@ -53,6 +53,7 @@ const MODEL_FAMILY_ORDER: ModelFamily[] = [ "gpt41-nano", "gpt45", "gpt5", + "gpt51", "gpt5-mini", "gpt5-nano", "gpt5-chat-latest", @@ -78,6 +79,7 @@ const MODEL_FAMILY_ORDER: ModelFamily[] = [ "azure-gpt41-nano", "azure-gpt45", "azure-gpt5", + "azure-gpt51", "azure-gpt5-mini", "azure-gpt5-nano", "azure-gpt5-chat-latest", diff --git a/src/shared/api-schemas/openai-responses.ts b/src/shared/api-schemas/openai-responses.ts index 972ef34..f9f5b72 100644 --- a/src/shared/api-schemas/openai-responses.ts +++ b/src/shared/api-schemas/openai-responses.ts @@ -20,7 +20,7 @@ export const OpenAIV1ResponsesSchema = z.object({ frequency_penalty: z.number().min(-2).max(2).optional(), user: z.string().optional(), tools: z.array(z.any()).optional(), - reasoning_effort: z.enum(["low", "medium", "high"]).optional(), + reasoning_effort: z.enum(["none", "low", "medium", "high"]).optional(), }); // Allow transforming from OpenAI Chat to Responses format diff --git a/src/shared/api-schemas/openai.ts b/src/shared/api-schemas/openai.ts index a232684..2f04098 100644 --- a/src/shared/api-schemas/openai.ts +++ b/src/shared/api-schemas/openai.ts @@ -77,7 +77,7 @@ export const OpenAIV1ChatCompletionSchema = z functions: z.array(z.any()).optional(), tool_choice: z.any().optional(), function_choice: z.any().optional(), - reasoning_effort: z.enum(["minimal", "low", "medium", "high"]).optional(), + reasoning_effort: z.enum(["none", "minimal", "low", "medium", "high"]).optional(), verbosity: z.enum(["low", "medium", "high"]).optional(), response_format: z.any(), }) diff --git a/src/shared/key-management/openai/provider.ts b/src/shared/key-management/openai/provider.ts index 9e9c808..80db6a6 100644 --- a/src/shared/key-management/openai/provider.ts +++ b/src/shared/key-management/openai/provider.ts @@ -146,8 +146,8 @@ export class OpenAIKeyProvider implements KeyProvider { const excludeTrials = model === "text-embedding-ada-002"; const isGptImageRequest = neededFamily === "gpt-image"; - // GPT-5 models (gpt-5, gpt-5-mini, gpt-5-nano) require verified keys for streaming - const isGpt5Model = /^gpt-5(-mini|-nano)?(-\d{4}-\d{2}-\d{2})?$/.test(model); + // GPT-5 models (gpt-5, gpt-5.1, gpt-5-mini, gpt-5-nano) require verified keys for streaming + const isGpt5Model = /^gpt-5(\\.1)?(-mini|-nano)?(-\d{4}-\d{2}-\d{2})?$/.test(model); const isO1Model = /^o1(-mini|-preview)?(-\d{4}-\d{2}-\d{2})?$/.test(model); const isO3Model = /^o3(-mini)?(-\d{4}-\d{2}-\d{2})?$/.test(model); const isO4MiniModel = /^o4-mini(-\d{4}-\d{2}-\d{2})?$/.test(model); diff --git a/src/shared/models.ts b/src/shared/models.ts index 992f810..3ad4b41 100644 --- a/src/shared/models.ts +++ b/src/shared/models.ts @@ -33,6 +33,7 @@ export type OpenAIModelFamily = | "gpt41-nano" | "gpt45" | "gpt5" + | "gpt51" | "gpt5-mini" | "gpt5-nano" | "gpt5-chat-latest" @@ -102,6 +103,7 @@ export const MODEL_FAMILIES = (( "gpt41-mini", "gpt41-nano", "gpt5", + "gpt51", "gpt5-mini", "gpt5-nano", "gpt5-chat-latest", @@ -196,6 +198,7 @@ export const MODEL_FAMILY_SERVICE: { "gpt41-mini": "openai", "gpt41-nano": "openai", gpt5: "openai", + gpt51: "openai", "gpt5-mini": "openai", "gpt5-nano": "openai", "gpt5-chat-latest": "openai", @@ -230,6 +233,7 @@ export const MODEL_FAMILY_SERVICE: { "azure-gpt41-mini": "azure", "azure-gpt41-nano": "azure", "azure-gpt5": "azure", + "azure-gpt51": "azure", "azure-gpt5-mini": "azure", "azure-gpt5-nano": "azure", "azure-gpt5-chat-latest": "azure", @@ -257,6 +261,7 @@ export const IMAGE_GEN_MODELS: ModelFamily[] = ["dall-e", "azure-dall-e", "gpt-i export const OPENAI_MODEL_FAMILY_MAP: { [regex: string]: OpenAIModelFamily } = { "^gpt-image(-\\d+)?(-preview)?(-\\d{4}-\\d{2}-\\d{2})?$": "gpt-image", + "^gpt-5\\.1(-\\d{4}-\\d{2}-\\d{2})?$": "gpt51", "^gpt-5(-\\d{4}-\\d{2}-\\d{2})?$": "gpt5", "^gpt-5-mini(-\\d{4}-\\d{2}-\\d{2})?$": "gpt5-mini", "^gpt-5-nano(-\\d{4}-\\d{2}-\\d{2})?$": "gpt5-nano", diff --git a/src/shared/stats.ts b/src/shared/stats.ts index 054d75a..68b06e9 100644 --- a/src/shared/stats.ts +++ b/src/shared/stats.ts @@ -14,6 +14,8 @@ const MODEL_PRICING: Record