@ai-sdk/anthropic 4.0.92 → 4.0.93

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2410,6 +2410,8 @@ and the `mediaType` should be set to `'application/pdf'`.
2410
2410
 
2411
2411
  ### Model Capabilities
2412
2412
 
2413
+ {/* model-capabilities:anthropic-language:start */}
2414
+
2413
2415
  | Model | Image Input | Object Generation | Tool Usage | Computer Use | Web Search | Tool Search | Compaction |
2414
2416
  | ------------------- | ----------- | ----------------- | ---------- | ------------ | ---------- | ----------- | ---------- |
2415
2417
  | `claude-opus-5-5` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> |
@@ -2422,13 +2424,15 @@ and the `mediaType` should be set to `'application/pdf'`.
2422
2424
  | `claude-opus-4-8` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> |
2423
2425
  | `claude-opus-4-7` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> |
2424
2426
  | `claude-opus-4-6` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> |
2425
- | `claude-sonnet-4-6` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | |
2426
- | `claude-opus-4-5` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | |
2427
- | `claude-haiku-4-5` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | | |
2428
- | `claude-sonnet-4-5` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | |
2429
- | `claude-opus-4-1` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | | |
2430
- | `claude-opus-4-0` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | | |
2431
- | `claude-sonnet-4-0` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | | |
2427
+ | `claude-sonnet-4-6` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> |
2428
+ | `claude-opus-4-5` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Cross /> |
2429
+ | `claude-haiku-4-5` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Cross /> |
2430
+ | `claude-sonnet-4-5` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Cross /> |
2431
+ | `claude-opus-4-1` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Cross /> | <Cross /> |
2432
+ | `claude-opus-4-0` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Cross /> | <Cross /> |
2433
+ | `claude-sonnet-4-0` | <Check /> | <Check /> | <Check /> | <Check /> | <Check /> | <Cross /> | <Cross /> |
2434
+
2435
+ {/* model-capabilities:anthropic-language:end */}
2432
2436
 
2433
2437
  <Note>
2434
2438
  The table above lists popular models. Please see the [Anthropic
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/anthropic",
3
- "version": "4.0.92",
3
+ "version": "4.0.93",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -35,8 +35,8 @@
35
35
  }
36
36
  },
37
37
  "dependencies": {
38
- "@ai-sdk/provider": "4.0.34",
39
- "@ai-sdk/provider-utils": "5.0.71"
38
+ "@ai-sdk/provider": "4.0.35",
39
+ "@ai-sdk/provider-utils": "5.0.72"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@ai-sdk/test-server": "2.0.4",
@@ -42,6 +42,7 @@ import {
42
42
  type Resolvable,
43
43
  } from '@ai-sdk/provider-utils';
44
44
  import { anthropicFailedResponseHandler } from './anthropic-error';
45
+ import { getAnthropicModelCapabilities } from './anthropic-model-catalog';
45
46
  import type {
46
47
  AnthropicMessageMetadata,
47
48
  AnthropicUsageIteration,
@@ -435,7 +436,7 @@ export class AnthropicLanguageModel implements LanguageModelV4 {
435
436
  rejectsForcedToolUse,
436
437
  supportsBetweenToolsThinking,
437
438
  isKnownModel,
438
- } = getModelCapabilities(modelId);
439
+ } = getAnthropicModelCapabilities(modelId);
439
440
 
440
441
  if (!isKnownModel && maxOutputTokens == null) {
441
442
  warnings.push({
@@ -3328,285 +3329,7 @@ export class AnthropicLanguageModel implements LanguageModelV4 {
3328
3329
  }
3329
3330
  }
3330
3331
 
3331
- /**
3332
- * Returns the capabilities of a Claude model that are used for defaults and feature selection.
3333
- *
3334
- * @see https://docs.claude.com/en/docs/about-claude/models/overview#model-comparison-table
3335
- * @see https://platform.claude.com/docs/en/build-with-claude/structured-outputs
3336
- */
3337
- export function getModelCapabilities(modelId: string): {
3338
- maxOutputTokens: number;
3339
- supportsStructuredOutput: boolean;
3340
- supportsAdaptiveThinking: boolean;
3341
- rejectsSamplingParameters: boolean;
3342
- supportsXhighEffort: boolean;
3343
- rejectsThinkingDisabledAboveHighEffort: boolean;
3344
- /**
3345
- * Thinking is always adaptive: `thinking.type` `disabled` and `enabled`
3346
- * are rejected with a 400.
3347
- */
3348
- rejectsThinkingDisabled: boolean;
3349
- /**
3350
- * Budget-based thinking (`thinking.type` `enabled` with `budget_tokens`) is
3351
- * rejected with a 400. Only adaptive thinking is supported.
3352
- */
3353
- rejectsBudgetThinking: boolean;
3354
- /**
3355
- * Forced tool use (`tool_choice` `any` or a named tool) is rejected with a 400.
3356
- */
3357
- rejectsForcedToolUse: boolean;
3358
- /**
3359
- * Supports `thinking.type` `between_tools`, the lowest thinking setting on
3360
- * models that reject disabled thinking.
3361
- */
3362
- supportsBetweenToolsThinking: boolean;
3363
- isKnownModel: boolean;
3364
- } {
3365
- if (modelId.includes('claude-sonnet-5-5')) {
3366
- return {
3367
- maxOutputTokens: 128000,
3368
- supportsStructuredOutput: true,
3369
- supportsAdaptiveThinking: true,
3370
- rejectsSamplingParameters: true,
3371
- supportsXhighEffort: true,
3372
- rejectsThinkingDisabledAboveHighEffort: true,
3373
- rejectsThinkingDisabled: true,
3374
- rejectsBudgetThinking: true,
3375
- rejectsForcedToolUse: true,
3376
- supportsBetweenToolsThinking: true,
3377
- isKnownModel: true,
3378
- };
3379
- } else if (modelId.includes('claude-opus-5-5')) {
3380
- return {
3381
- maxOutputTokens: 128000,
3382
- supportsStructuredOutput: true,
3383
- supportsAdaptiveThinking: true,
3384
- rejectsSamplingParameters: true,
3385
- supportsXhighEffort: true,
3386
- rejectsThinkingDisabledAboveHighEffort: true,
3387
- rejectsThinkingDisabled: true,
3388
- rejectsBudgetThinking: true,
3389
- rejectsForcedToolUse: true,
3390
- supportsBetweenToolsThinking: false,
3391
- isKnownModel: true,
3392
- };
3393
- } else if (modelId.includes('claude-haiku-5-5')) {
3394
- // Thinking can be turned off, but only up to `high` effort.
3395
- return {
3396
- maxOutputTokens: 128000,
3397
- supportsStructuredOutput: true,
3398
- supportsAdaptiveThinking: true,
3399
- rejectsSamplingParameters: true,
3400
- supportsXhighEffort: true,
3401
- rejectsThinkingDisabledAboveHighEffort: true,
3402
- rejectsThinkingDisabled: false,
3403
- rejectsBudgetThinking: true,
3404
- rejectsForcedToolUse: false,
3405
- supportsBetweenToolsThinking: false,
3406
- isKnownModel: true,
3407
- };
3408
- } else if (modelId.includes('claude-opus-5')) {
3409
- return {
3410
- maxOutputTokens: 128000,
3411
- supportsStructuredOutput: true,
3412
- supportsAdaptiveThinking: true,
3413
- rejectsSamplingParameters: true,
3414
- supportsXhighEffort: true,
3415
- rejectsThinkingDisabledAboveHighEffort: true,
3416
- rejectsThinkingDisabled: false,
3417
- rejectsBudgetThinking: false,
3418
- rejectsForcedToolUse: false,
3419
- supportsBetweenToolsThinking: false,
3420
- isKnownModel: true,
3421
- };
3422
- } else if (modelId.includes('claude-fable-5-1')) {
3423
- return {
3424
- maxOutputTokens: 128000,
3425
- supportsStructuredOutput: true,
3426
- supportsAdaptiveThinking: true,
3427
- rejectsSamplingParameters: true,
3428
- supportsXhighEffort: true,
3429
- rejectsThinkingDisabledAboveHighEffort: false,
3430
- rejectsThinkingDisabled: true,
3431
- rejectsBudgetThinking: true,
3432
- rejectsForcedToolUse: true,
3433
- supportsBetweenToolsThinking: false,
3434
- isKnownModel: true,
3435
- };
3436
- } else if (modelId.includes('claude-fable-5')) {
3437
- return {
3438
- maxOutputTokens: 128000,
3439
- supportsStructuredOutput: true,
3440
- supportsAdaptiveThinking: true,
3441
- rejectsSamplingParameters: true,
3442
- supportsXhighEffort: true,
3443
- rejectsThinkingDisabledAboveHighEffort: false,
3444
- rejectsThinkingDisabled: true,
3445
- rejectsBudgetThinking: true,
3446
- rejectsForcedToolUse: false,
3447
- supportsBetweenToolsThinking: false,
3448
- isKnownModel: true,
3449
- };
3450
- } else if (
3451
- modelId.includes('claude-opus-4-8') ||
3452
- modelId.includes('claude-opus-4-7') ||
3453
- modelId.includes('claude-sonnet-5')
3454
- ) {
3455
- return {
3456
- maxOutputTokens: 128000,
3457
- supportsStructuredOutput: true,
3458
- supportsAdaptiveThinking: true,
3459
- rejectsSamplingParameters: true,
3460
- supportsXhighEffort: true,
3461
- rejectsThinkingDisabledAboveHighEffort: false,
3462
- rejectsThinkingDisabled: false,
3463
- rejectsBudgetThinking: false,
3464
- rejectsForcedToolUse: false,
3465
- supportsBetweenToolsThinking: false,
3466
- isKnownModel: true,
3467
- };
3468
- } else if (
3469
- modelId.includes('claude-sonnet-4-6') ||
3470
- modelId.includes('claude-opus-4-6')
3471
- ) {
3472
- return {
3473
- maxOutputTokens: 128000,
3474
- supportsStructuredOutput: true,
3475
- supportsAdaptiveThinking: true,
3476
- rejectsSamplingParameters: false,
3477
- supportsXhighEffort: false,
3478
- rejectsThinkingDisabledAboveHighEffort: false,
3479
- rejectsThinkingDisabled: false,
3480
- rejectsBudgetThinking: false,
3481
- rejectsForcedToolUse: false,
3482
- supportsBetweenToolsThinking: false,
3483
- isKnownModel: true,
3484
- };
3485
- } else if (
3486
- modelId.includes('claude-sonnet-4-5') ||
3487
- modelId.includes('claude-opus-4-5') ||
3488
- modelId.includes('claude-haiku-4-5')
3489
- ) {
3490
- return {
3491
- maxOutputTokens: 64000,
3492
- supportsStructuredOutput: true,
3493
- supportsAdaptiveThinking: false,
3494
- rejectsSamplingParameters: false,
3495
- supportsXhighEffort: false,
3496
- rejectsThinkingDisabledAboveHighEffort: false,
3497
- rejectsThinkingDisabled: false,
3498
- rejectsBudgetThinking: false,
3499
- rejectsForcedToolUse: false,
3500
- supportsBetweenToolsThinking: false,
3501
- isKnownModel: true,
3502
- };
3503
- } else if (modelId.includes('claude-opus-4-1')) {
3504
- return {
3505
- maxOutputTokens: 32000,
3506
- supportsStructuredOutput: true,
3507
- supportsAdaptiveThinking: false,
3508
- rejectsSamplingParameters: false,
3509
- supportsXhighEffort: false,
3510
- rejectsThinkingDisabledAboveHighEffort: false,
3511
- rejectsThinkingDisabled: false,
3512
- rejectsBudgetThinking: false,
3513
- rejectsForcedToolUse: false,
3514
- supportsBetweenToolsThinking: false,
3515
- isKnownModel: true,
3516
- };
3517
- } else if (/claude-sonnet-4(?:-|@)/.test(modelId)) {
3518
- return {
3519
- maxOutputTokens: 64000,
3520
- supportsStructuredOutput: false,
3521
- supportsAdaptiveThinking: false,
3522
- rejectsSamplingParameters: false,
3523
- supportsXhighEffort: false,
3524
- rejectsThinkingDisabledAboveHighEffort: false,
3525
- rejectsThinkingDisabled: false,
3526
- rejectsBudgetThinking: false,
3527
- rejectsForcedToolUse: false,
3528
- supportsBetweenToolsThinking: false,
3529
- isKnownModel: true,
3530
- };
3531
- } else if (/claude-opus-4(?:-|@)/.test(modelId)) {
3532
- return {
3533
- maxOutputTokens: 32000,
3534
- supportsStructuredOutput: false,
3535
- supportsAdaptiveThinking: false,
3536
- rejectsSamplingParameters: false,
3537
- supportsXhighEffort: false,
3538
- rejectsThinkingDisabledAboveHighEffort: false,
3539
- rejectsThinkingDisabled: false,
3540
- rejectsBudgetThinking: false,
3541
- rejectsForcedToolUse: false,
3542
- supportsBetweenToolsThinking: false,
3543
- isKnownModel: true,
3544
- };
3545
- } else if (modelId.includes('claude-3-haiku')) {
3546
- return {
3547
- maxOutputTokens: 4096,
3548
- supportsStructuredOutput: false,
3549
- supportsAdaptiveThinking: false,
3550
- rejectsSamplingParameters: false,
3551
- supportsXhighEffort: false,
3552
- rejectsThinkingDisabledAboveHighEffort: false,
3553
- rejectsThinkingDisabled: false,
3554
- rejectsBudgetThinking: false,
3555
- rejectsForcedToolUse: false,
3556
- supportsBetweenToolsThinking: false,
3557
- isKnownModel: true,
3558
- };
3559
- } else if (
3560
- /claude-(?:instant(?:-|$)|v?2(?=$|[-.:])|3(?=$|[-.]))/.test(modelId)
3561
- ) {
3562
- return {
3563
- maxOutputTokens: 4096,
3564
- supportsStructuredOutput: false,
3565
- supportsAdaptiveThinking: false,
3566
- rejectsSamplingParameters: false,
3567
- supportsXhighEffort: false,
3568
- rejectsThinkingDisabledAboveHighEffort: false,
3569
- rejectsThinkingDisabled: false,
3570
- rejectsBudgetThinking: false,
3571
- rejectsForcedToolUse: false,
3572
- supportsBetweenToolsThinking: false,
3573
- isKnownModel: false,
3574
- };
3575
- } else if (modelId.includes('claude-')) {
3576
- // Known and legacy Claude families are handled above, so any remaining
3577
- // Claude ID is assumed to be newer than the known list. Keep it unknown so
3578
- // callers still receive the maxOutputTokens compatibility warning.
3579
- return {
3580
- maxOutputTokens: 128000,
3581
- supportsStructuredOutput: true,
3582
- supportsAdaptiveThinking: true,
3583
- rejectsSamplingParameters: true,
3584
- supportsXhighEffort: true,
3585
- rejectsThinkingDisabledAboveHighEffort: true,
3586
- rejectsThinkingDisabled: false,
3587
- rejectsBudgetThinking: false,
3588
- rejectsForcedToolUse: false,
3589
- supportsBetweenToolsThinking: false,
3590
- isKnownModel: false,
3591
- };
3592
- } else {
3593
- // Non-Claude models (e.g. served through Anthropic-compatible APIs)
3594
- // keep conservative defaults.
3595
- return {
3596
- maxOutputTokens: 4096,
3597
- supportsStructuredOutput: false,
3598
- supportsAdaptiveThinking: false,
3599
- rejectsSamplingParameters: false,
3600
- supportsXhighEffort: false,
3601
- rejectsThinkingDisabledAboveHighEffort: false,
3602
- rejectsThinkingDisabled: false,
3603
- rejectsBudgetThinking: false,
3604
- rejectsForcedToolUse: false,
3605
- supportsBetweenToolsThinking: false,
3606
- isKnownModel: false,
3607
- };
3608
- }
3609
- }
3332
+ export { getAnthropicModelCapabilities as getModelCapabilities } from './anthropic-model-catalog';
3610
3333
 
3611
3334
  export function hasDynamicFilteringWebToolWithoutCodeExecution(
3612
3335
  tools: AnthropicTool[] | undefined,