(model: string)
| 3398 | } |
| 3399 | |
| 3400 | export function getMaxOutputTokensForModel(model: string): number { |
| 3401 | const maxOutputTokens = getModelMaxOutputTokens(model) |
| 3402 | |
| 3403 | // Slot-reservation cap: drop default to 8k for all models. BQ p99 output |
| 3404 | // = 4,911 tokens; 32k/64k defaults over-reserve 8-16× slot capacity. |
| 3405 | // Requests hitting the cap get one clean retry at 64k (query.ts |
| 3406 | // max_output_tokens_escalate). Math.min keeps models with lower native |
| 3407 | // defaults (e.g. claude-3-opus at 4k) at their native value. Applied |
| 3408 | // before the env-var override so CLAUDE_CODE_MAX_OUTPUT_TOKENS still wins. |
| 3409 | const defaultTokens = isMaxTokensCapEnabled() |
| 3410 | ? Math.min(maxOutputTokens.default, CAPPED_DEFAULT_MAX_TOKENS) |
| 3411 | : maxOutputTokens.default |
| 3412 | |
| 3413 | const result = validateBoundedIntEnvVar( |
| 3414 | 'CLAUDE_CODE_MAX_OUTPUT_TOKENS', |
| 3415 | process.env.CLAUDE_CODE_MAX_OUTPUT_TOKENS, |
| 3416 | defaultTokens, |
| 3417 | maxOutputTokens.upperLimit, |
| 3418 | ) |
| 3419 | return result.effective |
| 3420 | } |
no test coverage detected