@convex-dev/agent 0.6.0-alpha.1 → 0.6.0
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/package.json +1 -1
- package/src/UIMessages.ts +135 -0
- package/src/client/index.ts +56 -14
- package/src/client/search.test.ts +4 -5
- package/src/client/search.ts +45 -4
- package/src/client/streaming.integration.test.ts +1206 -0
- package/src/client/streaming.ts +9 -2
- package/src/mapping.test.ts +136 -71
- package/src/mapping.ts +81 -28
- package/dist/UIMessages.d.ts +0 -46
- package/dist/UIMessages.d.ts.map +0 -1
- package/dist/UIMessages.js +0 -546
- package/dist/UIMessages.js.map +0 -1
- package/dist/client/createTool.d.ts +0 -167
- package/dist/client/createTool.d.ts.map +0 -1
- package/dist/client/createTool.js +0 -116
- package/dist/client/createTool.js.map +0 -1
- package/dist/client/defaultComponent.d.ts +0 -11
- package/dist/client/defaultComponent.d.ts.map +0 -1
- package/dist/client/defaultComponent.js +0 -7
- package/dist/client/defaultComponent.js.map +0 -1
- package/dist/client/definePlaygroundAPI.d.ts +0 -1725
- package/dist/client/definePlaygroundAPI.d.ts.map +0 -1
- package/dist/client/definePlaygroundAPI.js +0 -271
- package/dist/client/definePlaygroundAPI.js.map +0 -1
- package/dist/client/files.d.ts +0 -69
- package/dist/client/files.d.ts.map +0 -1
- package/dist/client/files.js +0 -181
- package/dist/client/files.js.map +0 -1
- package/dist/client/index.d.ts +0 -2091
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js +0 -895
- package/dist/client/index.js.map +0 -1
- package/dist/client/messages.d.ts +0 -461
- package/dist/client/messages.d.ts.map +0 -1
- package/dist/client/messages.js +0 -106
- package/dist/client/messages.js.map +0 -1
- package/dist/client/mockModel.d.ts +0 -42
- package/dist/client/mockModel.d.ts.map +0 -1
- package/dist/client/mockModel.js +0 -182
- package/dist/client/mockModel.js.map +0 -1
- package/dist/client/saveInputMessages.d.ts +0 -20
- package/dist/client/saveInputMessages.d.ts.map +0 -1
- package/dist/client/saveInputMessages.js +0 -58
- package/dist/client/saveInputMessages.js.map +0 -1
- package/dist/client/search.d.ts +0 -493
- package/dist/client/search.d.ts.map +0 -1
- package/dist/client/search.js +0 -425
- package/dist/client/search.js.map +0 -1
- package/dist/client/start.d.ts +0 -84
- package/dist/client/start.d.ts.map +0 -1
- package/dist/client/start.js +0 -185
- package/dist/client/start.js.map +0 -1
- package/dist/client/streamText.d.ts +0 -46
- package/dist/client/streamText.d.ts.map +0 -1
- package/dist/client/streamText.js +0 -117
- package/dist/client/streamText.js.map +0 -1
- package/dist/client/streaming.d.ts +0 -3778
- package/dist/client/streaming.d.ts.map +0 -1
- package/dist/client/streaming.js +0 -314
- package/dist/client/streaming.js.map +0 -1
- package/dist/client/threads.d.ts +0 -46
- package/dist/client/threads.d.ts.map +0 -1
- package/dist/client/threads.js +0 -49
- package/dist/client/threads.js.map +0 -1
- package/dist/client/types.d.ts +0 -461
- package/dist/client/types.d.ts.map +0 -1
- package/dist/client/types.js +0 -2
- package/dist/client/types.js.map +0 -1
- package/dist/client/utils.d.ts +0 -4
- package/dist/client/utils.d.ts.map +0 -1
- package/dist/client/utils.js +0 -21
- package/dist/client/utils.js.map +0 -1
- package/dist/component/_generated/api.d.ts +0 -48
- package/dist/component/_generated/api.d.ts.map +0 -1
- package/dist/component/_generated/api.js +0 -31
- package/dist/component/_generated/api.js.map +0 -1
- package/dist/component/_generated/component.d.ts +0 -3120
- package/dist/component/_generated/component.d.ts.map +0 -1
- package/dist/component/_generated/component.js +0 -11
- package/dist/component/_generated/component.js.map +0 -1
- package/dist/component/_generated/dataModel.d.ts +0 -46
- package/dist/component/_generated/dataModel.d.ts.map +0 -1
- package/dist/component/_generated/dataModel.js +0 -11
- package/dist/component/_generated/dataModel.js.map +0 -1
- package/dist/component/_generated/server.d.ts +0 -121
- package/dist/component/_generated/server.d.ts.map +0 -1
- package/dist/component/_generated/server.js +0 -78
- package/dist/component/_generated/server.js.map +0 -1
- package/dist/component/apiKeys.d.ts +0 -11
- package/dist/component/apiKeys.d.ts.map +0 -1
- package/dist/component/apiKeys.js +0 -69
- package/dist/component/apiKeys.js.map +0 -1
- package/dist/component/convex.config.d.ts +0 -3
- package/dist/component/convex.config.d.ts.map +0 -1
- package/dist/component/convex.config.js +0 -3
- package/dist/component/convex.config.js.map +0 -1
- package/dist/component/files.d.ts +0 -97
- package/dist/component/files.d.ts.map +0 -1
- package/dist/component/files.js +0 -190
- package/dist/component/files.js.map +0 -1
- package/dist/component/messages.d.ts +0 -3851
- package/dist/component/messages.d.ts.map +0 -1
- package/dist/component/messages.js +0 -757
- package/dist/component/messages.js.map +0 -1
- package/dist/component/schema.d.ts +0 -8026
- package/dist/component/schema.d.ts.map +0 -1
- package/dist/component/schema.js +0 -147
- package/dist/component/schema.js.map +0 -1
- package/dist/component/streams.d.ts +0 -128
- package/dist/component/streams.d.ts.map +0 -1
- package/dist/component/streams.js +0 -413
- package/dist/component/streams.js.map +0 -1
- package/dist/component/threads.d.ts +0 -115
- package/dist/component/threads.d.ts.map +0 -1
- package/dist/component/threads.js +0 -208
- package/dist/component/threads.js.map +0 -1
- package/dist/component/users.d.ts +0 -52
- package/dist/component/users.d.ts.map +0 -1
- package/dist/component/users.js +0 -229
- package/dist/component/users.js.map +0 -1
- package/dist/component/vector/index.d.ts +0 -61
- package/dist/component/vector/index.d.ts.map +0 -1
- package/dist/component/vector/index.js +0 -146
- package/dist/component/vector/index.js.map +0 -1
- package/dist/component/vector/tables.d.ts +0 -58
- package/dist/component/vector/tables.d.ts.map +0 -1
- package/dist/component/vector/tables.js +0 -56
- package/dist/component/vector/tables.js.map +0 -1
- package/dist/deltas.d.ts +0 -43
- package/dist/deltas.d.ts.map +0 -1
- package/dist/deltas.js +0 -446
- package/dist/deltas.js.map +0 -1
- package/dist/mapping.d.ts +0 -72
- package/dist/mapping.d.ts.map +0 -1
- package/dist/mapping.js +0 -677
- package/dist/mapping.js.map +0 -1
- package/dist/react/SmoothText.d.ts +0 -5
- package/dist/react/SmoothText.d.ts.map +0 -1
- package/dist/react/SmoothText.js +0 -6
- package/dist/react/SmoothText.js.map +0 -1
- package/dist/react/index.d.ts +0 -25
- package/dist/react/index.d.ts.map +0 -1
- package/dist/react/index.js +0 -70
- package/dist/react/index.js.map +0 -1
- package/dist/react/optimisticallySendMessage.d.ts +0 -42
- package/dist/react/optimisticallySendMessage.d.ts.map +0 -1
- package/dist/react/optimisticallySendMessage.js +0 -74
- package/dist/react/optimisticallySendMessage.js.map +0 -1
- package/dist/react/types.d.ts +0 -12
- package/dist/react/types.d.ts.map +0 -1
- package/dist/react/types.js +0 -2
- package/dist/react/types.js.map +0 -1
- package/dist/react/useDeltaStreams.d.ts +0 -10
- package/dist/react/useDeltaStreams.d.ts.map +0 -1
- package/dist/react/useDeltaStreams.js +0 -106
- package/dist/react/useDeltaStreams.js.map +0 -1
- package/dist/react/useSmoothText.d.ts +0 -27
- package/dist/react/useSmoothText.d.ts.map +0 -1
- package/dist/react/useSmoothText.js +0 -68
- package/dist/react/useSmoothText.js.map +0 -1
- package/dist/react/useStreamingUIMessages.d.ts +0 -22
- package/dist/react/useStreamingUIMessages.d.ts.map +0 -1
- package/dist/react/useStreamingUIMessages.js +0 -92
- package/dist/react/useStreamingUIMessages.js.map +0 -1
- package/dist/react/useThreadMessages.d.ts +0 -104
- package/dist/react/useThreadMessages.d.ts.map +0 -1
- package/dist/react/useThreadMessages.js +0 -148
- package/dist/react/useThreadMessages.js.map +0 -1
- package/dist/react/useUIMessages.d.ts +0 -96
- package/dist/react/useUIMessages.d.ts.map +0 -1
- package/dist/react/useUIMessages.js +0 -108
- package/dist/react/useUIMessages.js.map +0 -1
- package/dist/shared.d.ts +0 -26
- package/dist/shared.d.ts.map +0 -1
- package/dist/shared.js +0 -67
- package/dist/shared.js.map +0 -1
- package/dist/validators.d.ts +0 -24516
- package/dist/validators.d.ts.map +0 -1
- package/dist/validators.js +0 -475
- package/dist/validators.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"definePlaygroundAPI.d.ts","sourceRoot":"","sources":["../../src/client/definePlaygroundAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAUL,KAAK,KAAK,EACV,KAAK,cAAc,EAOpB,MAAM,YAAY,CAAC;AAIpB,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC;IACzC,UAAU,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;CACpD,CAAC,CAAC,YAAY,CAAC,CAAC;AAEjB,MAAM,MAAM,QAAQ,CAAC,SAAS,SAAS,gBAAgB,IAAI,CACzD,GAAG,EAAE,gBAAgB,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,EAC7D,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,KAC/D,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAGhC,wBAAgB,mBAAmB,CAAC,SAAS,SAAS,gBAAgB,EACpE,SAAS,EAAE,cAAc,EACzB,EACE,MAAM,EAAE,UAAU,EAClB,cAAc,GACf,EAAE;IACD,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,CACf,GAAG,EAAE,eAAe,CAAC,SAAS,CAAC,EAC/B,MAAM,EAAE,MAAM,KACX,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyTF"}
|
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
import { actionGeneric, mutationGeneric, paginationOptsValidator, queryGeneric, } from "convex/server";
|
|
2
|
-
import { v } from "convex/values";
|
|
3
|
-
import { createThread as createThread_, listMessages as listMessages_, toModelMessage, vContextOptions, vMessage, vMessageDoc, vPaginationResult, vStorageOptions, vThreadDoc, vStreamArgs, syncStreams, vStreamMessagesReturnValue, isTool, extractText, } from "./index.js";
|
|
4
|
-
import { serializeNewMessagesInStep } from "../mapping.js";
|
|
5
|
-
import { getModelName, getProviderName } from "../shared.js";
|
|
6
|
-
// Playground API definition
|
|
7
|
-
export function definePlaygroundAPI(component, { agents: agentsOrFn, userNameLookup, }) {
|
|
8
|
-
function validateAgents(agents) {
|
|
9
|
-
for (const agent of agents) {
|
|
10
|
-
if (!agent.options.name) {
|
|
11
|
-
console.warn(`Agent has no name (instructions: ${agent.options.instructions})`);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
async function validateApiKey(ctx, apiKey) {
|
|
16
|
-
await ctx.runQuery(component.apiKeys.validate, { apiKey });
|
|
17
|
-
}
|
|
18
|
-
const isApiKeyValid = queryGeneric({
|
|
19
|
-
args: { apiKey: v.string() },
|
|
20
|
-
handler: async (ctx, args) => {
|
|
21
|
-
try {
|
|
22
|
-
await validateApiKey(ctx, args.apiKey);
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
returns: v.boolean(),
|
|
30
|
-
});
|
|
31
|
-
async function getAgents(ctx, args) {
|
|
32
|
-
const agents = Array.isArray(agentsOrFn)
|
|
33
|
-
? agentsOrFn
|
|
34
|
-
: await agentsOrFn(ctx, args);
|
|
35
|
-
validateAgents(agents);
|
|
36
|
-
return agents.map((agent, i) => ({
|
|
37
|
-
name: agent.options.name ?? `Agent ${i} (missing 'name')`,
|
|
38
|
-
agent,
|
|
39
|
-
}));
|
|
40
|
-
}
|
|
41
|
-
// List all agents
|
|
42
|
-
const listAgents = queryGeneric({
|
|
43
|
-
args: {
|
|
44
|
-
apiKey: v.string(),
|
|
45
|
-
userId: v.optional(v.string()),
|
|
46
|
-
threadId: v.optional(v.string()),
|
|
47
|
-
},
|
|
48
|
-
handler: async (ctx, args) => {
|
|
49
|
-
const agents = await getAgents(ctx, {
|
|
50
|
-
userId: args.userId,
|
|
51
|
-
threadId: args.threadId,
|
|
52
|
-
});
|
|
53
|
-
await validateApiKey(ctx, args.apiKey);
|
|
54
|
-
return agents.map(({ name, agent }) => ({
|
|
55
|
-
name,
|
|
56
|
-
instructions: agent.options.instructions,
|
|
57
|
-
contextOptions: agent.options.contextOptions,
|
|
58
|
-
storageOptions: agent.options.storageOptions,
|
|
59
|
-
maxRetries: agent.options.callSettings?.maxRetries,
|
|
60
|
-
tools: agent.options.tools ? Object.keys(agent.options.tools) : [],
|
|
61
|
-
}));
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
const listUsers = queryGeneric({
|
|
65
|
-
args: { apiKey: v.string(), paginationOpts: paginationOptsValidator },
|
|
66
|
-
handler: async (ctx, args) => {
|
|
67
|
-
await validateApiKey(ctx, args.apiKey);
|
|
68
|
-
const users = await ctx.runQuery(component.users.listUsersWithThreads, {
|
|
69
|
-
paginationOpts: args.paginationOpts,
|
|
70
|
-
});
|
|
71
|
-
return {
|
|
72
|
-
...users,
|
|
73
|
-
page: await Promise.all(users.page.map(async (userId) => ({
|
|
74
|
-
_id: userId,
|
|
75
|
-
name: userNameLookup ? await userNameLookup(ctx, userId) : userId,
|
|
76
|
-
}))),
|
|
77
|
-
};
|
|
78
|
-
},
|
|
79
|
-
returns: vPaginationResult(v.object({ _id: v.string(), name: v.string() })),
|
|
80
|
-
});
|
|
81
|
-
// List threads for a user (query)
|
|
82
|
-
const listThreads = queryGeneric({
|
|
83
|
-
args: {
|
|
84
|
-
apiKey: v.string(),
|
|
85
|
-
userId: v.optional(v.string()),
|
|
86
|
-
paginationOpts: paginationOptsValidator,
|
|
87
|
-
},
|
|
88
|
-
handler: async (ctx, args) => {
|
|
89
|
-
await validateApiKey(ctx, args.apiKey);
|
|
90
|
-
const results = await ctx.runQuery(component.threads.listThreadsByUserId, {
|
|
91
|
-
userId: args.userId,
|
|
92
|
-
paginationOpts: args.paginationOpts,
|
|
93
|
-
order: "desc",
|
|
94
|
-
});
|
|
95
|
-
return {
|
|
96
|
-
...results,
|
|
97
|
-
page: await Promise.all(results.page.map(async (thread) => {
|
|
98
|
-
const { page: [last], } = await ctx.runQuery(component.messages.listMessagesByThreadId, {
|
|
99
|
-
threadId: thread._id,
|
|
100
|
-
order: "desc",
|
|
101
|
-
paginationOpts: { numItems: 1, cursor: null },
|
|
102
|
-
});
|
|
103
|
-
return {
|
|
104
|
-
...thread,
|
|
105
|
-
lastAgentName: last?.agentName,
|
|
106
|
-
latestMessage: last?.text,
|
|
107
|
-
lastMessageAt: last?._creationTime,
|
|
108
|
-
};
|
|
109
|
-
})),
|
|
110
|
-
};
|
|
111
|
-
},
|
|
112
|
-
returns: vPaginationResult(v.object({
|
|
113
|
-
...vThreadDoc.fields,
|
|
114
|
-
lastAgentName: v.optional(v.string()),
|
|
115
|
-
latestMessage: v.optional(v.string()),
|
|
116
|
-
lastMessageAt: v.optional(v.number()),
|
|
117
|
-
})),
|
|
118
|
-
});
|
|
119
|
-
// List messages for a thread (query)
|
|
120
|
-
const listMessages = queryGeneric({
|
|
121
|
-
args: {
|
|
122
|
-
apiKey: v.string(),
|
|
123
|
-
threadId: v.string(),
|
|
124
|
-
paginationOpts: paginationOptsValidator,
|
|
125
|
-
streamArgs: vStreamArgs,
|
|
126
|
-
},
|
|
127
|
-
handler: async (ctx, args) => {
|
|
128
|
-
await validateApiKey(ctx, args.apiKey);
|
|
129
|
-
const paginated = await listMessages_(ctx, component, {
|
|
130
|
-
threadId: args.threadId,
|
|
131
|
-
paginationOpts: args.paginationOpts,
|
|
132
|
-
statuses: ["success", "failed", "pending"],
|
|
133
|
-
});
|
|
134
|
-
const streams = await syncStreams(ctx, component, args);
|
|
135
|
-
return { ...paginated, streams };
|
|
136
|
-
},
|
|
137
|
-
returns: vStreamMessagesReturnValue,
|
|
138
|
-
});
|
|
139
|
-
// Create a thread (mutation)
|
|
140
|
-
const createThread = mutationGeneric({
|
|
141
|
-
args: {
|
|
142
|
-
apiKey: v.string(),
|
|
143
|
-
userId: v.string(),
|
|
144
|
-
title: v.optional(v.string()),
|
|
145
|
-
summary: v.optional(v.string()),
|
|
146
|
-
/** @deprecated Unused. */
|
|
147
|
-
agentName: v.optional(v.string()),
|
|
148
|
-
},
|
|
149
|
-
handler: async (ctx, args) => {
|
|
150
|
-
await validateApiKey(ctx, args.apiKey);
|
|
151
|
-
const threadId = await createThread_(ctx, component, {
|
|
152
|
-
userId: args.userId,
|
|
153
|
-
title: args.title,
|
|
154
|
-
summary: args.summary,
|
|
155
|
-
});
|
|
156
|
-
return { threadId };
|
|
157
|
-
},
|
|
158
|
-
returns: v.object({ threadId: v.string() }),
|
|
159
|
-
});
|
|
160
|
-
// Send a message (action)
|
|
161
|
-
const generateText = actionGeneric({
|
|
162
|
-
args: {
|
|
163
|
-
apiKey: v.string(),
|
|
164
|
-
agentName: v.string(),
|
|
165
|
-
userId: v.string(),
|
|
166
|
-
threadId: v.string(),
|
|
167
|
-
// Options for generateText
|
|
168
|
-
contextOptions: v.optional(vContextOptions),
|
|
169
|
-
storageOptions: v.optional(vStorageOptions),
|
|
170
|
-
// Args passed through to generateText
|
|
171
|
-
prompt: v.optional(v.string()),
|
|
172
|
-
messages: v.optional(v.array(vMessage)),
|
|
173
|
-
system: v.optional(v.string()),
|
|
174
|
-
},
|
|
175
|
-
handler: async (ctx, args) => {
|
|
176
|
-
const { apiKey, agentName, userId, threadId, contextOptions, storageOptions, system, messages, ...rest } = args;
|
|
177
|
-
await validateApiKey(ctx, apiKey);
|
|
178
|
-
const agents = await getAgents(ctx, {
|
|
179
|
-
userId: args.userId,
|
|
180
|
-
threadId: args.threadId,
|
|
181
|
-
});
|
|
182
|
-
const namedAgent = agents.find(({ name }) => name === agentName);
|
|
183
|
-
if (!namedAgent)
|
|
184
|
-
throw new Error(`Unknown agent: ${agentName}`);
|
|
185
|
-
const { agent } = namedAgent;
|
|
186
|
-
const { text, steps } = await agent.streamText(ctx, { threadId, userId }, {
|
|
187
|
-
...rest,
|
|
188
|
-
...(system ? { system } : {}),
|
|
189
|
-
...(messages ? { messages: messages.map(toModelMessage) } : {}),
|
|
190
|
-
}, { contextOptions, storageOptions, saveStreamDeltas: true });
|
|
191
|
-
const outputMessages = await Promise.all((await steps).map(async (step) => {
|
|
192
|
-
const { messages } = await serializeNewMessagesInStep(ctx, component, step, {
|
|
193
|
-
model: getModelName(agent.options.languageModel),
|
|
194
|
-
provider: getProviderName(agent.options.languageModel),
|
|
195
|
-
});
|
|
196
|
-
return messages.map((messageWithMetadata, i) => {
|
|
197
|
-
return {
|
|
198
|
-
...messageWithMetadata,
|
|
199
|
-
tool: isTool(messageWithMetadata.message),
|
|
200
|
-
text: extractText(messageWithMetadata.message),
|
|
201
|
-
status: "success",
|
|
202
|
-
providerMetadata: {},
|
|
203
|
-
threadId,
|
|
204
|
-
_id: crypto.randomUUID(),
|
|
205
|
-
_creationTime: Date.now(),
|
|
206
|
-
order: 0,
|
|
207
|
-
stepOrder: i + 1,
|
|
208
|
-
};
|
|
209
|
-
});
|
|
210
|
-
}));
|
|
211
|
-
return { text: await text, messages: outputMessages.flat() };
|
|
212
|
-
},
|
|
213
|
-
returns: v.object({ text: v.string(), messages: v.array(vMessageDoc) }),
|
|
214
|
-
});
|
|
215
|
-
// Fetch prompt context (action)
|
|
216
|
-
const fetchPromptContext = actionGeneric({
|
|
217
|
-
args: {
|
|
218
|
-
apiKey: v.string(),
|
|
219
|
-
agentName: v.string(),
|
|
220
|
-
userId: v.optional(v.string()),
|
|
221
|
-
threadId: v.optional(v.string()),
|
|
222
|
-
searchText: v.optional(v.string()),
|
|
223
|
-
targetMessageId: v.optional(v.string()),
|
|
224
|
-
contextOptions: vContextOptions,
|
|
225
|
-
// @deprecated use searchText and targetMessageId instead
|
|
226
|
-
messages: v.optional(v.array(vMessage)),
|
|
227
|
-
beforeMessageId: v.optional(v.string()),
|
|
228
|
-
},
|
|
229
|
-
handler: async (ctx, args) => {
|
|
230
|
-
await validateApiKey(ctx, args.apiKey);
|
|
231
|
-
const agents = await getAgents(ctx, {
|
|
232
|
-
userId: args.userId,
|
|
233
|
-
threadId: args.threadId,
|
|
234
|
-
});
|
|
235
|
-
const namedAgent = agents.find(({ name }) => name === args.agentName);
|
|
236
|
-
if (!namedAgent)
|
|
237
|
-
throw new Error(`Unknown agent: ${args.agentName}`);
|
|
238
|
-
const { agent } = namedAgent;
|
|
239
|
-
const contextOptions = args.contextOptions;
|
|
240
|
-
const targetMessageId = args.targetMessageId ?? args.beforeMessageId;
|
|
241
|
-
if (targetMessageId) {
|
|
242
|
-
contextOptions.recentMessages =
|
|
243
|
-
(contextOptions.recentMessages ?? 10) + 1;
|
|
244
|
-
}
|
|
245
|
-
const messages = await agent.fetchContextMessages(ctx, {
|
|
246
|
-
userId: args.userId,
|
|
247
|
-
threadId: args.threadId,
|
|
248
|
-
targetMessageId,
|
|
249
|
-
searchText: args.searchText,
|
|
250
|
-
contextOptions: args.contextOptions,
|
|
251
|
-
messages: args.messages?.map(toModelMessage),
|
|
252
|
-
});
|
|
253
|
-
const targetMessageIndex = messages.findIndex((m) => m._id === targetMessageId);
|
|
254
|
-
if (targetMessageIndex !== -1) {
|
|
255
|
-
return messages.slice(0, targetMessageIndex);
|
|
256
|
-
}
|
|
257
|
-
return messages;
|
|
258
|
-
},
|
|
259
|
-
});
|
|
260
|
-
return {
|
|
261
|
-
isApiKeyValid,
|
|
262
|
-
listUsers,
|
|
263
|
-
listThreads,
|
|
264
|
-
listMessages,
|
|
265
|
-
listAgents,
|
|
266
|
-
createThread,
|
|
267
|
-
generateText,
|
|
268
|
-
fetchPromptContext,
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
//# sourceMappingURL=definePlaygroundAPI.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"definePlaygroundAPI.js","sourceRoot":"","sources":["../../src/client/definePlaygroundAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EACf,uBAAuB,EACvB,YAAY,GAKb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EACL,YAAY,IAAI,aAAa,EAC7B,YAAY,IAAI,aAAa,EAC7B,cAAc,EACd,eAAe,EACf,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,UAAU,EAGV,WAAW,EACX,WAAW,EACX,0BAA0B,EAC1B,MAAM,EACN,WAAW,GAEZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAW7D,4BAA4B;AAC5B,MAAM,UAAU,mBAAmB,CACjC,SAAyB,EACzB,EACE,MAAM,EAAE,UAAU,EAClB,cAAc,GAOf;IAED,SAAS,cAAc,CAAC,MAAe;QACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CACV,oCAAoC,KAAK,CAAC,OAAO,CAAC,YAAY,GAAG,CAClE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,UAAU,cAAc,CAAC,GAAgB,EAAE,MAAc;QAC5D,MAAM,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,aAAa,GAAG,YAAY,CAAC;QACjC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;QAC5B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,IAAI,CAAC;gBACH,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvC,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;KACrB,CAAC,CAAC;IAEH,KAAK,UAAU,SAAS,CACtB,GAA6D,EAC7D,IAAkE;QAElE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YACtC,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAChC,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,mBAAmB;YACzD,KAAK;SACN,CAAC,CAAC,CAAC;IACN,CAAC;IAED,kBAAkB;IAClB,MAAM,UAAU,GAAG,YAAY,CAAC;QAC9B,IAAI,EAAE;YACJ,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC9B,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjC;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;gBAClC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;YACH,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI;gBACJ,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;gBACxC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;gBAC5C,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;gBAC5C,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU;gBAClD,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;aACnE,CAAC,CAAC,CAAC;QACN,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,YAAY,CAAC;QAC7B,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,uBAAuB,EAAE;QACrE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,oBAAoB,EAAE;gBACrE,cAAc,EAAE,IAAI,CAAC,cAAc;aACpC,CAAC,CAAC;YACH,OAAO;gBACL,GAAG,KAAK;gBACR,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CACrB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;oBAChC,GAAG,EAAE,MAAM;oBACX,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;iBAClE,CAAC,CAAC,CACJ;aACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;KAC5E,CAAC,CAAC;IAEH,kCAAkC;IAClC,MAAM,WAAW,GAAG,YAAY,CAAC;QAC/B,IAAI,EAAE;YACJ,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC9B,cAAc,EAAE,uBAAuB;SACxC;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,QAAQ,CAChC,SAAS,CAAC,OAAO,CAAC,mBAAmB,EACrC;gBACE,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,KAAK,EAAE,MAAM;aACd,CACF,CAAC;YACF,OAAO;gBACL,GAAG,OAAO;gBACV,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CACrB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;oBAChC,MAAM,EACJ,IAAI,EAAE,CAAC,IAAI,CAAC,GACb,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,sBAAsB,EAAE;wBAChE,QAAQ,EAAE,MAAM,CAAC,GAAG;wBACpB,KAAK,EAAE,MAAM;wBACb,cAAc,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;qBAC9C,CAAC,CAAC;oBACH,OAAO;wBACL,GAAG,MAAM;wBACT,aAAa,EAAE,IAAI,EAAE,SAAS;wBAC9B,aAAa,EAAE,IAAI,EAAE,IAAI;wBACzB,aAAa,EAAE,IAAI,EAAE,aAAa;qBACnC,CAAC;gBACJ,CAAC,CAAC,CACH;aACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,iBAAiB,CACxB,CAAC,CAAC,MAAM,CAAC;YACP,GAAG,UAAU,CAAC,MAAM;YACpB,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACrC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACrC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACtC,CAAC,CACH;KACF,CAAC,CAAC;IAEH,qCAAqC;IACrC,MAAM,YAAY,GAAG,YAAY,CAAC;QAChC,IAAI,EAAE;YACJ,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,cAAc,EAAE,uBAAuB;YACvC,UAAU,EAAE,WAAW;SACxB;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE;gBACpD,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;aAC3C,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAExD,OAAO,EAAE,GAAG,SAAS,EAAE,OAAO,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,EAAE,0BAA0B;KACpC,CAAC,CAAC;IAEH,6BAA6B;IAC7B,MAAM,YAAY,GAAG,eAAe,CAAC;QACnC,IAAI,EAAE;YACJ,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC/B,0BAA0B;YAC1B,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SAClC;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE;gBACnD,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;YACH,OAAO,EAAE,QAAQ,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;KAC5C,CAAC,CAAC;IAEH,0BAA0B;IAC1B,MAAM,YAAY,GAAG,aAAa,CAAC;QACjC,IAAI,EAAE;YACJ,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,2BAA2B;YAC3B,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC3C,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC3C,sCAAsC;YACtC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC9B,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SAC/B;QACD,OAAO,EAAE,KAAK,EAAE,GAAgC,EAAE,IAAI,EAAE,EAAE;YACxD,MAAM,EACJ,MAAM,EACN,SAAS,EACT,MAAM,EACN,QAAQ,EACR,cAAc,EACd,cAAc,EACd,MAAM,EACN,QAAQ,EACR,GAAG,IAAI,EACR,GAAG,IAAI,CAAC;YACT,MAAM,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;gBAClC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YACjE,IAAI,CAAC,UAAU;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC;YAChE,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;YAC7B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,KAAK,CAAC,UAAU,CAC5C,GAAG,EACH,EAAE,QAAQ,EAAE,MAAM,EAAE,EACpB;gBACE,GAAG,IAAI;gBACP,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE,EACD,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAC3D,CAAC;YACF,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,CAAC,MAAM,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,0BAA0B,CACnD,GAAG,EACH,SAAS,EACT,IAAI,EACJ;oBACE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;oBAChD,QAAQ,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;iBACvD,CACF,CAAC;gBACF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE;oBAC7C,OAAO;wBACL,GAAG,mBAAmB;wBACtB,IAAI,EAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC;wBACzC,IAAI,EAAE,WAAW,CAAC,mBAAmB,CAAC,OAAO,CAAC;wBAC9C,MAAM,EAAE,SAAS;wBACjB,gBAAgB,EAAE,EAAE;wBACpB,QAAQ;wBACR,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE;wBACxB,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;wBACzB,KAAK,EAAE,CAAC;wBACR,SAAS,EAAE,CAAC,GAAG,CAAC;qBACI,CAAC;gBACzB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CACH,CAAC;YACF,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/D,CAAC;QACD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;KACxE,CAAC,CAAC;IAEH,gCAAgC;IAChC,MAAM,kBAAkB,GAAG,aAAa,CAAC;QACvC,IAAI,EAAE;YACJ,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;YAClB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC9B,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAChC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAClC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACvC,cAAc,EAAE,eAAe;YAC/B,yDAAyD;YACzD,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACxC;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;gBAClC,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;YACtE,IAAI,CAAC,UAAU;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YACrE,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;YAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;YAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC;YACrE,IAAI,eAAe,EAAE,CAAC;gBACpB,cAAc,CAAC,cAAc;oBAC3B,CAAC,cAAc,CAAC,cAAc,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE;gBACrD,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,eAAe;gBACf,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,cAAc,CAAC;aAC7C,CAAC,CAAC;YACH,MAAM,kBAAkB,GAAG,QAAQ,CAAC,SAAS,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,eAAe,CACjC,CAAC;YACF,IAAI,kBAAkB,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC9B,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,aAAa;QACb,SAAS;QACT,WAAW;QACX,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,YAAY;QACZ,kBAAkB;KACnB,CAAC;AACJ,CAAC"}
|
package/dist/client/files.d.ts
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import type { FilePart, ImagePart, ModelMessage } from "ai";
|
|
2
|
-
import type { Id } from "../component/_generated/dataModel.js";
|
|
3
|
-
import type { ActionCtx, AgentComponent, MutationCtx, QueryCtx } from "./types.js";
|
|
4
|
-
import type { Message } from "../validators.js";
|
|
5
|
-
import type { StorageReader } from "convex/server";
|
|
6
|
-
export declare const MAX_FILE_SIZE: number;
|
|
7
|
-
type File = {
|
|
8
|
-
url: string;
|
|
9
|
-
fileId: string;
|
|
10
|
-
storageId: Id<"_storage">;
|
|
11
|
-
hash: string;
|
|
12
|
-
filename: string | undefined;
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Store a file in the file storage and return the URL and fileId.
|
|
16
|
-
* @param ctx A ctx object from an action.
|
|
17
|
-
* @param component The agent component.
|
|
18
|
-
* @param blob The blob to store.
|
|
19
|
-
* @param args.filename The filename to store.
|
|
20
|
-
* @param args.sha256 The sha256 hash of the file. If not provided, it will be
|
|
21
|
-
* computed. However, to ensure no corruption during transfer, you can
|
|
22
|
-
* calculate this on the client to enforce integrity.
|
|
23
|
-
* @returns The URL, fileId, and storageId of the stored file.
|
|
24
|
-
*/
|
|
25
|
-
export declare function storeFile(ctx: ActionCtx | MutationCtx, component: AgentComponent, blob: Blob, { filename, sha256 }?: {
|
|
26
|
-
filename?: string;
|
|
27
|
-
sha256?: string;
|
|
28
|
-
}): Promise<{
|
|
29
|
-
file: File;
|
|
30
|
-
filePart: FilePart;
|
|
31
|
-
imagePart: ImagePart | undefined;
|
|
32
|
-
}>;
|
|
33
|
-
/**
|
|
34
|
-
* Get file metadata from the component.
|
|
35
|
-
* This also returns filePart (and imagePart if the file is an image),
|
|
36
|
-
* which are useful to construct a ModelMessage like
|
|
37
|
-
* ```ts
|
|
38
|
-
* const { filePart, imagePart } = await getFile(ctx, components.agent, fileId);
|
|
39
|
-
* const message: UserMessage = {
|
|
40
|
-
* role: "user",
|
|
41
|
-
* content: [imagePart ?? filePart],
|
|
42
|
-
* };
|
|
43
|
-
* ```
|
|
44
|
-
* @param ctx A ctx object from an action or query.
|
|
45
|
-
* @param component The agent component, usually `components.agent`.
|
|
46
|
-
* @param fileId The fileId of the file to get.
|
|
47
|
-
* @returns The file metadata and content parts.
|
|
48
|
-
*/
|
|
49
|
-
export declare function getFile(ctx: ActionCtx | (QueryCtx & {
|
|
50
|
-
storage: StorageReader;
|
|
51
|
-
}), component: AgentComponent, fileId: string): Promise<{
|
|
52
|
-
file: {
|
|
53
|
-
fileId: string;
|
|
54
|
-
url: string;
|
|
55
|
-
storageId: Id<"_storage">;
|
|
56
|
-
hash: string;
|
|
57
|
-
filename: string | undefined;
|
|
58
|
-
};
|
|
59
|
-
filePart: FilePart;
|
|
60
|
-
imagePart: ImagePart | undefined;
|
|
61
|
-
}>;
|
|
62
|
-
/**
|
|
63
|
-
* Process messages to inline file and image URLs that point to localhost
|
|
64
|
-
* by converting them to base64. This solves the problem of LLMs not being
|
|
65
|
-
* able to access localhost URLs.
|
|
66
|
-
*/
|
|
67
|
-
export declare function inlineMessagesFiles<T extends ModelMessage | Message>(messages: T[]): Promise<T[]>;
|
|
68
|
-
export {};
|
|
69
|
-
//# sourceMappingURL=files.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/client/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,QAAQ,EACR,SAAS,EACT,YAAY,EAEb,MAAM,IAAI,CAAC;AACZ,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,sCAAsC,CAAC;AAC/D,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,WAAW,EACX,QAAQ,EACT,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,eAAO,MAAM,aAAa,QAAY,CAAC;AAEvC,KAAK,IAAI,GAAG;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,SAAS,GAAG,WAAW,EAC5B,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,IAAI,EACV,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GAChE,OAAO,CAAC;IACT,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;CAClC,CAAC,CAiED;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,SAAS,GAAG,CAAC,QAAQ,GAAG;IAAE,OAAO,EAAE,aAAa,CAAA;CAAE,CAAC,EACxD,SAAS,EAAE,cAAc,EACzB,MAAM,EAAE,MAAM;;;;mBAiBmB,EAAE,CAAC,UAAU,CAAC;;;;cAWlC,QAAQ;eAAa,SAAS,GAAG,SAAS;GANxD;AA4CD;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,YAAY,GAAG,OAAO,EACxE,QAAQ,EAAE,CAAC,EAAE,GACZ,OAAO,CAAC,CAAC,EAAE,CAAC,CA2Cd"}
|
package/dist/client/files.js
DELETED
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
import { assert } from "convex-helpers";
|
|
2
|
-
export const MAX_FILE_SIZE = 1024 * 64;
|
|
3
|
-
/**
|
|
4
|
-
* Store a file in the file storage and return the URL and fileId.
|
|
5
|
-
* @param ctx A ctx object from an action.
|
|
6
|
-
* @param component The agent component.
|
|
7
|
-
* @param blob The blob to store.
|
|
8
|
-
* @param args.filename The filename to store.
|
|
9
|
-
* @param args.sha256 The sha256 hash of the file. If not provided, it will be
|
|
10
|
-
* computed. However, to ensure no corruption during transfer, you can
|
|
11
|
-
* calculate this on the client to enforce integrity.
|
|
12
|
-
* @returns The URL, fileId, and storageId of the stored file.
|
|
13
|
-
*/
|
|
14
|
-
export async function storeFile(ctx, component, blob, { filename, sha256 } = {}) {
|
|
15
|
-
if (!("runAction" in ctx) || !("storage" in ctx)) {
|
|
16
|
-
throw new Error("You're trying to save a file that's too large in a mutation / workflow. " +
|
|
17
|
-
"You can store the file in file storage from an action first, then pass a URL instead. " +
|
|
18
|
-
"To have the agent component track the file, you can use `saveFile` from an action then use the fileId with getFile in the mutation. " +
|
|
19
|
-
"Read more in the docs.");
|
|
20
|
-
}
|
|
21
|
-
const hash = sha256 ||
|
|
22
|
-
Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256", await blob.slice().arrayBuffer())))
|
|
23
|
-
.map((b) => b.toString(16).padStart(2, "0"))
|
|
24
|
-
.join("");
|
|
25
|
-
const reused = await ctx.runMutation(component.files.useExistingFile, {
|
|
26
|
-
hash,
|
|
27
|
-
filename,
|
|
28
|
-
});
|
|
29
|
-
if (reused) {
|
|
30
|
-
const url = (await ctx.storage.getUrl(reused.storageId));
|
|
31
|
-
return {
|
|
32
|
-
...getParts(url, blob.type, filename),
|
|
33
|
-
file: {
|
|
34
|
-
url,
|
|
35
|
-
fileId: reused.fileId,
|
|
36
|
-
storageId: reused.storageId,
|
|
37
|
-
hash,
|
|
38
|
-
filename,
|
|
39
|
-
},
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
const newStorageId = await ctx.storage.store(blob);
|
|
43
|
-
if (sha256) {
|
|
44
|
-
const metadata = await ctx.storage.getMetadata(newStorageId);
|
|
45
|
-
if (metadata?.sha256 !== sha256) {
|
|
46
|
-
throw new Error("Hash mismatch: " + metadata?.sha256 + " != " + sha256);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
const { fileId, storageId } = await ctx.runMutation(component.files.addFile, {
|
|
50
|
-
storageId: newStorageId,
|
|
51
|
-
hash,
|
|
52
|
-
filename,
|
|
53
|
-
mediaType: blob.type,
|
|
54
|
-
});
|
|
55
|
-
const url = (await ctx.storage.getUrl(storageId));
|
|
56
|
-
if (storageId !== newStorageId) {
|
|
57
|
-
// We're re-using another file's storageId
|
|
58
|
-
// Because we try to reuse the file above, this should be very very rare
|
|
59
|
-
// and only in the case of racing to check then store the file.
|
|
60
|
-
await ctx.storage.delete(newStorageId);
|
|
61
|
-
}
|
|
62
|
-
return {
|
|
63
|
-
...getParts(url, blob.type, filename),
|
|
64
|
-
file: {
|
|
65
|
-
url,
|
|
66
|
-
fileId,
|
|
67
|
-
storageId: storageId,
|
|
68
|
-
hash,
|
|
69
|
-
filename,
|
|
70
|
-
},
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Get file metadata from the component.
|
|
75
|
-
* This also returns filePart (and imagePart if the file is an image),
|
|
76
|
-
* which are useful to construct a ModelMessage like
|
|
77
|
-
* ```ts
|
|
78
|
-
* const { filePart, imagePart } = await getFile(ctx, components.agent, fileId);
|
|
79
|
-
* const message: UserMessage = {
|
|
80
|
-
* role: "user",
|
|
81
|
-
* content: [imagePart ?? filePart],
|
|
82
|
-
* };
|
|
83
|
-
* ```
|
|
84
|
-
* @param ctx A ctx object from an action or query.
|
|
85
|
-
* @param component The agent component, usually `components.agent`.
|
|
86
|
-
* @param fileId The fileId of the file to get.
|
|
87
|
-
* @returns The file metadata and content parts.
|
|
88
|
-
*/
|
|
89
|
-
export async function getFile(ctx, component, fileId) {
|
|
90
|
-
const file = await ctx.runQuery(component.files.get, { fileId });
|
|
91
|
-
if (!file) {
|
|
92
|
-
throw new Error(`File not found in component: ${fileId}`);
|
|
93
|
-
}
|
|
94
|
-
const url = await ctx.storage.getUrl(file.storageId);
|
|
95
|
-
if (!url) {
|
|
96
|
-
throw new Error(`File not found in storage: ${file.storageId}`);
|
|
97
|
-
}
|
|
98
|
-
// Support both mediaType (preferred) and mimeType (deprecated)
|
|
99
|
-
const mediaType = file.mediaType ?? file.mimeType ?? "";
|
|
100
|
-
return {
|
|
101
|
-
...getParts(url, mediaType, file.filename),
|
|
102
|
-
file: {
|
|
103
|
-
fileId,
|
|
104
|
-
url,
|
|
105
|
-
storageId: file.storageId,
|
|
106
|
-
hash: file.hash,
|
|
107
|
-
filename: file.filename,
|
|
108
|
-
},
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
function getParts(url, mediaType, filename) {
|
|
112
|
-
const filePart = {
|
|
113
|
-
type: "file",
|
|
114
|
-
data: new URL(url),
|
|
115
|
-
mediaType,
|
|
116
|
-
filename,
|
|
117
|
-
};
|
|
118
|
-
const imagePart = mediaType.startsWith("image/")
|
|
119
|
-
? { type: "image", image: new URL(url), mediaType }
|
|
120
|
-
: undefined;
|
|
121
|
-
return { filePart, imagePart };
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Check if a URL points to localhost
|
|
125
|
-
*/
|
|
126
|
-
function isLocalhostUrl(url) {
|
|
127
|
-
return (url.hostname === "localhost" ||
|
|
128
|
-
url.hostname === "127.0.0.1" ||
|
|
129
|
-
url.hostname === "::1" ||
|
|
130
|
-
url.hostname === "0.0.0.0");
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Download a file from a URL
|
|
134
|
-
*/
|
|
135
|
-
async function downloadFile(url) {
|
|
136
|
-
// Fetch the file
|
|
137
|
-
const response = await fetch(url);
|
|
138
|
-
if (!response.ok) {
|
|
139
|
-
throw new Error(`Failed to fetch ${url}: ${response.statusText}`);
|
|
140
|
-
}
|
|
141
|
-
return await response.arrayBuffer();
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Process messages to inline file and image URLs that point to localhost
|
|
145
|
-
* by converting them to base64. This solves the problem of LLMs not being
|
|
146
|
-
* able to access localhost URLs.
|
|
147
|
-
*/
|
|
148
|
-
export async function inlineMessagesFiles(messages) {
|
|
149
|
-
// Process each message to convert localhost URLs to base64
|
|
150
|
-
return Promise.all(messages.map(async (message) => {
|
|
151
|
-
if ((message.role !== "user" && message.role !== "assistant") ||
|
|
152
|
-
typeof message.content === "string" ||
|
|
153
|
-
!Array.isArray(message.content)) {
|
|
154
|
-
return message;
|
|
155
|
-
}
|
|
156
|
-
const processedContent = await Promise.all(message.content.map(async (part) => {
|
|
157
|
-
if (part.type === "image" && part.image instanceof URL) {
|
|
158
|
-
assert(message.role === "user", "Images can only be in user messages");
|
|
159
|
-
if (isLocalhostUrl(part.image)) {
|
|
160
|
-
const imageData = await downloadFile(part.image);
|
|
161
|
-
return { ...part, image: imageData };
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
// Handle file parts
|
|
165
|
-
if (part.type === "file" && part.data instanceof URL) {
|
|
166
|
-
if (isLocalhostUrl(part.data)) {
|
|
167
|
-
const fileData = await downloadFile(part.data);
|
|
168
|
-
return { ...part, data: fileData };
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
return part;
|
|
172
|
-
}));
|
|
173
|
-
if (message.role === "user") {
|
|
174
|
-
return { ...message, content: processedContent };
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
return { ...message, content: processedContent };
|
|
178
|
-
}
|
|
179
|
-
}));
|
|
180
|
-
}
|
|
181
|
-
//# sourceMappingURL=files.js.map
|
package/dist/client/files.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/client/files.ts"],"names":[],"mappings":"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"}
|