{"record":{"id":"0f67dadd3327d0cd","repo":"DayuanJiang/next-ai-draw-io","slug":"varname-must-be-max-got-parsed","errorCode":null,"errorMessage":"${varName} must be <= ${max}, got: ${parsed}","messagePattern":"(.+?) must be <= (.+?), got: (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"lib/ai-providers.ts","lineNumber":235,"sourceCode":"/**\n * Safely parse integer from environment variable with validation\n */\nfunction parseIntSafe(\n    value: string | undefined,\n    varName: string,\n    min?: number,\n    max?: number,\n): number | undefined {\n    if (!value) return undefined\n    const parsed = Number.parseInt(value, 10)\n    if (Number.isNaN(parsed)) {\n        throw new Error(`${varName} must be a valid integer, got: ${value}`)\n    }\n    if (min !== undefined && parsed < min) {\n        throw new Error(`${varName} must be >= ${min}, got: ${parsed}`)\n    }\n    if (max !== undefined && parsed > max) {\n        throw new Error(`${varName} must be <= ${max}, got: ${parsed}`)\n    }\n    return parsed\n}\n\n/**\n * Build provider-specific options from environment variables\n * Supports various AI SDK providers with their unique configuration options\n *\n * Environment variables:\n * - OPENAI_REASONING_EFFORT: OpenAI reasoning effort level (minimal/low/medium/high) - for o1/o3/o4/gpt-5\n * - OPENAI_REASONING_SUMMARY: OpenAI reasoning summary (auto/detailed) - auto-enabled for o1/o3/o4/gpt-5\n * - ANTHROPIC_THINKING_BUDGET_TOKENS: Anthropic thinking budget in tokens (1024-64000)\n * - ANTHROPIC_THINKING_TYPE: Anthropic thinking type (enabled)\n * - GOOGLE_THINKING_BUDGET: Google Gemini 2.5 thinking budget in tokens (1024-100000)\n * - GOOGLE_THINKING_LEVEL: Google Gemini 3 thinking level (low/high)\n * - GOOGLE_VERTEX_THINKING_BUDGET: Vertex AI Gemini 2.5 thinking budget in tokens (1024-100000)\n * - GOOGLE_VERTEX_THINKING_LEVEL: Vertex AI Gemini 3 thinking level (low/high)\n * - AZURE_REASONING_EFFORT: Azure/OpenAI reasoning effort (low/medium/high)","sourceCodeStart":217,"sourceCodeEnd":253,"githubUrl":"https://github.com/DayuanJiang/next-ai-draw-io/blob/155ef4f7acd29c9d46fb6fc35c92e6e6955a6ce1/lib/ai-providers.ts#L217-L253","documentation":"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.","triggerScenarios":"Setting CANDIDATE_COUNT=10 when max is 8, or a thinking budget token count above the provider's cap.","commonSituations":"Tuning values beyond provider limits, copying max values from a different provider's docs, provider lowered limits in a new API version.","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"],"exampleFix":"# before\nCANDIDATE_COUNT=10\n\n# after\nCANDIDATE_COUNT=8","handlingStrategy":"validation","validationCode":"const underMax = (v: string, max: number) => (Number.parseInt(v, 10) || 0) <= max","typeGuard":"const isWithinMax = (v: string, max: number): boolean => { const n = Number.parseInt(v, 10); return !Number.isNaN(n) && n <= max }","tryCatchPattern":"try { ... } catch (e) { if ((e as Error).message.includes('must be <=')) lowerValueFromMessage(e) }","preventionTips":["Keep provider limits in one config table and validate env against it","Re-check numeric env vars after provider API version upgrades"],"tags":["env-var","validation","range","configuration"],"backgroundTag":"invalid-env-var-value","analyzedSha":"155ef4f7acd29c9d46fb6fc35c92e6e6955a6ce1","analyzedAt":"2026-08-27T11:40:38.297Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}