Fix GPT-5 max_completion_tokens parameter detection
Build and Push Docker Image / build (push) Successful in 8m35s Details

GPT-5 and newer models require max_completion_tokens instead of max_tokens.
Added usesNewTokenParam() to detect GPT-5+ models separately from reasoning
model restrictions (temperature, json_object, system messages).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Matt 2026-02-03 13:08:01 +01:00
parent fd82a9b981
commit c0ce6f9f1f
1 changed files with 22 additions and 1 deletions

View File

@ -19,8 +19,15 @@ const globalForOpenAI = globalThis as unknown as {
*/ */
const REASONING_MODEL_PREFIXES = ['o1', 'o3', 'o4'] const REASONING_MODEL_PREFIXES = ['o1', 'o3', 'o4']
/**
* Models that use max_completion_tokens instead of max_tokens.
* This includes reasoning models AND newer GPT models (GPT-5+).
*/
const NEW_TOKEN_PARAM_PREFIXES = ['o1', 'o3', 'o4', 'gpt-5', 'gpt-6', 'gpt-7']
/** /**
* Check if a model is a reasoning model (o1, o3, o4 series) * Check if a model is a reasoning model (o1, o3, o4 series)
* These models have additional restrictions (no temperature, no json_object, etc.)
*/ */
export function isReasoningModel(model: string): boolean { export function isReasoningModel(model: string): boolean {
const modelLower = model.toLowerCase() const modelLower = model.toLowerCase()
@ -31,6 +38,19 @@ export function isReasoningModel(model: string): boolean {
) )
} }
/**
* Check if a model requires max_completion_tokens instead of max_tokens.
* This includes reasoning models AND newer GPT models (GPT-5+).
*/
export function usesNewTokenParam(model: string): boolean {
const modelLower = model.toLowerCase()
return NEW_TOKEN_PARAM_PREFIXES.some(prefix =>
modelLower.startsWith(prefix) ||
modelLower.includes(`/${prefix}`) ||
modelLower.includes(`-${prefix}`)
)
}
// ─── Chat Completion Parameter Builder ─────────────────────────────────────── // ─── Chat Completion Parameter Builder ───────────────────────────────────────
type MessageRole = 'system' | 'user' | 'assistant' | 'developer' type MessageRole = 'system' | 'user' | 'assistant' | 'developer'
@ -84,8 +104,9 @@ export function buildCompletionParams(
} }
// Token limit parameter differs between model types // Token limit parameter differs between model types
// Newer models (GPT-5+, o-series) use max_completion_tokens
if (options.maxTokens) { if (options.maxTokens) {
if (isReasoning) { if (usesNewTokenParam(model)) {
params.max_completion_tokens = options.maxTokens params.max_completion_tokens = options.maxTokens
} else { } else {
params.max_tokens = options.maxTokens params.max_tokens = options.maxTokens