(model: string)
| 3558 | } |
| 3559 | |
| 3560 | export function getMaxOutputTokensForModel(model: string): number { |
| 3561 | const maxOutputTokens = getModelMaxOutputTokens(model) |
| 3562 | |
| 3563 | // Slot-reservation cap: drop default to 8k for all models. BQ p99 output |
| 3564 | // = 4,911 tokens; 32k/64k defaults over-reserve 8-16× slot capacity. |
| 3565 | // Requests hitting the cap get one clean retry at 64k (query.ts |
| 3566 | // max_output_tokens_escalate). Math.min keeps models with lower native |
| 3567 | // defaults (e.g. claude-3-opus at 4k) at their native value. Applied |
| 3568 | // before the env-var override so CLAUDE_CODE_MAX_OUTPUT_TOKENS still wins. |
| 3569 | const defaultTokens = isMaxTokensCapEnabled() |
| 3570 | ? Math.min(maxOutputTokens.default, CAPPED_DEFAULT_MAX_TOKENS) |
| 3571 | : maxOutputTokens.default |
| 3572 | |
| 3573 | const result = validateBoundedIntEnvVar( |
| 3574 | 'CLAUDE_CODE_MAX_OUTPUT_TOKENS', |
| 3575 | process.env.CLAUDE_CODE_MAX_OUTPUT_TOKENS, |
| 3576 | defaultTokens, |
| 3577 | maxOutputTokens.upperLimit, |
| 3578 | ) |
| 3579 | return result.effective |
| 3580 | } |
no test coverage detected