@convex-dev/agent 0.7.2 → 0.7.3

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.
@@ -70,6 +70,7 @@ export async function listStreams(ctx, component, { threadId, startOrder, includ
70
70
  });
71
71
  }
72
72
  export const DEFAULT_STREAMING_OPTIONS = {
73
+ sendSources: false,
73
74
  // This chunks by sentences / clauses. Punctuation followed by whitespace.
74
75
  chunking: /[\p{P}\s]/u,
75
76
  throttleMs: 250,
@@ -113,12 +114,22 @@ export class DeltaStreamer {
113
114
  #nextParts = [];
114
115
  #latestWrite = 0;
115
116
  #ongoingWrite;
117
+ #flushTimer;
116
118
  #abortPromise;
117
119
  #cursor = 0;
118
120
  abortController;
119
- // When true, the stream will be finished externally (e.g., atomically via addMessages)
120
- // and consumeStream should skip calling finish().
121
- #finishedExternally = false;
121
+ /**
122
+ * When true, external code finishes the stream row (atomically with the
123
+ * message save, issue #181) and `consumeStream` must not. Decided once, at
124
+ * construction.
125
+ */
126
+ #finishHandledExternally;
127
+ /**
128
+ * Set only where the row is finished before the source is drained. An
129
+ * optimization, not a race guard: `addDelta` already returns false for a
130
+ * non-streaming row.
131
+ */
132
+ #stoppedAccepting = false;
122
133
  constructor(component, ctx, config, metadata) {
123
134
  this.component = component;
124
135
  this.ctx = ctx;
@@ -129,6 +140,7 @@ export class DeltaStreamer {
129
140
  compress: config.compress,
130
141
  materialize: config.materialize ?? null,
131
142
  };
143
+ this.#finishHandledExternally = config.finishHandledExternally ?? false;
132
144
  this.#nextParts = [];
133
145
  this.abortController = new AbortController();
134
146
  if (config.abortSignal) {
@@ -166,23 +178,58 @@ export class DeltaStreamer {
166
178
  if (this.abortController.signal.aborted) {
167
179
  return;
168
180
  }
169
- // Once the stream has been finished externally (e.g. by the inline
170
- // save in streamText's onStepFinish for the returnImmediately path),
171
- // the stream record is already "finished" in the DB. Late deltas
172
- // would be silently dropped by streams.addDelta — skip the work.
173
- if (this.#finishedExternally) {
181
+ if (this.#stoppedAccepting) {
174
182
  return;
175
183
  }
184
+ // Buffer before awaiting: a part parked in stream creation would be
185
+ // invisible to #flushPendingParts.
186
+ this.#nextParts.push(...parts);
176
187
  const streamId = await this.getOrCreateStreamId({
177
188
  ifAborted: "returnUndefined",
178
189
  });
179
190
  if (!streamId)
180
191
  return;
181
- this.#nextParts.push(...parts);
192
+ if (this.#stoppedAccepting || this.abortController.signal.aborted) {
193
+ return;
194
+ }
182
195
  if (!this.#ongoingWrite &&
183
196
  Date.now() - this.#latestWrite >= this.config.throttleMs) {
184
197
  this.#ongoingWrite = this.#sendDelta();
185
198
  }
199
+ else {
200
+ this.#scheduleFlush();
201
+ }
202
+ }
203
+ // The throttle is only reconsidered when the next part arrives, so a pause in
204
+ // the stream would otherwise hold whatever is buffered until it resumes.
205
+ #scheduleFlush() {
206
+ if (this.#flushTimer) {
207
+ return;
208
+ }
209
+ const wait = Math.max(0, this.config.throttleMs - (Date.now() - this.#latestWrite));
210
+ this.#flushTimer = setTimeout(() => {
211
+ this.#flushTimer = undefined;
212
+ if (this.#ongoingWrite ||
213
+ this.#nextParts.length === 0 ||
214
+ this.#stoppedAccepting ||
215
+ this.abortController.signal.aborted) {
216
+ return;
217
+ }
218
+ // A write can start and land while this wake is armed, which moves the
219
+ // deadline out from under it. Re-arm against the current one rather
220
+ // than publishing early.
221
+ if (Date.now() - this.#latestWrite < this.config.throttleMs) {
222
+ this.#scheduleFlush();
223
+ return;
224
+ }
225
+ this.#ongoingWrite = this.#sendDelta();
226
+ }, wait);
227
+ }
228
+ #cancelScheduledFlush() {
229
+ if (this.#flushTimer) {
230
+ clearTimeout(this.#flushTimer);
231
+ this.#flushTimer = undefined;
232
+ }
186
233
  }
187
234
  async consumeStream(stream) {
188
235
  try {
@@ -197,24 +244,70 @@ export class DeltaStreamer {
197
244
  await this.#abort(errorToString(error)).catch(() => { });
198
245
  throw error;
199
246
  }
200
- // Skip finish if it will be handled externally (atomically with message save)
201
- // or if the stream was aborted (e.g., due to a failed delta write).
202
247
  // Abort cleanup owns the terminal component transition, so consumeStream
203
248
  // must wait for it instead of also trying to finish the stream.
204
249
  if (this.abortController.signal.aborted) {
205
250
  await this.#waitForAbortCleanup();
251
+ return;
206
252
  }
207
- else if (!this.#finishedExternally) {
253
+ // EOF is the only point where every part has actually been handed over:
254
+ // parts sit in the AI SDK's transform and tee pipeline until the iterator
255
+ // yields them, so no earlier callback can observe them.
256
+ try {
257
+ await this.#flushPendingParts();
258
+ }
259
+ catch (error) {
260
+ if (this.abortController.signal.aborted) {
261
+ await this.#waitForAbortCleanup();
262
+ }
263
+ throw error;
264
+ }
265
+ if (this.abortController.signal.aborted) {
266
+ await this.#waitForAbortCleanup();
267
+ return;
268
+ }
269
+ if (!this.#finishHandledExternally) {
208
270
  await this.finish();
209
271
  }
210
272
  }
211
273
  /**
212
- * Mark the stream as being finished externally (e.g., atomically via addMessages).
213
- * When called, consumeStream() will skip calling finish() since it will be
214
- * handled elsewhere in the same mutation as message saving.
274
+ * Drain everything currently buffered or in flight, so that after this
275
+ * resolves no delta write is outstanding and #nextParts is empty.
276
+ */
277
+ async #flushPendingParts() {
278
+ while (!this.abortController.signal.aborted) {
279
+ const inFlight = this.#ongoingWrite;
280
+ await inFlight;
281
+ // #sendDelta reassigns #ongoingWrite from its own tail, so a write can
282
+ // still be live even though the buffer it drained is now empty.
283
+ if (this.#ongoingWrite !== inFlight) {
284
+ continue;
285
+ }
286
+ if (this.#nextParts.length === 0) {
287
+ break;
288
+ }
289
+ this.#ongoingWrite = this.#sendDelta();
290
+ }
291
+ }
292
+ /**
293
+ * For the `returnImmediately` path, where nothing awaits consumption and the
294
+ * save has to happen inline (issue #265).
295
+ *
296
+ * Inherent window: parts still inside the AI SDK pipeline at this instant
297
+ * never reach addParts, so they are never persisted as deltas (the
298
+ * stream-level `finish` chunk among them). The message saved alongside this
299
+ * transition is complete, and is authoritative once the stream is finished.
300
+ *
301
+ * Narrower race left open: a part admitted after the loop's last emptiness
302
+ * check is buffered but not drained here, and the write it triggers at EOF
303
+ * lands on a row the caller has since finished. `#sendDelta` tolerates that
304
+ * refusal rather than aborting. Closing it means refusing admission for the
305
+ * duration of the drain, which drops more of the tail than it saves.
215
306
  */
216
- markFinishedExternally() {
217
- this.#finishedExternally = true;
307
+ async flushAndStopAccepting() {
308
+ this.#cancelScheduledFlush();
309
+ await this.#flushPendingParts();
310
+ this.#stoppedAccepting = true;
218
311
  }
219
312
  async getOrCreateStreamId(options) {
220
313
  if (options?.ifAborted !== "returnUndefined") {
@@ -232,11 +325,13 @@ export class DeltaStreamer {
232
325
  return streamId;
233
326
  }
234
327
  async #sendDelta() {
328
+ this.#cancelScheduledFlush();
235
329
  if (this.abortController.signal.aborted) {
236
330
  return;
237
331
  }
238
332
  let success;
239
333
  try {
334
+ await this.getStreamId();
240
335
  const delta = await this.#createDelta();
241
336
  if (!delta) {
242
337
  return;
@@ -249,11 +344,11 @@ export class DeltaStreamer {
249
344
  return;
250
345
  }
251
346
  if (!success) {
252
- // An in-flight #sendDelta started before markFinishedExternally()
347
+ // A #sendDelta racing the inline save on the returnImmediately path
253
348
  // will get `success === false` because the stream row is already
254
349
  // "finished". That's a benign late-write miss, not a failure —
255
350
  // don't convert it into an abort.
256
- if (this.#finishedExternally) {
351
+ if (this.#stoppedAccepting) {
257
352
  return;
258
353
  }
259
354
  await this.#abortDelta("async abort");
@@ -267,6 +362,11 @@ export class DeltaStreamer {
267
362
  }
268
363
  else {
269
364
  this.#ongoingWrite = undefined;
365
+ // Whatever is still buffered has just lost its owner: this write is
366
+ // over and no arrival is guaranteed to follow. Hand it to the timer.
367
+ if (this.#nextParts.length > 0) {
368
+ this.#scheduleFlush();
369
+ }
270
370
  }
271
371
  }
272
372
  async #createDelta() {
@@ -298,6 +398,7 @@ export class DeltaStreamer {
298
398
  };
299
399
  }
300
400
  async finish() {
401
+ this.#cancelScheduledFlush();
301
402
  if (!this.streamId) {
302
403
  return;
303
404
  }
@@ -343,6 +444,7 @@ export class DeltaStreamer {
343
444
  }
344
445
  #abort(reason, waitForOngoingWrite = true) {
345
446
  if (!this.#abortPromise) {
447
+ this.#cancelScheduledFlush();
346
448
  this.abortController.abort();
347
449
  this.#abortPromise = this.#abortCreatedStream(reason, waitForOngoingWrite);
348
450
  }
@@ -1 +1 @@
1
- {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../../src/vercel/client/streaming.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../../src/vercel/client/streaming.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "email": "support@convex.dev",
8
8
  "url": "https://github.com/get-convex/agent/issues"
9
9
  },
10
- "version": "0.7.2",
10
+ "version": "0.7.3",
11
11
  "license": "Apache-2.0",
12
12
  "keywords": [
13
13
  "convex",
@@ -1,10 +1,12 @@
1
1
  /// <reference types="vite/client" />
2
2
 
3
- import { describe, expect, test } from "vitest";
3
+ import { afterEach, describe, expect, test, vi } from "vitest";
4
4
  import { api } from "./_generated/api.js";
5
5
  import type { Id } from "./_generated/dataModel.js";
6
6
  import { initConvexTest } from "./setup.test.js";
7
7
 
8
+ afterEach(() => vi.useRealTimers());
9
+
8
10
  async function seedStream(t: ReturnType<typeof initConvexTest>) {
9
11
  const thread = await t.mutation(api.threads.createThread, {
10
12
  userId: "stream-files",
@@ -106,4 +108,55 @@ describe("streams", () => {
106
108
  expect(stream?.state.kind).toBe("finished");
107
109
  expect(stream?.fileRefs).toBeUndefined();
108
110
  });
111
+
112
+ test("bulk deletion preserves global stream order across status lanes", async () => {
113
+ vi.useFakeTimers();
114
+
115
+ const t = initConvexTest();
116
+ const thread = await t.mutation(api.threads.createThread, {
117
+ userId: "stream-cleanup",
118
+ });
119
+ const threadId = thread._id as Id<"threads">;
120
+ const earlyStreamId = await t.run(async (ctx) => {
121
+ const streamId = await ctx.db.insert("streamingMessages", {
122
+ threadId,
123
+ order: 1,
124
+ stepOrder: 0,
125
+ format: "UIMessageChunk",
126
+ state: { kind: "streaming", lastHeartbeat: Date.now() },
127
+ });
128
+ await ctx.db.insert("streamingMessages", {
129
+ threadId,
130
+ order: 9,
131
+ stepOrder: 0,
132
+ format: "UIMessageChunk",
133
+ state: { kind: "aborted", reason: "retained regeneration" },
134
+ });
135
+ await ctx.db.insert("streamDeltas", {
136
+ streamId,
137
+ start: 0,
138
+ end: 1,
139
+ parts: [{ type: "text-start", id: "text" }],
140
+ });
141
+ return streamId;
142
+ });
143
+
144
+ await t.mutation(api.streams.deleteAllStreamsForThreadIdAsync, {
145
+ threadId,
146
+ });
147
+ await t.finishAllScheduledFunctions(vi.runAllTimers);
148
+
149
+ expect(
150
+ await t.query(api.streams.list, {
151
+ threadId,
152
+ statuses: ["streaming", "finished", "aborted"],
153
+ }),
154
+ ).toEqual([]);
155
+ expect(
156
+ await t.query(api.streams.listDeltas, {
157
+ threadId,
158
+ cursors: [{ streamId: earlyStreamId, cursor: 0 }],
159
+ }),
160
+ ).toEqual([]);
161
+ });
109
162
  });
@@ -470,8 +470,6 @@ export async function deleteStreamsPageForThreadId(
470
470
  );
471
471
  let deltaCursor = args.deltaCursor;
472
472
  const streamMessage = await mergedStream(allStreamMessages, [
473
- "threadId",
474
- "state.kind",
475
473
  "order",
476
474
  "stepOrder",
477
475
  ]).first();
@@ -458,6 +458,45 @@ describe("threads", () => {
458
458
  vi.useRealTimers();
459
459
  });
460
460
 
461
+ test("deleteAllForThreadIdAsync preserves its limit across continuations", async () => {
462
+ vi.useFakeTimers();
463
+
464
+ const t = convexTest(schema, modules);
465
+ const thread = await t.mutation(api.threads.createThread, {
466
+ userId: "boundedDeleteUser",
467
+ title: "Bounded Delete Thread",
468
+ });
469
+ const threadId = thread._id as Id<"threads">;
470
+ await t.mutation(api.messages.addMessages, {
471
+ threadId,
472
+ messages: Array.from({ length: 4 }, (_, i) => ({
473
+ message: { role: "user" as const, content: `Message ${i}` },
474
+ })),
475
+ });
476
+
477
+ await t.mutation(api.threads.deleteAllForThreadIdAsync, {
478
+ threadId,
479
+ limit: 1,
480
+ });
481
+
482
+ vi.runOnlyPendingTimers();
483
+ await t.finishInProgressScheduledFunctions();
484
+ const afterOneContinuation = await t.query(
485
+ api.messages.listMessagesByThreadId,
486
+ {
487
+ threadId,
488
+ order: "asc",
489
+ paginationOpts: { cursor: null, numItems: 10 },
490
+ },
491
+ );
492
+
493
+ await t.finishAllScheduledFunctions(vi.runAllTimers);
494
+ vi.useRealTimers();
495
+
496
+ expect(afterOneContinuation.page).toHaveLength(2);
497
+ expect(await t.query(api.threads.getThread, { threadId })).toBeNull();
498
+ });
499
+
461
500
  test("deleteAllForThreadIdSync handles thread with no messages", async () => {
462
501
  const t = convexTest(schema, modules);
463
502
 
@@ -207,6 +207,7 @@ export const deleteAllForThreadIdAsync = mutation({
207
207
  if (!isDone) {
208
208
  await ctx.scheduler.runAfter(0, api.threads.deleteAllForThreadIdAsync, {
209
209
  threadId: args.threadId,
210
+ limit: args.limit,
210
211
  cursor: messagesResult.cursor,
211
212
  messagesDone: messagesResult.isDone,
212
213
  streamsDone: streamResult.isDone,
@@ -0,0 +1,106 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import { z } from "zod";
3
+ import { stepCountIs } from "ai";
4
+ import { Agent, createTool, createThread } from "../index.js";
5
+ import {
6
+ actionGeneric,
7
+ anyApi,
8
+ defineSchema,
9
+ type ActionBuilder,
10
+ type ApiFromModules,
11
+ type DataModelFromSchemaDefinition,
12
+ } from "convex/server";
13
+ import { v } from "convex/values";
14
+ import { components, initConvexTest } from "./setup.test.js";
15
+ import { mockModel } from "./mockModel.js";
16
+
17
+ const schema = defineSchema({});
18
+ type DataModel = DataModelFromSchemaDefinition<typeof schema>;
19
+ const action = actionGeneric as ActionBuilder<DataModel, "public">;
20
+
21
+ // The AI SDK emits tool-input-available before the tool runs. The whole point
22
+ // of issue #221 is that a client can see it while the tool is still working,
23
+ // so the tool itself is where the delta log has to be read.
24
+ const partsSeenDuringTool: string[] = [];
25
+
26
+ const sleepTool = createTool({
27
+ description: "sleep",
28
+ inputSchema: z.object({ seconds: z.number() }),
29
+ execute: async (ctx) => {
30
+ const readTypes = async () => {
31
+ const streams = await ctx.runQuery(components.agent.streams.list, {
32
+ threadId: ctx.threadId!,
33
+ statuses: ["streaming"],
34
+ });
35
+ const deltas = await ctx.runQuery(components.agent.streams.listDeltas, {
36
+ threadId: ctx.threadId!,
37
+ cursors: streams.map((s) => ({ streamId: s.streamId, cursor: 0 })),
38
+ });
39
+ return deltas.flatMap((d) => d.parts.map((p) => p.type));
40
+ };
41
+ // Wait on the condition rather than on a fixed sleep chosen to outrun the
42
+ // throttle: there is no margin to tune, so machine load cannot decide the
43
+ // outcome. Without a scheduled flush this simply never arrives.
44
+ const deadline = Date.now() + 2_000;
45
+ let types = await readTypes();
46
+ while (!types.includes("tool-input-available") && Date.now() < deadline) {
47
+ await new Promise((resolve) => setTimeout(resolve, 5));
48
+ types = await readTypes();
49
+ }
50
+ partsSeenDuringTool.push(...types);
51
+ return { slept: 3 };
52
+ },
53
+ });
54
+
55
+ const agent = new Agent(components.agent, {
56
+ name: "slow-tool",
57
+ languageModel: mockModel({
58
+ contentSteps: [
59
+ [
60
+ {
61
+ type: "tool-call",
62
+ toolCallId: "t1",
63
+ toolName: "sleepTool",
64
+ input: JSON.stringify({ seconds: 3 }),
65
+ },
66
+ ],
67
+ [{ type: "text", text: "done" }],
68
+ ],
69
+ }),
70
+ tools: { sleepTool },
71
+ });
72
+
73
+ export const run = action({
74
+ args: { threadId: v.string() },
75
+ handler: async (ctx, { threadId }) => {
76
+ const r = await agent.streamText(
77
+ ctx,
78
+ { threadId },
79
+ { prompt: "go", stopWhen: stepCountIs(3) },
80
+ { saveStreamDeltas: { chunking: "word", throttleMs: 50 } },
81
+ );
82
+ await r.consumeStream();
83
+ return { ok: true };
84
+ },
85
+ });
86
+
87
+ const testApi: ApiFromModules<{ fns: { run: typeof run } }>["fns"] =
88
+ anyApi["deltaFlush.test"] as unknown as ApiFromModules<{
89
+ fns: { run: typeof run };
90
+ }>["fns"];
91
+
92
+ describe("throttled deltas flush on time (issue #221)", () => {
93
+ test("the tool call is queryable while the tool is still running", async () => {
94
+ partsSeenDuringTool.length = 0;
95
+ const t = initConvexTest(schema);
96
+ const threadId = await t.run(async (ctx) =>
97
+ createThread(ctx, components.agent, { userId: "u" }),
98
+ );
99
+
100
+ await t.action(testApi.run, { threadId });
101
+ await t.finishAllScheduledFunctions(() => {});
102
+
103
+ expect(partsSeenDuringTool).toContain("tool-input-available");
104
+ expect(partsSeenDuringTool).not.toContain("tool-output-available");
105
+ });
106
+ });