ai-sdk-anthropic 0.0.3 → 1.0.0

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.
Files changed (2) hide show
  1. package/dist/index.js +364 -4
  2. package/package.json +8 -2
package/dist/index.js CHANGED
@@ -3,12 +3,356 @@ import {
3
3
  createAnthropic as createAnthropicBase,
4
4
  VERSION
5
5
  } from "@ai-sdk/anthropic";
6
+
7
+ // node_modules/@ai-sdk/provider/dist/index.mjs
8
+ var marker = "vercel.ai.error";
9
+ var symbol = Symbol.for(marker);
10
+ var _a;
11
+ var _b;
12
+ var AISDKError = class _AISDKError extends (_b = Error, _a = symbol, _b) {
13
+ /**
14
+ * Creates an AI SDK Error.
15
+ *
16
+ * @param {Object} params - The parameters for creating the error.
17
+ * @param {string} params.name - The name of the error.
18
+ * @param {string} params.message - The error message.
19
+ * @param {unknown} [params.cause] - The underlying cause of the error.
20
+ */
21
+ constructor({
22
+ name: name14,
23
+ message,
24
+ cause
25
+ }) {
26
+ super(message);
27
+ this[_a] = true;
28
+ this.name = name14;
29
+ this.cause = cause;
30
+ }
31
+ /**
32
+ * Checks if the given error is an AI SDK Error.
33
+ * @param {unknown} error - The error to check.
34
+ * @returns {boolean} True if the error is an AI SDK Error, false otherwise.
35
+ */
36
+ static isInstance(error) {
37
+ return _AISDKError.hasMarker(error, marker);
38
+ }
39
+ static hasMarker(error, marker15) {
40
+ const markerSymbol = Symbol.for(marker15);
41
+ return error != null && typeof error === "object" && markerSymbol in error && typeof error[markerSymbol] === "boolean" && error[markerSymbol] === true;
42
+ }
43
+ };
44
+ var name = "AI_APICallError";
45
+ var marker2 = `vercel.ai.error.${name}`;
46
+ var symbol2 = Symbol.for(marker2);
47
+ var _a2;
48
+ var _b2;
49
+ var APICallError = class extends (_b2 = AISDKError, _a2 = symbol2, _b2) {
50
+ constructor({
51
+ message,
52
+ url,
53
+ requestBodyValues,
54
+ statusCode,
55
+ responseHeaders,
56
+ responseBody,
57
+ cause,
58
+ isRetryable = statusCode != null && (statusCode === 408 || // request timeout
59
+ statusCode === 409 || // conflict
60
+ statusCode === 429 || // too many requests
61
+ statusCode >= 500),
62
+ // server error
63
+ data
64
+ }) {
65
+ super({ name, message, cause });
66
+ this[_a2] = true;
67
+ this.url = url;
68
+ this.requestBodyValues = requestBodyValues;
69
+ this.statusCode = statusCode;
70
+ this.responseHeaders = responseHeaders;
71
+ this.responseBody = responseBody;
72
+ this.isRetryable = isRetryable;
73
+ this.data = data;
74
+ }
75
+ static isInstance(error) {
76
+ return AISDKError.hasMarker(error, marker2);
77
+ }
78
+ };
79
+ var name2 = "AI_EmptyResponseBodyError";
80
+ var marker3 = `vercel.ai.error.${name2}`;
81
+ var symbol3 = Symbol.for(marker3);
82
+ var _a3;
83
+ var _b3;
84
+ var EmptyResponseBodyError = class extends (_b3 = AISDKError, _a3 = symbol3, _b3) {
85
+ // used in isInstance
86
+ constructor({ message = "Empty response body" } = {}) {
87
+ super({ name: name2, message });
88
+ this[_a3] = true;
89
+ }
90
+ static isInstance(error) {
91
+ return AISDKError.hasMarker(error, marker3);
92
+ }
93
+ };
94
+ function getErrorMessage(error) {
95
+ if (error == null) {
96
+ return "unknown error";
97
+ }
98
+ if (typeof error === "string") {
99
+ return error;
100
+ }
101
+ if (error instanceof Error) {
102
+ return error.message;
103
+ }
104
+ return JSON.stringify(error);
105
+ }
106
+ var name3 = "AI_InvalidArgumentError";
107
+ var marker4 = `vercel.ai.error.${name3}`;
108
+ var symbol4 = Symbol.for(marker4);
109
+ var _a4;
110
+ var _b4;
111
+ var InvalidArgumentError = class extends (_b4 = AISDKError, _a4 = symbol4, _b4) {
112
+ constructor({
113
+ message,
114
+ cause,
115
+ argument
116
+ }) {
117
+ super({ name: name3, message, cause });
118
+ this[_a4] = true;
119
+ this.argument = argument;
120
+ }
121
+ static isInstance(error) {
122
+ return AISDKError.hasMarker(error, marker4);
123
+ }
124
+ };
125
+ var name4 = "AI_InvalidPromptError";
126
+ var marker5 = `vercel.ai.error.${name4}`;
127
+ var symbol5 = Symbol.for(marker5);
128
+ var _a5;
129
+ var _b5;
130
+ var InvalidPromptError = class extends (_b5 = AISDKError, _a5 = symbol5, _b5) {
131
+ constructor({
132
+ prompt,
133
+ message,
134
+ cause
135
+ }) {
136
+ super({ name: name4, message: `Invalid prompt: ${message}`, cause });
137
+ this[_a5] = true;
138
+ this.prompt = prompt;
139
+ }
140
+ static isInstance(error) {
141
+ return AISDKError.hasMarker(error, marker5);
142
+ }
143
+ };
144
+ var name5 = "AI_InvalidResponseDataError";
145
+ var marker6 = `vercel.ai.error.${name5}`;
146
+ var symbol6 = Symbol.for(marker6);
147
+ var _a6;
148
+ var _b6;
149
+ var InvalidResponseDataError = class extends (_b6 = AISDKError, _a6 = symbol6, _b6) {
150
+ constructor({
151
+ data,
152
+ message = `Invalid response data: ${JSON.stringify(data)}.`
153
+ }) {
154
+ super({ name: name5, message });
155
+ this[_a6] = true;
156
+ this.data = data;
157
+ }
158
+ static isInstance(error) {
159
+ return AISDKError.hasMarker(error, marker6);
160
+ }
161
+ };
162
+ var name6 = "AI_JSONParseError";
163
+ var marker7 = `vercel.ai.error.${name6}`;
164
+ var symbol7 = Symbol.for(marker7);
165
+ var _a7;
166
+ var _b7;
167
+ var JSONParseError = class extends (_b7 = AISDKError, _a7 = symbol7, _b7) {
168
+ constructor({ text, cause }) {
169
+ super({
170
+ name: name6,
171
+ message: `JSON parsing failed: Text: ${text}.
172
+ Error message: ${getErrorMessage(cause)}`,
173
+ cause
174
+ });
175
+ this[_a7] = true;
176
+ this.text = text;
177
+ }
178
+ static isInstance(error) {
179
+ return AISDKError.hasMarker(error, marker7);
180
+ }
181
+ };
182
+ var name7 = "AI_LoadAPIKeyError";
183
+ var marker8 = `vercel.ai.error.${name7}`;
184
+ var symbol8 = Symbol.for(marker8);
185
+ var _a8;
186
+ var _b8;
187
+ var LoadAPIKeyError = class extends (_b8 = AISDKError, _a8 = symbol8, _b8) {
188
+ // used in isInstance
189
+ constructor({ message }) {
190
+ super({ name: name7, message });
191
+ this[_a8] = true;
192
+ }
193
+ static isInstance(error) {
194
+ return AISDKError.hasMarker(error, marker8);
195
+ }
196
+ };
197
+ var name8 = "AI_LoadSettingError";
198
+ var marker9 = `vercel.ai.error.${name8}`;
199
+ var symbol9 = Symbol.for(marker9);
200
+ var _a9;
201
+ var _b9;
202
+ var LoadSettingError = class extends (_b9 = AISDKError, _a9 = symbol9, _b9) {
203
+ // used in isInstance
204
+ constructor({ message }) {
205
+ super({ name: name8, message });
206
+ this[_a9] = true;
207
+ }
208
+ static isInstance(error) {
209
+ return AISDKError.hasMarker(error, marker9);
210
+ }
211
+ };
212
+ var name9 = "AI_NoContentGeneratedError";
213
+ var marker10 = `vercel.ai.error.${name9}`;
214
+ var symbol10 = Symbol.for(marker10);
215
+ var _a10;
216
+ var _b10;
217
+ var NoContentGeneratedError = class extends (_b10 = AISDKError, _a10 = symbol10, _b10) {
218
+ // used in isInstance
219
+ constructor({
220
+ message = "No content generated."
221
+ } = {}) {
222
+ super({ name: name9, message });
223
+ this[_a10] = true;
224
+ }
225
+ static isInstance(error) {
226
+ return AISDKError.hasMarker(error, marker10);
227
+ }
228
+ };
229
+ var name10 = "AI_NoSuchModelError";
230
+ var marker11 = `vercel.ai.error.${name10}`;
231
+ var symbol11 = Symbol.for(marker11);
232
+ var _a11;
233
+ var _b11;
234
+ var NoSuchModelError = class extends (_b11 = AISDKError, _a11 = symbol11, _b11) {
235
+ constructor({
236
+ errorName = name10,
237
+ modelId,
238
+ modelType,
239
+ message = `No such ${modelType}: ${modelId}`
240
+ }) {
241
+ super({ name: errorName, message });
242
+ this[_a11] = true;
243
+ this.modelId = modelId;
244
+ this.modelType = modelType;
245
+ }
246
+ static isInstance(error) {
247
+ return AISDKError.hasMarker(error, marker11);
248
+ }
249
+ };
250
+ var name11 = "AI_TooManyEmbeddingValuesForCallError";
251
+ var marker12 = `vercel.ai.error.${name11}`;
252
+ var symbol12 = Symbol.for(marker12);
253
+ var _a12;
254
+ var _b12;
255
+ var TooManyEmbeddingValuesForCallError = class extends (_b12 = AISDKError, _a12 = symbol12, _b12) {
256
+ constructor(options) {
257
+ super({
258
+ name: name11,
259
+ message: `Too many values for a single embedding call. The ${options.provider} model "${options.modelId}" can only embed up to ${options.maxEmbeddingsPerCall} values per call, but ${options.values.length} values were provided.`
260
+ });
261
+ this[_a12] = true;
262
+ this.provider = options.provider;
263
+ this.modelId = options.modelId;
264
+ this.maxEmbeddingsPerCall = options.maxEmbeddingsPerCall;
265
+ this.values = options.values;
266
+ }
267
+ static isInstance(error) {
268
+ return AISDKError.hasMarker(error, marker12);
269
+ }
270
+ };
271
+ var name12 = "AI_TypeValidationError";
272
+ var marker13 = `vercel.ai.error.${name12}`;
273
+ var symbol13 = Symbol.for(marker13);
274
+ var _a13;
275
+ var _b13;
276
+ var TypeValidationError = class _TypeValidationError extends (_b13 = AISDKError, _a13 = symbol13, _b13) {
277
+ constructor({ value, cause }) {
278
+ super({
279
+ name: name12,
280
+ message: `Type validation failed: Value: ${JSON.stringify(value)}.
281
+ Error message: ${getErrorMessage(cause)}`,
282
+ cause
283
+ });
284
+ this[_a13] = true;
285
+ this.value = value;
286
+ }
287
+ static isInstance(error) {
288
+ return AISDKError.hasMarker(error, marker13);
289
+ }
290
+ /**
291
+ * Wraps an error into a TypeValidationError.
292
+ * If the cause is already a TypeValidationError with the same value, it returns the cause.
293
+ * Otherwise, it creates a new TypeValidationError.
294
+ *
295
+ * @param {Object} params - The parameters for wrapping the error.
296
+ * @param {unknown} params.value - The value that failed validation.
297
+ * @param {unknown} params.cause - The original error or cause of the validation failure.
298
+ * @returns {TypeValidationError} A TypeValidationError instance.
299
+ */
300
+ static wrap({
301
+ value,
302
+ cause
303
+ }) {
304
+ return _TypeValidationError.isInstance(cause) && cause.value === value ? cause : new _TypeValidationError({ value, cause });
305
+ }
306
+ };
307
+ var name13 = "AI_UnsupportedFunctionalityError";
308
+ var marker14 = `vercel.ai.error.${name13}`;
309
+ var symbol14 = Symbol.for(marker14);
310
+ var _a14;
311
+ var _b14;
312
+ var UnsupportedFunctionalityError = class extends (_b14 = AISDKError, _a14 = symbol14, _b14) {
313
+ constructor({
314
+ functionality,
315
+ message = `'${functionality}' functionality not supported.`
316
+ }) {
317
+ super({ name: name13, message });
318
+ this[_a14] = true;
319
+ this.functionality = functionality;
320
+ }
321
+ static isInstance(error) {
322
+ return AISDKError.hasMarker(error, marker14);
323
+ }
324
+ };
325
+ function isJSONValue(value) {
326
+ if (value === null || typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
327
+ return true;
328
+ }
329
+ if (Array.isArray(value)) {
330
+ return value.every(isJSONValue);
331
+ }
332
+ if (typeof value === "object") {
333
+ return Object.entries(value).every(
334
+ ([key, val]) => typeof key === "string" && isJSONValue(val)
335
+ );
336
+ }
337
+ return false;
338
+ }
339
+ function isJSONObject(value) {
340
+ return value != null && typeof value === "object" && Object.entries(value).every(
341
+ ([key, val]) => typeof key === "string" && isJSONValue(val)
342
+ );
343
+ }
344
+
345
+ // src/index.ts
6
346
  function isFinishPart(part) {
7
347
  return part.type === "finish";
8
348
  }
9
349
  function getRawUsage(part) {
10
- const usage = part.providerMetadata?.anthropic?.usage;
11
- if (!usage || typeof usage !== "object") return void 0;
350
+ const providerMetadata = part.providerMetadata;
351
+ if (!providerMetadata) return void 0;
352
+ const anthropic2 = providerMetadata["anthropic"];
353
+ if (!isJSONObject(anthropic2)) return void 0;
354
+ const usage = anthropic2["usage"];
355
+ if (!isJSONObject(usage)) return void 0;
12
356
  return usage;
13
357
  }
14
358
  function patchUsage(part) {
@@ -29,6 +373,22 @@ function patchUsage(part) {
29
373
  }
30
374
  return { ...part, usage };
31
375
  }
376
+ function normalizeProviderOptions(options) {
377
+ const providerOptions = options.providerOptions;
378
+ if (!providerOptions || typeof providerOptions !== "object") return options;
379
+ if ("anthropic" in providerOptions) return options;
380
+ let candidate;
381
+ const keys = Object.keys(providerOptions);
382
+ if (keys.length === 1) candidate = providerOptions[keys[0]];
383
+ if (!isJSONObject(candidate)) return options;
384
+ return {
385
+ ...options,
386
+ providerOptions: {
387
+ ...providerOptions,
388
+ anthropic: candidate
389
+ }
390
+ };
391
+ }
32
392
  var WrappedLanguageModelV2 = class {
33
393
  constructor(inner) {
34
394
  this.inner = inner;
@@ -46,10 +406,10 @@ var WrappedLanguageModelV2 = class {
46
406
  return this.inner.supportedUrls;
47
407
  }
48
408
  doGenerate(options) {
49
- return this.inner.doGenerate(options);
409
+ return this.inner.doGenerate(normalizeProviderOptions(options));
50
410
  }
51
411
  async doStream(options) {
52
- const result = await this.inner.doStream(options);
412
+ const result = await this.inner.doStream(normalizeProviderOptions(options));
53
413
  const patchedStream = result.stream.pipeThrough(
54
414
  new TransformStream({
55
415
  transform(part, controller) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-sdk-anthropic",
3
- "version": "0.0.3",
3
+ "version": "1.0.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -16,12 +16,18 @@
16
16
  ],
17
17
  "scripts": {
18
18
  "build": "tsup",
19
- "dev": "tsup --watch"
19
+ "dev": "tsup --watch",
20
+ "lint": "eslint .",
21
+ "lint:fix": "eslint . --fix"
20
22
  },
21
23
  "dependencies": {
22
24
  "@ai-sdk/anthropic": "^2.0.57"
23
25
  },
24
26
  "devDependencies": {
27
+ "@eslint/js": "^9.1.0",
28
+ "@typescript-eslint/eslint-plugin": "^8.17.0",
29
+ "@typescript-eslint/parser": "^8.17.0",
30
+ "eslint": "^9.1.0",
25
31
  "tsup": "^8.0.2",
26
32
  "typescript": "^5.8.3"
27
33
  },