{"record":{"id":"31ce32dc48cee0b3","repo":"DayuanJiang/next-ai-draw-io","slug":"varname-must-be-a-valid-integer-got-value","errorCode":null,"errorMessage":"${varName} must be a valid integer, got: ${value}","messagePattern":"(.+?) must be a valid integer, got: (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"lib/ai-providers.ts","lineNumber":229,"sourceCode":"    defaultEnvVar: string,\n): string | undefined {\n    if (overrides?.baseUrlEnv) return process.env[overrides.baseUrlEnv]\n    return process.env[defaultEnvVar]\n}\n\n/**\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)","sourceCodeStart":211,"sourceCodeEnd":247,"githubUrl":"https://github.com/DayuanJiang/next-ai-draw-io/blob/155ef4f7acd29c9d46fb6fc35c92e6e6955a6ce1/lib/ai-providers.ts#L211-L247","documentation":"parseIntSafe parses provider option env vars (thinking budget, topK, candidateCount, budgetTokens); a value present but not parseable as base-10 integer throws with the var name and raw value.","triggerScenarios":"Setting an env var like THINKING_BUDGET_TOKENS or GOOGLE_TOP_K to a non-integer string such as 'auto', '1.5', or '' with whitespace.","commonSituations":"Copy-pasting config from provider docs where values are decimal or text, trailing spaces/units in .env.local, or shell quoting mistakes.","solutions":["Set the env var to a plain integer (e.g. GOOGLE_TOP_K=40)","Remove quotes, spaces, units, and decimals from the value","Comment out or delete the variable if you don't need the option"],"exampleFix":"# before\nTHINKING_BUDGET_TOKENS=\"1.5k\"\n\n# after\nTHINKING_BUDGET_TOKENS=1500","handlingStrategy":"validation","validationCode":"const isIntString = (v?: string) =>\n  v === undefined || (/^-?\\d+$/.test(v.trim()))","typeGuard":"const isParsableInt = (v: string): boolean => /^-?\\d+$/.test(v.trim())","tryCatchPattern":"try { buildProviderOptions() } catch (e) { failFastConfig((e as Error).message) } // message names the exact env var","preventionTips":["Lint .env.local for integer fields before boot","Avoid decimals/units in numeric env vars","Keep a documented .env.example with valid sample values"],"tags":["env-var","validation","integer","configuration"],"backgroundTag":"invalid-env-var-value","analyzedSha":"155ef4f7acd29c9d46fb6fc35c92e6e6955a6ce1","analyzedAt":"2026-08-27T11:40:38.297Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}