(model: string)
| 161 | * Returns the model's default and upper limit for max output tokens. |
| 162 | */ |
| 163 | export function getModelMaxOutputTokens(model: string): { |
| 164 | default: number |
| 165 | upperLimit: number |
| 166 | } { |
| 167 | let defaultTokens: number |
| 168 | let upperLimit: number |
| 169 | |
| 170 | const ncodeModel = resolveNCodeManagedModel(model) |
| 171 | if (ncodeModel) { |
| 172 | return { |
| 173 | default: ncodeModel.defaultMaxTokens, |
| 174 | upperLimit: ncodeModel.upperMaxTokensLimit, |
| 175 | } |
| 176 | } |
| 177 | |
| 178 | if (isInternalBuild()) { |
| 179 | const antModel = resolveAntModel(model.toLowerCase()) |
| 180 | if (antModel) { |
| 181 | defaultTokens = antModel.defaultMaxTokens ?? MAX_OUTPUT_TOKENS_DEFAULT |
| 182 | upperLimit = antModel.upperMaxTokensLimit ?? MAX_OUTPUT_TOKENS_UPPER_LIMIT |
| 183 | return { default: defaultTokens, upperLimit } |
| 184 | } |
| 185 | } |
| 186 | |
| 187 | const m = getCanonicalName(model) |
| 188 | |
| 189 | if (m.includes('opus-4-6')) { |
| 190 | defaultTokens = 64_000 |
| 191 | upperLimit = 128_000 |
| 192 | } else if (m.includes('sonnet-4-6')) { |
| 193 | defaultTokens = 32_000 |
| 194 | upperLimit = 128_000 |
| 195 | } else if ( |
| 196 | m.includes('opus-4-5') || |
| 197 | m.includes('sonnet-4') || |
| 198 | m.includes('haiku-4') |
| 199 | ) { |
| 200 | defaultTokens = 32_000 |
| 201 | upperLimit = 64_000 |
| 202 | } else if (m.includes('opus-4-1') || m.includes('opus-4')) { |
| 203 | defaultTokens = 32_000 |
| 204 | upperLimit = 32_000 |
| 205 | } else if (m.includes('claude-3-opus')) { |
| 206 | defaultTokens = 4_096 |
| 207 | upperLimit = 4_096 |
| 208 | } else if (m.includes('claude-3-sonnet')) { |
| 209 | defaultTokens = 8_192 |
| 210 | upperLimit = 8_192 |
| 211 | } else if (m.includes('claude-3-haiku')) { |
| 212 | defaultTokens = 4_096 |
| 213 | upperLimit = 4_096 |
| 214 | } else if (m.includes('3-5-sonnet') || m.includes('3-5-haiku')) { |
| 215 | defaultTokens = 8_192 |
| 216 | upperLimit = 8_192 |
| 217 | } else if (m.includes('3-7-sonnet')) { |
| 218 | defaultTokens = 32_000 |
| 219 | upperLimit = 64_000 |
| 220 | } else { |
no test coverage detected