@convex-dev/agent 0.0.17-alpha.0 → 0.0.17-alpha.2

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.
@@ -1,200 +0,0 @@
1
- import { paginationOptsValidator, queryGeneric, mutationGeneric, actionGeneric, } from "convex/server";
2
- import { vMessageDoc, vThreadDoc, paginationResultValidator, vMessage, vContextOptions, vStorageOptions, } from "./index";
3
- import { v } from "convex/values";
4
- // Playground API definition
5
- export function definePlaygroundAPI(component, { agents, userNameLookup, }) {
6
- // Map agent name to instance
7
- const agentMap = Object.fromEntries(agents.map((agent) => [agent.options.name, agent]));
8
- async function validateApiKey(ctx, apiKey) {
9
- await ctx.runQuery(component.apiKeys.validate, { apiKey });
10
- }
11
- const isApiKeyValid = queryGeneric({
12
- args: {
13
- apiKey: v.string(),
14
- },
15
- handler: async (ctx, args) => {
16
- try {
17
- await validateApiKey(ctx, args.apiKey);
18
- return true;
19
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
20
- }
21
- catch (e) {
22
- return false;
23
- }
24
- },
25
- returns: v.boolean(),
26
- });
27
- // List all agents
28
- const listAgents = queryGeneric({
29
- args: {
30
- apiKey: v.string(),
31
- },
32
- handler: async (ctx, args) => {
33
- await validateApiKey(ctx, args.apiKey);
34
- return Object.keys(agentMap);
35
- },
36
- returns: v.array(v.string()),
37
- });
38
- const listUsers = queryGeneric({
39
- args: {
40
- apiKey: v.string(),
41
- paginationOpts: paginationOptsValidator,
42
- },
43
- handler: async (ctx, args) => {
44
- await validateApiKey(ctx, args.apiKey);
45
- const users = await ctx.runQuery(component.users.listUsersWithThreads, {
46
- paginationOpts: args.paginationOpts,
47
- });
48
- return {
49
- ...users,
50
- page: await Promise.all(users.page.map(async (userId) => ({
51
- _id: userId,
52
- name: userNameLookup ? await userNameLookup(ctx, userId) : userId,
53
- }))),
54
- };
55
- },
56
- returns: paginationResultValidator(v.object({
57
- _id: v.string(),
58
- name: v.string(),
59
- })),
60
- });
61
- // List threads for a user (query)
62
- const listThreads = queryGeneric({
63
- args: {
64
- apiKey: v.string(),
65
- userId: v.string(),
66
- paginationOpts: paginationOptsValidator,
67
- },
68
- handler: async (ctx, args) => {
69
- await validateApiKey(ctx, args.apiKey);
70
- const results = await ctx.runQuery(component.threads.listThreadsByUserId, {
71
- userId: args.userId,
72
- paginationOpts: args.paginationOpts,
73
- order: "desc",
74
- });
75
- return {
76
- ...results,
77
- page: await Promise.all(results.page.map(async (thread) => {
78
- const { page: [last], } = await ctx.runQuery(component.messages.listMessagesByThreadId, {
79
- threadId: thread._id,
80
- order: "desc",
81
- paginationOpts: {
82
- numItems: 1,
83
- cursor: null,
84
- },
85
- });
86
- return {
87
- ...thread,
88
- latestMessage: last?.text,
89
- lastMessageAt: last?._creationTime,
90
- };
91
- })),
92
- };
93
- },
94
- returns: paginationResultValidator(v.object({
95
- ...vThreadDoc.fields,
96
- latestMessage: v.optional(v.string()),
97
- lastMessageAt: v.optional(v.number()),
98
- })),
99
- });
100
- // List messages for a thread (query)
101
- const listMessages = queryGeneric({
102
- args: {
103
- apiKey: v.string(),
104
- threadId: v.string(),
105
- paginationOpts: paginationOptsValidator,
106
- },
107
- handler: async (ctx, args) => {
108
- await validateApiKey(ctx, args.apiKey);
109
- return ctx.runQuery(component.messages.listMessagesByThreadId, {
110
- threadId: args.threadId,
111
- paginationOpts: args.paginationOpts,
112
- order: "desc",
113
- statuses: ["success", "failed", "pending"],
114
- });
115
- },
116
- returns: paginationResultValidator(vMessageDoc),
117
- });
118
- // Create a thread (mutation)
119
- const createThread = mutationGeneric({
120
- args: {
121
- apiKey: v.string(),
122
- agentName: v.string(),
123
- userId: v.string(),
124
- title: v.optional(v.string()),
125
- summary: v.optional(v.string()),
126
- },
127
- handler: async (ctx, args) => {
128
- await validateApiKey(ctx, args.apiKey);
129
- const agent = agentMap[args.agentName];
130
- if (!agent)
131
- throw new Error(`Unknown agent: ${args.agentName}`);
132
- return agent.createThread(ctx, {
133
- userId: args.userId,
134
- title: args.title,
135
- summary: args.summary,
136
- });
137
- },
138
- returns: v.object({ threadId: v.string() }),
139
- });
140
- // Send a message (action)
141
- const generateText = actionGeneric({
142
- args: {
143
- apiKey: v.string(),
144
- agentName: v.string(),
145
- userId: v.string(),
146
- threadId: v.string(),
147
- // Args passed through to generateText
148
- prompt: v.optional(v.string()),
149
- messages: v.optional(v.array(vMessage)),
150
- contextOptions: v.optional(vContextOptions),
151
- storageOptions: v.optional(vStorageOptions),
152
- },
153
- handler: async (ctx, args) => {
154
- const { apiKey, agentName, userId, threadId, ...rest } = args;
155
- await validateApiKey(ctx, apiKey);
156
- const agent = agentMap[agentName];
157
- if (!agent)
158
- throw new Error(`Unknown agent: ${agentName}`);
159
- const { thread } = await agent.continueThread(ctx, { threadId, userId });
160
- const result = await thread.generateText(rest);
161
- return result;
162
- },
163
- });
164
- // Fetch prompt context (action)
165
- const fetchPromptContext = actionGeneric({
166
- args: {
167
- apiKey: v.string(),
168
- agentName: v.string(),
169
- userId: v.optional(v.string()),
170
- threadId: v.optional(v.string()),
171
- messages: v.array(vMessage),
172
- contextOptions: vContextOptions,
173
- beforeMessageId: v.optional(v.string()),
174
- },
175
- handler: async (ctx, args) => {
176
- await validateApiKey(ctx, args.apiKey);
177
- const agent = agentMap[args.agentName];
178
- if (!agent)
179
- throw new Error(`Unknown agent: ${args.agentName}`);
180
- return agent.fetchContextMessages(ctx, {
181
- userId: args.userId,
182
- threadId: args.threadId,
183
- messages: args.messages,
184
- contextOptions: args.contextOptions,
185
- beforeMessageId: args.beforeMessageId,
186
- });
187
- },
188
- });
189
- return {
190
- isApiKeyValid,
191
- listUsers,
192
- listThreads,
193
- listMessages,
194
- listAgents,
195
- createThread,
196
- generateText,
197
- fetchPromptContext,
198
- };
199
- }
200
- //# sourceMappingURL=playground.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"playground.js","sourceRoot":"","sources":["../../../src/client/playground.ts"],"names":[],"mappings":"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"}
@@ -1,257 +0,0 @@
1
- import {
2
- paginationOptsValidator,
3
- queryGeneric,
4
- mutationGeneric,
5
- actionGeneric,
6
- GenericDataModel,
7
- GenericQueryCtx,
8
- ApiFromModules,
9
- } from "convex/server";
10
- import {
11
- vMessageDoc,
12
- vThreadDoc,
13
- paginationResultValidator,
14
- vMessage,
15
- vContextOptions,
16
- vStorageOptions,
17
- type AgentComponent,
18
- type Agent,
19
- } from "./index";
20
- import type { ToolSet } from "ai";
21
- import { v } from "convex/values";
22
-
23
- export type PlaygroundAPI = ApiFromModules<{
24
- playground: ReturnType<typeof definePlaygroundAPI>;
25
- }>["playground"];
26
-
27
- // Playground API definition
28
- export function definePlaygroundAPI(
29
- component: AgentComponent,
30
- {
31
- agents,
32
- userNameLookup,
33
- }: {
34
- agents: Agent<ToolSet>[];
35
- userNameLookup?: <DataModel extends GenericDataModel>(
36
- ctx: GenericQueryCtx<DataModel>,
37
- userId: string
38
- ) => string | Promise<string>;
39
- }
40
- ) {
41
- // Map agent name to instance
42
- const agentMap: Record<string, Agent<ToolSet>> = Object.fromEntries(
43
- agents.map((agent) => [agent.options.name, agent])
44
- );
45
-
46
- async function validateApiKey(ctx: RunQueryCtx, apiKey: string) {
47
- await ctx.runQuery(component.apiKeys.validate, { apiKey });
48
- }
49
-
50
- const isApiKeyValid = queryGeneric({
51
- args: {
52
- apiKey: v.string(),
53
- },
54
- handler: async (ctx, args) => {
55
- try {
56
- await validateApiKey(ctx, args.apiKey);
57
- return true;
58
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
59
- } catch (e) {
60
- return false;
61
- }
62
- },
63
- returns: v.boolean(),
64
- });
65
-
66
- // List all agents
67
- const listAgents = queryGeneric({
68
- args: {
69
- apiKey: v.string(),
70
- },
71
- handler: async (ctx, args) => {
72
- await validateApiKey(ctx, args.apiKey);
73
- return Object.keys(agentMap);
74
- },
75
- returns: v.array(v.string()),
76
- });
77
-
78
- const listUsers = queryGeneric({
79
- args: {
80
- apiKey: v.string(),
81
- paginationOpts: paginationOptsValidator,
82
- },
83
- handler: async (ctx, args) => {
84
- await validateApiKey(ctx, args.apiKey);
85
- const users = await ctx.runQuery(component.users.listUsersWithThreads, {
86
- paginationOpts: args.paginationOpts,
87
- });
88
- return {
89
- ...users,
90
- page: await Promise.all(
91
- users.page.map(async (userId) => ({
92
- _id: userId,
93
- name: userNameLookup ? await userNameLookup(ctx, userId) : userId,
94
- }))
95
- ),
96
- };
97
- },
98
- returns: paginationResultValidator(
99
- v.object({
100
- _id: v.string(),
101
- name: v.string(),
102
- })
103
- ),
104
- });
105
-
106
- // List threads for a user (query)
107
- const listThreads = queryGeneric({
108
- args: {
109
- apiKey: v.string(),
110
- userId: v.string(),
111
- paginationOpts: paginationOptsValidator,
112
- },
113
- handler: async (ctx, args) => {
114
- await validateApiKey(ctx, args.apiKey);
115
- const results = await ctx.runQuery(
116
- component.threads.listThreadsByUserId,
117
- {
118
- userId: args.userId,
119
- paginationOpts: args.paginationOpts,
120
- order: "desc",
121
- }
122
- );
123
- return {
124
- ...results,
125
- page: await Promise.all(
126
- results.page.map(async (thread) => {
127
- const {
128
- page: [last],
129
- } = await ctx.runQuery(component.messages.listMessagesByThreadId, {
130
- threadId: thread._id,
131
- order: "desc",
132
- paginationOpts: {
133
- numItems: 1,
134
- cursor: null,
135
- },
136
- });
137
- return {
138
- ...thread,
139
- latestMessage: last?.text,
140
- lastMessageAt: last?._creationTime,
141
- };
142
- })
143
- ),
144
- };
145
- },
146
- returns: paginationResultValidator(
147
- v.object({
148
- ...vThreadDoc.fields,
149
- latestMessage: v.optional(v.string()),
150
- lastMessageAt: v.optional(v.number()),
151
- })
152
- ),
153
- });
154
-
155
- // List messages for a thread (query)
156
- const listMessages = queryGeneric({
157
- args: {
158
- apiKey: v.string(),
159
- threadId: v.string(),
160
- paginationOpts: paginationOptsValidator,
161
- },
162
- handler: async (ctx, args) => {
163
- await validateApiKey(ctx, args.apiKey);
164
- return ctx.runQuery(component.messages.listMessagesByThreadId, {
165
- threadId: args.threadId,
166
- paginationOpts: args.paginationOpts,
167
- order: "desc",
168
- statuses: ["success", "failed", "pending"],
169
- });
170
- },
171
- returns: paginationResultValidator(vMessageDoc),
172
- });
173
-
174
- // Create a thread (mutation)
175
- const createThread = mutationGeneric({
176
- args: {
177
- apiKey: v.string(),
178
- agentName: v.string(),
179
- userId: v.string(),
180
- title: v.optional(v.string()),
181
- summary: v.optional(v.string()),
182
- },
183
- handler: async (ctx, args) => {
184
- await validateApiKey(ctx, args.apiKey);
185
- const agent = agentMap[args.agentName];
186
- if (!agent) throw new Error(`Unknown agent: ${args.agentName}`);
187
- return agent.createThread(ctx, {
188
- userId: args.userId,
189
- title: args.title,
190
- summary: args.summary,
191
- });
192
- },
193
- returns: v.object({ threadId: v.string() }),
194
- });
195
-
196
- // Send a message (action)
197
- const generateText = actionGeneric({
198
- args: {
199
- apiKey: v.string(),
200
- agentName: v.string(),
201
- userId: v.string(),
202
- threadId: v.string(),
203
- // Args passed through to generateText
204
- prompt: v.optional(v.string()),
205
- messages: v.optional(v.array(vMessage)),
206
- contextOptions: v.optional(vContextOptions),
207
- storageOptions: v.optional(vStorageOptions),
208
- },
209
- handler: async (ctx, args) => {
210
- const { apiKey, agentName, userId, threadId, ...rest } = args;
211
- await validateApiKey(ctx, apiKey);
212
- const agent = agentMap[agentName];
213
- if (!agent) throw new Error(`Unknown agent: ${agentName}`);
214
- const { thread } = await agent.continueThread(ctx, { threadId, userId });
215
- const result = await thread.generateText(rest);
216
- return result;
217
- },
218
- });
219
-
220
- // Fetch prompt context (action)
221
- const fetchPromptContext = actionGeneric({
222
- args: {
223
- apiKey: v.string(),
224
- agentName: v.string(),
225
- userId: v.optional(v.string()),
226
- threadId: v.optional(v.string()),
227
- messages: v.array(vMessage),
228
- contextOptions: vContextOptions,
229
- beforeMessageId: v.optional(v.string()),
230
- },
231
- handler: async (ctx, args) => {
232
- await validateApiKey(ctx, args.apiKey);
233
- const agent = agentMap[args.agentName];
234
- if (!agent) throw new Error(`Unknown agent: ${args.agentName}`);
235
- return agent.fetchContextMessages(ctx, {
236
- userId: args.userId,
237
- threadId: args.threadId,
238
- messages: args.messages,
239
- contextOptions: args.contextOptions,
240
- beforeMessageId: args.beforeMessageId,
241
- });
242
- },
243
- });
244
-
245
- return {
246
- isApiKeyValid,
247
- listUsers,
248
- listThreads,
249
- listMessages,
250
- listAgents,
251
- createThread,
252
- generateText,
253
- fetchPromptContext,
254
- };
255
- }
256
-
257
- type RunQueryCtx = { runQuery: GenericQueryCtx<GenericDataModel>["runQuery"] };