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
- Lower the value to within the max stated in the error message
- Check the provider's current API docs for the latest allowed range
- 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
- Keep provider limits in one config table and validate env against it
- Re-check numeric env vars after provider API version upgrades
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
- ${varName} must be >= ${min}, got: ${parsed}
- ${varName} must be a valid integer, got: ${value}
- GOOGLE_TOP_P must be a number between 0 and 1, got: ${proces
- At least one of [${customApiKeyEnv.join(", ")}] environment
- Either ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN environment
AI-assisted analysis of DayuanJiang/next-ai-draw-io@155ef4f7ac (2026-08-27).
Data as JSON: /api/errors/0f67dadd3327d0cd.
Report an issue: GitHub.