@convex-dev/agent 0.6.0 → 0.6.1
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/UIMessages.d.ts +46 -0
- package/dist/UIMessages.d.ts.map +1 -0
- package/dist/UIMessages.js +634 -0
- package/dist/UIMessages.js.map +1 -0
- package/dist/client/createTool.d.ts +167 -0
- package/dist/client/createTool.d.ts.map +1 -0
- package/dist/client/createTool.js +116 -0
- package/dist/client/createTool.js.map +1 -0
- package/dist/client/defaultComponent.d.ts +11 -0
- package/dist/client/defaultComponent.d.ts.map +1 -0
- package/dist/client/defaultComponent.js +7 -0
- package/dist/client/defaultComponent.js.map +1 -0
- package/dist/client/definePlaygroundAPI.d.ts +1725 -0
- package/dist/client/definePlaygroundAPI.d.ts.map +1 -0
- package/dist/client/definePlaygroundAPI.js +271 -0
- package/dist/client/definePlaygroundAPI.js.map +1 -0
- package/dist/client/files.d.ts +69 -0
- package/dist/client/files.d.ts.map +1 -0
- package/dist/client/files.js +181 -0
- package/dist/client/files.js.map +1 -0
- package/dist/client/index.d.ts +2091 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +929 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/messages.d.ts +461 -0
- package/dist/client/messages.d.ts.map +1 -0
- package/dist/client/messages.js +106 -0
- package/dist/client/messages.js.map +1 -0
- package/dist/client/mockModel.d.ts +42 -0
- package/dist/client/mockModel.d.ts.map +1 -0
- package/dist/client/mockModel.js +182 -0
- package/dist/client/mockModel.js.map +1 -0
- package/dist/client/saveInputMessages.d.ts +20 -0
- package/dist/client/saveInputMessages.d.ts.map +1 -0
- package/dist/client/saveInputMessages.js +58 -0
- package/dist/client/saveInputMessages.js.map +1 -0
- package/dist/client/search.d.ts +493 -0
- package/dist/client/search.d.ts.map +1 -0
- package/dist/client/search.js +435 -0
- package/dist/client/search.js.map +1 -0
- package/dist/client/start.d.ts +84 -0
- package/dist/client/start.d.ts.map +1 -0
- package/dist/client/start.js +185 -0
- package/dist/client/start.js.map +1 -0
- package/dist/client/streamText.d.ts +46 -0
- package/dist/client/streamText.d.ts.map +1 -0
- package/dist/client/streamText.js +127 -0
- package/dist/client/streamText.js.map +1 -0
- package/dist/client/streaming.d.ts +3778 -0
- package/dist/client/streaming.d.ts.map +1 -0
- package/dist/client/streaming.js +330 -0
- package/dist/client/streaming.js.map +1 -0
- package/dist/client/threads.d.ts +46 -0
- package/dist/client/threads.d.ts.map +1 -0
- package/dist/client/threads.js +49 -0
- package/dist/client/threads.js.map +1 -0
- package/dist/client/types.d.ts +461 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/utils.d.ts +4 -0
- package/dist/client/utils.d.ts.map +1 -0
- package/dist/client/utils.js +21 -0
- package/dist/client/utils.js.map +1 -0
- package/dist/component/_generated/api.d.ts +48 -0
- package/dist/component/_generated/api.d.ts.map +1 -0
- package/dist/component/_generated/api.js +31 -0
- package/dist/component/_generated/api.js.map +1 -0
- package/dist/component/_generated/component.d.ts +3120 -0
- package/dist/component/_generated/component.d.ts.map +1 -0
- package/dist/component/_generated/component.js +11 -0
- package/dist/component/_generated/component.js.map +1 -0
- package/dist/component/_generated/dataModel.d.ts +46 -0
- package/dist/component/_generated/dataModel.d.ts.map +1 -0
- package/dist/component/_generated/dataModel.js +11 -0
- package/dist/component/_generated/dataModel.js.map +1 -0
- package/dist/component/_generated/server.d.ts +121 -0
- package/dist/component/_generated/server.d.ts.map +1 -0
- package/dist/component/_generated/server.js +78 -0
- package/dist/component/_generated/server.js.map +1 -0
- package/dist/component/apiKeys.d.ts +11 -0
- package/dist/component/apiKeys.d.ts.map +1 -0
- package/dist/component/apiKeys.js +69 -0
- package/dist/component/apiKeys.js.map +1 -0
- package/dist/component/convex.config.d.ts +3 -0
- package/dist/component/convex.config.d.ts.map +1 -0
- package/dist/component/convex.config.js +3 -0
- package/dist/component/convex.config.js.map +1 -0
- package/dist/component/files.d.ts +97 -0
- package/dist/component/files.d.ts.map +1 -0
- package/dist/component/files.js +190 -0
- package/dist/component/files.js.map +1 -0
- package/dist/component/messages.d.ts +3851 -0
- package/dist/component/messages.d.ts.map +1 -0
- package/dist/component/messages.js +757 -0
- package/dist/component/messages.js.map +1 -0
- package/dist/component/schema.d.ts +8029 -0
- package/dist/component/schema.d.ts.map +1 -0
- package/dist/component/schema.js +147 -0
- package/dist/component/schema.js.map +1 -0
- package/dist/component/streams.d.ts +128 -0
- package/dist/component/streams.d.ts.map +1 -0
- package/dist/component/streams.js +413 -0
- package/dist/component/streams.js.map +1 -0
- package/dist/component/threads.d.ts +115 -0
- package/dist/component/threads.d.ts.map +1 -0
- package/dist/component/threads.js +208 -0
- package/dist/component/threads.js.map +1 -0
- package/dist/component/users.d.ts +52 -0
- package/dist/component/users.d.ts.map +1 -0
- package/dist/component/users.js +229 -0
- package/dist/component/users.js.map +1 -0
- package/dist/component/vector/index.d.ts +61 -0
- package/dist/component/vector/index.d.ts.map +1 -0
- package/dist/component/vector/index.js +146 -0
- package/dist/component/vector/index.js.map +1 -0
- package/dist/component/vector/tables.d.ts +58 -0
- package/dist/component/vector/tables.d.ts.map +1 -0
- package/dist/component/vector/tables.js +56 -0
- package/dist/component/vector/tables.js.map +1 -0
- package/dist/deltas.d.ts +43 -0
- package/dist/deltas.d.ts.map +1 -0
- package/dist/deltas.js +446 -0
- package/dist/deltas.js.map +1 -0
- package/dist/mapping.d.ts +76 -0
- package/dist/mapping.d.ts.map +1 -0
- package/dist/mapping.js +720 -0
- package/dist/mapping.js.map +1 -0
- package/dist/react/SmoothText.d.ts +5 -0
- package/dist/react/SmoothText.d.ts.map +1 -0
- package/dist/react/SmoothText.js +6 -0
- package/dist/react/SmoothText.js.map +1 -0
- package/dist/react/index.d.ts +25 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +70 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/optimisticallySendMessage.d.ts +42 -0
- package/dist/react/optimisticallySendMessage.d.ts.map +1 -0
- package/dist/react/optimisticallySendMessage.js +74 -0
- package/dist/react/optimisticallySendMessage.js.map +1 -0
- package/dist/react/types.d.ts +12 -0
- package/dist/react/types.d.ts.map +1 -0
- package/dist/react/types.js +2 -0
- package/dist/react/types.js.map +1 -0
- package/dist/react/useDeltaStreams.d.ts +10 -0
- package/dist/react/useDeltaStreams.d.ts.map +1 -0
- package/dist/react/useDeltaStreams.js +106 -0
- package/dist/react/useDeltaStreams.js.map +1 -0
- package/dist/react/useSmoothText.d.ts +27 -0
- package/dist/react/useSmoothText.d.ts.map +1 -0
- package/dist/react/useSmoothText.js +68 -0
- package/dist/react/useSmoothText.js.map +1 -0
- package/dist/react/useStreamingUIMessages.d.ts +22 -0
- package/dist/react/useStreamingUIMessages.d.ts.map +1 -0
- package/dist/react/useStreamingUIMessages.js +92 -0
- package/dist/react/useStreamingUIMessages.js.map +1 -0
- package/dist/react/useThreadMessages.d.ts +104 -0
- package/dist/react/useThreadMessages.d.ts.map +1 -0
- package/dist/react/useThreadMessages.js +148 -0
- package/dist/react/useThreadMessages.js.map +1 -0
- package/dist/react/useUIMessages.d.ts +96 -0
- package/dist/react/useUIMessages.d.ts.map +1 -0
- package/dist/react/useUIMessages.js +108 -0
- package/dist/react/useUIMessages.js.map +1 -0
- package/dist/shared.d.ts +26 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +67 -0
- package/dist/shared.js.map +1 -0
- package/dist/validators.d.ts +24516 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +475 -0
- package/dist/validators.js.map +1 -0
- package/package.json +39 -39
- package/src/UIMessages.ts +0 -9
- package/src/client/approval.test.ts +144 -0
- package/src/client/index.ts +17 -9
- package/src/client/search.ts +0 -29
- package/src/client/start.ts +2 -2
- package/src/client/streamText.ts +9 -0
- package/src/client/streaming.ts +30 -23
- package/src/component/_generated/dataModel.ts +1 -1
- package/src/component/_generated/server.ts +0 -5
- package/src/mapping.ts +38 -22
- package/src/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../../src/client/streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,OAAO,EACZ,KAAK,cAAc,EACpB,MAAM,IAAI,CAAC;AAEZ,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,UAAU,EAEf,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,WAAW,EACX,QAAQ,EACR,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import { smoothStream, } from "ai";
|
|
2
|
+
import { v } from "convex/values";
|
|
3
|
+
import { vMessageDoc, vPaginationResult, vStreamDelta, vStreamMessage, } from "../validators.js";
|
|
4
|
+
export const vStreamMessagesReturnValue = v.object({
|
|
5
|
+
...vPaginationResult(vMessageDoc).fields,
|
|
6
|
+
streams: v.optional(v.union(v.object({ kind: v.literal("list"), messages: v.array(vStreamMessage) }), v.object({ kind: v.literal("deltas"), deltas: v.array(vStreamDelta) }))),
|
|
7
|
+
});
|
|
8
|
+
/**
|
|
9
|
+
* A function that handles fetching stream deltas, used with the React hooks
|
|
10
|
+
* `useThreadMessages` or `useStreamingThreadMessages`.
|
|
11
|
+
* @param ctx A ctx object from a query, mutation, or action.
|
|
12
|
+
* @param component The agent component, usually `components.agent`.
|
|
13
|
+
* @param args.threadId The thread to sync streams for.
|
|
14
|
+
* @param args.streamArgs The stream arguments with per-stream cursors.
|
|
15
|
+
* @returns The deltas for each stream from their existing cursor.
|
|
16
|
+
*/
|
|
17
|
+
export async function syncStreams(ctx, component, { threadId, streamArgs, includeStatuses, }) {
|
|
18
|
+
if (!streamArgs)
|
|
19
|
+
return undefined;
|
|
20
|
+
if (streamArgs.kind === "list") {
|
|
21
|
+
return {
|
|
22
|
+
kind: "list",
|
|
23
|
+
messages: await listStreams(ctx, component, {
|
|
24
|
+
threadId,
|
|
25
|
+
startOrder: streamArgs.startOrder,
|
|
26
|
+
includeStatuses,
|
|
27
|
+
}),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return {
|
|
32
|
+
kind: "deltas",
|
|
33
|
+
deltas: await ctx.runQuery(component.streams.listDeltas, {
|
|
34
|
+
threadId,
|
|
35
|
+
cursors: streamArgs.cursors,
|
|
36
|
+
}),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export async function abortStream(ctx, component, args) {
|
|
41
|
+
if ("streamId" in args) {
|
|
42
|
+
return await ctx.runMutation(component.streams.abort, {
|
|
43
|
+
reason: args.reason,
|
|
44
|
+
streamId: args.streamId,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
return await ctx.runMutation(component.streams.abortByOrder, {
|
|
49
|
+
reason: args.reason,
|
|
50
|
+
threadId: args.threadId,
|
|
51
|
+
order: args.order,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* List the streaming messages for a thread.
|
|
57
|
+
* @param ctx A ctx object from a query, mutation, or action.
|
|
58
|
+
* @param component The agent component, usually `components.agent`.
|
|
59
|
+
* @param args.threadId The thread to list streams for.
|
|
60
|
+
* @param args.startOrder The order of the messages in the thread to start listing from.
|
|
61
|
+
* @param args.includeStatuses The statuses to include in the list.
|
|
62
|
+
* @returns The streams for the thread.
|
|
63
|
+
*/
|
|
64
|
+
export async function listStreams(ctx, component, { threadId, startOrder, includeStatuses, }) {
|
|
65
|
+
return ctx.runQuery(component.streams.list, {
|
|
66
|
+
threadId,
|
|
67
|
+
startOrder,
|
|
68
|
+
statuses: includeStatuses,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
export const DEFAULT_STREAMING_OPTIONS = {
|
|
72
|
+
// This chunks by sentences / clauses. Punctuation followed by whitespace.
|
|
73
|
+
chunking: /[\p{P}\s]/u,
|
|
74
|
+
throttleMs: 250,
|
|
75
|
+
returnImmediately: false,
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
*
|
|
79
|
+
* @param options The options passed to `agent.streamText` to decide whether to
|
|
80
|
+
* save deltas while streaming.
|
|
81
|
+
* @param existing The transforms passed to `agent.streamText` to merge with.
|
|
82
|
+
* @returns The merged transforms to pass to the underlying `streamText` call.
|
|
83
|
+
*/
|
|
84
|
+
export function mergeTransforms(options, existing) {
|
|
85
|
+
if (!options) {
|
|
86
|
+
return existing;
|
|
87
|
+
}
|
|
88
|
+
const chunking = typeof options === "boolean"
|
|
89
|
+
? DEFAULT_STREAMING_OPTIONS.chunking
|
|
90
|
+
: options.chunking;
|
|
91
|
+
const transforms = Array.isArray(existing)
|
|
92
|
+
? existing
|
|
93
|
+
: existing
|
|
94
|
+
? [existing]
|
|
95
|
+
: [];
|
|
96
|
+
transforms.push(smoothStream({ delayInMs: null, chunking }));
|
|
97
|
+
return transforms;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* DeltaStreamer can be used to save a stream of "parts" by writing
|
|
101
|
+
* batches of them in "deltas" to the database so clients can subscribe
|
|
102
|
+
* (using the syncStreams utility and client hooks) and re-hydrate the stream.
|
|
103
|
+
* You can optionally compress the parts, e.g. concatenating text deltas, to
|
|
104
|
+
* optimize the data in transit.
|
|
105
|
+
*/
|
|
106
|
+
export class DeltaStreamer {
|
|
107
|
+
component;
|
|
108
|
+
ctx;
|
|
109
|
+
metadata;
|
|
110
|
+
streamId;
|
|
111
|
+
config;
|
|
112
|
+
#nextParts = [];
|
|
113
|
+
#latestWrite = 0;
|
|
114
|
+
#ongoingWrite;
|
|
115
|
+
#cursor = 0;
|
|
116
|
+
abortController;
|
|
117
|
+
// When true, the stream will be finished externally (e.g., atomically via addMessages)
|
|
118
|
+
// and consumeStream should skip calling finish().
|
|
119
|
+
#finishedExternally = false;
|
|
120
|
+
constructor(component, ctx, config, metadata) {
|
|
121
|
+
this.component = component;
|
|
122
|
+
this.ctx = ctx;
|
|
123
|
+
this.metadata = metadata;
|
|
124
|
+
this.config = {
|
|
125
|
+
throttleMs: config.throttleMs ?? DEFAULT_STREAMING_OPTIONS.throttleMs,
|
|
126
|
+
onAsyncAbort: config.onAsyncAbort,
|
|
127
|
+
compress: config.compress,
|
|
128
|
+
};
|
|
129
|
+
this.#nextParts = [];
|
|
130
|
+
this.abortController = new AbortController();
|
|
131
|
+
if (config.abortSignal) {
|
|
132
|
+
config.abortSignal.addEventListener("abort", async () => {
|
|
133
|
+
try {
|
|
134
|
+
if (this.abortController.signal.aborted) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
this.abortController.abort();
|
|
138
|
+
// Wait for in-flight stream creation before trying to abort it
|
|
139
|
+
if (this.#creatingStreamIdPromise) {
|
|
140
|
+
await this.#creatingStreamIdPromise;
|
|
141
|
+
}
|
|
142
|
+
if (this.streamId) {
|
|
143
|
+
await this.#ongoingWrite;
|
|
144
|
+
await this.ctx.runMutation(this.component.streams.abort, {
|
|
145
|
+
streamId: this.streamId,
|
|
146
|
+
reason: "abortSignal",
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// Best-effort cleanup — the stream will be garbage-collected
|
|
152
|
+
// by the 10-minute timeout if this fails.
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Avoid race conditions by only creating once
|
|
158
|
+
#creatingStreamIdPromise;
|
|
159
|
+
async getStreamId() {
|
|
160
|
+
if (!this.streamId) {
|
|
161
|
+
if (!this.#creatingStreamIdPromise) {
|
|
162
|
+
this.#creatingStreamIdPromise = this.ctx.runMutation(this.component.streams.create, this.metadata);
|
|
163
|
+
}
|
|
164
|
+
this.streamId = await this.#creatingStreamIdPromise;
|
|
165
|
+
}
|
|
166
|
+
return this.streamId;
|
|
167
|
+
}
|
|
168
|
+
async addParts(parts) {
|
|
169
|
+
if (this.abortController.signal.aborted) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
await this.getStreamId();
|
|
173
|
+
this.#nextParts.push(...parts);
|
|
174
|
+
if (!this.#ongoingWrite &&
|
|
175
|
+
Date.now() - this.#latestWrite >= this.config.throttleMs) {
|
|
176
|
+
this.#ongoingWrite = this.#sendDelta();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async consumeStream(stream) {
|
|
180
|
+
for await (const chunk of stream) {
|
|
181
|
+
await this.addParts([chunk]);
|
|
182
|
+
}
|
|
183
|
+
// Skip finish if it will be handled externally (atomically with message save)
|
|
184
|
+
// or if the stream was aborted (e.g., due to a failed delta write).
|
|
185
|
+
// Aborted streams are cleaned up via streams.abort (called by the abort
|
|
186
|
+
// signal handler), so we don't need to call finish() for them.
|
|
187
|
+
if (!this.#finishedExternally && !this.abortController.signal.aborted) {
|
|
188
|
+
await this.finish();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Mark the stream as being finished externally (e.g., atomically via addMessages).
|
|
193
|
+
* When called, consumeStream() will skip calling finish() since it will be
|
|
194
|
+
* handled elsewhere in the same mutation as message saving.
|
|
195
|
+
*/
|
|
196
|
+
markFinishedExternally() {
|
|
197
|
+
this.#finishedExternally = true;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get the stream ID, waiting for it to be created if necessary.
|
|
201
|
+
* Useful for passing to addMessages for atomic finish.
|
|
202
|
+
*/
|
|
203
|
+
async getOrCreateStreamId() {
|
|
204
|
+
return this.getStreamId();
|
|
205
|
+
}
|
|
206
|
+
async #sendDelta() {
|
|
207
|
+
if (this.abortController.signal.aborted) {
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
const delta = this.#createDelta();
|
|
211
|
+
if (!delta) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
this.#latestWrite = Date.now();
|
|
215
|
+
try {
|
|
216
|
+
const success = await this.ctx.runMutation(this.component.streams.addDelta, delta);
|
|
217
|
+
if (!success) {
|
|
218
|
+
await this.config.onAsyncAbort("async abort");
|
|
219
|
+
this.abortController.abort();
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
catch (e) {
|
|
224
|
+
await this.config.onAsyncAbort(e instanceof Error ? e.message : "unknown error");
|
|
225
|
+
this.abortController.abort();
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
// Now that we've sent the delta, check if we need to send another one.
|
|
229
|
+
if (this.#nextParts.length > 0 &&
|
|
230
|
+
Date.now() - this.#latestWrite >= this.config.throttleMs) {
|
|
231
|
+
// We send again immediately with the accumulated deltas.
|
|
232
|
+
this.#ongoingWrite = this.#sendDelta();
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
this.#ongoingWrite = undefined;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
#createDelta() {
|
|
239
|
+
if (this.#nextParts.length === 0) {
|
|
240
|
+
return undefined;
|
|
241
|
+
}
|
|
242
|
+
const start = this.#cursor;
|
|
243
|
+
const end = start + this.#nextParts.length;
|
|
244
|
+
this.#cursor = end;
|
|
245
|
+
const parts = this.config.compress
|
|
246
|
+
? this.config.compress(this.#nextParts)
|
|
247
|
+
: this.#nextParts;
|
|
248
|
+
this.#nextParts = [];
|
|
249
|
+
if (!this.streamId) {
|
|
250
|
+
throw new Error("Creating a delta before the stream is created");
|
|
251
|
+
}
|
|
252
|
+
return { streamId: this.streamId, start, end, parts };
|
|
253
|
+
}
|
|
254
|
+
async finish() {
|
|
255
|
+
if (!this.streamId) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
await this.#ongoingWrite;
|
|
259
|
+
await this.#sendDelta(); // #sendDelta checks aborted internally
|
|
260
|
+
if (this.abortController.signal.aborted) {
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
await this.ctx.runMutation(this.component.streams.finish, {
|
|
264
|
+
streamId: this.streamId,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
async fail(reason) {
|
|
268
|
+
if (this.abortController.signal.aborted) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
this.abortController.abort();
|
|
272
|
+
if (!this.streamId) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
await this.#ongoingWrite;
|
|
276
|
+
await this.ctx.runMutation(this.component.streams.abort, {
|
|
277
|
+
streamId: this.streamId,
|
|
278
|
+
reason,
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Compressing parts when streaming to save bandwidth in deltas.
|
|
284
|
+
*/
|
|
285
|
+
export function compressUIMessageChunks(parts) {
|
|
286
|
+
const compressed = [];
|
|
287
|
+
for (const part of parts) {
|
|
288
|
+
const last = compressed.at(-1);
|
|
289
|
+
if (part.type === "text-delta" || part.type === "reasoning-delta") {
|
|
290
|
+
if (last?.type === part.type && part.id === last.id) {
|
|
291
|
+
last.delta += part.delta;
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
compressed.push(part);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
compressed.push(part);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return compressed;
|
|
302
|
+
}
|
|
303
|
+
export function compressTextStreamParts(parts) {
|
|
304
|
+
const compressed = [];
|
|
305
|
+
for (const part of parts) {
|
|
306
|
+
const last = compressed.at(-1);
|
|
307
|
+
if (part.type === "text-delta" || part.type === "reasoning-delta") {
|
|
308
|
+
if (last?.type === part.type && part.id === last.id) {
|
|
309
|
+
last.text += part.text;
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
compressed.push(part);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
else if (part.type === "file") {
|
|
316
|
+
compressed.push({
|
|
317
|
+
type: "file",
|
|
318
|
+
file: {
|
|
319
|
+
...part.file,
|
|
320
|
+
uint8Array: undefined,
|
|
321
|
+
},
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
compressed.push(part);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return compressed;
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=streaming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../src/client/streaming.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { WithoutSystemFields } from "convex/server";
|
|
2
|
+
import type { ThreadDoc } from "../validators.js";
|
|
3
|
+
import type { ActionCtx, AgentComponent, MutationCtx, QueryCtx } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Create a thread to store messages with an Agent.
|
|
6
|
+
* @param ctx The context from a mutation or action.
|
|
7
|
+
* @param component The Agent component, usually `components.agent`.
|
|
8
|
+
* @param args The associated thread metadata.
|
|
9
|
+
* @returns The id of the created thread.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createThread(ctx: MutationCtx | ActionCtx, component: AgentComponent, args?: {
|
|
12
|
+
userId?: string | null;
|
|
13
|
+
title?: string;
|
|
14
|
+
summary?: string;
|
|
15
|
+
}): Promise<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Get the metadata for a thread.
|
|
18
|
+
* @param ctx A ctx object from a query, mutation, or action.
|
|
19
|
+
* @param args.threadId The thread to get the metadata for.
|
|
20
|
+
* @returns The metadata for the thread.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getThreadMetadata(ctx: QueryCtx | MutationCtx | ActionCtx, component: AgentComponent, args: {
|
|
23
|
+
threadId: string;
|
|
24
|
+
}): Promise<ThreadDoc>;
|
|
25
|
+
export declare function updateThreadMetadata(ctx: MutationCtx | ActionCtx, component: AgentComponent, args: {
|
|
26
|
+
threadId: string;
|
|
27
|
+
patch: Partial<WithoutSystemFields<ThreadDoc>>;
|
|
28
|
+
}): Promise<{
|
|
29
|
+
_creationTime: number;
|
|
30
|
+
_id: string;
|
|
31
|
+
status: "active" | "archived";
|
|
32
|
+
summary?: string;
|
|
33
|
+
title?: string;
|
|
34
|
+
userId?: string;
|
|
35
|
+
}>;
|
|
36
|
+
/**
|
|
37
|
+
* Search for threads by title, paginated.
|
|
38
|
+
* @param ctx The context passed from the query/mutation/action.
|
|
39
|
+
* @returns The threads matching the search, paginated.
|
|
40
|
+
*/
|
|
41
|
+
export declare function searchThreadTitles(ctx: QueryCtx | MutationCtx | ActionCtx, component: AgentComponent, { userId, query, limit, }: {
|
|
42
|
+
userId?: string | undefined;
|
|
43
|
+
query: string;
|
|
44
|
+
limit?: number;
|
|
45
|
+
}): Promise<ThreadDoc[]>;
|
|
46
|
+
//# sourceMappingURL=threads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../src/client/threads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,WAAW,EACX,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,SAAS,EAAE,cAAc,EACzB,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,mBAWpE;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,EACvC,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,SAAS,CAAC,CAQpB;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAA;CAAE;;;;;;;GAM3E;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,EACvC,SAAS,EAAE,cAAc,EACzB,EACE,MAAM,EACN,KAAK,EACL,KAAK,GACN,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,OAAO,CAAC,SAAS,EAAE,CAAC,CAMtB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a thread to store messages with an Agent.
|
|
3
|
+
* @param ctx The context from a mutation or action.
|
|
4
|
+
* @param component The Agent component, usually `components.agent`.
|
|
5
|
+
* @param args The associated thread metadata.
|
|
6
|
+
* @returns The id of the created thread.
|
|
7
|
+
*/
|
|
8
|
+
export async function createThread(ctx, component, args) {
|
|
9
|
+
const { _id: threadId } = await ctx.runMutation(component.threads.createThread, {
|
|
10
|
+
userId: args?.userId ?? undefined,
|
|
11
|
+
title: args?.title,
|
|
12
|
+
summary: args?.summary,
|
|
13
|
+
});
|
|
14
|
+
return threadId;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get the metadata for a thread.
|
|
18
|
+
* @param ctx A ctx object from a query, mutation, or action.
|
|
19
|
+
* @param args.threadId The thread to get the metadata for.
|
|
20
|
+
* @returns The metadata for the thread.
|
|
21
|
+
*/
|
|
22
|
+
export async function getThreadMetadata(ctx, component, args) {
|
|
23
|
+
const thread = await ctx.runQuery(component.threads.getThread, {
|
|
24
|
+
threadId: args.threadId,
|
|
25
|
+
});
|
|
26
|
+
if (!thread) {
|
|
27
|
+
throw new Error("Thread not found");
|
|
28
|
+
}
|
|
29
|
+
return thread;
|
|
30
|
+
}
|
|
31
|
+
export async function updateThreadMetadata(ctx, component, args) {
|
|
32
|
+
return ctx.runMutation(component.threads.updateThread, {
|
|
33
|
+
threadId: args.threadId,
|
|
34
|
+
patch: args.patch,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Search for threads by title, paginated.
|
|
39
|
+
* @param ctx The context passed from the query/mutation/action.
|
|
40
|
+
* @returns The threads matching the search, paginated.
|
|
41
|
+
*/
|
|
42
|
+
export async function searchThreadTitles(ctx, component, { userId, query, limit, }) {
|
|
43
|
+
return ctx.runQuery(component.threads.searchThreadTitles, {
|
|
44
|
+
userId,
|
|
45
|
+
query,
|
|
46
|
+
limit: limit ?? 10,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=threads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threads.js","sourceRoot":"","sources":["../../src/client/threads.ts"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAA4B,EAC5B,SAAyB,EACzB,IAAmE;IAEnE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,CAAC,WAAW,CAC7C,SAAS,CAAC,OAAO,CAAC,YAAY,EAC9B;QACE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,SAAS;QACjC,KAAK,EAAE,IAAI,EAAE,KAAK;QAClB,OAAO,EAAE,IAAI,EAAE,OAAO;KACvB,CACF,CAAC;IACF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAuC,EACvC,SAAyB,EACzB,IAA0B;IAE1B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE;QAC7D,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAA4B,EAC5B,SAAyB,EACzB,IAA0E;IAE1E,OAAO,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE;QACrD,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAuC,EACvC,SAAyB,EACzB,EACE,MAAM,EACN,KAAK,EACL,KAAK,GAC0D;IAEjE,OAAO,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE;QACxD,MAAM;QACN,KAAK;QACL,KAAK,EAAE,KAAK,IAAI,EAAE;KACnB,CAAC,CAAC;AACL,CAAC"}
|