(model: string)
| 3424 | } |
| 3425 | |
| 3426 | export function getMaxOutputTokensForModel(model: string): number { |
| 3427 | const maxOutputTokens = getModelMaxOutputTokens(model) |
| 3428 | |
| 3429 | // Slot-reservation cap: drop default to 8k for all models. BQ p99 output |
| 3430 | // = 4,911 tokens; 32k/64k defaults over-reserve 8-16× slot capacity. |
| 3431 | // Requests hitting the cap get one clean retry at 64k (query.ts |
| 3432 | // max_output_tokens_escalate). Math.min keeps models with lower native |
| 3433 | // defaults (e.g. claude-3-opus at 4k) at their native value. Applied |
| 3434 | // before the env-var override so CLAUDE_CODE_MAX_OUTPUT_TOKENS still wins. |
| 3435 | const defaultTokens = isMaxTokensCapEnabled() |
| 3436 | ? Math.min(maxOutputTokens.default, CAPPED_DEFAULT_MAX_TOKENS) |
| 3437 | : maxOutputTokens.default |
| 3438 | |
| 3439 | const result = validateBoundedIntEnvVar( |
| 3440 | 'CLAUDE_CODE_MAX_OUTPUT_TOKENS', |
| 3441 | process.env.CLAUDE_CODE_MAX_OUTPUT_TOKENS, |
| 3442 | defaultTokens, |
| 3443 | maxOutputTokens.upperLimit, |
| 3444 | ) |
| 3445 | return result.effective |
| 3446 | } |
no test coverage detected