DayuanJiang/next-ai-draw-io · error · Error

${varName} must be <= ${max}, got: ${parsed}

Error message

${varName} must be <= ${max}, got: ${parsed}

What it means

parseIntSafe enforces an optional upper bound; a parsed integer above max (e.g. candidateCount above provider limits, budgetTokens above cap) throws with the variable name and limit.

Source

Thrown at lib/ai-providers.ts:235

/**
 * Safely parse integer from environment variable with validation
 */
function parseIntSafe(
    value: string | undefined,
    varName: string,
    min?: number,
    max?: number,
): number | undefined {
    if (!value) return undefined
    const parsed = Number.parseInt(value, 10)
    if (Number.isNaN(parsed)) {
        throw new Error(`${varName} must be a valid integer, got: ${value}`)
    }
    if (min !== undefined && parsed < min) {
        throw new Error(`${varName} must be >= ${min}, got: ${parsed}`)
    }
    if (max !== undefined && parsed > max) {
        throw new Error(`${varName} must be <= ${max}, got: ${parsed}`)
    }
    return parsed
}

/**
 * Build provider-specific options from environment variables
 * Supports various AI SDK providers with their unique configuration options
 *
 * Environment variables:
 * - OPENAI_REASONING_EFFORT: OpenAI reasoning effort level (minimal/low/medium/high) - for o1/o3/o4/gpt-5
 * - OPENAI_REASONING_SUMMARY: OpenAI reasoning summary (auto/detailed) - auto-enabled for o1/o3/o4/gpt-5
 * - ANTHROPIC_THINKING_BUDGET_TOKENS: Anthropic thinking budget in tokens (1024-64000)
 * - ANTHROPIC_THINKING_TYPE: Anthropic thinking type (enabled)
 * - GOOGLE_THINKING_BUDGET: Google Gemini 2.5 thinking budget in tokens (1024-100000)
 * - GOOGLE_THINKING_LEVEL: Google Gemini 3 thinking level (low/high)
 * - GOOGLE_VERTEX_THINKING_BUDGET: Vertex AI Gemini 2.5 thinking budget in tokens (1024-100000)
 * - GOOGLE_VERTEX_THINKING_LEVEL: Vertex AI Gemini 3 thinking level (low/high)
 * - AZURE_REASONING_EFFORT: Azure/OpenAI reasoning effort (low/medium/high)

View on GitHub (pinned to 155ef4f7ac)

Solutions

  1. Lower the value to within the max stated in the error message
  2. Check the provider's current API docs for the latest allowed range
  3. Omit the env var to use the provider default

Example fix

# before
CANDIDATE_COUNT=10

# after
CANDIDATE_COUNT=8
Defensive patterns

Strategy: validation

Validate before calling

const underMax = (v: string, max: number) => (Number.parseInt(v, 10) || 0) <= max

Type guard

const isWithinMax = (v: string, max: number): boolean => { const n = Number.parseInt(v, 10); return !Number.isNaN(n) && n <= max }

Try / catch

try { ... } catch (e) { if ((e as Error).message.includes('must be <=')) lowerValueFromMessage(e) }

Prevention

When it happens

Trigger: Setting CANDIDATE_COUNT=10 when max is 8, or a thinking budget token count above the provider's cap.

Common situations: Tuning values beyond provider limits, copying max values from a different provider's docs, provider lowered limits in a new API version.

Related errors


AI-assisted analysis of DayuanJiang/next-ai-draw-io@155ef4f7ac (2026-08-27). Data as JSON: /api/errors/0f67dadd3327d0cd. Report an issue: GitHub.