@convex-dev/agent 0.2.6-alpha.1 → 0.2.6
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/client/definePlaygroundAPI.d.ts +6 -4
- package/dist/client/definePlaygroundAPI.d.ts.map +1 -1
- package/dist/client/definePlaygroundAPI.js +15 -6
- package/dist/client/definePlaygroundAPI.js.map +1 -1
- package/dist/client/index.d.ts +26 -113
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +47 -371
- package/dist/client/index.js.map +1 -1
- package/dist/client/messages.d.ts +1 -1
- package/dist/client/messages.d.ts.map +1 -1
- package/dist/client/mockModel.d.ts +3 -3
- package/dist/client/mockModel.d.ts.map +1 -1
- package/dist/client/mockModel.js +22 -17
- package/dist/client/mockModel.js.map +1 -1
- package/dist/client/saveInputMessages.d.ts +20 -0
- package/dist/client/saveInputMessages.d.ts.map +1 -0
- package/dist/client/saveInputMessages.js +57 -0
- package/dist/client/saveInputMessages.js.map +1 -0
- package/dist/client/search.d.ts +110 -9
- package/dist/client/search.d.ts.map +1 -1
- package/dist/client/search.js +271 -39
- package/dist/client/search.js.map +1 -1
- package/dist/client/start.d.ts +83 -0
- package/dist/client/start.d.ts.map +1 -0
- package/dist/client/start.js +171 -0
- package/dist/client/start.js.map +1 -0
- package/dist/client/streaming.d.ts +8 -8
- package/dist/client/streaming.d.ts.map +1 -1
- package/dist/client/streaming.js +2 -1
- package/dist/client/streaming.js.map +1 -1
- package/dist/client/textStreamParts.d.ts.map +1 -1
- package/dist/client/textStreamParts.js +2 -9
- package/dist/client/textStreamParts.js.map +1 -1
- package/dist/client/threads.d.ts +1 -1
- package/dist/client/threads.d.ts.map +1 -1
- package/dist/client/types.d.ts +128 -4
- package/dist/client/types.d.ts.map +1 -1
- package/dist/component/_generated/api.d.ts +11 -3
- package/dist/component/messages.d.ts +13 -4
- package/dist/component/messages.d.ts.map +1 -1
- package/dist/component/messages.js +67 -25
- package/dist/component/messages.js.map +1 -1
- package/dist/component/schema.d.ts +2 -1643
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/schema.js +0 -24
- package/dist/component/schema.js.map +1 -1
- package/dist/mapping.d.ts +5 -8
- package/dist/mapping.d.ts.map +1 -1
- package/dist/mapping.js +72 -6
- package/dist/mapping.js.map +1 -1
- package/dist/react/deltas.d.ts.map +1 -1
- package/dist/react/deltas.js +1 -0
- package/dist/react/deltas.js.map +1 -1
- package/dist/react/fromUIMessages.d.ts +13 -0
- package/dist/react/fromUIMessages.d.ts.map +1 -0
- package/dist/react/fromUIMessages.js +70 -0
- package/dist/react/fromUIMessages.js.map +1 -0
- package/dist/react/toUIMessages.d.ts +5 -2
- package/dist/react/toUIMessages.d.ts.map +1 -1
- package/dist/react/toUIMessages.js +3 -0
- package/dist/react/toUIMessages.js.map +1 -1
- package/dist/shared.d.ts +10 -0
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +26 -0
- package/dist/shared.js.map +1 -1
- package/dist/validators.d.ts +1640 -0
- package/dist/validators.d.ts.map +1 -1
- package/dist/validators.js +41 -0
- package/dist/validators.js.map +1 -1
- package/package.json +1 -1
- package/src/client/definePlaygroundAPI.ts +16 -7
- package/src/client/index.test.ts +11 -46
- package/src/client/index.ts +98 -556
- package/src/client/messages.ts +1 -1
- package/src/client/mock.json +68 -0
- package/src/client/mockModel.ts +34 -23
- package/src/client/saveInputMessages.test.ts +576 -0
- package/src/client/saveInputMessages.ts +100 -0
- package/src/client/search.test.ts +1017 -0
- package/src/client/search.ts +446 -68
- package/src/client/start.ts +313 -0
- package/src/client/stream.json +48 -0
- package/src/client/streaming.ts +3 -3
- package/src/client/textStreamParts.ts +2 -11
- package/src/client/threads.ts +1 -1
- package/src/client/types.ts +134 -1
- package/src/component/_generated/api.d.ts +11 -3
- package/src/component/messages.ts +73 -27
- package/src/component/schema.ts +1 -29
- package/src/mapping.ts +83 -6
- package/src/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/src/react/deltas.ts +1 -0
- package/src/react/fromUIMessages.test.ts +427 -0
- package/src/react/fromUIMessages.ts +85 -0
- package/src/react/toUIMessages.ts +21 -13
- package/src/shared.ts +33 -0
- package/src/validators.test.ts +13 -2
- package/src/validators.ts +48 -0
package/dist/client/search.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
import { embedMany as embedMany_, } from "ai";
|
|
1
2
|
import { assert } from "convex-helpers";
|
|
2
|
-
import {
|
|
3
|
+
import { validateVectorDimension, } from "../component/vector/tables.js";
|
|
4
|
+
import { DEFAULT_MESSAGE_RANGE, DEFAULT_RECENT_MESSAGES, extractText, getModelName, getProviderName, isTool, sorted, } from "../shared.js";
|
|
5
|
+
import { inlineMessagesFiles } from "./files.js";
|
|
6
|
+
import { deserializeMessage } from "../mapping.js";
|
|
3
7
|
const DEFAULT_VECTOR_SCORE_THRESHOLD = 0.0;
|
|
8
|
+
// 10k characters should be more than enough for most cases, and stays under
|
|
9
|
+
// the 8k token limit for some models.
|
|
10
|
+
const MAX_EMBEDDING_TEXT_LENGTH = 10_000;
|
|
4
11
|
/**
|
|
5
12
|
* Fetch the context messages for a thread.
|
|
6
13
|
* @param ctx Either a query, mutation, or action ctx.
|
|
@@ -10,13 +17,18 @@ const DEFAULT_VECTOR_SCORE_THRESHOLD = 0.0;
|
|
|
10
17
|
* @returns
|
|
11
18
|
*/
|
|
12
19
|
export async function fetchContextMessages(ctx, component, args) {
|
|
20
|
+
const { recentMessages, searchMessages } = await fetchRecentAndSearchMessages(ctx, component, args);
|
|
21
|
+
return [...searchMessages, ...recentMessages];
|
|
22
|
+
}
|
|
23
|
+
export async function fetchRecentAndSearchMessages(ctx, component, args) {
|
|
13
24
|
assert(args.userId || args.threadId, "Specify userId or threadId");
|
|
14
25
|
const opts = args.contextOptions;
|
|
15
26
|
// Fetch the latest messages from the thread
|
|
16
27
|
let included;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
28
|
+
let recentMessages = [];
|
|
29
|
+
let searchMessages = [];
|
|
30
|
+
const targetMessageId = args.targetMessageId ?? args.upToAndIncludingMessageId;
|
|
31
|
+
if (args.threadId && opts.recentMessages !== 0) {
|
|
20
32
|
const { page } = await ctx.runQuery(component.messages.listMessagesByThreadId, {
|
|
21
33
|
threadId: args.threadId,
|
|
22
34
|
excludeToolMessages: opts.excludeToolMessages,
|
|
@@ -24,34 +36,53 @@ export async function fetchContextMessages(ctx, component, args) {
|
|
|
24
36
|
numItems: opts.recentMessages ?? DEFAULT_RECENT_MESSAGES,
|
|
25
37
|
cursor: null,
|
|
26
38
|
},
|
|
27
|
-
upToAndIncludingMessageId:
|
|
39
|
+
upToAndIncludingMessageId: targetMessageId,
|
|
28
40
|
order: "desc",
|
|
29
41
|
statuses: ["success"],
|
|
30
42
|
});
|
|
31
43
|
included = new Set(page.map((m) => m._id));
|
|
32
|
-
|
|
33
|
-
// Reverse since we fetched in descending order
|
|
34
|
-
...page.reverse());
|
|
44
|
+
recentMessages = filterOutOrphanedToolMessages(sorted(page));
|
|
35
45
|
}
|
|
36
46
|
if ((opts.searchOptions?.textSearch || opts.searchOptions?.vectorSearch) &&
|
|
37
47
|
opts.searchOptions?.limit) {
|
|
38
|
-
const targetMessage = contextMessages.find((m) => m._id === args.upToAndIncludingMessageId)?.message;
|
|
39
|
-
const messagesToSearch = targetMessage ? [targetMessage] : args.messages;
|
|
40
48
|
if (!("runAction" in ctx)) {
|
|
41
49
|
throw new Error("searchUserMessages only works in an action");
|
|
42
50
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
let text = args.searchText;
|
|
52
|
+
let embedding;
|
|
53
|
+
let embeddingModel;
|
|
54
|
+
if (!text) {
|
|
55
|
+
if (targetMessageId) {
|
|
56
|
+
const targetMessage = recentMessages.find((m) => m._id === targetMessageId);
|
|
57
|
+
if (targetMessage) {
|
|
58
|
+
text = targetMessage.text;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const targetSearchFields = await ctx.runQuery(component.messages.getMessageSearchFields, {
|
|
62
|
+
messageId: targetMessageId,
|
|
63
|
+
});
|
|
64
|
+
text = targetSearchFields.text;
|
|
65
|
+
embedding = targetSearchFields.embedding;
|
|
66
|
+
embeddingModel = targetSearchFields.embeddingModel;
|
|
67
|
+
}
|
|
68
|
+
assert(text, "Target message has no text for searching");
|
|
69
|
+
}
|
|
70
|
+
else if (args.messages?.length) {
|
|
71
|
+
text = extractText(args.messages.at(-1));
|
|
72
|
+
assert(text, "Final context message has no text to search");
|
|
73
|
+
}
|
|
74
|
+
assert(text, "No text to search");
|
|
75
|
+
}
|
|
76
|
+
if (opts.searchOptions?.vectorSearch) {
|
|
77
|
+
if (!embedding && args.getEmbedding) {
|
|
78
|
+
const embeddingFields = await args.getEmbedding(text);
|
|
79
|
+
embedding = embeddingFields.embedding;
|
|
80
|
+
embeddingModel = embeddingFields.textEmbeddingModel
|
|
81
|
+
? getModelName(embeddingFields.textEmbeddingModel)
|
|
82
|
+
: undefined;
|
|
83
|
+
}
|
|
50
84
|
}
|
|
51
|
-
const
|
|
52
|
-
? await args.getEmbedding?.(text)
|
|
53
|
-
: undefined;
|
|
54
|
-
const searchMessages = await ctx.runAction(component.messages.searchMessages, {
|
|
85
|
+
const searchResults = await ctx.runAction(component.messages.searchMessages, {
|
|
55
86
|
searchAllMessagesForUserId: opts?.searchOtherThreads
|
|
56
87
|
? (args.userId ??
|
|
57
88
|
(args.threadId &&
|
|
@@ -60,25 +91,25 @@ export async function fetchContextMessages(ctx, component, args) {
|
|
|
60
91
|
}))?.userId))
|
|
61
92
|
: undefined,
|
|
62
93
|
threadId: args.threadId,
|
|
63
|
-
|
|
94
|
+
targetMessageId,
|
|
64
95
|
limit: opts.searchOptions?.limit ?? 10,
|
|
65
96
|
messageRange: {
|
|
66
97
|
...DEFAULT_MESSAGE_RANGE,
|
|
67
98
|
...opts.searchOptions?.messageRange,
|
|
68
99
|
},
|
|
69
100
|
text,
|
|
101
|
+
textSearch: opts.searchOptions?.textSearch,
|
|
102
|
+
vectorSearch: opts.searchOptions?.vectorSearch,
|
|
70
103
|
vectorScoreThreshold: opts.searchOptions?.vectorScoreThreshold ??
|
|
71
104
|
DEFAULT_VECTOR_SCORE_THRESHOLD,
|
|
72
|
-
embedding
|
|
73
|
-
embeddingModel
|
|
74
|
-
? getModelName(embeddingFields.textEmbeddingModel)
|
|
75
|
-
: undefined,
|
|
105
|
+
embedding,
|
|
106
|
+
embeddingModel,
|
|
76
107
|
});
|
|
77
108
|
// TODO: track what messages we used for context
|
|
78
|
-
|
|
109
|
+
searchMessages = filterOutOrphanedToolMessages(sorted(searchResults.filter((m) => !included?.has(m._id))));
|
|
79
110
|
}
|
|
80
111
|
// Ensure we don't include tool messages without a corresponding tool call
|
|
81
|
-
return
|
|
112
|
+
return { recentMessages, searchMessages };
|
|
82
113
|
}
|
|
83
114
|
/**
|
|
84
115
|
* Filter out tool messages that don't have both a tool call and response.
|
|
@@ -112,19 +143,220 @@ export function filterOutOrphanedToolMessages(docs) {
|
|
|
112
143
|
}
|
|
113
144
|
return result;
|
|
114
145
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
146
|
+
/**
|
|
147
|
+
* Embed a list of messages, including calling any usage handler.
|
|
148
|
+
* This will not save the embeddings to the database.
|
|
149
|
+
*/
|
|
150
|
+
export async function embedMessages(ctx, { userId, threadId, ...options }, messages) {
|
|
151
|
+
if (!options.textEmbeddingModel) {
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
let embeddings;
|
|
155
|
+
const messageTexts = messages.map((m) => !isTool(m) && extractText(m));
|
|
156
|
+
// Find the indexes of the messages that have text.
|
|
157
|
+
const textIndexes = messageTexts
|
|
158
|
+
.map((t, i) => (t ? i : undefined))
|
|
159
|
+
.filter((i) => i !== undefined);
|
|
160
|
+
if (textIndexes.length === 0) {
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
const values = messageTexts
|
|
164
|
+
.map((t) => t && t.trim().slice(0, MAX_EMBEDDING_TEXT_LENGTH))
|
|
165
|
+
.filter((t) => !!t);
|
|
166
|
+
// Then embed those messages.
|
|
167
|
+
const textEmbeddings = await embedMany(ctx, {
|
|
168
|
+
...options,
|
|
169
|
+
userId,
|
|
170
|
+
threadId,
|
|
171
|
+
values,
|
|
172
|
+
});
|
|
173
|
+
// Then assemble the embeddings into a single array with nulls for the messages without text.
|
|
174
|
+
const embeddingsOrNull = Array(messages.length).fill(null);
|
|
175
|
+
textIndexes.forEach((i, j) => {
|
|
176
|
+
embeddingsOrNull[i] = textEmbeddings.embeddings[j];
|
|
177
|
+
});
|
|
178
|
+
if (textEmbeddings.embeddings.length > 0) {
|
|
179
|
+
const dimension = textEmbeddings.embeddings[0].length;
|
|
180
|
+
validateVectorDimension(dimension);
|
|
181
|
+
const model = getModelName(options.textEmbeddingModel);
|
|
182
|
+
embeddings = { vectors: embeddingsOrNull, dimension, model };
|
|
183
|
+
}
|
|
184
|
+
return embeddings;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Embeds many strings, calling any usage handler.
|
|
188
|
+
* @param ctx The ctx parameter to an action.
|
|
189
|
+
* @param args Arguments to AI SDK's embedMany, and context for the embedding,
|
|
190
|
+
* passed to the usage handler.
|
|
191
|
+
* @returns The embeddings for the strings, matching the order of the values.
|
|
192
|
+
*/
|
|
193
|
+
export async function embedMany(ctx, { userId, threadId, values, abortSignal, headers, agentName, usageHandler, textEmbeddingModel, callSettings, }) {
|
|
194
|
+
const embeddingModel = textEmbeddingModel;
|
|
195
|
+
assert(embeddingModel, "a textEmbeddingModel is required to be set for vector search");
|
|
196
|
+
const result = await embedMany_({
|
|
197
|
+
...callSettings,
|
|
198
|
+
model: embeddingModel,
|
|
199
|
+
values,
|
|
200
|
+
abortSignal,
|
|
201
|
+
headers,
|
|
202
|
+
});
|
|
203
|
+
if (usageHandler && result.usage) {
|
|
204
|
+
await usageHandler(ctx, {
|
|
205
|
+
userId,
|
|
206
|
+
threadId,
|
|
207
|
+
agentName,
|
|
208
|
+
model: getModelName(embeddingModel),
|
|
209
|
+
provider: getProviderName(embeddingModel),
|
|
210
|
+
providerMetadata: undefined,
|
|
211
|
+
usage: {
|
|
212
|
+
inputTokens: result.usage.tokens,
|
|
213
|
+
outputTokens: 0,
|
|
214
|
+
totalTokens: result.usage.tokens,
|
|
215
|
+
},
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
return { embeddings: result.embeddings };
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Embed a list of messages, and save the embeddings to the database.
|
|
222
|
+
* @param ctx The ctx parameter to an action.
|
|
223
|
+
* @param component The agent component, usually components.agent.
|
|
224
|
+
* @param args The context for the embedding, passed to the usage handler.
|
|
225
|
+
* @param messages The messages to embed, in the Agent MessageDoc format.
|
|
226
|
+
*/
|
|
227
|
+
export async function generateAndSaveEmbeddings(ctx, component, args, messages) {
|
|
228
|
+
const toEmbed = messages.filter((m) => !m.embeddingId && m.message);
|
|
229
|
+
if (toEmbed.length === 0) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
const embeddings = await embedMessages(ctx, args, toEmbed.map((m) => m.message));
|
|
233
|
+
if (embeddings && embeddings.vectors.some((v) => v !== null)) {
|
|
234
|
+
await ctx.runMutation(component.vector.index.insertBatch, {
|
|
235
|
+
vectorDimension: embeddings.dimension,
|
|
236
|
+
vectors: toEmbed
|
|
237
|
+
.map((m, i) => ({
|
|
238
|
+
messageId: m._id,
|
|
239
|
+
model: embeddings.model,
|
|
240
|
+
table: "messages",
|
|
241
|
+
userId: m.userId,
|
|
242
|
+
threadId: m.threadId,
|
|
243
|
+
vector: embeddings.vectors[i],
|
|
244
|
+
}))
|
|
245
|
+
.filter((v) => v.vector !== null),
|
|
246
|
+
});
|
|
121
247
|
}
|
|
122
|
-
return embeddingModel.modelId;
|
|
123
248
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
249
|
+
/**
|
|
250
|
+
* Similar to fetchContextMessages, but also combines the input messages,
|
|
251
|
+
* with search context, recent messages, input messages, then prompt messages.
|
|
252
|
+
* If there is a promptMessageId and prompt message(s) provided, it will splice
|
|
253
|
+
* the prompt messages into the history to replace the promptMessageId message,
|
|
254
|
+
* but still be followed by any existing messages that were in response to the
|
|
255
|
+
* promptMessageId message.
|
|
256
|
+
*/
|
|
257
|
+
export async function fetchContextWithPrompt(ctx, component, args) {
|
|
258
|
+
const { threadId, userId, textEmbeddingModel } = args;
|
|
259
|
+
const promptArray = getPromptArray(args.prompt);
|
|
260
|
+
const searchText = promptArray.length
|
|
261
|
+
? extractText(promptArray.at(-1))
|
|
262
|
+
: args.promptMessageId
|
|
263
|
+
? undefined
|
|
264
|
+
: args.messages?.at(-1)
|
|
265
|
+
? extractText(args.messages.at(-1))
|
|
266
|
+
: undefined;
|
|
267
|
+
// If only a messageId is provided, this will add that message to the end.
|
|
268
|
+
const { recentMessages, searchMessages } = await fetchRecentAndSearchMessages(ctx, component, {
|
|
269
|
+
userId,
|
|
270
|
+
threadId,
|
|
271
|
+
targetMessageId: args.promptMessageId,
|
|
272
|
+
searchText,
|
|
273
|
+
contextOptions: args.contextOptions ?? {},
|
|
274
|
+
getEmbedding: async (text) => {
|
|
275
|
+
assert(textEmbeddingModel, "A textEmbeddingModel is required to be set on the Agent that you're doing vector search with");
|
|
276
|
+
return {
|
|
277
|
+
embedding: (await embedMany(ctx, {
|
|
278
|
+
...args,
|
|
279
|
+
userId,
|
|
280
|
+
values: [text],
|
|
281
|
+
textEmbeddingModel,
|
|
282
|
+
})).embeddings[0],
|
|
283
|
+
textEmbeddingModel,
|
|
284
|
+
};
|
|
285
|
+
},
|
|
286
|
+
});
|
|
287
|
+
const promptMessageIndex = args.promptMessageId
|
|
288
|
+
? recentMessages.findIndex((m) => m._id === args.promptMessageId)
|
|
289
|
+
: -1;
|
|
290
|
+
const promptMessage = promptMessageIndex !== -1 ? recentMessages[promptMessageIndex] : undefined;
|
|
291
|
+
let prePromptDocs = recentMessages;
|
|
292
|
+
const messages = args.messages ?? [];
|
|
293
|
+
let existingResponseDocs = [];
|
|
294
|
+
if (promptMessage) {
|
|
295
|
+
prePromptDocs = recentMessages.slice(0, promptMessageIndex);
|
|
296
|
+
existingResponseDocs = recentMessages.slice(promptMessageIndex + 1);
|
|
297
|
+
if (promptArray.length === 0) {
|
|
298
|
+
// If they didn't override the prompt, use the existing prompt message.
|
|
299
|
+
if (promptMessage.message) {
|
|
300
|
+
promptArray.push(promptMessage.message);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
if (!promptMessage.embeddingId && textEmbeddingModel) {
|
|
304
|
+
// Lazily generate embeddings for the prompt message, if it doesn't have
|
|
305
|
+
// embeddings yet. This can happen if the message was saved in a mutation
|
|
306
|
+
// where the LLM is not available.
|
|
307
|
+
await generateAndSaveEmbeddings(ctx, component, {
|
|
308
|
+
...args,
|
|
309
|
+
userId,
|
|
310
|
+
textEmbeddingModel,
|
|
311
|
+
}, [promptMessage]);
|
|
312
|
+
}
|
|
127
313
|
}
|
|
128
|
-
|
|
314
|
+
const search = searchMessages
|
|
315
|
+
.map((m) => m.message)
|
|
316
|
+
.filter((m) => !!m)
|
|
317
|
+
.map(deserializeMessage);
|
|
318
|
+
const recent = prePromptDocs
|
|
319
|
+
.map((m) => m.message)
|
|
320
|
+
.filter((m) => !!m)
|
|
321
|
+
.map(deserializeMessage);
|
|
322
|
+
const inputMessages = messages.map(deserializeMessage);
|
|
323
|
+
const inputPrompt = promptArray.map(deserializeMessage);
|
|
324
|
+
const existingResponses = existingResponseDocs
|
|
325
|
+
.map((m) => m.message)
|
|
326
|
+
.filter((m) => !!m)
|
|
327
|
+
.map(deserializeMessage);
|
|
328
|
+
let processedMessages = args.contextHandler
|
|
329
|
+
? await args.contextHandler(ctx, {
|
|
330
|
+
search,
|
|
331
|
+
recent,
|
|
332
|
+
inputMessages,
|
|
333
|
+
inputPrompt,
|
|
334
|
+
existingResponses,
|
|
335
|
+
userId,
|
|
336
|
+
threadId,
|
|
337
|
+
})
|
|
338
|
+
: [
|
|
339
|
+
...search,
|
|
340
|
+
...recent,
|
|
341
|
+
...inputMessages,
|
|
342
|
+
...inputPrompt,
|
|
343
|
+
...existingResponses,
|
|
344
|
+
];
|
|
345
|
+
// Process messages to inline localhost files (if not, file urls pointing to localhost will be sent to LLM providers)
|
|
346
|
+
if (process.env.CONVEX_CLOUD_URL?.startsWith("http://127.0.0.1")) {
|
|
347
|
+
processedMessages = await inlineMessagesFiles(processedMessages);
|
|
348
|
+
}
|
|
349
|
+
return {
|
|
350
|
+
messages: processedMessages,
|
|
351
|
+
order: promptMessage?.order,
|
|
352
|
+
stepOrder: promptMessage?.stepOrder,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
export function getPromptArray(prompt) {
|
|
356
|
+
return !prompt
|
|
357
|
+
? []
|
|
358
|
+
: Array.isArray(prompt)
|
|
359
|
+
? prompt
|
|
360
|
+
: [{ role: "user", content: prompt }];
|
|
129
361
|
}
|
|
130
362
|
//# sourceMappingURL=search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/client/search.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/client/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { type CallSettings, type GenerateObjectResult, type IdGenerator, type LanguageModel, type ModelMessage, type StepResult, type StopCondition, type ToolSet } from "ai";
|
|
2
|
+
import type { ActionCtx, AgentComponent, Config, Options } from "./types.js";
|
|
3
|
+
import type { Message, MessageDoc } from "../validators.js";
|
|
4
|
+
import { type ModelOrMetadata } from "../shared.js";
|
|
5
|
+
import type { Agent } from "./index.js";
|
|
6
|
+
export declare function start<T, Tools extends ToolSet = ToolSet, CustomCtx extends object = object>(ctx: ActionCtx & CustomCtx, component: AgentComponent,
|
|
7
|
+
/**
|
|
8
|
+
* These are the arguments you'll pass to the LLM call such as
|
|
9
|
+
* `generateText` or `streamText`. This function will look up the context
|
|
10
|
+
* and provide functions to save the steps, abort the generation, and more.
|
|
11
|
+
* The type of the arguments returned infers from the type of the arguments
|
|
12
|
+
* you pass here.
|
|
13
|
+
*/
|
|
14
|
+
args: T & {
|
|
15
|
+
/**
|
|
16
|
+
* If provided, this message will be used as the "prompt" for the LLM call,
|
|
17
|
+
* instead of the prompt or messages.
|
|
18
|
+
* This is useful if you want to first save a user message, then use it as
|
|
19
|
+
* the prompt for the LLM call in another call.
|
|
20
|
+
*/
|
|
21
|
+
promptMessageId?: string;
|
|
22
|
+
/**
|
|
23
|
+
* The model to use for the LLM calls. This will override the model specified
|
|
24
|
+
* in the Agent constructor.
|
|
25
|
+
*/
|
|
26
|
+
model?: LanguageModel;
|
|
27
|
+
/**
|
|
28
|
+
* The tools to use for the tool calls. This will override tools specified
|
|
29
|
+
* in the Agent constructor or createThread / continueThread.
|
|
30
|
+
*/
|
|
31
|
+
tools?: Tools;
|
|
32
|
+
/**
|
|
33
|
+
* The single prompt message to use for the LLM call. This will be the
|
|
34
|
+
* last message in the context. If it's a string, it will be a user role.
|
|
35
|
+
*/
|
|
36
|
+
prompt?: string | (ModelMessage | Message)[];
|
|
37
|
+
/**
|
|
38
|
+
* If provided alongside prompt, the ordering will be:
|
|
39
|
+
* 1. system prompt
|
|
40
|
+
* 2. search context
|
|
41
|
+
* 3. recent messages
|
|
42
|
+
* 4. these messages
|
|
43
|
+
* 5. prompt messages, including those already on the same `order` as
|
|
44
|
+
* the promptMessageId message, if provided.
|
|
45
|
+
*/
|
|
46
|
+
messages?: (ModelMessage | Message)[];
|
|
47
|
+
/**
|
|
48
|
+
* The abort signal to be passed to the LLM call. If triggered, it will
|
|
49
|
+
* mark the pending message as failed. If the generation is asynchronously
|
|
50
|
+
* aborted, it will trigger this signal when detected.
|
|
51
|
+
*/
|
|
52
|
+
abortSignal?: AbortSignal;
|
|
53
|
+
stopWhen?: StopCondition<Tools> | Array<StopCondition<Tools>>;
|
|
54
|
+
_internal?: {
|
|
55
|
+
generateId?: IdGenerator;
|
|
56
|
+
};
|
|
57
|
+
}, { threadId, ...opts }: Options & Config & {
|
|
58
|
+
userId?: string | null;
|
|
59
|
+
threadId?: string;
|
|
60
|
+
languageModel: LanguageModel;
|
|
61
|
+
agentName: string;
|
|
62
|
+
agentForToolCtx?: Agent;
|
|
63
|
+
}): Promise<{
|
|
64
|
+
args: T & {
|
|
65
|
+
system?: string;
|
|
66
|
+
model: LanguageModel;
|
|
67
|
+
messages: ModelMessage[];
|
|
68
|
+
tools?: Tools;
|
|
69
|
+
} & CallSettings;
|
|
70
|
+
order: number;
|
|
71
|
+
stepOrder: number;
|
|
72
|
+
userId: string | undefined;
|
|
73
|
+
promptMessageId: string | undefined;
|
|
74
|
+
updateModel: (model: ModelOrMetadata | undefined) => void;
|
|
75
|
+
save: <TOOLS extends ToolSet>(toSave: {
|
|
76
|
+
step: StepResult<TOOLS>;
|
|
77
|
+
} | {
|
|
78
|
+
object: GenerateObjectResult<unknown>;
|
|
79
|
+
}, createPendingMessage?: boolean) => Promise<void>;
|
|
80
|
+
fail: (reason: string) => Promise<void>;
|
|
81
|
+
getSavedMessages: () => MessageDoc[];
|
|
82
|
+
}>;
|
|
83
|
+
//# sourceMappingURL=start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/client/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,OAAO,EACb,MAAM,IAAI,CAAC;AAMZ,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,MAAM,EACN,OAAO,EAER,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIxC,wBAAsB,KAAK,CACzB,CAAC,EACD,KAAK,SAAS,OAAO,GAAG,OAAO,EAC/B,SAAS,SAAS,MAAM,GAAG,MAAM,EAEjC,GAAG,EAAE,SAAS,GAAG,SAAS,EAC1B,SAAS,EAAE,cAAc;AACzB;;;;;;GAMG;AACH,IAAI,EAAE,CAAC,GAAG;IACR;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;IAC7C;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,CAAC,YAAY,GAAG,OAAO,CAAC,EAAE,CAAC;IACtC;;;;OAIG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,SAAS,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC;CAC1C,EACD,EACE,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,OAAO,GACR,MAAM,GAAG;IACP,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,KAAK,CAAC;CACzB,GACF,OAAO,CAAC;IACT,IAAI,EAAE,CAAC,GAAG;QACR,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,aAAa,CAAC;QACrB,QAAQ,EAAE,YAAY,EAAE,CAAC;QACzB,KAAK,CAAC,EAAE,KAAK,CAAC;KACf,GAAG,YAAY,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,WAAW,EAAE,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,KAAK,IAAI,CAAC;IAC1D,IAAI,EAAE,CAAC,KAAK,SAAS,OAAO,EAC1B,MAAM,EACF;QAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;KAAE,GAC3B;QAAE,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAA;KAAE,EAC7C,oBAAoB,CAAC,EAAE,OAAO,KAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,UAAU,EAAE,CAAC;CACtC,CAAC,CA8LD"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { stepCountIs, } from "ai";
|
|
2
|
+
import { serializeNewMessagesInStep, serializeObjectResult, } from "../mapping.js";
|
|
3
|
+
import { embedMessages, fetchContextWithPrompt } from "./search.js";
|
|
4
|
+
import { saveMessages } from "./messages.js";
|
|
5
|
+
import { getModelName, getProviderName, } from "../shared.js";
|
|
6
|
+
import { wrapTools } from "./createTool.js";
|
|
7
|
+
import { omit } from "convex-helpers";
|
|
8
|
+
import { saveInputMessages } from "./saveInputMessages.js";
|
|
9
|
+
export async function start(ctx, component,
|
|
10
|
+
/**
|
|
11
|
+
* These are the arguments you'll pass to the LLM call such as
|
|
12
|
+
* `generateText` or `streamText`. This function will look up the context
|
|
13
|
+
* and provide functions to save the steps, abort the generation, and more.
|
|
14
|
+
* The type of the arguments returned infers from the type of the arguments
|
|
15
|
+
* you pass here.
|
|
16
|
+
*/
|
|
17
|
+
args, { threadId, ...opts }) {
|
|
18
|
+
const userId = opts.userId ??
|
|
19
|
+
(threadId &&
|
|
20
|
+
(await ctx.runQuery(component.threads.getThread, { threadId }))
|
|
21
|
+
?.userId) ??
|
|
22
|
+
undefined;
|
|
23
|
+
const context = await fetchContextWithPrompt(ctx, component, {
|
|
24
|
+
...opts,
|
|
25
|
+
userId,
|
|
26
|
+
threadId,
|
|
27
|
+
messages: args.messages,
|
|
28
|
+
prompt: args.prompt,
|
|
29
|
+
promptMessageId: args.promptMessageId,
|
|
30
|
+
});
|
|
31
|
+
const saveMessages = opts.storageOptions?.saveMessages ?? "promptAndOutput";
|
|
32
|
+
const { promptMessageId, pendingMessage, savedMessages } = threadId && saveMessages !== "none"
|
|
33
|
+
? await saveInputMessages(ctx, component, {
|
|
34
|
+
...opts,
|
|
35
|
+
userId,
|
|
36
|
+
threadId,
|
|
37
|
+
prompt: args.prompt,
|
|
38
|
+
messages: args.messages,
|
|
39
|
+
promptMessageId: args.promptMessageId,
|
|
40
|
+
storageOptions: { saveMessages },
|
|
41
|
+
})
|
|
42
|
+
: {
|
|
43
|
+
promptMessageId: args.promptMessageId,
|
|
44
|
+
pendingMessage: undefined,
|
|
45
|
+
savedMessages: [],
|
|
46
|
+
};
|
|
47
|
+
const order = pendingMessage?.order ?? context.order;
|
|
48
|
+
const stepOrder = pendingMessage?.stepOrder ?? context.stepOrder;
|
|
49
|
+
let pendingMessageId = pendingMessage?._id;
|
|
50
|
+
const model = args.model ?? opts.languageModel;
|
|
51
|
+
let activeModel = model;
|
|
52
|
+
const fail = async (reason) => {
|
|
53
|
+
if (pendingMessageId) {
|
|
54
|
+
await ctx.runMutation(component.messages.finalizeMessage, {
|
|
55
|
+
messageId: pendingMessageId,
|
|
56
|
+
result: { status: "failed", error: reason },
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
if (args.abortSignal) {
|
|
61
|
+
const abortSignal = args.abortSignal;
|
|
62
|
+
abortSignal.addEventListener("abort", async () => {
|
|
63
|
+
await fail(abortSignal.reason?.toString() ?? "abortSignal");
|
|
64
|
+
}, { once: true });
|
|
65
|
+
}
|
|
66
|
+
const toolCtx = {
|
|
67
|
+
...ctx,
|
|
68
|
+
userId,
|
|
69
|
+
threadId,
|
|
70
|
+
promptMessageId,
|
|
71
|
+
agent: opts.agentForToolCtx,
|
|
72
|
+
};
|
|
73
|
+
const tools = wrapTools(toolCtx, args.tools);
|
|
74
|
+
const aiArgs = {
|
|
75
|
+
...opts.callSettings,
|
|
76
|
+
providerOptions: opts.providerOptions,
|
|
77
|
+
...omit(args, ["promptMessageId", "messages", "prompt"]),
|
|
78
|
+
model,
|
|
79
|
+
messages: context.messages,
|
|
80
|
+
stopWhen: args.stopWhen ?? (opts.maxSteps ? stepCountIs(opts.maxSteps) : undefined),
|
|
81
|
+
tools,
|
|
82
|
+
};
|
|
83
|
+
if (pendingMessageId) {
|
|
84
|
+
if (!aiArgs._internal?.generateId) {
|
|
85
|
+
aiArgs._internal = {
|
|
86
|
+
...aiArgs._internal,
|
|
87
|
+
generateId: pendingMessageId
|
|
88
|
+
? () => pendingMessageId ?? crypto.randomUUID()
|
|
89
|
+
: undefined,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
args: aiArgs,
|
|
95
|
+
order: order ?? 0,
|
|
96
|
+
stepOrder: stepOrder ?? 0,
|
|
97
|
+
userId,
|
|
98
|
+
promptMessageId,
|
|
99
|
+
getSavedMessages: () => savedMessages,
|
|
100
|
+
updateModel: (model) => {
|
|
101
|
+
if (model) {
|
|
102
|
+
activeModel = model;
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
fail,
|
|
106
|
+
save: async (toSave, createPendingMessage) => {
|
|
107
|
+
if (threadId && saveMessages !== "none") {
|
|
108
|
+
const serialized = "object" in toSave
|
|
109
|
+
? await serializeObjectResult(ctx, component, toSave.object, activeModel)
|
|
110
|
+
: await serializeNewMessagesInStep(ctx, component, toSave.step, activeModel);
|
|
111
|
+
const embeddings = await embedMessages(ctx, { threadId, ...opts, userId }, serialized.messages.map((m) => m.message));
|
|
112
|
+
if (createPendingMessage) {
|
|
113
|
+
serialized.messages.push({
|
|
114
|
+
message: { role: "assistant", content: [] },
|
|
115
|
+
status: "pending",
|
|
116
|
+
});
|
|
117
|
+
embeddings?.vectors.push(null);
|
|
118
|
+
}
|
|
119
|
+
const saved = await ctx.runMutation(component.messages.addMessages, {
|
|
120
|
+
userId,
|
|
121
|
+
threadId,
|
|
122
|
+
agentName: opts.agentName,
|
|
123
|
+
promptMessageId,
|
|
124
|
+
pendingMessageId,
|
|
125
|
+
messages: serialized.messages,
|
|
126
|
+
embeddings,
|
|
127
|
+
failPendingSteps: false,
|
|
128
|
+
});
|
|
129
|
+
const lastMessage = saved.messages.at(-1);
|
|
130
|
+
if (createPendingMessage) {
|
|
131
|
+
if (lastMessage.status === "failed") {
|
|
132
|
+
pendingMessageId = undefined;
|
|
133
|
+
savedMessages.push(...saved.messages);
|
|
134
|
+
await fail(lastMessage.error ??
|
|
135
|
+
"Aborting - the pending message was marked as failed");
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
pendingMessageId = lastMessage._id;
|
|
139
|
+
savedMessages.push(...saved.messages.slice(0, -1));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
pendingMessageId = undefined;
|
|
144
|
+
savedMessages.push(...saved.messages);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const output = "object" in toSave ? toSave.object : toSave.step;
|
|
148
|
+
if (opts.rawRequestResponseHandler) {
|
|
149
|
+
await opts.rawRequestResponseHandler(ctx, {
|
|
150
|
+
userId,
|
|
151
|
+
threadId,
|
|
152
|
+
agentName: opts.agentName,
|
|
153
|
+
request: output.request,
|
|
154
|
+
response: output.response,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
if (opts.usageHandler && output.usage) {
|
|
158
|
+
await opts.usageHandler(ctx, {
|
|
159
|
+
userId,
|
|
160
|
+
threadId,
|
|
161
|
+
agentName: opts.agentName,
|
|
162
|
+
model: getModelName(activeModel),
|
|
163
|
+
provider: getProviderName(activeModel),
|
|
164
|
+
usage: output.usage,
|
|
165
|
+
providerMetadata: output.providerMetadata,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=start.js.map
|