Fix OpenAI GPT-5.5 thinking metadata

closes #5243
This commit is contained in:
Mario Zechner
2026-06-01 00:39:38 +02:00
parent d4fa41ae3c
commit f429ddbffd
3 changed files with 56 additions and 150 deletions

View File

@@ -2,6 +2,10 @@
## [Unreleased] ## [Unreleased]
### Fixed
- Fixed OpenAI GPT-5.5 generated metadata to omit unsupported minimal thinking ([#5243](https://github.com/earendil-works/pi/issues/5243)).
## [0.78.0] - 2026-05-29 ## [0.78.0] - 2026-05-29
### Breaking Changes ### Breaking Changes

View File

@@ -232,6 +232,9 @@ function applyThinkingLevelMetadata(model: Model<any>): void {
if (supportsOpenAiXhigh(model.id)) { if (supportsOpenAiXhigh(model.id)) {
mergeThinkingLevelMap(model, { xhigh: "xhigh" }); mergeThinkingLevelMap(model, { xhigh: "xhigh" });
} }
if (model.provider === "openai" && model.id === "gpt-5.5") {
mergeThinkingLevelMap(model, { minimal: null });
}
if (model.id.endsWith("gpt-5.5-pro")) { if (model.id.endsWith("gpt-5.5-pro")) {
mergeThinkingLevelMap(model, { off: null, minimal: null, low: null }); mergeThinkingLevelMap(model, { off: null, minimal: null, low: null });
} }

View File

@@ -2990,6 +2990,25 @@ export const MODELS = {
contextWindow: 1000000, contextWindow: 1000000,
maxTokens: 128000, maxTokens: 128000,
} satisfies Model<"anthropic-messages">, } satisfies Model<"anthropic-messages">,
"claude-opus-4-8": {
id: "claude-opus-4-8",
name: "Claude Opus 4.8",
api: "anthropic-messages",
provider: "cloudflare-ai-gateway",
baseUrl: "https://gateway.ai.cloudflare.com/v1/{CLOUDFLARE_ACCOUNT_ID}/{CLOUDFLARE_GATEWAY_ID}/anthropic",
compat: {"forceAdaptiveThinking":true},
reasoning: true,
thinkingLevelMap: {"xhigh":"xhigh"},
input: ["text", "image"],
cost: {
input: 5,
output: 25,
cacheRead: 0.5,
cacheWrite: 6.25,
},
contextWindow: 1000000,
maxTokens: 128000,
} satisfies Model<"anthropic-messages">,
"claude-sonnet-4": { "claude-sonnet-4": {
id: "claude-sonnet-4", id: "claude-sonnet-4",
name: "Claude Sonnet 4 (latest)", name: "Claude Sonnet 4 (latest)",
@@ -3485,24 +3504,6 @@ export const MODELS = {
contextWindow: 128000, contextWindow: 128000,
maxTokens: 128000, maxTokens: 128000,
} satisfies Model<"openai-completions">, } satisfies Model<"openai-completions">,
"@cf/moonshotai/kimi-k2.5": {
id: "@cf/moonshotai/kimi-k2.5",
name: "Kimi K2.5",
api: "openai-completions",
provider: "cloudflare-workers-ai",
baseUrl: "https://api.cloudflare.com/client/v4/accounts/{CLOUDFLARE_ACCOUNT_ID}/ai/v1",
compat: {"sendSessionAffinityHeaders":true},
reasoning: true,
input: ["text", "image"],
cost: {
input: 0.6,
output: 3,
cacheRead: 0.1,
cacheWrite: 0,
},
contextWindow: 256000,
maxTokens: 256000,
} satisfies Model<"openai-completions">,
"@cf/moonshotai/kimi-k2.6": { "@cf/moonshotai/kimi-k2.6": {
id: "@cf/moonshotai/kimi-k2.6", id: "@cf/moonshotai/kimi-k2.6",
name: "Kimi K2.6", name: "Kimi K2.6",
@@ -6908,7 +6909,7 @@ export const MODELS = {
provider: "openai", provider: "openai",
baseUrl: "https://api.openai.com/v1", baseUrl: "https://api.openai.com/v1",
reasoning: true, reasoning: true,
thinkingLevelMap: {"off":"none","xhigh":"xhigh"}, thinkingLevelMap: {"off":"none","xhigh":"xhigh","minimal":null},
input: ["text", "image"], input: ["text", "image"],
cost: { cost: {
input: 5, input: 5,
@@ -7362,6 +7363,25 @@ export const MODELS = {
contextWindow: 1000000, contextWindow: 1000000,
maxTokens: 64000, maxTokens: 64000,
} satisfies Model<"anthropic-messages">, } satisfies Model<"anthropic-messages">,
"deepseek-v4-flash": {
id: "deepseek-v4-flash",
name: "DeepSeek V4 Flash",
api: "openai-completions",
provider: "opencode",
baseUrl: "https://opencode.ai/zen/v1",
compat: {"requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"deepseek"},
reasoning: true,
thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":"max"},
input: ["text"],
cost: {
input: 0.14,
output: 0.28,
cacheRead: 0.03,
cacheWrite: 0,
},
contextWindow: 1000000,
maxTokens: 384000,
} satisfies Model<"openai-completions">,
"deepseek-v4-flash-free": { "deepseek-v4-flash-free": {
id: "deepseek-v4-flash-free", id: "deepseek-v4-flash-free",
name: "DeepSeek V4 Flash Free", name: "DeepSeek V4 Flash Free",
@@ -7825,8 +7845,8 @@ export const MODELS = {
cacheRead: 0, cacheRead: 0,
cacheWrite: 0, cacheWrite: 0,
}, },
contextWindow: 1000000, contextWindow: 200000,
maxTokens: 128000, maxTokens: 32000,
} satisfies Model<"openai-completions">, } satisfies Model<"openai-completions">,
"minimax-m2.5": { "minimax-m2.5": {
id: "minimax-m2.5", id: "minimax-m2.5",
@@ -8833,25 +8853,6 @@ export const MODELS = {
contextWindow: 1048576, contextWindow: 1048576,
maxTokens: 131072, maxTokens: 131072,
} satisfies Model<"openai-completions">, } satisfies Model<"openai-completions">,
"deepseek/deepseek-v4-flash:free": {
id: "deepseek/deepseek-v4-flash:free",
name: "DeepSeek: DeepSeek V4 Flash (free)",
api: "openai-completions",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
compat: {"requiresReasoningContentOnAssistantMessages":true},
reasoning: true,
thinkingLevelMap: {"minimal":null,"low":null,"medium":null,"high":"high","xhigh":"xhigh"},
input: ["text"],
cost: {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
},
contextWindow: 1048576,
maxTokens: 384000,
} satisfies Model<"openai-completions">,
"deepseek/deepseek-v4-pro": { "deepseek/deepseek-v4-pro": {
id: "deepseek/deepseek-v4-pro", id: "deepseek/deepseek-v4-pro",
name: "DeepSeek: DeepSeek V4 Pro", name: "DeepSeek: DeepSeek V4 Pro",
@@ -9306,9 +9307,9 @@ export const MODELS = {
reasoning: true, reasoning: true,
input: ["text"], input: ["text"],
cost: { cost: {
input: 0.075, input: 0.3,
output: 0.625, output: 2.5,
cacheRead: 0.015, cacheRead: 0.06,
cacheWrite: 0, cacheWrite: 0,
}, },
contextWindow: 262144, contextWindow: 262144,
@@ -9552,40 +9553,6 @@ export const MODELS = {
contextWindow: 262144, contextWindow: 262144,
maxTokens: 4096, maxTokens: 4096,
} satisfies Model<"openai-completions">, } satisfies Model<"openai-completions">,
"mistralai/devstral-medium": {
id: "mistralai/devstral-medium",
name: "Mistral: Devstral Medium",
api: "openai-completions",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.39999999999999997,
output: 2,
cacheRead: 0.04,
cacheWrite: 0,
},
contextWindow: 131072,
maxTokens: 4096,
} satisfies Model<"openai-completions">,
"mistralai/devstral-small": {
id: "mistralai/devstral-small",
name: "Mistral: Devstral Small 1.1",
api: "openai-completions",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: false,
input: ["text"],
cost: {
input: 0.09999999999999999,
output: 0.3,
cacheRead: 0.01,
cacheWrite: 0,
},
contextWindow: 131072,
maxTokens: 4096,
} satisfies Model<"openai-completions">,
"mistralai/ministral-14b-2512": { "mistralai/ministral-14b-2512": {
id: "mistralai/ministral-14b-2512", id: "mistralai/ministral-14b-2512",
name: "Mistral: Ministral 3 14B 2512", name: "Mistral: Ministral 3 14B 2512",
@@ -9671,23 +9638,6 @@ export const MODELS = {
contextWindow: 131072, contextWindow: 131072,
maxTokens: 4096, maxTokens: 4096,
} satisfies Model<"openai-completions">, } satisfies Model<"openai-completions">,
"mistralai/mistral-large-2411": {
id: "mistralai/mistral-large-2411",
name: "Mistral Large 2411",
api: "openai-completions",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: false,
input: ["text"],
cost: {
input: 2,
output: 6,
cacheRead: 0.19999999999999998,
cacheWrite: 0,
},
contextWindow: 131072,
maxTokens: 4096,
} satisfies Model<"openai-completions">,
"mistralai/mistral-large-2512": { "mistralai/mistral-large-2512": {
id: "mistralai/mistral-large-2512", id: "mistralai/mistral-large-2512",
name: "Mistral: Mistral Large 3 2512", name: "Mistral: Mistral Large 3 2512",
@@ -9841,23 +9791,6 @@ export const MODELS = {
contextWindow: 65536, contextWindow: 65536,
maxTokens: 4096, maxTokens: 4096,
} satisfies Model<"openai-completions">, } satisfies Model<"openai-completions">,
"mistralai/pixtral-large-2411": {
id: "mistralai/pixtral-large-2411",
name: "Mistral: Pixtral Large 2411",
api: "openai-completions",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: false,
input: ["text", "image"],
cost: {
input: 2,
output: 6,
cacheRead: 0.19999999999999998,
cacheWrite: 0,
},
contextWindow: 131072,
maxTokens: 4096,
} satisfies Model<"openai-completions">,
"mistralai/voxtral-small-24b-2507": { "mistralai/voxtral-small-24b-2507": {
id: "mistralai/voxtral-small-24b-2507", id: "mistralai/voxtral-small-24b-2507",
name: "Mistral: Voxtral Small 24B 2507", name: "Mistral: Voxtral Small 24B 2507",
@@ -12201,40 +12134,6 @@ export const MODELS = {
contextWindow: 262144, contextWindow: 262144,
maxTokens: 65536, maxTokens: 65536,
} satisfies Model<"openai-completions">, } satisfies Model<"openai-completions">,
"xiaomi/mimo-v2-omni": {
id: "xiaomi/mimo-v2-omni",
name: "Xiaomi: MiMo-V2-Omni",
api: "openai-completions",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: true,
input: ["text", "image"],
cost: {
input: 0.39999999999999997,
output: 2,
cacheRead: 0.08,
cacheWrite: 0,
},
contextWindow: 262144,
maxTokens: 65536,
} satisfies Model<"openai-completions">,
"xiaomi/mimo-v2-pro": {
id: "xiaomi/mimo-v2-pro",
name: "Xiaomi: MiMo-V2-Pro",
api: "openai-completions",
provider: "openrouter",
baseUrl: "https://openrouter.ai/api/v1",
reasoning: true,
input: ["text"],
cost: {
input: 1,
output: 3,
cacheRead: 0.19999999999999998,
cacheWrite: 0,
},
contextWindow: 1048576,
maxTokens: 131072,
} satisfies Model<"openai-completions">,
"xiaomi/mimo-v2.5": { "xiaomi/mimo-v2.5": {
id: "xiaomi/mimo-v2.5", id: "xiaomi/mimo-v2.5",
name: "Xiaomi: MiMo-V2.5", name: "Xiaomi: MiMo-V2.5",
@@ -13597,17 +13496,17 @@ export const MODELS = {
reasoning: false, reasoning: false,
input: ["text"], input: ["text"],
cost: { cost: {
input: 0.77, input: 0.27,
output: 0.77, output: 1.12,
cacheRead: 0, cacheRead: 0.135,
cacheWrite: 0, cacheWrite: 0,
}, },
contextWindow: 163840, contextWindow: 163840,
maxTokens: 16384, maxTokens: 163840,
} satisfies Model<"anthropic-messages">, } satisfies Model<"anthropic-messages">,
"deepseek/deepseek-v3.1": { "deepseek/deepseek-v3.1": {
id: "deepseek/deepseek-v3.1", id: "deepseek/deepseek-v3.1",
name: "DeepSeek-V3.1", name: "DeepSeek V3.1",
api: "anthropic-messages", api: "anthropic-messages",
provider: "vercel-ai-gateway", provider: "vercel-ai-gateway",
baseUrl: "https://ai-gateway.vercel.sh", baseUrl: "https://ai-gateway.vercel.sh",