ai 3.3.15 → 3.3.17

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.js CHANGED
@@ -20,9 +20,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // streams/index.ts
21
21
  var streams_exports = {};
22
22
  __export(streams_exports, {
23
- AISDKError: () => import_provider14.AISDKError,
23
+ AISDKError: () => import_provider15.AISDKError,
24
24
  AIStream: () => AIStream,
25
- APICallError: () => import_provider14.APICallError,
25
+ APICallError: () => import_provider15.APICallError,
26
26
  AWSBedrockAnthropicMessagesStream: () => AWSBedrockAnthropicMessagesStream,
27
27
  AWSBedrockAnthropicStream: () => AWSBedrockAnthropicStream,
28
28
  AWSBedrockCohereStream: () => AWSBedrockCohereStream,
@@ -32,7 +32,7 @@ __export(streams_exports, {
32
32
  AssistantResponse: () => AssistantResponse,
33
33
  CohereStream: () => CohereStream,
34
34
  DownloadError: () => DownloadError,
35
- EmptyResponseBodyError: () => import_provider14.EmptyResponseBodyError,
35
+ EmptyResponseBodyError: () => import_provider15.EmptyResponseBodyError,
36
36
  GoogleGenerativeAIStream: () => GoogleGenerativeAIStream,
37
37
  HuggingFaceStream: () => HuggingFaceStream,
38
38
  InkeepStream: () => InkeepStream,
@@ -40,13 +40,13 @@ __export(streams_exports, {
40
40
  InvalidDataContentError: () => InvalidDataContentError,
41
41
  InvalidMessageRoleError: () => InvalidMessageRoleError,
42
42
  InvalidModelIdError: () => InvalidModelIdError,
43
- InvalidPromptError: () => import_provider14.InvalidPromptError,
44
- InvalidResponseDataError: () => import_provider14.InvalidResponseDataError,
43
+ InvalidPromptError: () => import_provider15.InvalidPromptError,
44
+ InvalidResponseDataError: () => import_provider15.InvalidResponseDataError,
45
45
  InvalidToolArgumentsError: () => InvalidToolArgumentsError,
46
- JSONParseError: () => import_provider14.JSONParseError,
46
+ JSONParseError: () => import_provider15.JSONParseError,
47
47
  LangChainAdapter: () => langchain_adapter_exports,
48
48
  LangChainStream: () => LangChainStream,
49
- LoadAPIKeyError: () => import_provider14.LoadAPIKeyError,
49
+ LoadAPIKeyError: () => import_provider15.LoadAPIKeyError,
50
50
  MistralStream: () => MistralStream,
51
51
  NoObjectGeneratedError: () => NoObjectGeneratedError,
52
52
  NoSuchModelError: () => NoSuchModelError,
@@ -57,8 +57,8 @@ __export(streams_exports, {
57
57
  RetryError: () => RetryError,
58
58
  StreamData: () => StreamData2,
59
59
  StreamingTextResponse: () => StreamingTextResponse,
60
- TypeValidationError: () => import_provider14.TypeValidationError,
61
- UnsupportedFunctionalityError: () => import_provider14.UnsupportedFunctionalityError,
60
+ TypeValidationError: () => import_provider15.TypeValidationError,
61
+ UnsupportedFunctionalityError: () => import_provider15.UnsupportedFunctionalityError,
62
62
  convertToCoreMessages: () => convertToCoreMessages,
63
63
  cosineSimilarity: () => cosineSimilarity,
64
64
  createCallbacksTransformer: () => createCallbacksTransformer,
@@ -669,8 +669,7 @@ var DefaultEmbedManyResult = class {
669
669
  };
670
670
 
671
671
  // core/generate-object/generate-object.ts
672
- var import_provider_utils5 = require("@ai-sdk/provider-utils");
673
- var import_ui_utils = require("@ai-sdk/ui-utils");
672
+ var import_provider_utils6 = require("@ai-sdk/provider-utils");
674
673
 
675
674
  // core/prompt/convert-to-language-model-prompt.ts
676
675
  var import_provider_utils3 = require("@ai-sdk/provider-utils");
@@ -1411,21 +1410,22 @@ function prepareResponseHeaders(init, {
1411
1410
  return headers;
1412
1411
  }
1413
1412
 
1414
- // core/generate-object/inject-json-schema-into-system.ts
1413
+ // core/generate-object/inject-json-instruction.ts
1415
1414
  var DEFAULT_SCHEMA_PREFIX = "JSON schema:";
1416
1415
  var DEFAULT_SCHEMA_SUFFIX = "You MUST answer with a JSON object that matches the JSON schema above.";
1417
- function injectJsonSchemaIntoSystem({
1418
- system,
1416
+ var DEFAULT_GENERIC_SUFFIX = "You MUST answer with JSON.";
1417
+ function injectJsonInstruction({
1418
+ prompt,
1419
1419
  schema,
1420
- schemaPrefix = DEFAULT_SCHEMA_PREFIX,
1421
- schemaSuffix = DEFAULT_SCHEMA_SUFFIX
1420
+ schemaPrefix = schema != null ? DEFAULT_SCHEMA_PREFIX : void 0,
1421
+ schemaSuffix = schema != null ? DEFAULT_SCHEMA_SUFFIX : DEFAULT_GENERIC_SUFFIX
1422
1422
  }) {
1423
1423
  return [
1424
- system,
1425
- system != null ? "" : null,
1426
- // add a newline if system is not null
1424
+ prompt != null && prompt.length > 0 ? prompt : void 0,
1425
+ prompt != null && prompt.length > 0 ? "" : void 0,
1426
+ // add a newline if prompt is not null
1427
1427
  schemaPrefix,
1428
- JSON.stringify(schema),
1428
+ schema != null ? JSON.stringify(schema) : void 0,
1429
1429
  schemaSuffix
1430
1430
  ].filter((line) => line != null).join("\n");
1431
1431
  }
@@ -1465,6 +1465,233 @@ var NoObjectGeneratedError = class extends import_provider8.AISDKError {
1465
1465
  };
1466
1466
  _a6 = symbol6;
1467
1467
 
1468
+ // core/generate-object/output-strategy.ts
1469
+ var import_provider9 = require("@ai-sdk/provider");
1470
+ var import_provider_utils5 = require("@ai-sdk/provider-utils");
1471
+ var import_ui_utils = require("@ai-sdk/ui-utils");
1472
+
1473
+ // core/util/async-iterable-stream.ts
1474
+ function createAsyncIterableStream(source, transformer) {
1475
+ const transformedStream = source.pipeThrough(
1476
+ new TransformStream(transformer)
1477
+ );
1478
+ transformedStream[Symbol.asyncIterator] = () => {
1479
+ const reader = transformedStream.getReader();
1480
+ return {
1481
+ async next() {
1482
+ const { done, value } = await reader.read();
1483
+ return done ? { done: true, value: void 0 } : { done: false, value };
1484
+ }
1485
+ };
1486
+ };
1487
+ return transformedStream;
1488
+ }
1489
+
1490
+ // core/generate-object/output-strategy.ts
1491
+ var noSchemaOutputStrategy = {
1492
+ type: "no-schema",
1493
+ jsonSchema: void 0,
1494
+ validatePartialResult({ value }) {
1495
+ return { success: true, value };
1496
+ },
1497
+ validateFinalResult(value) {
1498
+ return value === void 0 ? { success: false, error: new NoObjectGeneratedError() } : { success: true, value };
1499
+ },
1500
+ createElementStream() {
1501
+ throw new import_provider9.UnsupportedFunctionalityError({
1502
+ functionality: "element streams in no-schema mode"
1503
+ });
1504
+ }
1505
+ };
1506
+ var objectOutputStrategy = (schema) => ({
1507
+ type: "object",
1508
+ jsonSchema: schema.jsonSchema,
1509
+ validatePartialResult({ value }) {
1510
+ return { success: true, value };
1511
+ },
1512
+ validateFinalResult(value) {
1513
+ return (0, import_provider_utils5.safeValidateTypes)({ value, schema });
1514
+ },
1515
+ createElementStream() {
1516
+ throw new import_provider9.UnsupportedFunctionalityError({
1517
+ functionality: "element streams in object mode"
1518
+ });
1519
+ }
1520
+ });
1521
+ var arrayOutputStrategy = (schema) => {
1522
+ const { $schema, ...itemSchema } = schema.jsonSchema;
1523
+ return {
1524
+ type: "object",
1525
+ // wrap in object that contains array of elements, since most LLMs will not
1526
+ // be able to generate an array directly:
1527
+ // possible future optimization: use arrays directly when model supports grammar-guided generation
1528
+ jsonSchema: {
1529
+ $schema: "http://json-schema.org/draft-07/schema#",
1530
+ type: "object",
1531
+ properties: {
1532
+ elements: { type: "array", items: itemSchema }
1533
+ },
1534
+ required: ["elements"],
1535
+ additionalProperties: false
1536
+ },
1537
+ validatePartialResult({
1538
+ value,
1539
+ parseState
1540
+ }) {
1541
+ if (!(0, import_provider9.isJSONObject)(value) || !(0, import_provider9.isJSONArray)(value.elements)) {
1542
+ return {
1543
+ success: false,
1544
+ error: new import_provider9.TypeValidationError({
1545
+ value,
1546
+ cause: "value must be an object that contains an array of elements"
1547
+ })
1548
+ };
1549
+ }
1550
+ const inputArray = value.elements;
1551
+ const resultArray = [];
1552
+ for (let i = 0; i < inputArray.length; i++) {
1553
+ const element = inputArray[i];
1554
+ const result = (0, import_provider_utils5.safeValidateTypes)({ value: element, schema });
1555
+ if (i === inputArray.length - 1 && (!result.success || parseState !== "successful-parse")) {
1556
+ continue;
1557
+ }
1558
+ if (!result.success) {
1559
+ return result;
1560
+ }
1561
+ resultArray.push(result.value);
1562
+ }
1563
+ return { success: true, value: resultArray };
1564
+ },
1565
+ validateFinalResult(value) {
1566
+ if (!(0, import_provider9.isJSONObject)(value) || !(0, import_provider9.isJSONArray)(value.elements)) {
1567
+ return {
1568
+ success: false,
1569
+ error: new import_provider9.TypeValidationError({
1570
+ value,
1571
+ cause: "value must be an object that contains an array of elements"
1572
+ })
1573
+ };
1574
+ }
1575
+ const inputArray = value.elements;
1576
+ for (const element of inputArray) {
1577
+ const result = (0, import_provider_utils5.safeValidateTypes)({ value: element, schema });
1578
+ if (!result.success) {
1579
+ return result;
1580
+ }
1581
+ }
1582
+ return { success: true, value: inputArray };
1583
+ },
1584
+ createElementStream(originalStream) {
1585
+ let publishedElements = 0;
1586
+ return createAsyncIterableStream(originalStream, {
1587
+ transform(chunk, controller) {
1588
+ switch (chunk.type) {
1589
+ case "object": {
1590
+ const array = chunk.object;
1591
+ for (; publishedElements < array.length; publishedElements++) {
1592
+ controller.enqueue(array[publishedElements]);
1593
+ }
1594
+ break;
1595
+ }
1596
+ case "text-delta":
1597
+ case "finish":
1598
+ break;
1599
+ case "error":
1600
+ controller.error(chunk.error);
1601
+ break;
1602
+ default: {
1603
+ const _exhaustiveCheck = chunk;
1604
+ throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);
1605
+ }
1606
+ }
1607
+ }
1608
+ });
1609
+ }
1610
+ };
1611
+ };
1612
+ function getOutputStrategy({
1613
+ output,
1614
+ schema
1615
+ }) {
1616
+ switch (output) {
1617
+ case "object":
1618
+ return objectOutputStrategy((0, import_ui_utils.asSchema)(schema));
1619
+ case "array":
1620
+ return arrayOutputStrategy((0, import_ui_utils.asSchema)(schema));
1621
+ case "no-schema":
1622
+ return noSchemaOutputStrategy;
1623
+ default: {
1624
+ const _exhaustiveCheck = output;
1625
+ throw new Error(`Unsupported output: ${_exhaustiveCheck}`);
1626
+ }
1627
+ }
1628
+ }
1629
+
1630
+ // core/generate-object/validate-object-generation-input.ts
1631
+ function validateObjectGenerationInput({
1632
+ output,
1633
+ mode,
1634
+ schema,
1635
+ schemaName,
1636
+ schemaDescription
1637
+ }) {
1638
+ if (output != null && output !== "object" && output !== "array" && output !== "no-schema") {
1639
+ throw new InvalidArgumentError({
1640
+ parameter: "output",
1641
+ value: output,
1642
+ message: "Invalid output type."
1643
+ });
1644
+ }
1645
+ if (output === "no-schema") {
1646
+ if (mode === "auto" || mode === "tool") {
1647
+ throw new InvalidArgumentError({
1648
+ parameter: "mode",
1649
+ value: mode,
1650
+ message: 'Mode must be "json" for no-schema output.'
1651
+ });
1652
+ }
1653
+ if (schema != null) {
1654
+ throw new InvalidArgumentError({
1655
+ parameter: "schema",
1656
+ value: schema,
1657
+ message: "Schema is not supported for no-schema output."
1658
+ });
1659
+ }
1660
+ if (schemaDescription != null) {
1661
+ throw new InvalidArgumentError({
1662
+ parameter: "schemaDescription",
1663
+ value: schemaDescription,
1664
+ message: "Schema description is not supported for no-schema output."
1665
+ });
1666
+ }
1667
+ if (schemaName != null) {
1668
+ throw new InvalidArgumentError({
1669
+ parameter: "schemaName",
1670
+ value: schemaName,
1671
+ message: "Schema name is not supported for no-schema output."
1672
+ });
1673
+ }
1674
+ }
1675
+ if (output === "object") {
1676
+ if (schema == null) {
1677
+ throw new InvalidArgumentError({
1678
+ parameter: "schema",
1679
+ value: schema,
1680
+ message: "Schema is required for object output."
1681
+ });
1682
+ }
1683
+ }
1684
+ if (output === "array") {
1685
+ if (schema == null) {
1686
+ throw new InvalidArgumentError({
1687
+ parameter: "schema",
1688
+ value: schema,
1689
+ message: "Element schema is required for array output."
1690
+ });
1691
+ }
1692
+ }
1693
+ }
1694
+
1468
1695
  // core/generate-object/generate-object.ts
1469
1696
  async function generateObject({
1470
1697
  model,
@@ -1472,6 +1699,7 @@ async function generateObject({
1472
1699
  schemaName,
1473
1700
  schemaDescription,
1474
1701
  mode,
1702
+ output = "object",
1475
1703
  system,
1476
1704
  prompt,
1477
1705
  messages,
@@ -1482,13 +1710,23 @@ async function generateObject({
1482
1710
  ...settings
1483
1711
  }) {
1484
1712
  var _a12;
1713
+ validateObjectGenerationInput({
1714
+ output,
1715
+ mode,
1716
+ schema: inputSchema,
1717
+ schemaName,
1718
+ schemaDescription
1719
+ });
1720
+ const outputStrategy = getOutputStrategy({ output, schema: inputSchema });
1721
+ if (outputStrategy.type === "no-schema" && mode === void 0) {
1722
+ mode = "json";
1723
+ }
1485
1724
  const baseTelemetryAttributes = getBaseTelemetryAttributes({
1486
1725
  model,
1487
1726
  telemetry,
1488
1727
  headers,
1489
1728
  settings: { ...settings, maxRetries }
1490
1729
  });
1491
- const schema = (0, import_ui_utils.asSchema)(inputSchema);
1492
1730
  const tracer = getTracer({ isEnabled: (_a12 = telemetry == null ? void 0 : telemetry.isEnabled) != null ? _a12 : false });
1493
1731
  return recordSpan({
1494
1732
  name: "ai.generateObject",
@@ -1504,11 +1742,10 @@ async function generateObject({
1504
1742
  "ai.prompt": {
1505
1743
  input: () => JSON.stringify({ system, prompt, messages })
1506
1744
  },
1507
- "ai.schema": {
1508
- input: () => JSON.stringify(schema.jsonSchema)
1509
- },
1745
+ "ai.schema": outputStrategy.jsonSchema != null ? { input: () => JSON.stringify(outputStrategy.jsonSchema) } : void 0,
1510
1746
  "ai.schema.name": schemaName,
1511
1747
  "ai.schema.description": schemaDescription,
1748
+ "ai.settings.output": outputStrategy.type,
1512
1749
  "ai.settings.mode": mode
1513
1750
  }
1514
1751
  }),
@@ -1528,9 +1765,9 @@ async function generateObject({
1528
1765
  switch (mode) {
1529
1766
  case "json": {
1530
1767
  const validatedPrompt = validatePrompt({
1531
- system: model.supportsStructuredOutputs ? system : injectJsonSchemaIntoSystem({
1532
- system,
1533
- schema: schema.jsonSchema
1768
+ system: outputStrategy.jsonSchema == null ? injectJsonInstruction({ prompt: system }) : model.supportsStructuredOutputs ? system : injectJsonInstruction({
1769
+ prompt: system,
1770
+ schema: outputStrategy.jsonSchema
1534
1771
  }),
1535
1772
  prompt,
1536
1773
  messages
@@ -1571,7 +1808,7 @@ async function generateObject({
1571
1808
  const result2 = await model.doGenerate({
1572
1809
  mode: {
1573
1810
  type: "object-json",
1574
- schema: schema.jsonSchema,
1811
+ schema: outputStrategy.jsonSchema,
1575
1812
  name: schemaName,
1576
1813
  description: schemaDescription
1577
1814
  },
@@ -1659,7 +1896,7 @@ async function generateObject({
1659
1896
  type: "function",
1660
1897
  name: schemaName != null ? schemaName : "json",
1661
1898
  description: schemaDescription != null ? schemaDescription : "Respond with a JSON object.",
1662
- parameters: schema.jsonSchema
1899
+ parameters: outputStrategy.jsonSchema
1663
1900
  }
1664
1901
  },
1665
1902
  ...prepareCallSettings(settings),
@@ -1710,10 +1947,16 @@ async function generateObject({
1710
1947
  throw new Error(`Unsupported mode: ${_exhaustiveCheck}`);
1711
1948
  }
1712
1949
  }
1713
- const parseResult = (0, import_provider_utils5.safeParseJSON)({ text: result, schema });
1950
+ const parseResult = (0, import_provider_utils6.safeParseJSON)({ text: result });
1714
1951
  if (!parseResult.success) {
1715
1952
  throw parseResult.error;
1716
1953
  }
1954
+ const validationResult = outputStrategy.validateFinalResult(
1955
+ parseResult.value
1956
+ );
1957
+ if (!validationResult.success) {
1958
+ throw validationResult.error;
1959
+ }
1717
1960
  span.setAttributes(
1718
1961
  selectTelemetryAttributes({
1719
1962
  telemetry,
@@ -1722,13 +1965,13 @@ async function generateObject({
1722
1965
  "ai.usage.promptTokens": usage.promptTokens,
1723
1966
  "ai.usage.completionTokens": usage.completionTokens,
1724
1967
  "ai.result.object": {
1725
- output: () => JSON.stringify(parseResult.value)
1968
+ output: () => JSON.stringify(validationResult.value)
1726
1969
  }
1727
1970
  }
1728
1971
  })
1729
1972
  );
1730
1973
  return new DefaultGenerateObjectResult({
1731
- object: parseResult.value,
1974
+ object: validationResult.value,
1732
1975
  finishReason,
1733
1976
  usage: calculateCompletionTokenUsage(usage),
1734
1977
  warnings,
@@ -1762,7 +2005,6 @@ var DefaultGenerateObjectResult = class {
1762
2005
  var experimental_generateObject = generateObject;
1763
2006
 
1764
2007
  // core/generate-object/stream-object.ts
1765
- var import_provider_utils6 = require("@ai-sdk/provider-utils");
1766
2008
  var import_ui_utils2 = require("@ai-sdk/ui-utils");
1767
2009
 
1768
2010
  // util/create-resolvable-promise.ts
@@ -1818,23 +2060,6 @@ var DelayedPromise = class {
1818
2060
  }
1819
2061
  };
1820
2062
 
1821
- // core/util/async-iterable-stream.ts
1822
- function createAsyncIterableStream(source, transformer) {
1823
- const transformedStream = source.pipeThrough(
1824
- new TransformStream(transformer)
1825
- );
1826
- transformedStream[Symbol.asyncIterator] = () => {
1827
- const reader = transformedStream.getReader();
1828
- return {
1829
- async next() {
1830
- const { done, value } = await reader.read();
1831
- return done ? { done: true, value: void 0 } : { done: false, value };
1832
- }
1833
- };
1834
- };
1835
- return transformedStream;
1836
- }
1837
-
1838
2063
  // core/generate-object/stream-object.ts
1839
2064
  async function streamObject({
1840
2065
  model,
@@ -1842,6 +2067,7 @@ async function streamObject({
1842
2067
  schemaName,
1843
2068
  schemaDescription,
1844
2069
  mode,
2070
+ output = "object",
1845
2071
  system,
1846
2072
  prompt,
1847
2073
  messages,
@@ -1853,6 +2079,17 @@ async function streamObject({
1853
2079
  ...settings
1854
2080
  }) {
1855
2081
  var _a12;
2082
+ validateObjectGenerationInput({
2083
+ output,
2084
+ mode,
2085
+ schema: inputSchema,
2086
+ schemaName,
2087
+ schemaDescription
2088
+ });
2089
+ const outputStrategy = getOutputStrategy({ output, schema: inputSchema });
2090
+ if (outputStrategy.type === "no-schema" && mode === void 0) {
2091
+ mode = "json";
2092
+ }
1856
2093
  const baseTelemetryAttributes = getBaseTelemetryAttributes({
1857
2094
  model,
1858
2095
  telemetry,
@@ -1861,7 +2098,6 @@ async function streamObject({
1861
2098
  });
1862
2099
  const tracer = getTracer({ isEnabled: (_a12 = telemetry == null ? void 0 : telemetry.isEnabled) != null ? _a12 : false });
1863
2100
  const retry = retryWithExponentialBackoff({ maxRetries });
1864
- const schema = (0, import_ui_utils2.asSchema)(inputSchema);
1865
2101
  return recordSpan({
1866
2102
  name: "ai.streamObject",
1867
2103
  attributes: selectTelemetryAttributes({
@@ -1876,9 +2112,10 @@ async function streamObject({
1876
2112
  "ai.prompt": {
1877
2113
  input: () => JSON.stringify({ system, prompt, messages })
1878
2114
  },
1879
- "ai.schema": { input: () => JSON.stringify(schema.jsonSchema) },
2115
+ "ai.schema": outputStrategy.jsonSchema != null ? { input: () => JSON.stringify(outputStrategy.jsonSchema) } : void 0,
1880
2116
  "ai.schema.name": schemaName,
1881
2117
  "ai.schema.description": schemaDescription,
2118
+ "ai.settings.output": outputStrategy.type,
1882
2119
  "ai.settings.mode": mode
1883
2120
  }
1884
2121
  }),
@@ -1893,9 +2130,9 @@ async function streamObject({
1893
2130
  switch (mode) {
1894
2131
  case "json": {
1895
2132
  const validatedPrompt = validatePrompt({
1896
- system: model.supportsStructuredOutputs ? system : injectJsonSchemaIntoSystem({
1897
- system,
1898
- schema: schema.jsonSchema
2133
+ system: outputStrategy.jsonSchema == null ? injectJsonInstruction({ prompt: system }) : model.supportsStructuredOutputs ? system : injectJsonInstruction({
2134
+ prompt: system,
2135
+ schema: outputStrategy.jsonSchema
1899
2136
  }),
1900
2137
  prompt,
1901
2138
  messages
@@ -1903,7 +2140,7 @@ async function streamObject({
1903
2140
  callOptions = {
1904
2141
  mode: {
1905
2142
  type: "object-json",
1906
- schema: schema.jsonSchema,
2143
+ schema: outputStrategy.jsonSchema,
1907
2144
  name: schemaName,
1908
2145
  description: schemaDescription
1909
2146
  },
@@ -1944,7 +2181,7 @@ async function streamObject({
1944
2181
  type: "function",
1945
2182
  name: schemaName != null ? schemaName : "json",
1946
2183
  description: schemaDescription != null ? schemaDescription : "Respond with a JSON object.",
1947
- parameters: schema.jsonSchema
2184
+ parameters: outputStrategy.jsonSchema
1948
2185
  }
1949
2186
  },
1950
2187
  ...prepareCallSettings(settings),
@@ -2022,10 +2259,10 @@ async function streamObject({
2022
2259
  })
2023
2260
  );
2024
2261
  return new DefaultStreamObjectResult({
2262
+ outputStrategy,
2025
2263
  stream: stream.pipeThrough(new TransformStream(transformer)),
2026
2264
  warnings,
2027
2265
  rawResponse,
2028
- schema,
2029
2266
  onFinish,
2030
2267
  rootSpan,
2031
2268
  doStreamSpan,
@@ -2040,7 +2277,7 @@ var DefaultStreamObjectResult = class {
2040
2277
  stream,
2041
2278
  warnings,
2042
2279
  rawResponse,
2043
- schema,
2280
+ outputStrategy,
2044
2281
  onFinish,
2045
2282
  rootSpan,
2046
2283
  doStreamSpan,
@@ -2049,6 +2286,7 @@ var DefaultStreamObjectResult = class {
2049
2286
  }) {
2050
2287
  this.warnings = warnings;
2051
2288
  this.rawResponse = rawResponse;
2289
+ this.outputStrategy = outputStrategy;
2052
2290
  this.objectPromise = new DelayedPromise();
2053
2291
  const { resolve: resolveUsage, promise: usagePromise } = createResolvablePromise();
2054
2292
  this.usage = usagePromise;
@@ -2064,6 +2302,7 @@ var DefaultStreamObjectResult = class {
2064
2302
  let error;
2065
2303
  let accumulatedText = "";
2066
2304
  let delta = "";
2305
+ let latestObjectJson = void 0;
2067
2306
  let latestObject = void 0;
2068
2307
  let firstChunk = true;
2069
2308
  const self = this;
@@ -2083,20 +2322,25 @@ var DefaultStreamObjectResult = class {
2083
2322
  if (typeof chunk === "string") {
2084
2323
  accumulatedText += chunk;
2085
2324
  delta += chunk;
2086
- const currentObject = (0, import_ui_utils2.parsePartialJson)(
2087
- accumulatedText
2088
- );
2089
- if (!(0, import_ui_utils2.isDeepEqualData)(latestObject, currentObject)) {
2090
- latestObject = currentObject;
2091
- controller.enqueue({
2092
- type: "object",
2093
- object: currentObject
2094
- });
2095
- controller.enqueue({
2096
- type: "text-delta",
2097
- textDelta: delta
2325
+ const { value: currentObjectJson, state: parseState } = (0, import_ui_utils2.parsePartialJson)(accumulatedText);
2326
+ if (currentObjectJson !== void 0 && !(0, import_ui_utils2.isDeepEqualData)(latestObjectJson, currentObjectJson)) {
2327
+ const validationResult = outputStrategy.validatePartialResult({
2328
+ value: currentObjectJson,
2329
+ parseState
2098
2330
  });
2099
- delta = "";
2331
+ if (validationResult.success && !(0, import_ui_utils2.isDeepEqualData)(latestObject, validationResult.value)) {
2332
+ latestObjectJson = currentObjectJson;
2333
+ latestObject = validationResult.value;
2334
+ controller.enqueue({
2335
+ type: "object",
2336
+ object: latestObject
2337
+ });
2338
+ controller.enqueue({
2339
+ type: "text-delta",
2340
+ textDelta: delta
2341
+ });
2342
+ delta = "";
2343
+ }
2100
2344
  }
2101
2345
  return;
2102
2346
  }
@@ -2114,10 +2358,7 @@ var DefaultStreamObjectResult = class {
2114
2358
  controller.enqueue({ ...chunk, usage });
2115
2359
  resolveUsage(usage);
2116
2360
  resolveProviderMetadata(providerMetadata);
2117
- const validationResult = (0, import_provider_utils6.safeValidateTypes)({
2118
- value: latestObject,
2119
- schema
2120
- });
2361
+ const validationResult = outputStrategy.validateFinalResult(latestObjectJson);
2121
2362
  if (validationResult.success) {
2122
2363
  object = validationResult.value;
2123
2364
  self.objectPromise.resolve(object);
@@ -2212,6 +2453,9 @@ var DefaultStreamObjectResult = class {
2212
2453
  }
2213
2454
  });
2214
2455
  }
2456
+ get elementStream() {
2457
+ return this.outputStrategy.createElementStream(this.originalStream);
2458
+ }
2215
2459
  get textStream() {
2216
2460
  return createAsyncIterableStream(this.originalStream, {
2217
2461
  transform(chunk, controller) {
@@ -2310,17 +2554,17 @@ var import_provider_utils7 = require("@ai-sdk/provider-utils");
2310
2554
  var import_ui_utils4 = require("@ai-sdk/ui-utils");
2311
2555
 
2312
2556
  // errors/invalid-tool-arguments-error.ts
2313
- var import_provider9 = require("@ai-sdk/provider");
2557
+ var import_provider10 = require("@ai-sdk/provider");
2314
2558
  var name7 = "AI_InvalidToolArgumentsError";
2315
2559
  var marker7 = `vercel.ai.error.${name7}`;
2316
2560
  var symbol7 = Symbol.for(marker7);
2317
2561
  var _a7;
2318
- var InvalidToolArgumentsError = class extends import_provider9.AISDKError {
2562
+ var InvalidToolArgumentsError = class extends import_provider10.AISDKError {
2319
2563
  constructor({
2320
2564
  toolArgs,
2321
2565
  toolName,
2322
2566
  cause,
2323
- message = `Invalid arguments for tool ${toolName}: ${(0, import_provider9.getErrorMessage)(
2567
+ message = `Invalid arguments for tool ${toolName}: ${(0, import_provider10.getErrorMessage)(
2324
2568
  cause
2325
2569
  )}`
2326
2570
  }) {
@@ -2330,7 +2574,7 @@ var InvalidToolArgumentsError = class extends import_provider9.AISDKError {
2330
2574
  this.toolName = toolName;
2331
2575
  }
2332
2576
  static isInstance(error) {
2333
- return import_provider9.AISDKError.hasMarker(error, marker7);
2577
+ return import_provider10.AISDKError.hasMarker(error, marker7);
2334
2578
  }
2335
2579
  /**
2336
2580
  * @deprecated use `isInstance` instead
@@ -2355,12 +2599,12 @@ var InvalidToolArgumentsError = class extends import_provider9.AISDKError {
2355
2599
  _a7 = symbol7;
2356
2600
 
2357
2601
  // errors/no-such-tool-error.ts
2358
- var import_provider10 = require("@ai-sdk/provider");
2602
+ var import_provider11 = require("@ai-sdk/provider");
2359
2603
  var name8 = "AI_NoSuchToolError";
2360
2604
  var marker8 = `vercel.ai.error.${name8}`;
2361
2605
  var symbol8 = Symbol.for(marker8);
2362
2606
  var _a8;
2363
- var NoSuchToolError = class extends import_provider10.AISDKError {
2607
+ var NoSuchToolError = class extends import_provider11.AISDKError {
2364
2608
  constructor({
2365
2609
  toolName,
2366
2610
  availableTools = void 0,
@@ -2372,7 +2616,7 @@ var NoSuchToolError = class extends import_provider10.AISDKError {
2372
2616
  this.availableTools = availableTools;
2373
2617
  }
2374
2618
  static isInstance(error) {
2375
- return import_provider10.AISDKError.hasMarker(error, marker8);
2619
+ return import_provider11.AISDKError.hasMarker(error, marker8);
2376
2620
  }
2377
2621
  /**
2378
2622
  * @deprecated use `isInstance` instead
@@ -3613,12 +3857,12 @@ function convertToCoreMessages(messages) {
3613
3857
  }
3614
3858
 
3615
3859
  // core/registry/invalid-model-id-error.ts
3616
- var import_provider11 = require("@ai-sdk/provider");
3860
+ var import_provider12 = require("@ai-sdk/provider");
3617
3861
  var name9 = "AI_InvalidModelIdError";
3618
3862
  var marker9 = `vercel.ai.error.${name9}`;
3619
3863
  var symbol9 = Symbol.for(marker9);
3620
3864
  var _a9;
3621
- var InvalidModelIdError = class extends import_provider11.AISDKError {
3865
+ var InvalidModelIdError = class extends import_provider12.AISDKError {
3622
3866
  constructor({
3623
3867
  id,
3624
3868
  message = `Invalid model id: ${id}`
@@ -3628,7 +3872,7 @@ var InvalidModelIdError = class extends import_provider11.AISDKError {
3628
3872
  this.id = id;
3629
3873
  }
3630
3874
  static isInstance(error) {
3631
- return import_provider11.AISDKError.hasMarker(error, marker9);
3875
+ return import_provider12.AISDKError.hasMarker(error, marker9);
3632
3876
  }
3633
3877
  /**
3634
3878
  * @deprecated use `isInstance` instead
@@ -3651,12 +3895,12 @@ var InvalidModelIdError = class extends import_provider11.AISDKError {
3651
3895
  _a9 = symbol9;
3652
3896
 
3653
3897
  // core/registry/no-such-model-error.ts
3654
- var import_provider12 = require("@ai-sdk/provider");
3898
+ var import_provider13 = require("@ai-sdk/provider");
3655
3899
  var name10 = "AI_NoSuchModelError";
3656
3900
  var marker10 = `vercel.ai.error.${name10}`;
3657
3901
  var symbol10 = Symbol.for(marker10);
3658
3902
  var _a10;
3659
- var NoSuchModelError = class extends import_provider12.AISDKError {
3903
+ var NoSuchModelError = class extends import_provider13.AISDKError {
3660
3904
  constructor({
3661
3905
  modelId,
3662
3906
  modelType,
@@ -3668,7 +3912,7 @@ var NoSuchModelError = class extends import_provider12.AISDKError {
3668
3912
  this.modelType = modelType;
3669
3913
  }
3670
3914
  static isInstance(error) {
3671
- return import_provider12.AISDKError.hasMarker(error, marker10);
3915
+ return import_provider13.AISDKError.hasMarker(error, marker10);
3672
3916
  }
3673
3917
  /**
3674
3918
  * @deprecated use `isInstance` instead
@@ -3692,12 +3936,12 @@ var NoSuchModelError = class extends import_provider12.AISDKError {
3692
3936
  _a10 = symbol10;
3693
3937
 
3694
3938
  // core/registry/no-such-provider-error.ts
3695
- var import_provider13 = require("@ai-sdk/provider");
3939
+ var import_provider14 = require("@ai-sdk/provider");
3696
3940
  var name11 = "AI_NoSuchProviderError";
3697
3941
  var marker11 = `vercel.ai.error.${name11}`;
3698
3942
  var symbol11 = Symbol.for(marker11);
3699
3943
  var _a11;
3700
- var NoSuchProviderError = class extends import_provider13.AISDKError {
3944
+ var NoSuchProviderError = class extends import_provider14.AISDKError {
3701
3945
  constructor({
3702
3946
  providerId,
3703
3947
  availableProviders,
@@ -3709,7 +3953,7 @@ var NoSuchProviderError = class extends import_provider13.AISDKError {
3709
3953
  this.availableProviders = availableProviders;
3710
3954
  }
3711
3955
  static isInstance(error) {
3712
- return import_provider13.AISDKError.hasMarker(error, marker11);
3956
+ return import_provider14.AISDKError.hasMarker(error, marker11);
3713
3957
  }
3714
3958
  /**
3715
3959
  * @deprecated use `isInstance` instead
@@ -3823,7 +4067,7 @@ function magnitude(vector) {
3823
4067
  }
3824
4068
 
3825
4069
  // errors/index.ts
3826
- var import_provider14 = require("@ai-sdk/provider");
4070
+ var import_provider15 = require("@ai-sdk/provider");
3827
4071
 
3828
4072
  // streams/ai-stream.ts
3829
4073
  var import_eventsource_parser = require("eventsource-parser");