@ai-sdk/anthropic 3.0.26 → 3.0.28

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/anthropic",
3
- "version": "3.0.26",
3
+ "version": "3.0.28",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -152,6 +152,16 @@ export class AnthropicMessagesLanguageModel implements LanguageModelV3 {
152
152
  return this.config.provider;
153
153
  }
154
154
 
155
+ /**
156
+ * Extracts the dynamic provider name from the config.provider string.
157
+ * e.g., 'my-custom-anthropic.messages' -> 'my-custom-anthropic'
158
+ */
159
+ private get providerOptionsName(): string {
160
+ const provider = this.config.provider;
161
+ const dotIndex = provider.indexOf('.');
162
+ return dotIndex === -1 ? provider : provider.substring(0, dotIndex);
163
+ }
164
+
155
165
  get supportedUrls() {
156
166
  return this.config.supportedUrls?.() ?? {};
157
167
  }
@@ -218,12 +228,34 @@ export class AnthropicMessagesLanguageModel implements LanguageModelV3 {
218
228
  }
219
229
  }
220
230
 
221
- const anthropicOptions = await parseProviderOptions({
231
+ const providerOptionsName = this.providerOptionsName;
232
+
233
+ // Parse provider options from both canonical 'anthropic' key and custom key
234
+ const canonicalOptions = await parseProviderOptions({
222
235
  provider: 'anthropic',
223
236
  providerOptions,
224
237
  schema: anthropicProviderOptions,
225
238
  });
226
239
 
240
+ const customProviderOptions =
241
+ providerOptionsName !== 'anthropic'
242
+ ? await parseProviderOptions({
243
+ provider: providerOptionsName,
244
+ providerOptions,
245
+ schema: anthropicProviderOptions,
246
+ })
247
+ : null;
248
+
249
+ // Track if custom key was explicitly used
250
+ const usedCustomProviderKey = customProviderOptions != null;
251
+
252
+ // Merge options
253
+ const anthropicOptions = Object.assign(
254
+ {},
255
+ canonicalOptions ?? {},
256
+ customProviderOptions ?? {},
257
+ );
258
+
227
259
  const {
228
260
  maxOutputTokens: maxOutputTokensForModel,
229
261
  supportsStructuredOutput: modelSupportsStructuredOutput,
@@ -567,6 +599,8 @@ export class AnthropicMessagesLanguageModel implements LanguageModelV3 {
567
599
  betas: new Set([...betas, ...toolsBetas, ...userSuppliedBetas]),
568
600
  usesJsonResponseTool: jsonResponseTool != null,
569
601
  toolNameMapping,
602
+ providerOptionsName,
603
+ usedCustomProviderKey,
570
604
  };
571
605
  }
572
606
 
@@ -659,12 +693,19 @@ export class AnthropicMessagesLanguageModel implements LanguageModelV3 {
659
693
  async doGenerate(
660
694
  options: LanguageModelV3CallOptions,
661
695
  ): Promise<LanguageModelV3GenerateResult> {
662
- const { args, warnings, betas, usesJsonResponseTool, toolNameMapping } =
663
- await this.getArgs({
664
- ...options,
665
- stream: false,
666
- userSuppliedBetas: await this.getBetasFromHeaders(options.headers),
667
- });
696
+ const {
697
+ args,
698
+ warnings,
699
+ betas,
700
+ usesJsonResponseTool,
701
+ toolNameMapping,
702
+ providerOptionsName,
703
+ usedCustomProviderKey,
704
+ } = await this.getArgs({
705
+ ...options,
706
+ stream: false,
707
+ userSuppliedBetas: await this.getBetasFromHeaders(options.headers),
708
+ });
668
709
 
669
710
  // Extract citation documents for response processing
670
711
  const citationDocuments = [
@@ -1051,8 +1092,8 @@ export class AnthropicMessagesLanguageModel implements LanguageModelV3 {
1051
1092
  body: rawResponse,
1052
1093
  },
1053
1094
  warnings,
1054
- providerMetadata: {
1055
- anthropic: {
1095
+ providerMetadata: (() => {
1096
+ const anthropicMetadata = {
1056
1097
  usage: response.usage as JSONObject,
1057
1098
  cacheCreationInputTokens:
1058
1099
  response.usage.cache_creation_input_tokens ?? null,
@@ -1073,8 +1114,18 @@ export class AnthropicMessagesLanguageModel implements LanguageModelV3 {
1073
1114
  mapAnthropicResponseContextManagement(
1074
1115
  response.context_management,
1075
1116
  ) ?? null,
1076
- } satisfies AnthropicMessageMetadata,
1077
- },
1117
+ } satisfies AnthropicMessageMetadata;
1118
+
1119
+ const providerMetadata: SharedV3ProviderMetadata = {
1120
+ anthropic: anthropicMetadata,
1121
+ };
1122
+
1123
+ if (usedCustomProviderKey && providerOptionsName !== 'anthropic') {
1124
+ providerMetadata[providerOptionsName] = anthropicMetadata;
1125
+ }
1126
+
1127
+ return providerMetadata;
1128
+ })(),
1078
1129
  };
1079
1130
  }
1080
1131
 
@@ -1087,6 +1138,8 @@ export class AnthropicMessagesLanguageModel implements LanguageModelV3 {
1087
1138
  betas,
1088
1139
  usesJsonResponseTool,
1089
1140
  toolNameMapping,
1141
+ providerOptionsName,
1142
+ usedCustomProviderKey,
1090
1143
  } = await this.getArgs({
1091
1144
  ...options,
1092
1145
  stream: true,
@@ -1932,19 +1985,30 @@ export class AnthropicMessagesLanguageModel implements LanguageModelV3 {
1932
1985
  }
1933
1986
 
1934
1987
  case 'message_stop': {
1988
+ const anthropicMetadata = {
1989
+ usage: (rawUsage as JSONObject) ?? null,
1990
+ cacheCreationInputTokens,
1991
+ stopSequence,
1992
+ container,
1993
+ contextManagement,
1994
+ } satisfies AnthropicMessageMetadata;
1995
+
1996
+ const providerMetadata: SharedV3ProviderMetadata = {
1997
+ anthropic: anthropicMetadata,
1998
+ };
1999
+
2000
+ if (
2001
+ usedCustomProviderKey &&
2002
+ providerOptionsName !== 'anthropic'
2003
+ ) {
2004
+ providerMetadata[providerOptionsName] = anthropicMetadata;
2005
+ }
2006
+
1935
2007
  controller.enqueue({
1936
2008
  type: 'finish',
1937
2009
  finishReason,
1938
2010
  usage: convertAnthropicMessagesUsage(usage),
1939
- providerMetadata: {
1940
- anthropic: {
1941
- usage: (rawUsage as JSONObject) ?? null,
1942
- cacheCreationInputTokens,
1943
- stopSequence,
1944
- container,
1945
- contextManagement,
1946
- } satisfies AnthropicMessageMetadata,
1947
- },
2011
+ providerMetadata,
1948
2012
  });
1949
2013
  return;
1950
2014
  }
@@ -24,7 +24,7 @@ export function convertAnthropicMessagesUsage(
24
24
  },
25
25
  outputTokens: {
26
26
  total: outputTokens,
27
- text: undefined,
27
+ text: outputTokens,
28
28
  reasoning: undefined,
29
29
  },
30
30
  raw: usage,