ai 4.0.16 → 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/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # ai
2
2
 
3
+ ## 4.0.18
4
+
5
+ ### Patch Changes
6
+
7
+ - 304e6d3: feat (ai/core): standardize generateObject, streamObject, and output errors to NoObjectGeneratedError
8
+ - 304e6d3: feat (ai/core): add additional information to NoObjectGeneratedError
9
+
10
+ ## 4.0.17
11
+
12
+ ### Patch Changes
13
+
14
+ - 54bbf21: fix (ai/core): change streamText.experimental_transform signature to support tool type inference
15
+
3
16
  ## 4.0.16
4
17
 
5
18
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -1608,6 +1608,9 @@ interface Output<OUTPUT> {
1608
1608
  }) => LanguageModelV1CallOptions['responseFormat'];
1609
1609
  parseOutput(options: {
1610
1610
  text: string;
1611
+ }, context: {
1612
+ response: LanguageModelResponseMetadata;
1613
+ usage: LanguageModelUsage;
1611
1614
  }): OUTPUT;
1612
1615
  }
1613
1616
  declare const text: () => Output<string>;
@@ -2090,7 +2093,9 @@ Enable streaming of tool call deltas as they are generated. Disabled by default.
2090
2093
  /**
2091
2094
  Optional transformation that is applied to the stream.
2092
2095
  */
2093
- experimental_transform?: TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2096
+ experimental_transform?: (options: {
2097
+ tools: TOOLS;
2098
+ }) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2094
2099
  /**
2095
2100
  Callback that is called for each chunk of the stream. The stream processing will pause until the callback promise is resolved.
2096
2101
  */
@@ -2139,7 +2144,9 @@ declare function smoothStream<TOOLS extends Record<string, CoreTool>>({ delayInM
2139
2144
  _internal?: {
2140
2145
  delay?: (delayInMs: number) => Promise<void>;
2141
2146
  };
2142
- }): TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2147
+ }): (options: {
2148
+ tools: TOOLS;
2149
+ }) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2143
2150
 
2144
2151
  /**
2145
2152
  * Experimental middleware for LanguageModelV1.
@@ -2270,8 +2277,44 @@ declare class InvalidArgumentError extends AISDKError {
2270
2277
  }
2271
2278
 
2272
2279
  declare const symbol$7: unique symbol;
2273
- declare class ToolCallRepairError extends AISDKError {
2280
+ /**
2281
+ Thrown when no object could be generated. This can have several causes:
2282
+
2283
+ - The model failed to generate a response.
2284
+ - The model generated a response that could not be parsed.
2285
+ - The model generated a response that could not be validated against the schema.
2286
+
2287
+ The error contains the following properties:
2288
+
2289
+ - `text`: The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.
2290
+ */
2291
+ declare class NoObjectGeneratedError extends AISDKError {
2274
2292
  private readonly [symbol$7];
2293
+ /**
2294
+ The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.
2295
+ */
2296
+ readonly text: string | undefined;
2297
+ /**
2298
+ The response metadata.
2299
+ */
2300
+ readonly response: LanguageModelResponseMetadata | undefined;
2301
+ /**
2302
+ The usage of the model.
2303
+ */
2304
+ readonly usage: LanguageModelUsage | undefined;
2305
+ constructor({ message, cause, text, response, usage, }: {
2306
+ message?: string;
2307
+ cause?: Error;
2308
+ text?: string;
2309
+ response: LanguageModelResponseMetadata;
2310
+ usage: LanguageModelUsage;
2311
+ });
2312
+ static isInstance(error: unknown): error is NoObjectGeneratedError;
2313
+ }
2314
+
2315
+ declare const symbol$6: unique symbol;
2316
+ declare class ToolCallRepairError extends AISDKError {
2317
+ private readonly [symbol$6];
2275
2318
  readonly originalError: NoSuchToolError | InvalidToolArgumentsError;
2276
2319
  constructor({ cause, originalError, message, }: {
2277
2320
  message?: string;
@@ -2281,9 +2324,9 @@ declare class ToolCallRepairError extends AISDKError {
2281
2324
  static isInstance(error: unknown): error is ToolCallRepairError;
2282
2325
  }
2283
2326
 
2284
- declare const symbol$6: unique symbol;
2327
+ declare const symbol$5: unique symbol;
2285
2328
  declare class ToolExecutionError extends AISDKError {
2286
- private readonly [symbol$6];
2329
+ private readonly [symbol$5];
2287
2330
  readonly toolName: string;
2288
2331
  readonly toolArgs: JSONValue;
2289
2332
  constructor({ toolArgs, toolName, cause, message, }: {
@@ -2295,18 +2338,6 @@ declare class ToolExecutionError extends AISDKError {
2295
2338
  static isInstance(error: unknown): error is ToolExecutionError;
2296
2339
  }
2297
2340
 
2298
- declare const symbol$5: unique symbol;
2299
- /**
2300
- Thrown when the AI provider fails to generate a parsable object.
2301
- */
2302
- declare class NoObjectGeneratedError extends AISDKError {
2303
- private readonly [symbol$5];
2304
- constructor({ message }?: {
2305
- message?: string;
2306
- });
2307
- static isInstance(error: unknown): error is NoObjectGeneratedError;
2308
- }
2309
-
2310
2341
  declare const symbol$4: unique symbol;
2311
2342
  declare class InvalidDataContentError extends AISDKError {
2312
2343
  private readonly [symbol$4];
package/dist/index.d.ts CHANGED
@@ -1608,6 +1608,9 @@ interface Output<OUTPUT> {
1608
1608
  }) => LanguageModelV1CallOptions['responseFormat'];
1609
1609
  parseOutput(options: {
1610
1610
  text: string;
1611
+ }, context: {
1612
+ response: LanguageModelResponseMetadata;
1613
+ usage: LanguageModelUsage;
1611
1614
  }): OUTPUT;
1612
1615
  }
1613
1616
  declare const text: () => Output<string>;
@@ -2090,7 +2093,9 @@ Enable streaming of tool call deltas as they are generated. Disabled by default.
2090
2093
  /**
2091
2094
  Optional transformation that is applied to the stream.
2092
2095
  */
2093
- experimental_transform?: TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2096
+ experimental_transform?: (options: {
2097
+ tools: TOOLS;
2098
+ }) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2094
2099
  /**
2095
2100
  Callback that is called for each chunk of the stream. The stream processing will pause until the callback promise is resolved.
2096
2101
  */
@@ -2139,7 +2144,9 @@ declare function smoothStream<TOOLS extends Record<string, CoreTool>>({ delayInM
2139
2144
  _internal?: {
2140
2145
  delay?: (delayInMs: number) => Promise<void>;
2141
2146
  };
2142
- }): TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2147
+ }): (options: {
2148
+ tools: TOOLS;
2149
+ }) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;
2143
2150
 
2144
2151
  /**
2145
2152
  * Experimental middleware for LanguageModelV1.
@@ -2270,8 +2277,44 @@ declare class InvalidArgumentError extends AISDKError {
2270
2277
  }
2271
2278
 
2272
2279
  declare const symbol$7: unique symbol;
2273
- declare class ToolCallRepairError extends AISDKError {
2280
+ /**
2281
+ Thrown when no object could be generated. This can have several causes:
2282
+
2283
+ - The model failed to generate a response.
2284
+ - The model generated a response that could not be parsed.
2285
+ - The model generated a response that could not be validated against the schema.
2286
+
2287
+ The error contains the following properties:
2288
+
2289
+ - `text`: The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.
2290
+ */
2291
+ declare class NoObjectGeneratedError extends AISDKError {
2274
2292
  private readonly [symbol$7];
2293
+ /**
2294
+ The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.
2295
+ */
2296
+ readonly text: string | undefined;
2297
+ /**
2298
+ The response metadata.
2299
+ */
2300
+ readonly response: LanguageModelResponseMetadata | undefined;
2301
+ /**
2302
+ The usage of the model.
2303
+ */
2304
+ readonly usage: LanguageModelUsage | undefined;
2305
+ constructor({ message, cause, text, response, usage, }: {
2306
+ message?: string;
2307
+ cause?: Error;
2308
+ text?: string;
2309
+ response: LanguageModelResponseMetadata;
2310
+ usage: LanguageModelUsage;
2311
+ });
2312
+ static isInstance(error: unknown): error is NoObjectGeneratedError;
2313
+ }
2314
+
2315
+ declare const symbol$6: unique symbol;
2316
+ declare class ToolCallRepairError extends AISDKError {
2317
+ private readonly [symbol$6];
2275
2318
  readonly originalError: NoSuchToolError | InvalidToolArgumentsError;
2276
2319
  constructor({ cause, originalError, message, }: {
2277
2320
  message?: string;
@@ -2281,9 +2324,9 @@ declare class ToolCallRepairError extends AISDKError {
2281
2324
  static isInstance(error: unknown): error is ToolCallRepairError;
2282
2325
  }
2283
2326
 
2284
- declare const symbol$6: unique symbol;
2327
+ declare const symbol$5: unique symbol;
2285
2328
  declare class ToolExecutionError extends AISDKError {
2286
- private readonly [symbol$6];
2329
+ private readonly [symbol$5];
2287
2330
  readonly toolName: string;
2288
2331
  readonly toolArgs: JSONValue;
2289
2332
  constructor({ toolArgs, toolName, cause, message, }: {
@@ -2295,18 +2338,6 @@ declare class ToolExecutionError extends AISDKError {
2295
2338
  static isInstance(error: unknown): error is ToolExecutionError;
2296
2339
  }
2297
2340
 
2298
- declare const symbol$5: unique symbol;
2299
- /**
2300
- Thrown when the AI provider fails to generate a parsable object.
2301
- */
2302
- declare class NoObjectGeneratedError extends AISDKError {
2303
- private readonly [symbol$5];
2304
- constructor({ message }?: {
2305
- message?: string;
2306
- });
2307
- static isInstance(error: unknown): error is NoObjectGeneratedError;
2308
- }
2309
-
2310
2341
  declare const symbol$4: unique symbol;
2311
2342
  declare class InvalidDataContentError extends AISDKError {
2312
2343
  private readonly [symbol$4];
package/dist/index.js CHANGED
@@ -900,13 +900,39 @@ var DefaultGenerateImageResult = class {
900
900
  // core/generate-object/generate-object.ts
901
901
  var import_provider_utils6 = require("@ai-sdk/provider-utils");
902
902
 
903
- // util/download-error.ts
903
+ // errors/no-object-generated-error.ts
904
904
  var import_provider4 = require("@ai-sdk/provider");
905
- var name3 = "AI_DownloadError";
905
+ var name3 = "AI_NoObjectGeneratedError";
906
906
  var marker3 = `vercel.ai.error.${name3}`;
907
907
  var symbol3 = Symbol.for(marker3);
908
908
  var _a3;
909
- var DownloadError = class extends import_provider4.AISDKError {
909
+ var NoObjectGeneratedError = class extends import_provider4.AISDKError {
910
+ constructor({
911
+ message = "No object generated.",
912
+ cause,
913
+ text: text2,
914
+ response,
915
+ usage
916
+ }) {
917
+ super({ name: name3, message, cause });
918
+ this[_a3] = true;
919
+ this.text = text2;
920
+ this.response = response;
921
+ this.usage = usage;
922
+ }
923
+ static isInstance(error) {
924
+ return import_provider4.AISDKError.hasMarker(error, marker3);
925
+ }
926
+ };
927
+ _a3 = symbol3;
928
+
929
+ // util/download-error.ts
930
+ var import_provider5 = require("@ai-sdk/provider");
931
+ var name4 = "AI_DownloadError";
932
+ var marker4 = `vercel.ai.error.${name4}`;
933
+ var symbol4 = Symbol.for(marker4);
934
+ var _a4;
935
+ var DownloadError = class extends import_provider5.AISDKError {
910
936
  constructor({
911
937
  url,
912
938
  statusCode,
@@ -914,17 +940,17 @@ var DownloadError = class extends import_provider4.AISDKError {
914
940
  cause,
915
941
  message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`
916
942
  }) {
917
- super({ name: name3, message, cause });
918
- this[_a3] = true;
943
+ super({ name: name4, message, cause });
944
+ this[_a4] = true;
919
945
  this.url = url;
920
946
  this.statusCode = statusCode;
921
947
  this.statusText = statusText;
922
948
  }
923
949
  static isInstance(error) {
924
- return import_provider4.AISDKError.hasMarker(error, marker3);
950
+ return import_provider5.AISDKError.hasMarker(error, marker4);
925
951
  }
926
952
  };
927
- _a3 = symbol3;
953
+ _a4 = symbol4;
928
954
 
929
955
  // util/download.ts
930
956
  async function download({
@@ -974,26 +1000,26 @@ function detectImageMimeType(image) {
974
1000
  var import_provider_utils3 = require("@ai-sdk/provider-utils");
975
1001
 
976
1002
  // core/prompt/invalid-data-content-error.ts
977
- var import_provider5 = require("@ai-sdk/provider");
978
- var name4 = "AI_InvalidDataContentError";
979
- var marker4 = `vercel.ai.error.${name4}`;
980
- var symbol4 = Symbol.for(marker4);
981
- var _a4;
982
- var InvalidDataContentError = class extends import_provider5.AISDKError {
1003
+ var import_provider6 = require("@ai-sdk/provider");
1004
+ var name5 = "AI_InvalidDataContentError";
1005
+ var marker5 = `vercel.ai.error.${name5}`;
1006
+ var symbol5 = Symbol.for(marker5);
1007
+ var _a5;
1008
+ var InvalidDataContentError = class extends import_provider6.AISDKError {
983
1009
  constructor({
984
1010
  content,
985
1011
  cause,
986
1012
  message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`
987
1013
  }) {
988
- super({ name: name4, message, cause });
989
- this[_a4] = true;
1014
+ super({ name: name5, message, cause });
1015
+ this[_a5] = true;
990
1016
  this.content = content;
991
1017
  }
992
1018
  static isInstance(error) {
993
- return import_provider5.AISDKError.hasMarker(error, marker4);
1019
+ return import_provider6.AISDKError.hasMarker(error, marker5);
994
1020
  }
995
1021
  };
996
- _a4 = symbol4;
1022
+ _a5 = symbol5;
997
1023
 
998
1024
  // core/prompt/data-content.ts
999
1025
  var import_zod = require("zod");
@@ -1048,25 +1074,25 @@ function convertUint8ArrayToText(uint8Array) {
1048
1074
  }
1049
1075
 
1050
1076
  // core/prompt/invalid-message-role-error.ts
1051
- var import_provider6 = require("@ai-sdk/provider");
1052
- var name5 = "AI_InvalidMessageRoleError";
1053
- var marker5 = `vercel.ai.error.${name5}`;
1054
- var symbol5 = Symbol.for(marker5);
1055
- var _a5;
1056
- var InvalidMessageRoleError = class extends import_provider6.AISDKError {
1077
+ var import_provider7 = require("@ai-sdk/provider");
1078
+ var name6 = "AI_InvalidMessageRoleError";
1079
+ var marker6 = `vercel.ai.error.${name6}`;
1080
+ var symbol6 = Symbol.for(marker6);
1081
+ var _a6;
1082
+ var InvalidMessageRoleError = class extends import_provider7.AISDKError {
1057
1083
  constructor({
1058
1084
  role,
1059
1085
  message = `Invalid message role: '${role}'. Must be one of: "system", "user", "assistant", "tool".`
1060
1086
  }) {
1061
- super({ name: name5, message });
1062
- this[_a5] = true;
1087
+ super({ name: name6, message });
1088
+ this[_a6] = true;
1063
1089
  this.role = role;
1064
1090
  }
1065
1091
  static isInstance(error) {
1066
- return import_provider6.AISDKError.hasMarker(error, marker5);
1092
+ return import_provider7.AISDKError.hasMarker(error, marker6);
1067
1093
  }
1068
1094
  };
1069
- _a5 = symbol5;
1095
+ _a6 = symbol6;
1070
1096
 
1071
1097
  // core/prompt/split-data-url.ts
1072
1098
  function splitDataUrl(dataUrl) {
@@ -1363,7 +1389,7 @@ function prepareCallSettings({
1363
1389
  }
1364
1390
 
1365
1391
  // core/prompt/standardize-prompt.ts
1366
- var import_provider8 = require("@ai-sdk/provider");
1392
+ var import_provider9 = require("@ai-sdk/provider");
1367
1393
  var import_provider_utils4 = require("@ai-sdk/provider-utils");
1368
1394
  var import_zod7 = require("zod");
1369
1395
 
@@ -1589,25 +1615,25 @@ function attachmentsToParts(attachments) {
1589
1615
  }
1590
1616
 
1591
1617
  // core/prompt/message-conversion-error.ts
1592
- var import_provider7 = require("@ai-sdk/provider");
1593
- var name6 = "AI_MessageConversionError";
1594
- var marker6 = `vercel.ai.error.${name6}`;
1595
- var symbol6 = Symbol.for(marker6);
1596
- var _a6;
1597
- var MessageConversionError = class extends import_provider7.AISDKError {
1618
+ var import_provider8 = require("@ai-sdk/provider");
1619
+ var name7 = "AI_MessageConversionError";
1620
+ var marker7 = `vercel.ai.error.${name7}`;
1621
+ var symbol7 = Symbol.for(marker7);
1622
+ var _a7;
1623
+ var MessageConversionError = class extends import_provider8.AISDKError {
1598
1624
  constructor({
1599
1625
  originalMessage,
1600
1626
  message
1601
1627
  }) {
1602
- super({ name: name6, message });
1603
- this[_a6] = true;
1628
+ super({ name: name7, message });
1629
+ this[_a7] = true;
1604
1630
  this.originalMessage = originalMessage;
1605
1631
  }
1606
1632
  static isInstance(error) {
1607
- return import_provider7.AISDKError.hasMarker(error, marker6);
1633
+ return import_provider8.AISDKError.hasMarker(error, marker7);
1608
1634
  }
1609
1635
  };
1610
- _a6 = symbol6;
1636
+ _a7 = symbol7;
1611
1637
 
1612
1638
  // core/prompt/convert-to-core-messages.ts
1613
1639
  function convertToCoreMessages(messages, options) {
@@ -1701,26 +1727,26 @@ function standardizePrompt({
1701
1727
  tools
1702
1728
  }) {
1703
1729
  if (prompt.prompt == null && prompt.messages == null) {
1704
- throw new import_provider8.InvalidPromptError({
1730
+ throw new import_provider9.InvalidPromptError({
1705
1731
  prompt,
1706
1732
  message: "prompt or messages must be defined"
1707
1733
  });
1708
1734
  }
1709
1735
  if (prompt.prompt != null && prompt.messages != null) {
1710
- throw new import_provider8.InvalidPromptError({
1736
+ throw new import_provider9.InvalidPromptError({
1711
1737
  prompt,
1712
1738
  message: "prompt and messages cannot be defined at the same time"
1713
1739
  });
1714
1740
  }
1715
1741
  if (prompt.system != null && typeof prompt.system !== "string") {
1716
- throw new import_provider8.InvalidPromptError({
1742
+ throw new import_provider9.InvalidPromptError({
1717
1743
  prompt,
1718
1744
  message: "system must be a string"
1719
1745
  });
1720
1746
  }
1721
1747
  if (prompt.prompt != null) {
1722
1748
  if (typeof prompt.prompt !== "string") {
1723
- throw new import_provider8.InvalidPromptError({
1749
+ throw new import_provider9.InvalidPromptError({
1724
1750
  prompt,
1725
1751
  message: "prompt must be a string"
1726
1752
  });
@@ -1739,7 +1765,7 @@ function standardizePrompt({
1739
1765
  if (prompt.messages != null) {
1740
1766
  const promptType = detectPromptType(prompt.messages);
1741
1767
  if (promptType === "other") {
1742
- throw new import_provider8.InvalidPromptError({
1768
+ throw new import_provider9.InvalidPromptError({
1743
1769
  prompt,
1744
1770
  message: "messages must be an array of CoreMessage or UIMessage"
1745
1771
  });
@@ -1752,7 +1778,7 @@ function standardizePrompt({
1752
1778
  schema: import_zod7.z.array(coreMessageSchema)
1753
1779
  });
1754
1780
  if (!validationResult.success) {
1755
- throw new import_provider8.InvalidPromptError({
1781
+ throw new import_provider9.InvalidPromptError({
1756
1782
  prompt,
1757
1783
  message: "messages must be an array of CoreMessage or UIMessage",
1758
1784
  cause: validationResult.error
@@ -1799,24 +1825,6 @@ function injectJsonInstruction({
1799
1825
  ].filter((line) => line != null).join("\n");
1800
1826
  }
1801
1827
 
1802
- // core/generate-object/no-object-generated-error.ts
1803
- var import_provider9 = require("@ai-sdk/provider");
1804
- var name7 = "AI_NoObjectGeneratedError";
1805
- var marker7 = `vercel.ai.error.${name7}`;
1806
- var symbol7 = Symbol.for(marker7);
1807
- var _a7;
1808
- var NoObjectGeneratedError = class extends import_provider9.AISDKError {
1809
- // used in isInstance
1810
- constructor({ message = "No object generated." } = {}) {
1811
- super({ name: name7, message });
1812
- this[_a7] = true;
1813
- }
1814
- static isInstance(error) {
1815
- return import_provider9.AISDKError.hasMarker(error, marker7);
1816
- }
1817
- };
1818
- _a7 = symbol7;
1819
-
1820
1828
  // core/generate-object/output-strategy.ts
1821
1829
  var import_provider10 = require("@ai-sdk/provider");
1822
1830
  var import_provider_utils5 = require("@ai-sdk/provider-utils");
@@ -1846,8 +1854,16 @@ var noSchemaOutputStrategy = {
1846
1854
  validatePartialResult({ value, textDelta }) {
1847
1855
  return { success: true, value: { partial: value, textDelta } };
1848
1856
  },
1849
- validateFinalResult(value) {
1850
- return value === void 0 ? { success: false, error: new NoObjectGeneratedError() } : { success: true, value };
1857
+ validateFinalResult(value, context) {
1858
+ return value === void 0 ? {
1859
+ success: false,
1860
+ error: new NoObjectGeneratedError({
1861
+ message: "No object generated: response did not match schema.",
1862
+ text: context.text,
1863
+ response: context.response,
1864
+ usage: context.usage
1865
+ })
1866
+ } : { success: true, value };
1851
1867
  },
1852
1868
  createElementStream() {
1853
1869
  throw new import_provider10.UnsupportedFunctionalityError({
@@ -2326,14 +2342,18 @@ async function generateObject({
2326
2342
  abortSignal,
2327
2343
  headers
2328
2344
  });
2329
- if (result2.text === void 0) {
2330
- throw new NoObjectGeneratedError();
2331
- }
2332
2345
  const responseData = {
2333
2346
  id: (_b2 = (_a14 = result2.response) == null ? void 0 : _a14.id) != null ? _b2 : generateId3(),
2334
2347
  timestamp: (_d = (_c = result2.response) == null ? void 0 : _c.timestamp) != null ? _d : currentDate(),
2335
2348
  modelId: (_f = (_e = result2.response) == null ? void 0 : _e.modelId) != null ? _f : model.modelId
2336
2349
  };
2350
+ if (result2.text === void 0) {
2351
+ throw new NoObjectGeneratedError({
2352
+ message: "No object generated: the model did not return a response.",
2353
+ response: responseData,
2354
+ usage: calculateLanguageModelUsage(result2.usage)
2355
+ });
2356
+ }
2337
2357
  span2.setAttributes(
2338
2358
  selectTelemetryAttributes({
2339
2359
  telemetry,
@@ -2430,14 +2450,18 @@ async function generateObject({
2430
2450
  headers
2431
2451
  });
2432
2452
  const objectText = (_b2 = (_a14 = result2.toolCalls) == null ? void 0 : _a14[0]) == null ? void 0 : _b2.args;
2433
- if (objectText === void 0) {
2434
- throw new NoObjectGeneratedError();
2435
- }
2436
2453
  const responseData = {
2437
2454
  id: (_d = (_c = result2.response) == null ? void 0 : _c.id) != null ? _d : generateId3(),
2438
2455
  timestamp: (_f = (_e = result2.response) == null ? void 0 : _e.timestamp) != null ? _f : currentDate(),
2439
2456
  modelId: (_h = (_g = result2.response) == null ? void 0 : _g.modelId) != null ? _h : model.modelId
2440
2457
  };
2458
+ if (objectText === void 0) {
2459
+ throw new NoObjectGeneratedError({
2460
+ message: "No object generated: the tool was not called.",
2461
+ response: responseData,
2462
+ usage: calculateLanguageModelUsage(result2.usage)
2463
+ });
2464
+ }
2441
2465
  span2.setAttributes(
2442
2466
  selectTelemetryAttributes({
2443
2467
  telemetry,
@@ -2485,13 +2509,30 @@ async function generateObject({
2485
2509
  }
2486
2510
  const parseResult = (0, import_provider_utils6.safeParseJSON)({ text: result });
2487
2511
  if (!parseResult.success) {
2488
- throw parseResult.error;
2512
+ throw new NoObjectGeneratedError({
2513
+ message: "No object generated: could not parse the response.",
2514
+ cause: parseResult.error,
2515
+ text: result,
2516
+ response,
2517
+ usage: calculateLanguageModelUsage(usage)
2518
+ });
2489
2519
  }
2490
2520
  const validationResult = outputStrategy.validateFinalResult(
2491
- parseResult.value
2521
+ parseResult.value,
2522
+ {
2523
+ text: result,
2524
+ response,
2525
+ usage: calculateLanguageModelUsage(usage)
2526
+ }
2492
2527
  );
2493
2528
  if (!validationResult.success) {
2494
- throw validationResult.error;
2529
+ throw new NoObjectGeneratedError({
2530
+ message: "No object generated: response did not match schema.",
2531
+ cause: validationResult.error,
2532
+ text: result,
2533
+ response,
2534
+ usage: calculateLanguageModelUsage(usage)
2535
+ });
2495
2536
  }
2496
2537
  span.setAttributes(
2497
2538
  selectTelemetryAttributes({
@@ -3026,12 +3067,25 @@ var DefaultStreamObjectResult = class {
3026
3067
  ...response,
3027
3068
  headers: rawResponse == null ? void 0 : rawResponse.headers
3028
3069
  });
3029
- const validationResult = outputStrategy.validateFinalResult(latestObjectJson);
3070
+ const validationResult = outputStrategy.validateFinalResult(
3071
+ latestObjectJson,
3072
+ {
3073
+ text: accumulatedText,
3074
+ response,
3075
+ usage
3076
+ }
3077
+ );
3030
3078
  if (validationResult.success) {
3031
3079
  object2 = validationResult.value;
3032
3080
  self.objectPromise.resolve(object2);
3033
3081
  } else {
3034
- error = validationResult.error;
3082
+ error = new NoObjectGeneratedError({
3083
+ message: "No object generated: response did not match schema.",
3084
+ cause: validationResult.error,
3085
+ text: accumulatedText,
3086
+ response,
3087
+ usage
3088
+ });
3035
3089
  self.objectPromise.reject(error);
3036
3090
  }
3037
3091
  break;
@@ -3777,7 +3831,13 @@ async function generateText({
3777
3831
  );
3778
3832
  return new DefaultGenerateTextResult({
3779
3833
  text: text2,
3780
- output: output == null ? void 0 : output.parseOutput({ text: text2 }),
3834
+ output: output == null ? void 0 : output.parseOutput(
3835
+ { text: text2 },
3836
+ {
3837
+ response: currentModelResponse.response,
3838
+ usage
3839
+ }
3840
+ ),
3781
3841
  toolCalls: currentToolCalls,
3782
3842
  toolResults: currentToolResults,
3783
3843
  finishReason: currentModelResponse.finishReason,
@@ -3920,8 +3980,31 @@ var object = ({
3920
3980
  schema: schema.jsonSchema
3921
3981
  });
3922
3982
  },
3923
- parseOutput({ text: text2 }) {
3924
- return (0, import_provider_utils10.parseJSON)({ text: text2, schema });
3983
+ parseOutput({ text: text2 }, context) {
3984
+ const parseResult = (0, import_provider_utils10.safeParseJSON)({ text: text2 });
3985
+ if (!parseResult.success) {
3986
+ throw new NoObjectGeneratedError({
3987
+ message: "No object generated: could not parse the response.",
3988
+ cause: parseResult.error,
3989
+ text: text2,
3990
+ response: context.response,
3991
+ usage: context.usage
3992
+ });
3993
+ }
3994
+ const validationResult = (0, import_provider_utils10.safeValidateTypes)({
3995
+ value: parseResult.value,
3996
+ schema
3997
+ });
3998
+ if (!validationResult.success) {
3999
+ throw new NoObjectGeneratedError({
4000
+ message: "No object generated: response did not match schema.",
4001
+ cause: validationResult.error,
4002
+ text: text2,
4003
+ response: context.response,
4004
+ usage: context.usage
4005
+ });
4006
+ }
4007
+ return validationResult.value;
3925
4008
  }
3926
4009
  };
3927
4010
  };
@@ -4268,7 +4351,7 @@ function streamText({
4268
4351
  tools,
4269
4352
  toolChoice,
4270
4353
  toolCallStreaming,
4271
- transform,
4354
+ transform: transform == null ? void 0 : transform({ tools }),
4272
4355
  activeTools,
4273
4356
  repairToolCall,
4274
4357
  maxSteps,
@@ -5050,7 +5133,7 @@ function smoothStream({
5050
5133
  _internal: { delay: delay2 = delay } = {}
5051
5134
  } = {}) {
5052
5135
  let buffer = "";
5053
- return new TransformStream({
5136
+ return () => new TransformStream({
5054
5137
  async transform(chunk, controller) {
5055
5138
  if (chunk.type === "step-finish") {
5056
5139
  if (buffer.length > 0) {