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.d.mts +228 -240
- package/dist/index.d.ts +228 -240
- package/dist/index.js +337 -93
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +323 -75
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -7
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: () =>
|
23
|
+
AISDKError: () => import_provider15.AISDKError,
|
24
24
|
AIStream: () => AIStream,
|
25
|
-
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: () =>
|
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: () =>
|
44
|
-
InvalidResponseDataError: () =>
|
43
|
+
InvalidPromptError: () => import_provider15.InvalidPromptError,
|
44
|
+
InvalidResponseDataError: () => import_provider15.InvalidResponseDataError,
|
45
45
|
InvalidToolArgumentsError: () => InvalidToolArgumentsError,
|
46
|
-
JSONParseError: () =>
|
46
|
+
JSONParseError: () => import_provider15.JSONParseError,
|
47
47
|
LangChainAdapter: () => langchain_adapter_exports,
|
48
48
|
LangChainStream: () => LangChainStream,
|
49
|
-
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: () =>
|
61
|
-
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
|
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-
|
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
|
-
|
1418
|
-
|
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
|
-
|
1425
|
-
|
1426
|
-
// add a newline if
|
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 :
|
1532
|
-
system,
|
1533
|
-
schema:
|
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:
|
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:
|
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,
|
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(
|
1968
|
+
output: () => JSON.stringify(validationResult.value)
|
1726
1969
|
}
|
1727
1970
|
}
|
1728
1971
|
})
|
1729
1972
|
);
|
1730
1973
|
return new DefaultGenerateObjectResult({
|
1731
|
-
object:
|
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(
|
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 :
|
1897
|
-
system,
|
1898
|
-
schema:
|
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:
|
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:
|
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
|
-
|
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
|
2087
|
-
|
2088
|
-
|
2089
|
-
|
2090
|
-
|
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
|
-
|
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 = (
|
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
|
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
|
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,
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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");
|