ai 6.0.264 → 6.0.266
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 +20 -0
- package/dist/index.js +86 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +86 -21
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.js +1 -1
- package/dist/internal/index.mjs +1 -1
- package/docs/02-foundations/02-providers-and-models.mdx +2 -2
- package/package.json +3 -3
- package/src/generate-text/generate-text.ts +21 -1
- package/src/generate-text/stream-text.ts +69 -13
- package/src/generate-text/validate-tool-approvals.ts +24 -8
- package/src/util/create-stitchable-stream.ts +9 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# ai
|
|
2
2
|
|
|
3
|
+
## 6.0.266
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- a1bafb1: Continue approved `generateText` and `streamText` turns with a model-visible tool error when revalidated tool input is invalid.
|
|
8
|
+
- 3cb50fc: Prevent aborted, errored, or cancelled `streamText` calls from retaining per-call state through abort cleanup listeners.
|
|
9
|
+
- Updated dependencies [5642849]
|
|
10
|
+
- @ai-sdk/provider-utils@4.0.48
|
|
11
|
+
- @ai-sdk/gateway@3.0.181
|
|
12
|
+
|
|
13
|
+
## 6.0.265
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- Updated dependencies [2d172fb]
|
|
18
|
+
- Updated dependencies [f6efa51]
|
|
19
|
+
- Updated dependencies [3539755]
|
|
20
|
+
- @ai-sdk/provider-utils@4.0.47
|
|
21
|
+
- @ai-sdk/gateway@3.0.180
|
|
22
|
+
|
|
3
23
|
## 6.0.264
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -1304,7 +1304,7 @@ function detectMediaType({
|
|
|
1304
1304
|
var import_provider_utils3 = require("@ai-sdk/provider-utils");
|
|
1305
1305
|
|
|
1306
1306
|
// src/version.ts
|
|
1307
|
-
var VERSION = true ? "6.0.
|
|
1307
|
+
var VERSION = true ? "6.0.266" : "0.0.0-test";
|
|
1308
1308
|
|
|
1309
1309
|
// src/util/download/download.ts
|
|
1310
1310
|
var download = async ({
|
|
@@ -3323,6 +3323,7 @@ async function validateApprovedToolApprovals({
|
|
|
3323
3323
|
var _a22;
|
|
3324
3324
|
const approved = [];
|
|
3325
3325
|
const denied = [];
|
|
3326
|
+
const invalid = [];
|
|
3326
3327
|
for (const approval of approvedToolApprovals) {
|
|
3327
3328
|
const { toolCall, approvalRequest } = approval;
|
|
3328
3329
|
const tool2 = tools == null ? void 0 : tools[toolCall.toolName];
|
|
@@ -3356,11 +3357,15 @@ async function validateApprovedToolApprovals({
|
|
|
3356
3357
|
schema: (0, import_provider_utils12.asSchema)(tool2.inputSchema)
|
|
3357
3358
|
});
|
|
3358
3359
|
if (!validation.success) {
|
|
3359
|
-
|
|
3360
|
-
|
|
3361
|
-
|
|
3362
|
-
|
|
3360
|
+
invalid.push({
|
|
3361
|
+
...approval,
|
|
3362
|
+
error: new InvalidToolInputError({
|
|
3363
|
+
toolName: toolCall.toolName,
|
|
3364
|
+
toolInput: JSON.stringify(toolCall.input),
|
|
3365
|
+
cause: validation.error
|
|
3366
|
+
})
|
|
3363
3367
|
});
|
|
3368
|
+
continue;
|
|
3364
3369
|
}
|
|
3365
3370
|
}
|
|
3366
3371
|
const approvalNeeded = tool2 != null && await isApprovalNeeded({
|
|
@@ -3382,7 +3387,11 @@ async function validateApprovedToolApprovals({
|
|
|
3382
3387
|
});
|
|
3383
3388
|
}
|
|
3384
3389
|
}
|
|
3385
|
-
return {
|
|
3390
|
+
return {
|
|
3391
|
+
approvedToolApprovals: approved,
|
|
3392
|
+
deniedToolApprovals: denied,
|
|
3393
|
+
invalidToolApprovals: invalid
|
|
3394
|
+
};
|
|
3386
3395
|
}
|
|
3387
3396
|
|
|
3388
3397
|
// src/generate-text/output.ts
|
|
@@ -4638,7 +4647,8 @@ async function generateText({
|
|
|
4638
4647
|
} = collectToolApprovals({ messages: initialMessages });
|
|
4639
4648
|
const {
|
|
4640
4649
|
approvedToolApprovals: localApprovedToolApprovals,
|
|
4641
|
-
deniedToolApprovals: revalidationDeniedToolApprovals
|
|
4650
|
+
deniedToolApprovals: revalidationDeniedToolApprovals,
|
|
4651
|
+
invalidToolApprovals
|
|
4642
4652
|
} = await validateApprovedToolApprovals({
|
|
4643
4653
|
approvedToolApprovals: approvedToolApprovals.filter(
|
|
4644
4654
|
(toolApproval) => !toolApproval.toolCall.providerExecuted
|
|
@@ -4652,7 +4662,7 @@ async function generateText({
|
|
|
4652
4662
|
...collectedDeniedToolApprovals,
|
|
4653
4663
|
...revalidationDeniedToolApprovals
|
|
4654
4664
|
];
|
|
4655
|
-
if (deniedToolApprovals.length > 0 || localApprovedToolApprovals.length > 0) {
|
|
4665
|
+
if (deniedToolApprovals.length > 0 || localApprovedToolApprovals.length > 0 || invalidToolApprovals.length > 0) {
|
|
4656
4666
|
const toolOutputs = await executeTools({
|
|
4657
4667
|
toolCalls: localApprovedToolApprovals.map(
|
|
4658
4668
|
(toolApproval) => toolApproval.toolCall
|
|
@@ -4690,6 +4700,20 @@ async function generateText({
|
|
|
4690
4700
|
output: modelOutput
|
|
4691
4701
|
});
|
|
4692
4702
|
}
|
|
4703
|
+
for (const toolApproval of invalidToolApprovals) {
|
|
4704
|
+
toolContent.push({
|
|
4705
|
+
type: "tool-result",
|
|
4706
|
+
toolCallId: toolApproval.toolCall.toolCallId,
|
|
4707
|
+
toolName: toolApproval.toolCall.toolName,
|
|
4708
|
+
output: await createToolModelOutput({
|
|
4709
|
+
toolCallId: toolApproval.toolCall.toolCallId,
|
|
4710
|
+
input: toolApproval.toolCall.input,
|
|
4711
|
+
tool: tools == null ? void 0 : tools[toolApproval.toolCall.toolName],
|
|
4712
|
+
output: toolApproval.error,
|
|
4713
|
+
errorMode: "text"
|
|
4714
|
+
})
|
|
4715
|
+
});
|
|
4716
|
+
}
|
|
4693
4717
|
for (const toolApproval of deniedToolApprovals) {
|
|
4694
4718
|
toolContent.push({
|
|
4695
4719
|
type: "tool-result",
|
|
@@ -6653,7 +6677,10 @@ function createStitchableStream() {
|
|
|
6653
6677
|
const terminate = () => {
|
|
6654
6678
|
isClosed = true;
|
|
6655
6679
|
waitForNewStream.resolve();
|
|
6656
|
-
innerStreams.forEach(({ reader }) =>
|
|
6680
|
+
innerStreams.forEach(({ reader, onCancel }) => {
|
|
6681
|
+
onCancel == null ? void 0 : onCancel();
|
|
6682
|
+
reader.cancel();
|
|
6683
|
+
});
|
|
6657
6684
|
innerStreams = [];
|
|
6658
6685
|
controller == null ? void 0 : controller.close();
|
|
6659
6686
|
};
|
|
@@ -6694,7 +6721,8 @@ function createStitchableStream() {
|
|
|
6694
6721
|
},
|
|
6695
6722
|
pull: processPull,
|
|
6696
6723
|
async cancel() {
|
|
6697
|
-
for (const { reader } of innerStreams) {
|
|
6724
|
+
for (const { reader, onCancel } of innerStreams) {
|
|
6725
|
+
onCancel == null ? void 0 : onCancel();
|
|
6698
6726
|
await reader.cancel();
|
|
6699
6727
|
}
|
|
6700
6728
|
innerStreams = [];
|
|
@@ -7697,7 +7725,8 @@ var DefaultStreamTextResult = class {
|
|
|
7697
7725
|
if (deniedToolApprovals.length > 0 || approvedToolApprovals.length > 0) {
|
|
7698
7726
|
const {
|
|
7699
7727
|
approvedToolApprovals: localApprovedToolApprovals,
|
|
7700
|
-
deniedToolApprovals: revalidationDeniedToolApprovals
|
|
7728
|
+
deniedToolApprovals: revalidationDeniedToolApprovals,
|
|
7729
|
+
invalidToolApprovals
|
|
7701
7730
|
} = await validateApprovedToolApprovals({
|
|
7702
7731
|
approvedToolApprovals: approvedToolApprovals.filter(
|
|
7703
7732
|
(toolApproval) => !toolApproval.toolCall.providerExecuted
|
|
@@ -7734,6 +7763,18 @@ var DefaultStreamTextResult = class {
|
|
|
7734
7763
|
toolName: toolApproval.toolCall.toolName
|
|
7735
7764
|
});
|
|
7736
7765
|
}
|
|
7766
|
+
for (const toolApproval of invalidToolApprovals) {
|
|
7767
|
+
toolExecutionStepStreamController == null ? void 0 : toolExecutionStepStreamController.enqueue({
|
|
7768
|
+
type: "tool-error",
|
|
7769
|
+
toolCallId: toolApproval.toolCall.toolCallId,
|
|
7770
|
+
toolName: toolApproval.toolCall.toolName,
|
|
7771
|
+
input: toolApproval.toolCall.input,
|
|
7772
|
+
error: (0, import_provider29.getErrorMessage)(toolApproval.error),
|
|
7773
|
+
title: toolApproval.toolCall.title,
|
|
7774
|
+
...toolApproval.toolCall.dynamic === true ? { dynamic: true } : {},
|
|
7775
|
+
...toolApproval.toolCall.toolMetadata != null ? { toolMetadata: toolApproval.toolCall.toolMetadata } : {}
|
|
7776
|
+
});
|
|
7777
|
+
}
|
|
7737
7778
|
const toolOutputs = [];
|
|
7738
7779
|
await Promise.all(
|
|
7739
7780
|
localApprovedToolApprovals.map(async (toolApproval) => {
|
|
@@ -7765,7 +7806,7 @@ var DefaultStreamTextResult = class {
|
|
|
7765
7806
|
}
|
|
7766
7807
|
})
|
|
7767
7808
|
);
|
|
7768
|
-
if (toolOutputs.length > 0 || localDeniedToolApprovals.length > 0) {
|
|
7809
|
+
if (toolOutputs.length > 0 || localDeniedToolApprovals.length > 0 || invalidToolApprovals.length > 0) {
|
|
7769
7810
|
const localToolContent = [];
|
|
7770
7811
|
for (const output2 of toolOutputs) {
|
|
7771
7812
|
localToolContent.push({
|
|
@@ -7781,6 +7822,20 @@ var DefaultStreamTextResult = class {
|
|
|
7781
7822
|
})
|
|
7782
7823
|
});
|
|
7783
7824
|
}
|
|
7825
|
+
for (const toolApproval of invalidToolApprovals) {
|
|
7826
|
+
localToolContent.push({
|
|
7827
|
+
type: "tool-result",
|
|
7828
|
+
toolCallId: toolApproval.toolCall.toolCallId,
|
|
7829
|
+
toolName: toolApproval.toolCall.toolName,
|
|
7830
|
+
output: await createToolModelOutput({
|
|
7831
|
+
toolCallId: toolApproval.toolCall.toolCallId,
|
|
7832
|
+
input: toolApproval.toolCall.input,
|
|
7833
|
+
tool: tools == null ? void 0 : tools[toolApproval.toolCall.toolName],
|
|
7834
|
+
output: toolApproval.error,
|
|
7835
|
+
errorMode: "text"
|
|
7836
|
+
})
|
|
7837
|
+
});
|
|
7838
|
+
}
|
|
7784
7839
|
for (const toolApproval of localDeniedToolApprovals) {
|
|
7785
7840
|
localToolContent.push({
|
|
7786
7841
|
type: "tool-result",
|
|
@@ -7836,8 +7891,17 @@ var DefaultStreamTextResult = class {
|
|
|
7836
7891
|
clearTimeout(stepTimeoutId);
|
|
7837
7892
|
}
|
|
7838
7893
|
}
|
|
7839
|
-
|
|
7840
|
-
|
|
7894
|
+
function clearStepTimeouts() {
|
|
7895
|
+
clearStepTimeout();
|
|
7896
|
+
clearChunkTimeout();
|
|
7897
|
+
}
|
|
7898
|
+
function cleanupStepTimeouts() {
|
|
7899
|
+
abortSignal == null ? void 0 : abortSignal.removeEventListener("abort", cleanupStepTimeouts);
|
|
7900
|
+
clearStepTimeouts();
|
|
7901
|
+
}
|
|
7902
|
+
abortSignal == null ? void 0 : abortSignal.addEventListener("abort", cleanupStepTimeouts, {
|
|
7903
|
+
once: true
|
|
7904
|
+
});
|
|
7841
7905
|
try {
|
|
7842
7906
|
stepFinish = new import_provider_utils20.DelayedPromise();
|
|
7843
7907
|
const stepInputMessages = [...initialMessages, ...responseMessages];
|
|
@@ -8214,8 +8278,7 @@ var DefaultStreamTextResult = class {
|
|
|
8214
8278
|
})
|
|
8215
8279
|
});
|
|
8216
8280
|
doStreamSpan.end();
|
|
8217
|
-
|
|
8218
|
-
clearChunkTimeout();
|
|
8281
|
+
cleanupStepTimeouts();
|
|
8219
8282
|
self.closeStream();
|
|
8220
8283
|
return;
|
|
8221
8284
|
}
|
|
@@ -8319,8 +8382,7 @@ var DefaultStreamTextResult = class {
|
|
|
8319
8382
|
pendingDeferredToolCalls.delete(output2.toolCallId);
|
|
8320
8383
|
}
|
|
8321
8384
|
}
|
|
8322
|
-
|
|
8323
|
-
clearChunkTimeout();
|
|
8385
|
+
cleanupStepTimeouts();
|
|
8324
8386
|
if (
|
|
8325
8387
|
// Continue if:
|
|
8326
8388
|
// 1. There are client tool calls that have all been executed, OR
|
|
@@ -8364,11 +8426,14 @@ var DefaultStreamTextResult = class {
|
|
|
8364
8426
|
}
|
|
8365
8427
|
}
|
|
8366
8428
|
})
|
|
8367
|
-
)
|
|
8429
|
+
),
|
|
8430
|
+
{
|
|
8431
|
+
onError: cleanupStepTimeouts,
|
|
8432
|
+
onCancel: cleanupStepTimeouts
|
|
8433
|
+
}
|
|
8368
8434
|
);
|
|
8369
8435
|
} catch (error) {
|
|
8370
|
-
|
|
8371
|
-
clearChunkTimeout();
|
|
8436
|
+
cleanupStepTimeouts();
|
|
8372
8437
|
throw error;
|
|
8373
8438
|
}
|
|
8374
8439
|
}
|