@dbos-inc/vercel-ai 0.1.5 → 0.3.7
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/README.md +111 -87
- package/dist/agent-tool.d.ts +42 -0
- package/dist/agent-tool.d.ts.map +1 -0
- package/dist/agent-tool.js +92 -0
- package/dist/agent-tool.js.map +1 -0
- package/dist/durable-stream.d.ts +112 -0
- package/dist/durable-stream.d.ts.map +1 -0
- package/dist/durable-stream.js +344 -0
- package/dist/durable-stream.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +2 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +15 -0
- package/dist/internal.js.map +1 -1
- package/dist/mcp.d.ts +2 -0
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +27 -26
- package/dist/mcp.js.map +1 -1
- package/dist/middleware.d.ts +6 -1
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +95 -47
- package/dist/middleware.js.map +1 -1
- package/dist/tools.d.ts +15 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +78 -0
- package/dist/tools.js.map +1 -0
- package/package.json +3 -3
- package/src/agent-tool.ts +122 -0
- package/src/durable-stream.ts +388 -0
- package/src/index.ts +12 -1
- package/src/internal.ts +14 -0
- package/src/mcp.ts +28 -25
- package/src/middleware.ts +103 -50
- package/src/tools.ts +86 -0
package/dist/middleware.js
CHANGED
|
@@ -6,17 +6,18 @@ exports.durableImageCalls = durableImageCalls;
|
|
|
6
6
|
const node_crypto_1 = require("node:crypto");
|
|
7
7
|
const dbos_sdk_1 = require("@dbos-inc/dbos-sdk");
|
|
8
8
|
const internal_1 = require("./internal");
|
|
9
|
+
const durable_stream_1 = require("./durable-stream");
|
|
9
10
|
// In-flight durable model calls per workflow; concurrent calls have a nondeterministic DBOS step order on replay, so we reject them.
|
|
10
11
|
const inflightModelCalls = new Map();
|
|
11
|
-
|
|
12
|
+
// A stream call whose consumer detached (abort/cancel) but whose step is still settling; the next call in that workflow waits for it.
|
|
13
|
+
const settlingModelCalls = new Map();
|
|
14
|
+
async function enterDurableModelCall() {
|
|
12
15
|
const workflowID = dbos_sdk_1.DBOS.workflowID;
|
|
16
|
+
// Sequence after a detached call's checkpoint, so steps are always recorded in the order they were started.
|
|
17
|
+
await settlingModelCalls.get(workflowID);
|
|
13
18
|
const inflight = inflightModelCalls.get(workflowID) ?? 0;
|
|
14
19
|
if (inflight > 0) {
|
|
15
|
-
|
|
16
|
-
const remedy = operation === 'embed'
|
|
17
|
-
? 'pass maxParallelCalls: 1 to embedMany, or run each call in its own child workflow with DBOS.startWorkflow'
|
|
18
|
-
: 'run each call in its own child workflow with DBOS.startWorkflow';
|
|
19
|
-
throw new Error(`Concurrent durable model calls in workflow "${workflowID}" are not supported because their step order is nondeterministic on replay; ${remedy}.`);
|
|
20
|
+
throw new Error(`Concurrent durable model calls in workflow "${workflowID}" are not supported because their step order is nondeterministic on replay; run each call in its own child workflow with DBOS.startWorkflow.`);
|
|
20
21
|
}
|
|
21
22
|
inflightModelCalls.set(workflowID, inflight + 1);
|
|
22
23
|
return workflowID;
|
|
@@ -32,19 +33,33 @@ function exitDurableModelCall(workflowID) {
|
|
|
32
33
|
}
|
|
33
34
|
/** AI SDK language-model middleware that runs each model call as a durable, checkpointed DBOS step (replayed on recovery); outside a workflow it calls the model directly. */
|
|
34
35
|
function durableCalls(options = {}) {
|
|
35
|
-
const
|
|
36
|
+
const { durableStream, ...stepOptions } = options;
|
|
37
|
+
const stepConfig = (0, internal_1.withErrorClassification)(stepOptions);
|
|
38
|
+
const streamConfig = (0, durable_stream_1.resolveDurableStream)(durableStream);
|
|
36
39
|
return {
|
|
37
40
|
specificationVersion: 'v4',
|
|
38
|
-
wrapGenerate: async ({ doGenerate, model }) => {
|
|
41
|
+
wrapGenerate: async ({ doGenerate, params, model }) => {
|
|
39
42
|
(0, internal_1.assertNotInTransaction)('generate');
|
|
40
43
|
if (!(0, internal_1.isInWorkflowFunction)()) {
|
|
41
44
|
return await doGenerate();
|
|
42
45
|
}
|
|
43
|
-
const workflowID = enterDurableModelCall(
|
|
46
|
+
const workflowID = await enterDurableModelCall();
|
|
44
47
|
try {
|
|
45
|
-
return await dbos_sdk_1.DBOS.runStep(async () =>
|
|
48
|
+
return await dbos_sdk_1.DBOS.runStep(async () => {
|
|
49
|
+
const result = ensureResponseMetadata(encodeBinaryContent(await doGenerate()));
|
|
50
|
+
// A non-streaming call writes its whole output at once, so the stream holds every call the loop makes, not only streamed ones.
|
|
51
|
+
if (streamConfig) {
|
|
52
|
+
const streamWriter = new durable_stream_1.ModelStreamWriter(streamConfig);
|
|
53
|
+
for (const part of replayParts(result))
|
|
54
|
+
streamWriter.push(part);
|
|
55
|
+
await streamWriter.end({ finishReason: result.finishReason });
|
|
56
|
+
}
|
|
57
|
+
return result;
|
|
58
|
+
}, {
|
|
46
59
|
...stepConfig,
|
|
47
60
|
name: stepConfig.name ?? stepName(model, 'generate'),
|
|
61
|
+
// An aborted call is never retried, whatever the provider's rejection looks like.
|
|
62
|
+
shouldRetry: async (error) => params.abortSignal?.aborted !== true && (await stepConfig.shouldRetry(error)),
|
|
48
63
|
});
|
|
49
64
|
}
|
|
50
65
|
catch (error) {
|
|
@@ -60,36 +75,37 @@ function durableCalls(options = {}) {
|
|
|
60
75
|
if (!(0, internal_1.isInWorkflowFunction)()) {
|
|
61
76
|
return await doStream();
|
|
62
77
|
}
|
|
63
|
-
const workflowID = enterDurableModelCall(
|
|
64
|
-
//
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
// settles: this call's step is already sequenced, so a sequential follow-up in the same workflow is
|
|
68
|
-
// deterministic on replay and must not be rejected as concurrent while this step drains in the background.
|
|
69
|
-
let guardReleased = false;
|
|
70
|
-
const releaseGuard = () => {
|
|
71
|
-
if (guardReleased)
|
|
72
|
-
return;
|
|
73
|
-
guardReleased = true;
|
|
74
|
-
params.abortSignal?.removeEventListener('abort', releaseGuard);
|
|
75
|
-
exitDurableModelCall(workflowID);
|
|
76
|
-
};
|
|
77
|
-
params.abortSignal?.addEventListener('abort', releaseGuard, { once: true });
|
|
78
|
+
const workflowID = await enterDurableModelCall();
|
|
79
|
+
// The caller's abortSignal merged with the AI SDK's timeouts; an abort stops the provider call and is recorded as the step's outcome.
|
|
80
|
+
const abortSignal = params.abortSignal;
|
|
81
|
+
const aborted = () => abortSignal?.aborted === true;
|
|
78
82
|
let executed = false;
|
|
79
83
|
let cancelled = false;
|
|
80
84
|
let emittedLive = false;
|
|
85
|
+
let released = false;
|
|
81
86
|
let controller;
|
|
82
87
|
let step;
|
|
88
|
+
let settled;
|
|
89
|
+
// A detached consumer (abort/cancel) may issue a sequential follow-up while this step still settles: make that call wait for this checkpoint instead of refusing it as concurrent.
|
|
90
|
+
const detach = () => {
|
|
91
|
+
abortSignal?.removeEventListener('abort', detach);
|
|
92
|
+
if (!released)
|
|
93
|
+
settlingModelCalls.set(workflowID, settled);
|
|
94
|
+
};
|
|
95
|
+
abortSignal?.addEventListener('abort', detach, { once: true });
|
|
83
96
|
const stream = new ReadableStream({
|
|
84
97
|
start(c) {
|
|
85
98
|
controller = c;
|
|
86
99
|
},
|
|
87
|
-
// Await the step so
|
|
100
|
+
// Await the step so a direct cancel blocks until the checkpoint; through the AI SDK's pipeline a consumer's early exit returns sooner, hence the rule to drain or abort instead.
|
|
88
101
|
async cancel() {
|
|
89
102
|
cancelled = true;
|
|
90
|
-
|
|
103
|
+
detach();
|
|
91
104
|
// Post-cancel failures normally checkpoint as a success; anything else (e.g. a failed checkpoint write) is only visible here.
|
|
92
|
-
await step.catch((error) =>
|
|
105
|
+
await step.catch((error) => {
|
|
106
|
+
if (!aborted())
|
|
107
|
+
dbos_sdk_1.DBOS.logger.warn(`Durable model call step failed after consumer cancel: ${String(error)}`);
|
|
108
|
+
});
|
|
93
109
|
},
|
|
94
110
|
});
|
|
95
111
|
const emit = (part) => {
|
|
@@ -100,10 +116,10 @@ function durableCalls(options = {}) {
|
|
|
100
116
|
emittedLive = true;
|
|
101
117
|
}
|
|
102
118
|
};
|
|
103
|
-
// Once any output part has streamed live, a retry would re-stream from scratch and duplicate output
|
|
119
|
+
// Once any output part has streamed live, a retry would re-stream from scratch and duplicate output; an aborted call is never retried.
|
|
104
120
|
const streamStepConfig = {
|
|
105
121
|
...stepConfig,
|
|
106
|
-
shouldRetry: async (error) => !emittedLive && (stepConfig.shouldRetry ? await stepConfig.shouldRetry(error) : true),
|
|
122
|
+
shouldRetry: async (error) => !emittedLive && !aborted() && (stepConfig.shouldRetry ? await stepConfig.shouldRetry(error) : true),
|
|
107
123
|
};
|
|
108
124
|
try {
|
|
109
125
|
step = dbos_sdk_1.DBOS.runStep(async () => {
|
|
@@ -116,8 +132,10 @@ function durableCalls(options = {}) {
|
|
|
116
132
|
let sawFinish = false;
|
|
117
133
|
const abandon = () => void reader?.cancel().catch(() => { });
|
|
118
134
|
timeoutSignal?.addEventListener('abort', abandon, { once: true });
|
|
119
|
-
// A consumer abort
|
|
120
|
-
|
|
135
|
+
// A consumer abort tears the provider call down too; the attempt is then recorded as aborted below.
|
|
136
|
+
abortSignal?.addEventListener('abort', abandon, { once: true });
|
|
137
|
+
// Step-scope stream writes: cheap, replay-safe, and never duplicated since a retry is refused once content has streamed.
|
|
138
|
+
const streamWriter = streamConfig ? new durable_stream_1.ModelStreamWriter(streamConfig) : undefined;
|
|
121
139
|
try {
|
|
122
140
|
streamResult = await doStream();
|
|
123
141
|
reader = streamResult.stream.getReader();
|
|
@@ -125,11 +143,11 @@ function durableCalls(options = {}) {
|
|
|
125
143
|
const { done, value: part } = await reader.read();
|
|
126
144
|
if (timeoutSignal?.aborted)
|
|
127
145
|
throw (timeoutSignal.reason ?? new Error('step attempt timed out'));
|
|
128
|
-
if (done)
|
|
146
|
+
if (done || aborted())
|
|
129
147
|
break;
|
|
130
148
|
if (part.type === 'error') {
|
|
131
|
-
// A cancelled
|
|
132
|
-
if (cancelled
|
|
149
|
+
// A cancelled consumer abandoned this call; don't let a late failure become the step outcome, or replay would fail where the live run succeeded.
|
|
150
|
+
if (cancelled)
|
|
133
151
|
break;
|
|
134
152
|
throw toStepError(part.error);
|
|
135
153
|
}
|
|
@@ -138,6 +156,7 @@ function durableCalls(options = {}) {
|
|
|
138
156
|
sawFinish = true;
|
|
139
157
|
else
|
|
140
158
|
emit(part);
|
|
159
|
+
streamWriter?.push(part);
|
|
141
160
|
accumulator.add(part);
|
|
142
161
|
}
|
|
143
162
|
// No terminal part and no output: fail (retryably) like the AI SDK's NoOutputGeneratedError, instead of checkpointing a permanent empty success.
|
|
@@ -146,35 +165,53 @@ function durableCalls(options = {}) {
|
|
|
146
165
|
}
|
|
147
166
|
}
|
|
148
167
|
catch (error) {
|
|
149
|
-
// Same rule for stream-level failures (doStream or a read rejecting) after a cancel
|
|
150
|
-
if (!cancelled && !aborted())
|
|
168
|
+
// Same rule for stream-level failures (doStream or a read rejecting) after a cancel; after an abort, the abort is the outcome.
|
|
169
|
+
if (!cancelled && !aborted()) {
|
|
170
|
+
await streamWriter?.abandon();
|
|
151
171
|
throw error;
|
|
172
|
+
}
|
|
152
173
|
}
|
|
153
174
|
finally {
|
|
154
175
|
timeoutSignal?.removeEventListener('abort', abandon);
|
|
155
|
-
|
|
176
|
+
abortSignal?.removeEventListener('abort', abandon);
|
|
156
177
|
// Tear down the provider stream on early exits (error part, post-cancel break); a no-op after a clean drain.
|
|
157
178
|
void reader?.cancel().catch(() => { });
|
|
158
179
|
}
|
|
180
|
+
// Record the abort as the step's failure; replay rethrows it, so the workflow must catch aborts it means to survive.
|
|
181
|
+
if (aborted()) {
|
|
182
|
+
await streamWriter?.end({ aborted: true });
|
|
183
|
+
throw toAbortError(abortSignal.reason);
|
|
184
|
+
}
|
|
159
185
|
// Give the response a durable id/timestamp when the provider sent none, and emit it live (before the
|
|
160
186
|
// withheld 'finish') so the SDK sees the same values live and on replay instead of a fresh fallback.
|
|
161
187
|
// Skip the live emit for a timed-out (abandoned) attempt so it can't interleave with its retry.
|
|
162
188
|
const responseMetadataPart = accumulator.fillResponseMetadata((0, node_crypto_1.randomUUID)(), new Date());
|
|
163
189
|
if (responseMetadataPart && !timeoutSignal?.aborted)
|
|
164
190
|
emit(responseMetadataPart);
|
|
165
|
-
|
|
191
|
+
const recorded = encodeBinaryContent(accumulator.result(streamResult?.request, streamResult?.response));
|
|
192
|
+
// Every stream write lands before the checkpoint, so a reader that sees the next step has seen all of this one.
|
|
193
|
+
await streamWriter?.end({ finishReason: recorded.finishReason });
|
|
194
|
+
return recorded;
|
|
166
195
|
}, { ...streamStepConfig, name: stepConfig.name ?? stepName(model, 'stream') });
|
|
167
196
|
}
|
|
168
197
|
catch (error) {
|
|
169
198
|
// runStep can throw synchronously (e.g. a shutdown race); don't leak the guard entry.
|
|
170
|
-
|
|
199
|
+
abortSignal?.removeEventListener('abort', detach);
|
|
200
|
+
exitDurableModelCall(workflowID);
|
|
171
201
|
throw error;
|
|
172
202
|
}
|
|
203
|
+
// Hold the guard until the step has settled, so the next call in this workflow always starts after this checkpoint.
|
|
204
|
+
settled = step.then(() => undefined, () => undefined).then(() => {
|
|
205
|
+
released = true;
|
|
206
|
+
abortSignal?.removeEventListener('abort', detach);
|
|
207
|
+
exitDurableModelCall(workflowID);
|
|
208
|
+
if (settlingModelCalls.get(workflowID) === settled)
|
|
209
|
+
settlingModelCalls.delete(workflowID);
|
|
210
|
+
});
|
|
173
211
|
// Drive the returned stream from the settled step: a live run emits only the withheld 'finish' (deltas already
|
|
174
212
|
// streamed); a recovered run synthesizes the whole stream from the checkpoint. Either way consumers finish
|
|
175
213
|
// only after the result is durable.
|
|
176
|
-
void step
|
|
177
|
-
.then((recorded) => {
|
|
214
|
+
void step.then((recorded) => {
|
|
178
215
|
if (cancelled)
|
|
179
216
|
return;
|
|
180
217
|
if (executed) {
|
|
@@ -191,10 +228,11 @@ function durableCalls(options = {}) {
|
|
|
191
228
|
}
|
|
192
229
|
controller.close();
|
|
193
230
|
}, (error) => {
|
|
194
|
-
if (
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
.
|
|
231
|
+
if (cancelled)
|
|
232
|
+
return;
|
|
233
|
+
// Live abort: surface the signal's own reason so the AI SDK takes its abort path; a replayed abort is an ordinary error.
|
|
234
|
+
controller.error(executed && aborted() ? (abortSignal?.reason ?? error) : (0, internal_1.restoreAISDKErrorIdentity)(error));
|
|
235
|
+
});
|
|
198
236
|
return { stream };
|
|
199
237
|
},
|
|
200
238
|
};
|
|
@@ -204,12 +242,16 @@ function durableEmbeddingCalls(options = {}) {
|
|
|
204
242
|
const stepConfig = (0, internal_1.withErrorClassification)(options);
|
|
205
243
|
return {
|
|
206
244
|
specificationVersion: 'v4',
|
|
245
|
+
// embedMany awaits this per call: inside a workflow the batches run sequentially (deterministic step order on replay); elsewhere the model's own answer stands.
|
|
246
|
+
overrideSupportsParallelCalls: ({ model }) => ({
|
|
247
|
+
then: (onfulfilled, onrejected) => Promise.resolve((0, internal_1.isInWorkflowFunction)() ? false : model.supportsParallelCalls).then(onfulfilled, onrejected),
|
|
248
|
+
}),
|
|
207
249
|
wrapEmbed: async ({ doEmbed, model }) => {
|
|
208
250
|
(0, internal_1.assertNotInTransaction)('embed');
|
|
209
251
|
if (!(0, internal_1.isInWorkflowFunction)()) {
|
|
210
252
|
return await doEmbed();
|
|
211
253
|
}
|
|
212
|
-
const workflowID = enterDurableModelCall(
|
|
254
|
+
const workflowID = await enterDurableModelCall();
|
|
213
255
|
try {
|
|
214
256
|
return await dbos_sdk_1.DBOS.runStep(async () => doEmbed(), {
|
|
215
257
|
...stepConfig,
|
|
@@ -251,6 +293,12 @@ function durableImageCalls(options = {}) {
|
|
|
251
293
|
},
|
|
252
294
|
};
|
|
253
295
|
}
|
|
296
|
+
// The abort reason as a recordable Error (an AbortSignal's reason may be any value); the name is what the AI SDK's abort checks read.
|
|
297
|
+
function toAbortError(reason) {
|
|
298
|
+
if (reason instanceof Error)
|
|
299
|
+
return reason;
|
|
300
|
+
return Object.assign(new Error(String(reason)), { name: 'AbortError' });
|
|
301
|
+
}
|
|
254
302
|
/** Convert generated image bytes (Uint8Array) to base64 (spec-allowed) to keep checkpoints compact. */
|
|
255
303
|
function encodeImageResult(result) {
|
|
256
304
|
const images = result.images;
|
package/dist/middleware.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { StepConfig } from '@dbos-inc/dbos-sdk';
|
|
2
|
+
import type { ToolSet } from 'ai' with { 'resolution-mode': 'import' };
|
|
3
|
+
export interface DurableToolsOptions extends StepConfig {
|
|
4
|
+
/** Per-tool step config overriding the defaults; `false` leaves that tool non-durable. */
|
|
5
|
+
tools?: Record<string, StepConfig | false>;
|
|
6
|
+
/** Write each tool call's output (or error) to this durable stream from inside its step. */
|
|
7
|
+
durableStream?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Wraps each tool's `execute` so that, inside a workflow, every tool call runs as a durable DBOS step named
|
|
11
|
+
* `<tool>.<toolCallId>` and replays from its checkpoint on recovery; outside a workflow tools run unchanged.
|
|
12
|
+
* Retries are off by default (the AI SDK never retries tools); opt in per tool with `retriesAllowed`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function durableTools<TOOLS extends ToolSet>(tools: TOOLS, options?: DurableToolsOptions): TOOLS;
|
|
15
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,iBAAiB,EAAE,QAAQ,EAAE,CAAC;AAKvE,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IACrD,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CAAC,CAAC;IAC3C,4FAA4F;IAC5F,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,SAAS,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,mBAAwB,GAAG,KAAK,CA4D1G"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.durableTools = durableTools;
|
|
4
|
+
const dbos_sdk_1 = require("@dbos-inc/dbos-sdk");
|
|
5
|
+
const internal_1 = require("./internal");
|
|
6
|
+
const agent_tool_1 = require("./agent-tool");
|
|
7
|
+
const durable_stream_1 = require("./durable-stream");
|
|
8
|
+
/**
|
|
9
|
+
* Wraps each tool's `execute` so that, inside a workflow, every tool call runs as a durable DBOS step named
|
|
10
|
+
* `<tool>.<toolCallId>` and replays from its checkpoint on recovery; outside a workflow tools run unchanged.
|
|
11
|
+
* Retries are off by default (the AI SDK never retries tools); opt in per tool with `retriesAllowed`.
|
|
12
|
+
*/
|
|
13
|
+
function durableTools(tools, options = {}) {
|
|
14
|
+
const { tools: perTool, durableStream, ...defaults } = options;
|
|
15
|
+
const durable = {};
|
|
16
|
+
for (const [name, definition] of Object.entries(tools)) {
|
|
17
|
+
const override = perTool?.[name];
|
|
18
|
+
// An agent tool is a child workflow, not a step: leave it unwrapped, binding this durable stream to it.
|
|
19
|
+
const bindAgentTool = definition[agent_tool_1.AGENT_TOOL];
|
|
20
|
+
if (bindAgentTool) {
|
|
21
|
+
durable[name] = durableStream ? bindAgentTool(durableStream) : definition;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (typeof definition.execute !== 'function' || override === false) {
|
|
25
|
+
durable[name] = definition;
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const execute = definition.execute;
|
|
29
|
+
const merged = { ...defaults, ...override };
|
|
30
|
+
// Default classification (aborts and provider-declared non-retryable errors are terminal), but retries stay opt-in.
|
|
31
|
+
const stepConfig = { ...(0, internal_1.withErrorClassification)(merged), retriesAllowed: merged.retriesAllowed ?? false };
|
|
32
|
+
const prefix = stepConfig.name ?? name;
|
|
33
|
+
durable[name] = {
|
|
34
|
+
...definition,
|
|
35
|
+
execute: (input, execOptions) => {
|
|
36
|
+
(0, internal_1.assertNotInTransaction)(name);
|
|
37
|
+
if (!(0, internal_1.isInWorkflowFunction)())
|
|
38
|
+
return execute(input, execOptions);
|
|
39
|
+
const signal = execOptions.abortSignal;
|
|
40
|
+
// An aborted call is done whatever the failure looks like; a retry would re-run a cancelled side effect.
|
|
41
|
+
const callConfig = {
|
|
42
|
+
...stepConfig,
|
|
43
|
+
shouldRetry: async (error) => !signal?.aborted && (await stepConfig.shouldRetry(error)),
|
|
44
|
+
};
|
|
45
|
+
// The tool call id comes from the checkpointed model result, so a reordered parallel step fails replay instead of swapping results.
|
|
46
|
+
return (0, internal_1.runDurableStep)(`${prefix}.${execOptions.toolCallId}`, async () => {
|
|
47
|
+
// A timed-out attempt is abandoned by DBOS but keeps running; forward its signal so the tool stops too.
|
|
48
|
+
const timeoutSignal = dbos_sdk_1.DBOS.stepStatus?.timeoutSignal;
|
|
49
|
+
const abortSignal = timeoutSignal && signal ? AbortSignal.any([signal, timeoutSignal]) : (timeoutSignal ?? signal);
|
|
50
|
+
let output;
|
|
51
|
+
try {
|
|
52
|
+
output = await execute(input, abortSignal === signal ? execOptions : { ...execOptions, abortSignal });
|
|
53
|
+
// A streaming execute can't checkpoint mid-flight; drain it and record the final value (the last yield).
|
|
54
|
+
if ((0, internal_1.isAsyncIterable)(output)) {
|
|
55
|
+
let last;
|
|
56
|
+
for await (last of output)
|
|
57
|
+
;
|
|
58
|
+
output = last;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (durableStream)
|
|
63
|
+
await (0, durable_stream_1.writeToolRecord)(durableStream, execOptions.toolCallId, { errorText: errorMessage(error) });
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
if (durableStream)
|
|
67
|
+
await (0, durable_stream_1.writeToolRecord)(durableStream, execOptions.toolCallId, { output });
|
|
68
|
+
return output;
|
|
69
|
+
}, callConfig);
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return durable;
|
|
74
|
+
}
|
|
75
|
+
function errorMessage(error) {
|
|
76
|
+
return error instanceof Error ? error.message : String(error);
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dbos-inc/vercel-ai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.7",
|
|
4
4
|
"description": "DBOS durable execution integration for the Vercel AI SDK",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "commonjs",
|
|
@@ -44,14 +44,14 @@
|
|
|
44
44
|
"agent"
|
|
45
45
|
],
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"@dbos-inc/dbos-sdk": "^4.21.0",
|
|
47
|
+
"@dbos-inc/dbos-sdk": "^4.21.0 || ^5.0.0",
|
|
48
48
|
"ai": "^7.0.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@ai-sdk/gateway": "^4.0.0",
|
|
52
52
|
"@ai-sdk/provider": "^4.0.0",
|
|
53
53
|
"@arethetypeswrong/cli": "^0.18.0",
|
|
54
|
-
"@dbos-inc/dbos-sdk": "^
|
|
54
|
+
"@dbos-inc/dbos-sdk": "^5.0.2",
|
|
55
55
|
"@types/node": "^24.0.0",
|
|
56
56
|
"@types/pg": "^8.20.0",
|
|
57
57
|
"ai": "^7.0.0",
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import { DBOS } from '@dbos-inc/dbos-sdk';
|
|
3
|
+
import type { FlexibleSchema, ModelMessage, Tool } from 'ai' with { 'resolution-mode': 'import' };
|
|
4
|
+
import { writeDurableStream, writeToolRecord } from './durable-stream';
|
|
5
|
+
import { isInWorkflowFunction } from './internal';
|
|
6
|
+
|
|
7
|
+
/** Marks a tool built by agentTool: durableTools leaves it unwrapped (it is a child workflow, not a step) and binds its durable stream. */
|
|
8
|
+
export const AGENT_TOOL: unique symbol = Symbol.for('@dbos-inc/vercel-ai/agentTool');
|
|
9
|
+
|
|
10
|
+
// Captured at module load, outside any workflow: a cancellation triggered by an abort must not claim a function id in the parent's log.
|
|
11
|
+
const outsideWorkflow = AsyncLocalStorage.snapshot();
|
|
12
|
+
|
|
13
|
+
// The child's row appears shortly after the call starts and a cancel of a missing row is a no-op, so wait for it, giving up once the call has settled.
|
|
14
|
+
async function cancelChild(childID: string, settled: () => boolean): Promise<void> {
|
|
15
|
+
for (let i = 0; i < 100 && !settled(); i++) {
|
|
16
|
+
if (await DBOS.getWorkflowStatus(childID)) {
|
|
17
|
+
// The child's own sub-agents are its children; without the cascade they would run on with nobody awaiting them.
|
|
18
|
+
await DBOS.cancelWorkflow(childID, { cancelChildren: true });
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// What agentTool needs from an agent: the AI SDK's Agent interface, structurally.
|
|
26
|
+
type StreamingAgent = {
|
|
27
|
+
stream(options: { prompt: string } | { messages: ModelMessage[] }): PromiseLike<{ consumeStream(): PromiseLike<void>; readonly text: PromiseLike<string> }>;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export interface AgentToolOptions<INPUT, AGENT extends StreamingAgent, OUTPUT> {
|
|
31
|
+
/** Name of the child workflow; must be unique. */
|
|
32
|
+
name: string;
|
|
33
|
+
description: string;
|
|
34
|
+
inputSchema: FlexibleSchema<INPUT>;
|
|
35
|
+
agent: AGENT;
|
|
36
|
+
/** Turns the tool's input into the sub-agent's prompt. */
|
|
37
|
+
prompt: (input: INPUT) => string | ModelMessage[];
|
|
38
|
+
/** Turns the sub-agent's result into the tool's output (default: its final text); must be serializable. */
|
|
39
|
+
output?: (result: Awaited<ReturnType<AGENT['stream']>>) => OUTPUT | Promise<OUTPUT>;
|
|
40
|
+
/** Record the call in this durable stream: a `data-dbos-subagent` part naming the child workflow, then its output. */
|
|
41
|
+
durableStream?: string;
|
|
42
|
+
/** Name of a DBOS queue to run each child on, e.g. to bound how many sub-agents run at once. */
|
|
43
|
+
queue?: string;
|
|
44
|
+
/** Workflow timeout for each child. */
|
|
45
|
+
timeoutMS?: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export type AgentTool<INPUT, OUTPUT> = Tool<INPUT, OUTPUT> & {
|
|
49
|
+
/** The registered child workflow; call it directly to run the sub-agent without a model in the loop. */
|
|
50
|
+
workflow: (input: INPUT) => Promise<OUTPUT>;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Wraps an agent as a tool whose every call runs as a child workflow: durable at model-call granularity, with its own
|
|
55
|
+
* concurrency guard, safe to call in parallel, and visible as a child in the parent's step list. Call it at module load,
|
|
56
|
+
* before `DBOS.launch()`, since it registers the child workflow.
|
|
57
|
+
*/
|
|
58
|
+
export function agentTool<INPUT, AGENT extends StreamingAgent, OUTPUT = string>(
|
|
59
|
+
options: AgentToolOptions<INPUT, AGENT, OUTPUT>,
|
|
60
|
+
): AgentTool<INPUT, OUTPUT> {
|
|
61
|
+
const { name, agent, prompt, output } = options;
|
|
62
|
+
const run = async (input: INPUT): Promise<OUTPUT> => {
|
|
63
|
+
const request = prompt(input);
|
|
64
|
+
// stream, not generate: only streamed calls write to a durable stream.
|
|
65
|
+
const result = await agent.stream(typeof request === 'string' ? { prompt: request } : { messages: request });
|
|
66
|
+
await result.consumeStream();
|
|
67
|
+
return output ? await output(result as Awaited<ReturnType<AGENT['stream']>>) : ((await result.text) as OUTPUT);
|
|
68
|
+
};
|
|
69
|
+
const registered = DBOS.registerWorkflow(run, { name });
|
|
70
|
+
// Unbound on purpose: DBOS's registered invoker reads `this`, and as a method `this` would be the tool object.
|
|
71
|
+
const workflow = (input: INPUT): Promise<OUTPUT> => registered(input);
|
|
72
|
+
return build(options, registered, workflow, options.durableStream);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function build<INPUT, AGENT extends StreamingAgent, OUTPUT>(
|
|
76
|
+
options: AgentToolOptions<INPUT, AGENT, OUTPUT>,
|
|
77
|
+
registered: (input: INPUT) => Promise<OUTPUT>,
|
|
78
|
+
workflow: (input: INPUT) => Promise<OUTPUT>,
|
|
79
|
+
durableStream: string | undefined,
|
|
80
|
+
): AgentTool<INPUT, OUTPUT> {
|
|
81
|
+
const { name, description, inputSchema, queue, timeoutMS } = options;
|
|
82
|
+
const execute = async (input: INPUT, execOptions: { toolCallId: string; abortSignal?: AbortSignal }): Promise<OUTPUT> => {
|
|
83
|
+
if (!isInWorkflowFunction()) return workflow(input);
|
|
84
|
+
const { toolCallId } = execOptions;
|
|
85
|
+
// The tool call id comes from the checkpointed model output, so the child id is the same on replay and known for cancellation.
|
|
86
|
+
const childID = `${DBOS.workflowID}-${toolCallId}`;
|
|
87
|
+
// Start and getResult each reserve their function id synchronously here, so parallel calls replay in order.
|
|
88
|
+
const started = DBOS.startWorkflow(registered, { workflowID: childID, queueName: queue, timeoutMS })(input);
|
|
89
|
+
const pending = DBOS.getResult<OUTPUT>(childID);
|
|
90
|
+
started.catch(() => {});
|
|
91
|
+
pending.catch(() => {});
|
|
92
|
+
let settled = false;
|
|
93
|
+
const cancel = () => void outsideWorkflow(() => cancelChild(childID, () => settled)).catch(() => {});
|
|
94
|
+
execOptions.abortSignal?.addEventListener('abort', cancel, { once: true });
|
|
95
|
+
if (execOptions.abortSignal?.aborted) cancel();
|
|
96
|
+
try {
|
|
97
|
+
if (durableStream) {
|
|
98
|
+
await writeDurableStream(durableStream, [
|
|
99
|
+
{ type: 'data-dbos-subagent', id: toolCallId, data: { toolCallId, workflowID: childID, name } },
|
|
100
|
+
]);
|
|
101
|
+
}
|
|
102
|
+
await started;
|
|
103
|
+
const result = (await pending) as OUTPUT;
|
|
104
|
+
// A tool record, not a raw chunk, so the reader masks a sub-agent's error text like any other tool's.
|
|
105
|
+
if (durableStream) await writeToolRecord(durableStream, toolCallId, { output: result });
|
|
106
|
+
return result;
|
|
107
|
+
} catch (error) {
|
|
108
|
+
if (durableStream) await writeToolRecord(durableStream, toolCallId, { errorText: error instanceof Error ? error.message : String(error) });
|
|
109
|
+
throw error;
|
|
110
|
+
} finally {
|
|
111
|
+
settled = true;
|
|
112
|
+
execOptions.abortSignal?.removeEventListener('abort', cancel);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
return {
|
|
116
|
+
description,
|
|
117
|
+
inputSchema,
|
|
118
|
+
execute,
|
|
119
|
+
workflow,
|
|
120
|
+
[AGENT_TOOL]: (key: string) => build(options, registered, workflow, key),
|
|
121
|
+
} as unknown as AgentTool<INPUT, OUTPUT>;
|
|
122
|
+
}
|