ai 4.0.17 → 4.0.18

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/dist/index.mjs CHANGED
@@ -837,13 +837,39 @@ var DefaultGenerateImageResult = class {
837
837
  // core/generate-object/generate-object.ts
838
838
  import { createIdGenerator, safeParseJSON } from "@ai-sdk/provider-utils";
839
839
 
840
- // util/download-error.ts
840
+ // errors/no-object-generated-error.ts
841
841
  import { AISDKError as AISDKError3 } from "@ai-sdk/provider";
842
- var name3 = "AI_DownloadError";
842
+ var name3 = "AI_NoObjectGeneratedError";
843
843
  var marker3 = `vercel.ai.error.${name3}`;
844
844
  var symbol3 = Symbol.for(marker3);
845
845
  var _a3;
846
- var DownloadError = class extends AISDKError3 {
846
+ var NoObjectGeneratedError = class extends AISDKError3 {
847
+ constructor({
848
+ message = "No object generated.",
849
+ cause,
850
+ text: text2,
851
+ response,
852
+ usage
853
+ }) {
854
+ super({ name: name3, message, cause });
855
+ this[_a3] = true;
856
+ this.text = text2;
857
+ this.response = response;
858
+ this.usage = usage;
859
+ }
860
+ static isInstance(error) {
861
+ return AISDKError3.hasMarker(error, marker3);
862
+ }
863
+ };
864
+ _a3 = symbol3;
865
+
866
+ // util/download-error.ts
867
+ import { AISDKError as AISDKError4 } from "@ai-sdk/provider";
868
+ var name4 = "AI_DownloadError";
869
+ var marker4 = `vercel.ai.error.${name4}`;
870
+ var symbol4 = Symbol.for(marker4);
871
+ var _a4;
872
+ var DownloadError = class extends AISDKError4 {
847
873
  constructor({
848
874
  url,
849
875
  statusCode,
@@ -851,17 +877,17 @@ var DownloadError = class extends AISDKError3 {
851
877
  cause,
852
878
  message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
853
879
  }) {
854
- super({ name: name3, message, cause });
855
- this[_a3] = true;
880
+ super({ name: name4, message, cause });
881
+ this[_a4] = true;
856
882
  this.url = url;
857
883
  this.statusCode = statusCode;
858
884
  this.statusText = statusText;
859
885
  }
860
886
  static isInstance(error) {
861
- return AISDKError3.hasMarker(error, marker3);
887
+ return AISDKError4.hasMarker(error, marker4);
862
888
  }
863
889
  };
864
- _a3 = symbol3;
890
+ _a4 = symbol4;
865
891
 
866
892
  // util/download.ts
867
893
  async function download({
@@ -914,26 +940,26 @@ import {
914
940
  } from "@ai-sdk/provider-utils";
915
941
 
916
942
  // core/prompt/invalid-data-content-error.ts
917
- import { AISDKError as AISDKError4 } from "@ai-sdk/provider";
918
- var name4 = "AI_InvalidDataContentError";
919
- var marker4 = `vercel.ai.error.${name4}`;
920
- var symbol4 = Symbol.for(marker4);
921
- var _a4;
922
- var InvalidDataContentError = class extends AISDKError4 {
943
+ import { AISDKError as AISDKError5 } from "@ai-sdk/provider";
944
+ var name5 = "AI_InvalidDataContentError";
945
+ var marker5 = `vercel.ai.error.${name5}`;
946
+ var symbol5 = Symbol.for(marker5);
947
+ var _a5;
948
+ var InvalidDataContentError = class extends AISDKError5 {
923
949
  constructor({
924
950
  content,
925
951
  cause,
926
952
  message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`
927
953
  }) {
928
- super({ name: name4, message, cause });
929
- this[_a4] = true;
954
+ super({ name: name5, message, cause });
955
+ this[_a5] = true;
930
956
  this.content = content;
931
957
  }
932
958
  static isInstance(error) {
933
- return AISDKError4.hasMarker(error, marker4);
959
+ return AISDKError5.hasMarker(error, marker5);
934
960
  }
935
961
  };
936
- _a4 = symbol4;
962
+ _a5 = symbol5;
937
963
 
938
964
  // core/prompt/data-content.ts
939
965
  import { z } from "zod";
@@ -988,25 +1014,25 @@ function convertUint8ArrayToText(uint8Array) {
988
1014
  }
989
1015
 
990
1016
  // core/prompt/invalid-message-role-error.ts
991
- import { AISDKError as AISDKError5 } from "@ai-sdk/provider";
992
- var name5 = "AI_InvalidMessageRoleError";
993
- var marker5 = `vercel.ai.error.${name5}`;
994
- var symbol5 = Symbol.for(marker5);
995
- var _a5;
996
- var InvalidMessageRoleError = class extends AISDKError5 {
1017
+ import { AISDKError as AISDKError6 } from "@ai-sdk/provider";
1018
+ var name6 = "AI_InvalidMessageRoleError";
1019
+ var marker6 = `vercel.ai.error.${name6}`;
1020
+ var symbol6 = Symbol.for(marker6);
1021
+ var _a6;
1022
+ var InvalidMessageRoleError = class extends AISDKError6 {
997
1023
  constructor({
998
1024
  role,
999
1025
  message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
1000
1026
  }) {
1001
- super({ name: name5, message });
1002
- this[_a5] = true;
1027
+ super({ name: name6, message });
1028
+ this[_a6] = true;
1003
1029
  this.role = role;
1004
1030
  }
1005
1031
  static isInstance(error) {
1006
- return AISDKError5.hasMarker(error, marker5);
1032
+ return AISDKError6.hasMarker(error, marker6);
1007
1033
  }
1008
1034
  };
1009
- _a5 = symbol5;
1035
+ _a6 = symbol6;
1010
1036
 
1011
1037
  // core/prompt/split-data-url.ts
1012
1038
  function splitDataUrl(dataUrl) {
@@ -1529,25 +1555,25 @@ function attachmentsToParts(attachments) {
1529
1555
  }
1530
1556
 
1531
1557
  // core/prompt/message-conversion-error.ts
1532
- import { AISDKError as AISDKError6 } from "@ai-sdk/provider";
1533
- var name6 = "AI_MessageConversionError";
1534
- var marker6 = `vercel.ai.error.${name6}`;
1535
- var symbol6 = Symbol.for(marker6);
1536
- var _a6;
1537
- var MessageConversionError = class extends AISDKError6 {
1558
+ import { AISDKError as AISDKError7 } from "@ai-sdk/provider";
1559
+ var name7 = "AI_MessageConversionError";
1560
+ var marker7 = `vercel.ai.error.${name7}`;
1561
+ var symbol7 = Symbol.for(marker7);
1562
+ var _a7;
1563
+ var MessageConversionError = class extends AISDKError7 {
1538
1564
  constructor({
1539
1565
  originalMessage,
1540
1566
  message
1541
1567
  }) {
1542
- super({ name: name6, message });
1543
- this[_a6] = true;
1568
+ super({ name: name7, message });
1569
+ this[_a7] = true;
1544
1570
  this.originalMessage = originalMessage;
1545
1571
  }
1546
1572
  static isInstance(error) {
1547
- return AISDKError6.hasMarker(error, marker6);
1573
+ return AISDKError7.hasMarker(error, marker7);
1548
1574
  }
1549
1575
  };
1550
- _a6 = symbol6;
1576
+ _a7 = symbol7;
1551
1577
 
1552
1578
  // core/prompt/convert-to-core-messages.ts
1553
1579
  function convertToCoreMessages(messages, options) {
@@ -1739,24 +1765,6 @@ function injectJsonInstruction({
1739
1765
  ].filter((line) => line != null).join("\n");
1740
1766
  }
1741
1767
 
1742
- // core/generate-object/no-object-generated-error.ts
1743
- import { AISDKError as AISDKError7 } from "@ai-sdk/provider";
1744
- var name7 = "AI_NoObjectGeneratedError";
1745
- var marker7 = `vercel.ai.error.${name7}`;
1746
- var symbol7 = Symbol.for(marker7);
1747
- var _a7;
1748
- var NoObjectGeneratedError = class extends AISDKError7 {
1749
- // used in isInstance
1750
- constructor({ message = "No object generated." } = {}) {
1751
- super({ name: name7, message });
1752
- this[_a7] = true;
1753
- }
1754
- static isInstance(error) {
1755
- return AISDKError7.hasMarker(error, marker7);
1756
- }
1757
- };
1758
- _a7 = symbol7;
1759
-
1760
1768
  // core/generate-object/output-strategy.ts
1761
1769
  import {
1762
1770
  isJSONArray,
@@ -1791,8 +1799,16 @@ var noSchemaOutputStrategy = {
1791
1799
  validatePartialResult({ value, textDelta }) {
1792
1800
  return { success: true, value: { partial: value, textDelta } };
1793
1801
  },
1794
- validateFinalResult(value) {
1795
- return value === void 0 ? { success: false, error: new NoObjectGeneratedError() } : { success: true, value };
1802
+ validateFinalResult(value, context) {
1803
+ return value === void 0 ? {
1804
+ success: false,
1805
+ error: new NoObjectGeneratedError({
1806
+ message: "No object generated: response did not match schema.",
1807
+ text: context.text,
1808
+ response: context.response,
1809
+ usage: context.usage
1810
+ })
1811
+ } : { success: true, value };
1796
1812
  },
1797
1813
  createElementStream() {
1798
1814
  throw new UnsupportedFunctionalityError({
@@ -2271,14 +2287,18 @@ async function generateObject({
2271
2287
  abortSignal,
2272
2288
  headers
2273
2289
  });
2274
- if (result2.text === void 0) {
2275
- throw new NoObjectGeneratedError();
2276
- }
2277
2290
  const responseData = {
2278
2291
  id: (_b2 = (_a14 = result2.response) == null ? void 0 : _a14.id) != null ? _b2 : generateId3(),
2279
2292
  timestamp: (_d = (_c = result2.response) == null ? void 0 : _c.timestamp) != null ? _d : currentDate(),
2280
2293
  modelId: (_f = (_e = result2.response) == null ? void 0 : _e.modelId) != null ? _f : model.modelId
2281
2294
  };
2295
+ if (result2.text === void 0) {
2296
+ throw new NoObjectGeneratedError({
2297
+ message: "No object generated: the model did not return a response.",
2298
+ response: responseData,
2299
+ usage: calculateLanguageModelUsage(result2.usage)
2300
+ });
2301
+ }
2282
2302
  span2.setAttributes(
2283
2303
  selectTelemetryAttributes({
2284
2304
  telemetry,
@@ -2375,14 +2395,18 @@ async function generateObject({
2375
2395
  headers
2376
2396
  });
2377
2397
  const objectText = (_b2 = (_a14 = result2.toolCalls) == null ? void 0 : _a14[0]) == null ? void 0 : _b2.args;
2378
- if (objectText === void 0) {
2379
- throw new NoObjectGeneratedError();
2380
- }
2381
2398
  const responseData = {
2382
2399
  id: (_d = (_c = result2.response) == null ? void 0 : _c.id) != null ? _d : generateId3(),
2383
2400
  timestamp: (_f = (_e = result2.response) == null ? void 0 : _e.timestamp) != null ? _f : currentDate(),
2384
2401
  modelId: (_h = (_g = result2.response) == null ? void 0 : _g.modelId) != null ? _h : model.modelId
2385
2402
  };
2403
+ if (objectText === void 0) {
2404
+ throw new NoObjectGeneratedError({
2405
+ message: "No object generated: the tool was not called.",
2406
+ response: responseData,
2407
+ usage: calculateLanguageModelUsage(result2.usage)
2408
+ });
2409
+ }
2386
2410
  span2.setAttributes(
2387
2411
  selectTelemetryAttributes({
2388
2412
  telemetry,
@@ -2430,13 +2454,30 @@ async function generateObject({
2430
2454
  }
2431
2455
  const parseResult = safeParseJSON({ text: result });
2432
2456
  if (!parseResult.success) {
2433
- throw parseResult.error;
2457
+ throw new NoObjectGeneratedError({
2458
+ message: "No object generated: could not parse the response.",
2459
+ cause: parseResult.error,
2460
+ text: result,
2461
+ response,
2462
+ usage: calculateLanguageModelUsage(usage)
2463
+ });
2434
2464
  }
2435
2465
  const validationResult = outputStrategy.validateFinalResult(
2436
- parseResult.value
2466
+ parseResult.value,
2467
+ {
2468
+ text: result,
2469
+ response,
2470
+ usage: calculateLanguageModelUsage(usage)
2471
+ }
2437
2472
  );
2438
2473
  if (!validationResult.success) {
2439
- throw validationResult.error;
2474
+ throw new NoObjectGeneratedError({
2475
+ message: "No object generated: response did not match schema.",
2476
+ cause: validationResult.error,
2477
+ text: result,
2478
+ response,
2479
+ usage: calculateLanguageModelUsage(usage)
2480
+ });
2440
2481
  }
2441
2482
  span.setAttributes(
2442
2483
  selectTelemetryAttributes({
@@ -2974,12 +3015,25 @@ var DefaultStreamObjectResult = class {
2974
3015
  ...response,
2975
3016
  headers: rawResponse == null ? void 0 : rawResponse.headers
2976
3017
  });
2977
- const validationResult = outputStrategy.validateFinalResult(latestObjectJson);
3018
+ const validationResult = outputStrategy.validateFinalResult(
3019
+ latestObjectJson,
3020
+ {
3021
+ text: accumulatedText,
3022
+ response,
3023
+ usage
3024
+ }
3025
+ );
2978
3026
  if (validationResult.success) {
2979
3027
  object2 = validationResult.value;
2980
3028
  self.objectPromise.resolve(object2);
2981
3029
  } else {
2982
- error = validationResult.error;
3030
+ error = new NoObjectGeneratedError({
3031
+ message: "No object generated: response did not match schema.",
3032
+ cause: validationResult.error,
3033
+ text: accumulatedText,
3034
+ response,
3035
+ usage
3036
+ });
2983
3037
  self.objectPromise.reject(error);
2984
3038
  }
2985
3039
  break;
@@ -3737,7 +3791,13 @@ async function generateText({
3737
3791
  );
3738
3792
  return new DefaultGenerateTextResult({
3739
3793
  text: text2,
3740
- output: output == null ? void 0 : output.parseOutput({ text: text2 }),
3794
+ output: output == null ? void 0 : output.parseOutput(
3795
+ { text: text2 },
3796
+ {
3797
+ response: currentModelResponse.response,
3798
+ usage
3799
+ }
3800
+ ),
3741
3801
  toolCalls: currentToolCalls,
3742
3802
  toolResults: currentToolResults,
3743
3803
  finishReason: currentModelResponse.finishReason,
@@ -3852,7 +3912,7 @@ __export(output_exports, {
3852
3912
  object: () => object,
3853
3913
  text: () => text
3854
3914
  });
3855
- import { parseJSON } from "@ai-sdk/provider-utils";
3915
+ import { safeParseJSON as safeParseJSON3, safeValidateTypes as safeValidateTypes4 } from "@ai-sdk/provider-utils";
3856
3916
  import { asSchema as asSchema4 } from "@ai-sdk/ui-utils";
3857
3917
  var text = () => ({
3858
3918
  type: "text",
@@ -3880,8 +3940,31 @@ var object = ({
3880
3940
  schema: schema.jsonSchema
3881
3941
  });
3882
3942
  },
3883
- parseOutput({ text: text2 }) {
3884
- return parseJSON({ text: text2, schema });
3943
+ parseOutput({ text: text2 }, context) {
3944
+ const parseResult = safeParseJSON3({ text: text2 });
3945
+ if (!parseResult.success) {
3946
+ throw new NoObjectGeneratedError({
3947
+ message: "No object generated: could not parse the response.",
3948
+ cause: parseResult.error,
3949
+ text: text2,
3950
+ response: context.response,
3951
+ usage: context.usage
3952
+ });
3953
+ }
3954
+ const validationResult = safeValidateTypes4({
3955
+ value: parseResult.value,
3956
+ schema
3957
+ });
3958
+ if (!validationResult.success) {
3959
+ throw new NoObjectGeneratedError({
3960
+ message: "No object generated: response did not match schema.",
3961
+ cause: validationResult.error,
3962
+ text: text2,
3963
+ response: context.response,
3964
+ usage: context.usage
3965
+ });
3966
+ }
3967
+ return validationResult.value;
3885
3968
  }
3886
3969
  };
3887
3970
  };