@ai-sdk/workflow 2.0.71 → 2.0.72
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 +8 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +85 -62
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/test/concurrency-workflows.ts +66 -0
- package/src/workflow-agent.ts +158 -114
package/CHANGELOG.md
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -281,6 +281,7 @@ interface PrepareCallOptions<TTools extends ToolSet = ToolSet, TRuntimeContext e
|
|
|
281
281
|
tools: TTools;
|
|
282
282
|
instructions?: Instructions;
|
|
283
283
|
toolChoice?: ToolChoice<TTools>;
|
|
284
|
+
toolCallConcurrency?: number;
|
|
284
285
|
stopWhen?: StopCondition<NoInfer<TTools>, TRuntimeContext> | Array<StopCondition<NoInfer<TTools>, TRuntimeContext>>;
|
|
285
286
|
activeTools?: ActiveTools<NoInfer<TTools>>;
|
|
286
287
|
experimental_download?: DownloadFunction;
|
|
@@ -342,6 +343,12 @@ type WorkflowAgentOptions<TTools extends ToolSet = ToolSet, TRuntimeContext exte
|
|
|
342
343
|
* The tool choice strategy. Default: 'auto'.
|
|
343
344
|
*/
|
|
344
345
|
toolChoice?: ToolChoice<TTools>;
|
|
346
|
+
/**
|
|
347
|
+
* Maximum number of local tool calls that may execute concurrently within a step.
|
|
348
|
+
* Set to `1` to execute calls sequentially in model order, including approved
|
|
349
|
+
* calls. By default, all local tool calls execute concurrently.
|
|
350
|
+
*/
|
|
351
|
+
toolCallConcurrency?: number;
|
|
345
352
|
/**
|
|
346
353
|
* Optional telemetry configuration.
|
|
347
354
|
*/
|
|
@@ -713,6 +720,12 @@ type WorkflowAgentCallOptions<TTools extends ToolSet = ToolSet, TRuntimeContext
|
|
|
713
720
|
* Overrides the toolChoice from the constructor if provided.
|
|
714
721
|
*/
|
|
715
722
|
toolChoice?: ToolChoice<TTools>;
|
|
723
|
+
/**
|
|
724
|
+
* Maximum number of local tool calls that may execute concurrently within a step.
|
|
725
|
+
* Set to `1` to execute calls sequentially in model order, including approved
|
|
726
|
+
* calls. By default, all local tool calls execute concurrently.
|
|
727
|
+
*/
|
|
728
|
+
toolCallConcurrency?: number;
|
|
716
729
|
/**
|
|
717
730
|
* Limits the tools that are available for the model to call without
|
|
718
731
|
* changing the tool call and result types in the result.
|
|
@@ -1075,6 +1088,7 @@ export declare class WorkflowAgent<TBaseTools extends ToolSet = ToolSet, TRuntim
|
|
|
1075
1088
|
private instructions?;
|
|
1076
1089
|
private generationSettings;
|
|
1077
1090
|
private toolChoice?;
|
|
1091
|
+
private toolCallConcurrency?;
|
|
1078
1092
|
private telemetry?;
|
|
1079
1093
|
private runtimeContext?;
|
|
1080
1094
|
private toolsContext?;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["CoreTelemetryOptions","SandboxSession","ToolCallRepairFunction"],"sources":["../src/model-call.ts","../src/types.ts","../src/workflow-agent.ts","../src/to-ui-message-chunk.ts","../src/normalize-ui-message-stream.ts"],"mappings":";;;;;KAuBY,oBAAoB,eAAe,UAAU,WACrD,qCAAqC;EAEnC;EACA;EACA;EACA;;EAEA;;;;;;;;;KCrBM,0BAA0B;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["CoreTelemetryOptions","SandboxSession","ToolCallRepairFunction"],"sources":["../src/model-call.ts","../src/types.ts","../src/workflow-agent.ts","../src/to-ui-message-chunk.ts","../src/normalize-ui-message-stream.ts"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as normalizeUIMessageStreamParts, t as WorkflowChatTransport } from "./workflow-chat-transport-Dj1poviu.js";
|
|
2
2
|
import { asArray, asSchema, convertUint8ArrayToBase64, createIdGenerator, generateId, getErrorMessage, isAbortError, jsonSchema, validateTypes, withUserAgentSuffix } from "@ai-sdk/provider-utils";
|
|
3
3
|
import { DefaultGeneratedFile, InvalidToolApprovalSignatureError, NoOutputGeneratedError, Output, ToolChoiceViolationError, dynamicTool, experimental_filterActiveTools, experimental_streamLanguageModelCall, gateway, isStepCount, tool, wrapLanguageModel } from "ai";
|
|
4
|
-
import { DefaultGenerateTextResult, DefaultStepResult, addLanguageModelUsage, asLanguageModelUsage, calculateTokensPerSecond, collectToolApprovals, convertLanguageModelContent, convertToLanguageModelPrompt, createDefaultDownloadFunction, createNullLanguageModelUsage, createRestrictedTelemetryDispatcher, createTelemetryDispatcher, createToolModelOutput, createToolSearchState, downloadAssets, isOutputChunk, mapToolResultOutput, mergeAbortSignals, mergeCallbacks, parseToolCall, prepareLanguageModelCallOptions, prepareRetries, prepareToolChoice, prepareTools, resolveLanguageModel, signToolApproval, standardizePrompt, validateApprovedToolApprovals, verifyToolApprovalSignature } from "ai/internal";
|
|
4
|
+
import { DefaultGenerateTextResult, DefaultStepResult, addLanguageModelUsage, asLanguageModelUsage, calculateTokensPerSecond, collectToolApprovals, convertLanguageModelContent, convertToLanguageModelPrompt, createDefaultDownloadFunction, createNullLanguageModelUsage, createRestrictedTelemetryDispatcher, createTelemetryDispatcher, createToolModelOutput, createToolSearchState, downloadAssets, isOutputChunk, mapToolResultOutput, mapWithConcurrency, mergeAbortSignals, mergeCallbacks, parseToolCall, prepareLanguageModelCallOptions, prepareRetries, prepareToolCallConcurrency, prepareToolChoice, prepareTools, resolveLanguageModel, signToolApproval, standardizePrompt, validateApprovedToolApprovals, verifyToolApprovalSignature } from "ai/internal";
|
|
5
5
|
import { getWorkflowMetadata } from "workflow";
|
|
6
6
|
import Ajv from "ajv";
|
|
7
7
|
import Ajv2020 from "ajv/dist/2020.js";
|
|
@@ -1686,6 +1686,7 @@ var WorkflowAgent = class {
|
|
|
1686
1686
|
this.tools = options.tools ?? {};
|
|
1687
1687
|
this.instructions = options.instructions ?? options.system;
|
|
1688
1688
|
this.toolChoice = options.toolChoice;
|
|
1689
|
+
this.toolCallConcurrency = options.toolCallConcurrency;
|
|
1689
1690
|
this.telemetry = options.telemetry;
|
|
1690
1691
|
this.runtimeContext = options.runtimeContext;
|
|
1691
1692
|
this.toolsContext = options.toolsContext;
|
|
@@ -1759,6 +1760,7 @@ var WorkflowAgent = class {
|
|
|
1759
1760
|
let effectiveRuntimeContext = options.runtimeContext ?? this.runtimeContext ?? {};
|
|
1760
1761
|
let effectiveToolsContext = options.toolsContext ?? this.toolsContext ?? {};
|
|
1761
1762
|
let effectiveToolChoiceFromPrepare = options.toolChoice ?? this.toolChoice;
|
|
1763
|
+
let effectiveToolCallConcurrency = options.toolCallConcurrency ?? this.toolCallConcurrency;
|
|
1762
1764
|
let effectiveStopWhenFromPrepare = options.stopWhen ?? this.stopWhen ?? (mode === "generate" ? isStepCount(20) : void 0);
|
|
1763
1765
|
let effectiveActiveToolsFromPrepare = options.activeTools ?? this.activeTools;
|
|
1764
1766
|
let effectiveDownloadFromPrepare = options.experimental_download ?? this.experimentalDownload;
|
|
@@ -1774,6 +1776,7 @@ var WorkflowAgent = class {
|
|
|
1774
1776
|
tools: this.tools,
|
|
1775
1777
|
instructions: effectiveInstructions,
|
|
1776
1778
|
toolChoice: effectiveToolChoiceFromPrepare,
|
|
1779
|
+
toolCallConcurrency: effectiveToolCallConcurrency,
|
|
1777
1780
|
stopWhen: effectiveStopWhenFromPrepare,
|
|
1778
1781
|
activeTools: effectiveActiveToolsFromPrepare,
|
|
1779
1782
|
experimental_download: effectiveDownloadFromPrepare,
|
|
@@ -1792,6 +1795,7 @@ var WorkflowAgent = class {
|
|
|
1792
1795
|
if (prepared.runtimeContext !== void 0) effectiveRuntimeContext = prepared.runtimeContext;
|
|
1793
1796
|
if (prepared.toolsContext !== void 0) effectiveToolsContext = prepared.toolsContext;
|
|
1794
1797
|
if (prepared.toolChoice !== void 0) effectiveToolChoiceFromPrepare = prepared.toolChoice;
|
|
1798
|
+
if (prepared.toolCallConcurrency !== void 0) effectiveToolCallConcurrency = prepared.toolCallConcurrency;
|
|
1795
1799
|
if (prepared.stopWhen !== void 0) effectiveStopWhenFromPrepare = prepared.stopWhen;
|
|
1796
1800
|
if (prepared.activeTools !== void 0) effectiveActiveToolsFromPrepare = prepared.activeTools;
|
|
1797
1801
|
if (prepared.experimental_download !== void 0) effectiveDownloadFromPrepare = prepared.experimental_download;
|
|
@@ -1810,6 +1814,7 @@ var WorkflowAgent = class {
|
|
|
1810
1814
|
if (prepared.reasoning !== void 0) effectiveGenerationSettings.reasoning = prepared.reasoning;
|
|
1811
1815
|
if (prepared.providerOptions !== void 0) effectiveGenerationSettings.providerOptions = prepared.providerOptions;
|
|
1812
1816
|
}
|
|
1817
|
+
const toolCallConcurrency = prepareToolCallConcurrency(options.toolCallConcurrency ?? effectiveToolCallConcurrency);
|
|
1813
1818
|
const effectiveTelemetry = effectiveTelemetryFromPrepare;
|
|
1814
1819
|
const telemetryDispatcher = createRestrictedTelemetryDispatcher({
|
|
1815
1820
|
telemetry: effectiveTelemetry,
|
|
@@ -1836,6 +1841,7 @@ var WorkflowAgent = class {
|
|
|
1836
1841
|
effectiveRuntimeContext,
|
|
1837
1842
|
effectiveToolsContext,
|
|
1838
1843
|
effectiveToolChoiceFromPrepare,
|
|
1844
|
+
toolCallConcurrency,
|
|
1839
1845
|
effectiveStopWhenFromPrepare,
|
|
1840
1846
|
effectiveActiveToolsFromPrepare,
|
|
1841
1847
|
effectiveToolApprovalSecret,
|
|
@@ -1852,7 +1858,7 @@ var WorkflowAgent = class {
|
|
|
1852
1858
|
};
|
|
1853
1859
|
}
|
|
1854
1860
|
async execute(options, mode = "stream") {
|
|
1855
|
-
const { onEnd, effectiveModel, effectiveInstructions, effectiveGenerationSettings, effectiveRuntimeContext, effectiveToolsContext, effectiveToolChoiceFromPrepare, effectiveStopWhenFromPrepare, effectiveActiveToolsFromPrepare, effectiveToolApprovalSecret, effectiveTelemetry, telemetryDispatcher, prompt, download, workflowDownload, sandbox, effectiveAbortSignal, timeoutAt, mergedOnToolExecutionStart, mergedOnToolExecutionEnd } = await this.prepareInvocation(options, mode);
|
|
1861
|
+
const { onEnd, effectiveModel, effectiveInstructions, effectiveGenerationSettings, effectiveRuntimeContext, effectiveToolsContext, effectiveToolChoiceFromPrepare, toolCallConcurrency, effectiveStopWhenFromPrepare, effectiveActiveToolsFromPrepare, effectiveToolApprovalSecret, effectiveTelemetry, telemetryDispatcher, prompt, download, workflowDownload, sandbox, effectiveAbortSignal, timeoutAt, mergedOnToolExecutionStart, mergedOnToolExecutionEnd } = await this.prepareInvocation(options, mode);
|
|
1856
1862
|
const initialResponseMessages = [];
|
|
1857
1863
|
const abortReason = () => effectiveAbortSignal?.reason === void 0 ? void 0 : { value: effectiveAbortSignal.reason };
|
|
1858
1864
|
const collectedApprovals = collectToolApprovals({ messages: prompt.messages });
|
|
@@ -1876,13 +1882,55 @@ var WorkflowAgent = class {
|
|
|
1876
1882
|
if (approvedToolApprovals.length > 0 || deniedToolApprovals.length > 0) {
|
|
1877
1883
|
const toolResultContent = [];
|
|
1878
1884
|
const approvedRawResults = [];
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1885
|
+
const approvedResults = await mapWithConcurrency({
|
|
1886
|
+
items: approvedToolApprovals.filter((approval) => !approval.providerExecuted),
|
|
1887
|
+
concurrency: toolCallConcurrency,
|
|
1888
|
+
abortSignal: effectiveAbortSignal,
|
|
1889
|
+
execute: async (approval) => {
|
|
1890
|
+
const tool = this.tools[approval.toolName];
|
|
1891
|
+
if (tool && typeof tool.execute === "function") {
|
|
1892
|
+
if (!tool.needsApproval) {
|
|
1893
|
+
const reason = `Tool "${approval.toolName}" does not require approval`;
|
|
1894
|
+
return { modelResult: {
|
|
1895
|
+
type: "tool-result",
|
|
1896
|
+
toolCallId: approval.toolCallId,
|
|
1897
|
+
toolName: approval.toolName,
|
|
1898
|
+
output: await createLanguageModelToolResultOutput({
|
|
1899
|
+
toolCallId: approval.toolCallId,
|
|
1900
|
+
toolName: approval.toolName,
|
|
1901
|
+
input: approval.input,
|
|
1902
|
+
output: reason,
|
|
1903
|
+
tool,
|
|
1904
|
+
errorMode: "text",
|
|
1905
|
+
supportedUrls: {},
|
|
1906
|
+
download: workflowDownload
|
|
1907
|
+
})
|
|
1908
|
+
} };
|
|
1909
|
+
}
|
|
1910
|
+
let revalidationReason;
|
|
1911
|
+
try {
|
|
1912
|
+
await validateWorkflowToolApprovalSignature({
|
|
1913
|
+
secret: effectiveToolApprovalSecret,
|
|
1914
|
+
approvalId: approval.collected.approvalRequest.approvalId,
|
|
1915
|
+
toolCallId: approval.toolCallId,
|
|
1916
|
+
toolName: approval.toolName,
|
|
1917
|
+
input: approval.input,
|
|
1918
|
+
signature: approval.collected.approvalRequest.signature
|
|
1919
|
+
});
|
|
1920
|
+
const { deniedToolApprovals: policyDenied, invalidToolApprovals } = await validateApprovedToolApprovals({
|
|
1921
|
+
approvedToolApprovals: [approval.collected],
|
|
1922
|
+
tools: this.tools,
|
|
1923
|
+
toolApproval: void 0,
|
|
1924
|
+
messages: prompt.messages,
|
|
1925
|
+
toolsContext: effectiveToolsContext,
|
|
1926
|
+
runtimeContext: effectiveRuntimeContext
|
|
1927
|
+
});
|
|
1928
|
+
if (invalidToolApprovals.length > 0) revalidationReason = getErrorMessage(invalidToolApprovals[0].error);
|
|
1929
|
+
else if (policyDenied.length > 0) revalidationReason = policyDenied[0].approvalResponse.reason ?? "Tool approval denied";
|
|
1930
|
+
} catch (error) {
|
|
1931
|
+
revalidationReason = getErrorMessage(error);
|
|
1932
|
+
}
|
|
1933
|
+
if (revalidationReason != null) return { modelResult: {
|
|
1886
1934
|
type: "tool-result",
|
|
1887
1935
|
toolCallId: approval.toolCallId,
|
|
1888
1936
|
toolName: approval.toolName,
|
|
@@ -1890,69 +1938,34 @@ var WorkflowAgent = class {
|
|
|
1890
1938
|
toolCallId: approval.toolCallId,
|
|
1891
1939
|
toolName: approval.toolName,
|
|
1892
1940
|
input: approval.input,
|
|
1893
|
-
output:
|
|
1941
|
+
output: revalidationReason,
|
|
1894
1942
|
tool,
|
|
1895
1943
|
errorMode: "text",
|
|
1896
1944
|
supportedUrls: {},
|
|
1897
1945
|
download: workflowDownload
|
|
1898
1946
|
})
|
|
1899
|
-
}
|
|
1900
|
-
|
|
1901
|
-
}
|
|
1902
|
-
let revalidationReason;
|
|
1903
|
-
try {
|
|
1904
|
-
await validateWorkflowToolApprovalSignature({
|
|
1905
|
-
secret: effectiveToolApprovalSecret,
|
|
1906
|
-
approvalId: approval.collected.approvalRequest.approvalId,
|
|
1947
|
+
} };
|
|
1948
|
+
const result = await executeToolWithCallbacks({
|
|
1907
1949
|
toolCallId: approval.toolCallId,
|
|
1908
1950
|
toolName: approval.toolName,
|
|
1909
|
-
input: approval.input
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
tools: this.tools,
|
|
1915
|
-
toolApproval: void 0,
|
|
1916
|
-
messages: prompt.messages,
|
|
1917
|
-
toolsContext: effectiveToolsContext,
|
|
1918
|
-
runtimeContext: effectiveRuntimeContext
|
|
1919
|
-
});
|
|
1920
|
-
if (invalidToolApprovals.length > 0) revalidationReason = getErrorMessage(invalidToolApprovals[0].error);
|
|
1921
|
-
else if (policyDenied.length > 0) revalidationReason = policyDenied[0].approvalResponse.reason ?? "Tool approval denied";
|
|
1922
|
-
} catch (error) {
|
|
1923
|
-
revalidationReason = getErrorMessage(error);
|
|
1924
|
-
}
|
|
1925
|
-
if (revalidationReason != null) {
|
|
1926
|
-
toolResultContent.push({
|
|
1927
|
-
type: "tool-result",
|
|
1928
|
-
toolCallId: approval.toolCallId,
|
|
1929
|
-
toolName: approval.toolName,
|
|
1930
|
-
output: await createLanguageModelToolResultOutput({
|
|
1951
|
+
input: approval.input
|
|
1952
|
+
}, this.tools, prompt.messages, effectiveToolsContext, 0, sandbox);
|
|
1953
|
+
return {
|
|
1954
|
+
modelResult: result.modelResult,
|
|
1955
|
+
rawResult: {
|
|
1931
1956
|
toolCallId: approval.toolCallId,
|
|
1932
1957
|
toolName: approval.toolName,
|
|
1933
1958
|
input: approval.input,
|
|
1934
|
-
output:
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
supportedUrls: {},
|
|
1938
|
-
download: workflowDownload
|
|
1939
|
-
})
|
|
1940
|
-
});
|
|
1941
|
-
continue;
|
|
1959
|
+
output: result.rawOutput
|
|
1960
|
+
}
|
|
1961
|
+
};
|
|
1942
1962
|
}
|
|
1943
|
-
const result = await executeToolWithCallbacks({
|
|
1944
|
-
toolCallId: approval.toolCallId,
|
|
1945
|
-
toolName: approval.toolName,
|
|
1946
|
-
input: approval.input
|
|
1947
|
-
}, this.tools, prompt.messages, effectiveToolsContext, 0, sandbox);
|
|
1948
|
-
toolResultContent.push(result.modelResult);
|
|
1949
|
-
approvedRawResults.push({
|
|
1950
|
-
toolCallId: approval.toolCallId,
|
|
1951
|
-
toolName: approval.toolName,
|
|
1952
|
-
input: approval.input,
|
|
1953
|
-
output: result.rawOutput
|
|
1954
|
-
});
|
|
1955
1963
|
}
|
|
1964
|
+
});
|
|
1965
|
+
for (const result of approvedResults) {
|
|
1966
|
+
if (result == null) continue;
|
|
1967
|
+
toolResultContent.push(result.modelResult);
|
|
1968
|
+
if (result.rawResult != null) approvedRawResults.push(result.rawResult);
|
|
1956
1969
|
}
|
|
1957
1970
|
for (const denial of deniedToolApprovals) {
|
|
1958
1971
|
if (denial.providerExecuted || denial.existingToolResult !== void 0) continue;
|
|
@@ -2309,7 +2322,12 @@ var WorkflowAgent = class {
|
|
|
2309
2322
|
});
|
|
2310
2323
|
const providerApprovalRequests = step?.content.filter((part) => part.type === "tool-approval-request").filter((part) => part.toolCall.providerExecuted) ?? [];
|
|
2311
2324
|
if (pausedToolCalls.length > 0 || providerApprovalRequests.length > 0) {
|
|
2312
|
-
const executableResults = await
|
|
2325
|
+
const executableResults = await mapWithConcurrency({
|
|
2326
|
+
items: executableToolCalls,
|
|
2327
|
+
concurrency: toolCallConcurrency,
|
|
2328
|
+
abortSignal: effectiveAbortSignal,
|
|
2329
|
+
execute: (toolCall) => executeToolWithCallbacks(toolCall, stepTools, iterMessages, toolsContext, currentStepNumber, toolExecutionSandbox)
|
|
2330
|
+
});
|
|
2313
2331
|
const providerResultEntries = await Promise.all(providerToolCallsForResults.filter((call) => !providerApprovalRequests.some((request) => request.toolCall.toolCallId === call.toolCallId)).map(async (toolCall) => ({
|
|
2314
2332
|
toolCall,
|
|
2315
2333
|
result: await resolveProviderToolResult(toolCall, capturedProviderToolResults, stepTools, workflowDownload)
|
|
@@ -2407,7 +2425,12 @@ var WorkflowAgent = class {
|
|
|
2407
2425
|
initialResponseMessages
|
|
2408
2426
|
};
|
|
2409
2427
|
}
|
|
2410
|
-
const clientToolResults = await
|
|
2428
|
+
const clientToolResults = await mapWithConcurrency({
|
|
2429
|
+
items: nonProviderToolCalls,
|
|
2430
|
+
concurrency: toolCallConcurrency,
|
|
2431
|
+
abortSignal: effectiveAbortSignal,
|
|
2432
|
+
execute: (toolCall) => executeToolWithCallbacks(toolCall, stepTools, iterMessages, toolsContext, currentStepNumber, toolExecutionSandbox)
|
|
2433
|
+
});
|
|
2411
2434
|
const providerToolResultEntries = await Promise.all(providerToolCallsForResults.map(async (toolCall) => ({
|
|
2412
2435
|
toolCall,
|
|
2413
2436
|
result: await resolveProviderToolResult(toolCall, capturedProviderToolResults, stepTools, workflowDownload)
|