@convex-dev/agent 0.0.1-alpha.2 → 0.0.1-alpha.4
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 +91 -95
- package/dist/commonjs/client/index.d.ts +60 -60
- package/dist/commonjs/client/index.d.ts.map +1 -1
- package/dist/commonjs/client/index.js +80 -77
- package/dist/commonjs/client/index.js.map +1 -1
- package/dist/commonjs/client/types.d.ts +1 -1
- package/dist/commonjs/client/types.d.ts.map +1 -1
- package/dist/commonjs/component/messages.d.ts +56 -56
- package/dist/commonjs/component/messages.d.ts.map +1 -1
- package/dist/commonjs/component/messages.js +128 -134
- package/dist/commonjs/component/messages.js.map +1 -1
- package/dist/commonjs/component/schema.d.ts +256 -256
- package/dist/commonjs/component/schema.d.ts.map +1 -1
- package/dist/commonjs/component/schema.js +18 -18
- package/dist/commonjs/component/schema.js.map +1 -1
- package/dist/commonjs/component/vector/index.d.ts +4 -4
- package/dist/commonjs/component/vector/index.d.ts.map +1 -1
- package/dist/commonjs/component/vector/index.js +12 -10
- package/dist/commonjs/component/vector/index.js.map +1 -1
- package/dist/commonjs/component/vector/tables.d.ts +3 -3
- package/dist/commonjs/component/vector/tables.js +6 -6
- package/dist/commonjs/component/vector/tables.js.map +1 -1
- package/dist/commonjs/validators.d.ts +5 -5
- package/dist/commonjs/validators.d.ts.map +1 -1
- package/dist/commonjs/validators.js +3 -3
- package/dist/commonjs/validators.js.map +1 -1
- package/dist/esm/client/index.d.ts +60 -60
- package/dist/esm/client/index.d.ts.map +1 -1
- package/dist/esm/client/index.js +80 -77
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/client/types.d.ts +1 -1
- package/dist/esm/client/types.d.ts.map +1 -1
- package/dist/esm/component/messages.d.ts +56 -56
- package/dist/esm/component/messages.d.ts.map +1 -1
- package/dist/esm/component/messages.js +128 -134
- package/dist/esm/component/messages.js.map +1 -1
- package/dist/esm/component/schema.d.ts +256 -256
- package/dist/esm/component/schema.d.ts.map +1 -1
- package/dist/esm/component/schema.js +18 -18
- package/dist/esm/component/schema.js.map +1 -1
- package/dist/esm/component/vector/index.d.ts +4 -4
- package/dist/esm/component/vector/index.d.ts.map +1 -1
- package/dist/esm/component/vector/index.js +12 -10
- package/dist/esm/component/vector/index.js.map +1 -1
- package/dist/esm/component/vector/tables.d.ts +3 -3
- package/dist/esm/component/vector/tables.js +6 -6
- package/dist/esm/component/vector/tables.js.map +1 -1
- package/dist/esm/validators.d.ts +5 -5
- package/dist/esm/validators.d.ts.map +1 -1
- package/dist/esm/validators.js +3 -3
- package/dist/esm/validators.js.map +1 -1
- package/package.json +2 -2
- package/src/client/index.ts +133 -127
- package/src/client/types.ts +1 -1
- package/src/component/_generated/api.d.ts +53 -53
- package/src/component/messages.ts +139 -145
- package/src/component/schema.ts +18 -18
- package/src/component/vector/index.ts +13 -11
- package/src/component/vector/tables.ts +6 -6
- package/src/validators.ts +6 -3
package/README.md
CHANGED
|
@@ -6,60 +6,59 @@
|
|
|
6
6
|
|
|
7
7
|
AI Agent framework built on Convex.
|
|
8
8
|
|
|
9
|
-
- Automatic storage of chat history, per-user or per-
|
|
9
|
+
- Automatic storage of chat history, per-user or per-thread.
|
|
10
10
|
- RAG for chat context, via hybrid text & vector search, with configuration options.
|
|
11
11
|
Or use the API to query the history yourself and do it your way.
|
|
12
|
-
- Opt-in search for messages from other
|
|
12
|
+
- Opt-in search for messages from other threads (for the same specifieduser).
|
|
13
13
|
- Tool calls via the AI SDK, along with Convex-specific helpers.
|
|
14
14
|
- Easy workflow integration with the [Workflow component](https://convex.dev/components/workflow).
|
|
15
|
-
- Reactive & realtime updates to asynchronous
|
|
15
|
+
- Reactive & realtime updates to asynchronous threads.
|
|
16
16
|
- Support for streaming text and storing the result in the database.
|
|
17
|
-
- Optionally filter tool calls out of the
|
|
17
|
+
- Optionally filter tool calls out of the thread history.
|
|
18
18
|
|
|
19
19
|
Example usage:
|
|
20
20
|
|
|
21
21
|
```ts
|
|
22
22
|
// Define an agent similarly to the AI SDK
|
|
23
23
|
const supportAgent = new Agent(components.agent, {
|
|
24
|
-
|
|
24
|
+
thread: openai.chat("gpt-4o-mini"),
|
|
25
25
|
textEmbedding: openai.embedding("text-embedding-3-small"),
|
|
26
26
|
instructions: "You are a helpful assistant.",
|
|
27
27
|
tools: { accountLookup, fileTicket, sendEmail },
|
|
28
28
|
});
|
|
29
29
|
|
|
30
30
|
// Use the agent from within a normal action:
|
|
31
|
-
export const
|
|
32
|
-
args: { prompt: v.string()
|
|
33
|
-
handler: async (ctx, { prompt
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
return { chatId, initialResponse: result.text };
|
|
31
|
+
export const createThread = action({
|
|
32
|
+
args: { prompt: v.string() },
|
|
33
|
+
handler: async (ctx, { prompt }) => {
|
|
34
|
+
const { threadId, thread } = await supportAgent.createThread(ctx, {});
|
|
35
|
+
const result = await thread.generateText({ prompt });
|
|
36
|
+
return { threadId, text: result.text };
|
|
38
37
|
},
|
|
39
38
|
});
|
|
40
39
|
|
|
41
40
|
// Pick up where you left off:
|
|
42
|
-
export const
|
|
43
|
-
args: { prompt: v.string(),
|
|
44
|
-
handler: async (ctx, { prompt,
|
|
45
|
-
// This includes previous message history from the
|
|
46
|
-
const {
|
|
47
|
-
const result = await
|
|
41
|
+
export const continueThread = action({
|
|
42
|
+
args: { prompt: v.string(), threadId: v.string() },
|
|
43
|
+
handler: async (ctx, { prompt, threadId }) => {
|
|
44
|
+
// This includes previous message history from the thread automatically.
|
|
45
|
+
const { thread } = await supportAgent.continueThread(ctx, { threadId });
|
|
46
|
+
const result = await thread.generateText({ prompt });
|
|
48
47
|
return result.text;
|
|
49
48
|
},
|
|
50
49
|
});
|
|
51
50
|
|
|
52
|
-
// Or use it within a workflow:
|
|
51
|
+
// Or use it within a workflow, specific to a user:
|
|
53
52
|
export const supportAgentStep = supportAgent.asAction({ maxSteps: 10 });
|
|
54
53
|
|
|
55
54
|
const workflow = new WorkflowManager(components.workflow);
|
|
56
55
|
const s = internal.example; // where steps are defined
|
|
57
56
|
|
|
58
57
|
export const supportAgentWorkflow = workflow.define({
|
|
59
|
-
args: { prompt: v.string(), userId: v.string(),
|
|
60
|
-
handler: async (step, { prompt, userId,
|
|
58
|
+
args: { prompt: v.string(), userId: v.string(), threadId: v.string() },
|
|
59
|
+
handler: async (step, { prompt, userId, threadId }) => {
|
|
61
60
|
const suggestion = await step.runAction(s.supportAgentStep, {
|
|
62
|
-
|
|
61
|
+
threadId, generateText: { prompt },
|
|
63
62
|
});
|
|
64
63
|
const polished = await step.runAction(s.adaptSuggestionForUser, {
|
|
65
64
|
suggestion, userId,
|
|
@@ -118,7 +117,7 @@ import { Agent } from "@convex-dev/agent";
|
|
|
118
117
|
// Define an agent similarly to the AI SDK
|
|
119
118
|
const supportAgent = new Agent(components.agent, {
|
|
120
119
|
// Note: all of these are optional.
|
|
121
|
-
|
|
120
|
+
thread: openai.chat("gpt-4o-mini"),
|
|
122
121
|
// Used for vector search (RAG).
|
|
123
122
|
textEmbedding: openai.embedding("text-embedding-3-small"),
|
|
124
123
|
// Will be the default system prompt if not overriden.
|
|
@@ -142,9 +141,9 @@ const supportAgent = new Agent(components.agent, {
|
|
|
142
141
|
// How many recent messages to include. These are added after the search
|
|
143
142
|
// messages, and do not count against the search limit.
|
|
144
143
|
recentMessages: 10,
|
|
145
|
-
// Whether to search across other
|
|
146
|
-
// By default, only the current
|
|
147
|
-
|
|
144
|
+
// Whether to search across other threads for relevant messages.
|
|
145
|
+
// By default, only the current thread is searched.
|
|
146
|
+
searchOtherThreads: true,
|
|
148
147
|
// Options for searching messages.
|
|
149
148
|
searchOptions: {
|
|
150
149
|
// The maximum number of messages to fetch.
|
|
@@ -163,7 +162,7 @@ const supportAgent = new Agent(components.agent, {
|
|
|
163
162
|
storageOptions: {
|
|
164
163
|
// Defaults to false, allowing you to pass in arbitrary context that will
|
|
165
164
|
// be in addition to automatically fetched content.
|
|
166
|
-
// Pass true to have all input messages saved to the
|
|
165
|
+
// Pass true to have all input messages saved to the thread history.
|
|
167
166
|
saveAllInputMessages: true,
|
|
168
167
|
// Defaults to true
|
|
169
168
|
saveOutputMessages: true,
|
|
@@ -175,35 +174,40 @@ const supportAgent = new Agent(components.agent, {
|
|
|
175
174
|
});
|
|
176
175
|
```
|
|
177
176
|
|
|
178
|
-
### Starting a
|
|
177
|
+
### Starting a thread
|
|
179
178
|
|
|
180
|
-
You can start a
|
|
179
|
+
You can start a thread from either an action or a mutation.
|
|
181
180
|
If it's in an action, you can also start sending messages.
|
|
182
|
-
The
|
|
181
|
+
The threadId allows you to resume later and maintain message history.
|
|
182
|
+
If you specify a userId, the thread will be associated with that user and messages will be saved to the user's history.
|
|
183
|
+
You can also search the user's history for relevant messages in this thread.
|
|
183
184
|
|
|
184
185
|
```ts
|
|
185
186
|
// Use the agent from within a normal action:
|
|
186
|
-
export const
|
|
187
|
+
export const createThread = action({
|
|
187
188
|
args: { prompt: v.string(), userId: v.string() },
|
|
188
|
-
handler: async (ctx, { prompt, userId }): Promise<{
|
|
189
|
-
// Start a new
|
|
190
|
-
const {
|
|
191
|
-
const result = await
|
|
192
|
-
return {
|
|
189
|
+
handler: async (ctx, { prompt, userId }): Promise<{ threadId: string; initialResponse: string }> => {
|
|
190
|
+
// Start a new thread for the user.
|
|
191
|
+
const { threadId, thread } = await supportAgent.createThread(ctx, { userId });
|
|
192
|
+
const result = await thread.generateText({ prompt });
|
|
193
|
+
return { threadId, initialResponse: result.text };
|
|
193
194
|
},
|
|
194
195
|
});
|
|
195
196
|
```
|
|
196
197
|
|
|
197
|
-
### Continuing a
|
|
198
|
+
### Continuing a thread
|
|
199
|
+
|
|
200
|
+
If you specify a userId too, you can search the user's history for relevant messages
|
|
201
|
+
to include in the prompt context.
|
|
198
202
|
|
|
199
203
|
```ts
|
|
200
204
|
// Pick up where you left off:
|
|
201
|
-
export const
|
|
202
|
-
args: { prompt: v.string(),
|
|
203
|
-
handler: async (ctx, { prompt,
|
|
204
|
-
// This includes previous message history from the
|
|
205
|
-
const {
|
|
206
|
-
const result = await
|
|
205
|
+
export const continueThread = action({
|
|
206
|
+
args: { prompt: v.string(), threadId: v.string() },
|
|
207
|
+
handler: async (ctx, { prompt, threadId }): Promise<string> => {
|
|
208
|
+
// This includes previous message history from the thread automatically.
|
|
209
|
+
const { thread } = await supportAgent.continueThread(ctx, { threadId });
|
|
210
|
+
const result = await thread.generateText({ prompt });
|
|
207
211
|
return result.text;
|
|
208
212
|
},
|
|
209
213
|
});
|
|
@@ -216,10 +220,10 @@ export const supportAgentStep = supportAgent.asAction({ maxSteps: 10 });
|
|
|
216
220
|
|
|
217
221
|
// Then from within another action:
|
|
218
222
|
export const callSupportAgent = action({
|
|
219
|
-
args: { prompt: v.string(), userId: v.string(),
|
|
220
|
-
handler: async (
|
|
221
|
-
const suggestion = await
|
|
222
|
-
|
|
223
|
+
args: { prompt: v.string(), userId: v.string(), threadId: v.string() },
|
|
224
|
+
handler: async (ctx, { prompt, userId, threadId }) => {
|
|
225
|
+
const suggestion = await ctx.runAction(s.supportAgentStep, {
|
|
226
|
+
threadId, userId, generateText: { prompt },
|
|
223
227
|
});
|
|
224
228
|
},
|
|
225
229
|
});
|
|
@@ -237,102 +241,94 @@ const workflow = new WorkflowManager(components.workflow);
|
|
|
237
241
|
const s = internal.example; // where steps are defined
|
|
238
242
|
|
|
239
243
|
export const supportAgentWorkflow = workflow.define({
|
|
240
|
-
args: { prompt: v.string(), userId: v.string(),
|
|
241
|
-
handler: async (step, { prompt, userId,
|
|
244
|
+
args: { prompt: v.string(), userId: v.string(), threadId: v.string() },
|
|
245
|
+
handler: async (step, { prompt, userId, threadId }) => {
|
|
242
246
|
const suggestion = await step.runAction(s.supportAgentStep, {
|
|
243
|
-
|
|
244
|
-
generateText: { prompt },
|
|
247
|
+
threadId, userId, generateText: { prompt },
|
|
245
248
|
});
|
|
246
249
|
const polished = await step.runAction(s.adaptSuggestionForUser, {
|
|
247
|
-
userId,
|
|
248
|
-
generateText: { prompt: suggestion },
|
|
250
|
+
threadId, userId, generateText: { prompt: suggestion },
|
|
249
251
|
});
|
|
250
252
|
await step.runMutation(s.sendUserMessage, { userId, message: polished.message });
|
|
251
253
|
},
|
|
252
254
|
});
|
|
253
255
|
```
|
|
254
256
|
|
|
255
|
-
### Fetching
|
|
257
|
+
### Fetching thread history
|
|
256
258
|
|
|
257
259
|
```ts
|
|
258
|
-
const messages = await ctx.runQuery(
|
|
259
|
-
|
|
260
|
-
}
|
|
260
|
+
const messages = await ctx.runQuery(
|
|
261
|
+
components.agent.messages.getThreadMessages,
|
|
262
|
+
{ threadId }
|
|
263
|
+
);
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Generating text for a user without an associated thread
|
|
267
|
+
|
|
268
|
+
```ts
|
|
269
|
+
const result = await supportAgent.generateText(ctx, { userId }, { prompt });
|
|
261
270
|
```
|
|
262
271
|
|
|
263
272
|
### Manually managing messages
|
|
264
273
|
|
|
265
274
|
```ts
|
|
266
|
-
const messages = await ctx.runQuery(
|
|
267
|
-
|
|
268
|
-
{...searchOptions}
|
|
269
|
-
|
|
275
|
+
const messages = await ctx.runQuery(
|
|
276
|
+
components.agent.messages.getThreadMessages,
|
|
277
|
+
{ threadId, ...searchOptions }
|
|
278
|
+
);
|
|
270
279
|
```
|
|
271
280
|
|
|
272
281
|
```ts
|
|
273
|
-
const messages = await agent.saveMessages(ctx, {
|
|
282
|
+
const messages = await agent.saveMessages(ctx, { threadId, userId, messages });
|
|
274
283
|
```
|
|
275
284
|
|
|
276
285
|
```ts
|
|
277
|
-
const messages = await agent.saveSteps(ctx, {
|
|
286
|
+
const messages = await agent.saveSteps(ctx, { threadId, userId, step });
|
|
278
287
|
```
|
|
279
288
|
|
|
280
289
|
// Update the message from pending to complete, along with any associated steps.
|
|
281
290
|
```ts
|
|
282
|
-
const messages = await agent.completeMessage(ctx, {
|
|
291
|
+
const messages = await agent.completeMessage(ctx, { threadId, userId, messageId });
|
|
283
292
|
```
|
|
284
293
|
|
|
285
294
|
### Manage embeddings
|
|
286
295
|
|
|
287
296
|
```ts
|
|
288
|
-
const messages = await ctx.runQuery(
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
limit: 10,
|
|
293
|
-
});
|
|
297
|
+
const messages = await ctx.runQuery(
|
|
298
|
+
components.agent.embeddings.paginate,
|
|
299
|
+
{ vectorDimension: 1536, cursor: null, limit: 10 }
|
|
300
|
+
);
|
|
294
301
|
```
|
|
295
302
|
|
|
296
303
|
```ts
|
|
297
|
-
const messages = await ctx.runQuery(
|
|
298
|
-
|
|
299
|
-
targetModel: "gpt-4o-mini",
|
|
300
|
-
|
|
301
|
-
cursor: null,
|
|
302
|
-
limit: 10,
|
|
303
|
-
});
|
|
304
|
+
const messages = await ctx.runQuery(
|
|
305
|
+
components.agent.embeddings.deleteBatchForThread,
|
|
306
|
+
{ vectorDimension: 1536, targetModel: "gpt-4o-mini", threadId: "123", cursor: null, limit: 10 }
|
|
307
|
+
);
|
|
304
308
|
```
|
|
305
309
|
|
|
306
310
|
```ts
|
|
307
|
-
const messages = await ctx.runQuery(
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
model: "gpt-4o-mini",
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
vector: embedding,
|
|
316
|
-
},
|
|
317
|
-
],
|
|
318
|
-
});
|
|
311
|
+
const messages = await ctx.runQuery(
|
|
312
|
+
components.agent.embeddings.insertBatch, {
|
|
313
|
+
vectorDimension: 1536,
|
|
314
|
+
vectors: [
|
|
315
|
+
{ model: "gpt-4o-mini", kind: "thread", userId: "123", threadId: "123", vector: embedding, },
|
|
316
|
+
],
|
|
317
|
+
}
|
|
318
|
+
);
|
|
319
319
|
```
|
|
320
320
|
|
|
321
321
|
```ts
|
|
322
322
|
const messages = await ctx.runQuery(components.agent.embeddings.updateBatch, {
|
|
323
323
|
vectors: [
|
|
324
|
-
{
|
|
325
|
-
model: "gpt-4o-mini",
|
|
326
|
-
id: "123", // message's embeddingId
|
|
327
|
-
vector: embedding,
|
|
328
|
-
},
|
|
324
|
+
{ model: "gpt-4o-mini", vector: embedding, id: msg.embeddingId },
|
|
329
325
|
],
|
|
330
326
|
});
|
|
331
327
|
```
|
|
332
328
|
|
|
333
329
|
```ts
|
|
334
330
|
const messages = await ctx.runQuery(components.agent.embeddings.deleteBatch, {
|
|
335
|
-
ids: [
|
|
331
|
+
ids: [embeddingId1, embeddingId2],
|
|
336
332
|
});
|
|
337
333
|
```
|
|
338
334
|
|
|
@@ -43,10 +43,10 @@ export type ContextOptions = {
|
|
|
43
43
|
};
|
|
44
44
|
};
|
|
45
45
|
/**
|
|
46
|
-
* Whether to search across other
|
|
47
|
-
* By default, only the current
|
|
46
|
+
* Whether to search across other threads for relevant messages.
|
|
47
|
+
* By default, only the current thread is searched.
|
|
48
48
|
*/
|
|
49
|
-
|
|
49
|
+
searchOtherThreads?: boolean;
|
|
50
50
|
};
|
|
51
51
|
export type StorageOptions = {
|
|
52
52
|
saveAllInputMessages?: boolean;
|
|
@@ -62,7 +62,7 @@ export declare class Agent<AgentTools extends ToolSet> {
|
|
|
62
62
|
component: UseApi<typeof api>;
|
|
63
63
|
options: {
|
|
64
64
|
name?: string;
|
|
65
|
-
|
|
65
|
+
thread: LanguageModelV1;
|
|
66
66
|
textEmbedding?: EmbeddingModelV1<string>;
|
|
67
67
|
instructions?: string;
|
|
68
68
|
tools?: AgentTools;
|
|
@@ -71,7 +71,7 @@ export declare class Agent<AgentTools extends ToolSet> {
|
|
|
71
71
|
};
|
|
72
72
|
constructor(component: UseApi<typeof api>, options: {
|
|
73
73
|
name?: string;
|
|
74
|
-
|
|
74
|
+
thread: LanguageModelV1;
|
|
75
75
|
textEmbedding?: EmbeddingModelV1<string>;
|
|
76
76
|
instructions?: string;
|
|
77
77
|
tools?: AgentTools;
|
|
@@ -79,74 +79,74 @@ export declare class Agent<AgentTools extends ToolSet> {
|
|
|
79
79
|
maxSteps?: number;
|
|
80
80
|
});
|
|
81
81
|
/**
|
|
82
|
-
* Start a new
|
|
83
|
-
* you pass in a userId you can have it search across other
|
|
82
|
+
* Start a new thread with the agent. This will have a fresh history, though if
|
|
83
|
+
* you pass in a userId you can have it search across other threads for relevant
|
|
84
84
|
* messages as context for the LLM calls.
|
|
85
|
-
* @param ctx The context of the Convex function. From an action, you can
|
|
86
|
-
* with the agent. From a mutation, you can start a
|
|
87
|
-
* to pass to
|
|
88
|
-
* @param args The
|
|
89
|
-
* @returns The
|
|
85
|
+
* @param ctx The context of the Convex function. From an action, you can thread
|
|
86
|
+
* with the agent. From a mutation, you can start a thread and save the threadId
|
|
87
|
+
* to pass to continueThread later.
|
|
88
|
+
* @param args The thread metadata.
|
|
89
|
+
* @returns The threadId of the new thread and the thread object.
|
|
90
90
|
*/
|
|
91
|
-
|
|
91
|
+
createThread(ctx: RunActionCtx, args: {
|
|
92
92
|
/**
|
|
93
|
-
* The userId to associate with the
|
|
93
|
+
* The userId to associate with the thread. If not provided, the thread will be
|
|
94
94
|
* anonymous.
|
|
95
95
|
*/
|
|
96
96
|
userId?: string;
|
|
97
97
|
/**
|
|
98
|
-
* The parent
|
|
99
|
-
* If the
|
|
100
|
-
* you can pass in the
|
|
98
|
+
* The parent threadIds to merge with.
|
|
99
|
+
* If the thread is a continuation of one or many previous threads,
|
|
100
|
+
* you can pass in the threadIds of the parent threads to merge the histories.
|
|
101
101
|
*/
|
|
102
|
-
|
|
102
|
+
parentThreadIds?: string[];
|
|
103
103
|
/**
|
|
104
|
-
* The title of the
|
|
104
|
+
* The title of the thread. Not currently used.
|
|
105
105
|
*/
|
|
106
106
|
title?: string;
|
|
107
107
|
/**
|
|
108
|
-
* The summary of the
|
|
108
|
+
* The summary of the thread. Not currently used.
|
|
109
109
|
*/
|
|
110
110
|
summary?: string;
|
|
111
111
|
}): Promise<{
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
threadId: string;
|
|
113
|
+
thread: Thread<AgentTools>;
|
|
114
114
|
}>;
|
|
115
115
|
/**
|
|
116
|
-
* Start a new
|
|
117
|
-
* you pass in a userId you can have it search across other
|
|
116
|
+
* Start a new thread with the agent. This will have a fresh history, though if
|
|
117
|
+
* you pass in a userId you can have it search across other threads for relevant
|
|
118
118
|
* messages as context for the LLM calls.
|
|
119
119
|
* @param ctx The context of the Convex function. From a mutation, you can
|
|
120
|
-
* start a
|
|
121
|
-
* @param args The
|
|
122
|
-
* @returns The
|
|
120
|
+
* start a thread and save the threadId to pass to continueThread later.
|
|
121
|
+
* @param args The thread metadata.
|
|
122
|
+
* @returns The threadId of the new thread.
|
|
123
123
|
*/
|
|
124
|
-
|
|
124
|
+
createThread(ctx: RunMutationCtx, args: {
|
|
125
125
|
userId?: string;
|
|
126
|
-
|
|
126
|
+
parentThreadIds?: string[];
|
|
127
127
|
title?: string;
|
|
128
128
|
summary?: string;
|
|
129
129
|
}): Promise<{
|
|
130
|
-
|
|
130
|
+
threadId: string;
|
|
131
131
|
}>;
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
continueThread(ctx: RunActionCtx, { threadId, userId, }: {
|
|
133
|
+
threadId: string;
|
|
134
134
|
/**
|
|
135
|
-
* If supplied, the userId can be used to search across other
|
|
135
|
+
* If supplied, the userId can be used to search across other threads for
|
|
136
136
|
* relevant messages from the same user as context for the LLM calls.
|
|
137
137
|
*/
|
|
138
138
|
userId?: string;
|
|
139
139
|
}): Promise<{
|
|
140
|
-
|
|
140
|
+
thread: Thread<AgentTools>;
|
|
141
141
|
}>;
|
|
142
142
|
fetchContextMessages(ctx: RunQueryCtx | RunActionCtx, args: {
|
|
143
143
|
userId?: string;
|
|
144
|
-
|
|
144
|
+
threadId?: string;
|
|
145
145
|
messages: CoreMessage[];
|
|
146
146
|
parentMessageId?: string;
|
|
147
147
|
} & ContextOptions): Promise<CoreMessage[]>;
|
|
148
148
|
saveMessages(ctx: RunMutationCtx, args: {
|
|
149
|
-
|
|
149
|
+
threadId?: string;
|
|
150
150
|
userId?: string;
|
|
151
151
|
messages: CoreMessageMaybeWithId[];
|
|
152
152
|
pending?: boolean;
|
|
@@ -157,12 +157,12 @@ export declare class Agent<AgentTools extends ToolSet> {
|
|
|
157
157
|
messageIds: string[];
|
|
158
158
|
}>;
|
|
159
159
|
saveStep<TOOLS extends ToolSet>(ctx: RunMutationCtx, args: {
|
|
160
|
-
|
|
160
|
+
threadId: string;
|
|
161
161
|
messageId: string;
|
|
162
162
|
step: StepResult<TOOLS>;
|
|
163
163
|
}): Promise<void>;
|
|
164
164
|
completeMessage<TOOLS extends ToolSet>(ctx: RunMutationCtx, args: {
|
|
165
|
-
|
|
165
|
+
threadId: string;
|
|
166
166
|
messageId: string;
|
|
167
167
|
result: {
|
|
168
168
|
kind: "error";
|
|
@@ -176,32 +176,32 @@ export declare class Agent<AgentTools extends ToolSet> {
|
|
|
176
176
|
}): Promise<void>;
|
|
177
177
|
/**
|
|
178
178
|
* This behaves like {@link generateText} except that it add context based on
|
|
179
|
-
* the userId and
|
|
180
|
-
*
|
|
181
|
-
* however. To do that, use {@link
|
|
179
|
+
* the userId and threadId. It saves the input and resulting messages to the
|
|
180
|
+
* thread, if specified.
|
|
181
|
+
* however. To do that, use {@link continueThread} or {@link saveMessages}.
|
|
182
182
|
* @param ctx The context of the agent.
|
|
183
183
|
* @param args The arguments to the generateText function.
|
|
184
184
|
* @returns The result of the generateText function.
|
|
185
185
|
*/
|
|
186
|
-
generateText<TOOLS extends ToolSet, OUTPUT = never, OUTPUT_PARTIAL = never>(ctx: RunActionCtx, { userId,
|
|
186
|
+
generateText<TOOLS extends ToolSet, OUTPUT = never, OUTPUT_PARTIAL = never>(ctx: RunActionCtx, { userId, threadId, }: {
|
|
187
187
|
userId?: string;
|
|
188
|
-
|
|
188
|
+
threadId?: string;
|
|
189
189
|
}, args: TextArgs<AgentTools, TOOLS, Parameters<typeof generateText<TOOLS, OUTPUT, OUTPUT_PARTIAL>>[0]>): Promise<GenerateTextResult<TOOLS & AgentTools, OUTPUT> & GenerationOutputMetadata>;
|
|
190
|
-
streamText<TOOLS extends ToolSet, OUTPUT = never, PARTIAL_OUTPUT = never>(ctx: RunActionCtx, { userId,
|
|
190
|
+
streamText<TOOLS extends ToolSet, OUTPUT = never, PARTIAL_OUTPUT = never>(ctx: RunActionCtx, { userId, threadId }: {
|
|
191
191
|
userId?: string;
|
|
192
|
-
|
|
192
|
+
threadId?: string;
|
|
193
193
|
}, args: TextArgs<AgentTools, TOOLS, Parameters<typeof streamText<TOOLS, OUTPUT, PARTIAL_OUTPUT>>[0]>): Promise<StreamTextResult<TOOLS, PARTIAL_OUTPUT> & GenerationOutputMetadata>;
|
|
194
|
-
generateObject<T>(ctx: RunActionCtx, { userId,
|
|
194
|
+
generateObject<T>(ctx: RunActionCtx, { userId, threadId }: {
|
|
195
195
|
userId?: string;
|
|
196
|
-
|
|
196
|
+
threadId?: string;
|
|
197
197
|
}, args: Omit<Parameters<typeof generateObject>[0], "model"> & {
|
|
198
198
|
model?: LanguageModelV1;
|
|
199
199
|
} & {
|
|
200
200
|
parentMessageId?: string;
|
|
201
201
|
} & ContextOptions & StorageOptions): Promise<GenerateObjectResult<T> & GenerationOutputMetadata>;
|
|
202
|
-
streamObject<T>(ctx: RunMutationCtx, { userId,
|
|
202
|
+
streamObject<T>(ctx: RunMutationCtx, { userId, threadId }: {
|
|
203
203
|
userId?: string;
|
|
204
|
-
|
|
204
|
+
threadId?: string;
|
|
205
205
|
}, args: Omit<Parameters<typeof streamObject<T>>[0], "model"> & {
|
|
206
206
|
model?: LanguageModelV1;
|
|
207
207
|
} & {
|
|
@@ -217,12 +217,12 @@ export declare class Agent<AgentTools extends ToolSet> {
|
|
|
217
217
|
maxSteps?: number;
|
|
218
218
|
}): import("convex/server").RegisteredAction<"internal", {
|
|
219
219
|
userId?: string | undefined;
|
|
220
|
-
|
|
221
|
-
|
|
220
|
+
threadId?: string | undefined;
|
|
221
|
+
createThread?: {
|
|
222
222
|
title?: string | undefined;
|
|
223
|
+
userId?: string | undefined;
|
|
223
224
|
summary?: string | undefined;
|
|
224
|
-
|
|
225
|
-
userId: string;
|
|
225
|
+
parentThreadIds?: string[] | undefined;
|
|
226
226
|
} | undefined;
|
|
227
227
|
maxRetries?: number | undefined;
|
|
228
228
|
contextOptions?: {
|
|
@@ -237,15 +237,15 @@ export declare class Agent<AgentTools extends ToolSet> {
|
|
|
237
237
|
vectorSearch?: boolean | undefined;
|
|
238
238
|
limit: number;
|
|
239
239
|
} | undefined;
|
|
240
|
-
|
|
240
|
+
searchOtherThreads?: boolean | undefined;
|
|
241
241
|
} | undefined;
|
|
242
242
|
storageOptions?: {
|
|
243
243
|
saveAllInputMessages?: boolean | undefined;
|
|
244
244
|
saveAllOutputMessages?: boolean | undefined;
|
|
245
245
|
} | undefined;
|
|
246
|
-
|
|
246
|
+
continueThread?: {
|
|
247
247
|
userId?: string | undefined;
|
|
248
|
-
|
|
248
|
+
threadId: string;
|
|
249
249
|
} | undefined;
|
|
250
250
|
generateText?: {
|
|
251
251
|
messages?: ({
|
|
@@ -614,14 +614,14 @@ export declare class Agent<AgentTools extends ToolSet> {
|
|
|
614
614
|
}
|
|
615
615
|
export type ToolCtx = RunActionCtx & {
|
|
616
616
|
userId?: string;
|
|
617
|
-
|
|
617
|
+
threadId?: string;
|
|
618
618
|
messageId?: string;
|
|
619
619
|
};
|
|
620
620
|
/**
|
|
621
621
|
* This is a wrapper around the ai.tool function that adds support for
|
|
622
|
-
* userId and
|
|
622
|
+
* userId and threadId to the tool, if they're called within a thread from an agent.
|
|
623
623
|
* @param tool The AI tool. See https://sdk.vercel.ai/docs/ai-sdk-core/tools-and-tool-calling
|
|
624
|
-
* @returns The same tool, but with userId and
|
|
624
|
+
* @returns The same tool, but with userId and threadId args support added.
|
|
625
625
|
*/
|
|
626
626
|
export declare function createTool<V extends Validator<any, any, any>, RESULT>(convexTool: {
|
|
627
627
|
args: V;
|
|
@@ -647,7 +647,7 @@ type ObjectArgs<T extends {
|
|
|
647
647
|
}> = Omit<T, "model"> & {
|
|
648
648
|
model?: LanguageModelV1;
|
|
649
649
|
} & ContextOptions & StorageOptions;
|
|
650
|
-
interface
|
|
650
|
+
interface Thread<AgentTools extends ToolSet> {
|
|
651
651
|
generateText<TOOLS extends ToolSet, OUTPUT = never, OUTPUT_PARTIAL = never>(args: TextArgs<AgentTools, TOOLS, Parameters<typeof generateText<TOOLS, OUTPUT, OUTPUT_PARTIAL>>[0]>): Promise<GenerateTextResult<TOOLS & AgentTools, OUTPUT> & GenerationOutputMetadata>;
|
|
652
652
|
streamText<TOOLS extends ToolSet, OUTPUT = never, PARTIAL_OUTPUT = never>(args: TextArgs<AgentTools, TOOLS, Parameters<typeof streamText<TOOLS, OUTPUT, PARTIAL_OUTPUT>>[0]>): Promise<StreamTextResult<TOOLS & AgentTools, PARTIAL_OUTPUT> & GenerationOutputMetadata>;
|
|
653
653
|
generateObject<T>(args: ObjectArgs<Parameters<typeof generateObject>[0]>): Promise<GenerateObjectResult<T> & GenerationOutputMetadata>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,IAAI,EACJ,UAAU,EACV,oBAAoB,EACpB,OAAO,EACR,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC5E,OAAO,EAAE,GAAG,EAAE,MAAM,6BAA6B,CAAC;AAClD,OAAO,EACL,aAAa,EAKd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAG5E,OAAO,EAAE,WAAW,EAAe,MAAM,2BAA2B,CAAC;AAErE,OAAO,EAAE,KAAK,EAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AASpD,MAAM,MAAM,cAAc,GAAG;IAC3B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,aAAa,CAAC,EAAE;QACd;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB;;WAEG;QACH,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB;;;;WAIG;QACH,YAAY,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;KAClD,CAAC;IACF;;;OAGG;IACH,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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"}
|