@convex-dev/agent 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/UIMessages.d.ts +46 -0
  2. package/dist/UIMessages.d.ts.map +1 -0
  3. package/dist/UIMessages.js +634 -0
  4. package/dist/UIMessages.js.map +1 -0
  5. package/dist/client/createTool.d.ts +167 -0
  6. package/dist/client/createTool.d.ts.map +1 -0
  7. package/dist/client/createTool.js +116 -0
  8. package/dist/client/createTool.js.map +1 -0
  9. package/dist/client/defaultComponent.d.ts +11 -0
  10. package/dist/client/defaultComponent.d.ts.map +1 -0
  11. package/dist/client/defaultComponent.js +7 -0
  12. package/dist/client/defaultComponent.js.map +1 -0
  13. package/dist/client/definePlaygroundAPI.d.ts +1725 -0
  14. package/dist/client/definePlaygroundAPI.d.ts.map +1 -0
  15. package/dist/client/definePlaygroundAPI.js +271 -0
  16. package/dist/client/definePlaygroundAPI.js.map +1 -0
  17. package/dist/client/files.d.ts +69 -0
  18. package/dist/client/files.d.ts.map +1 -0
  19. package/dist/client/files.js +181 -0
  20. package/dist/client/files.js.map +1 -0
  21. package/dist/client/index.d.ts +2091 -0
  22. package/dist/client/index.d.ts.map +1 -0
  23. package/dist/client/index.js +929 -0
  24. package/dist/client/index.js.map +1 -0
  25. package/dist/client/messages.d.ts +461 -0
  26. package/dist/client/messages.d.ts.map +1 -0
  27. package/dist/client/messages.js +106 -0
  28. package/dist/client/messages.js.map +1 -0
  29. package/dist/client/mockModel.d.ts +42 -0
  30. package/dist/client/mockModel.d.ts.map +1 -0
  31. package/dist/client/mockModel.js +182 -0
  32. package/dist/client/mockModel.js.map +1 -0
  33. package/dist/client/saveInputMessages.d.ts +20 -0
  34. package/dist/client/saveInputMessages.d.ts.map +1 -0
  35. package/dist/client/saveInputMessages.js +58 -0
  36. package/dist/client/saveInputMessages.js.map +1 -0
  37. package/dist/client/search.d.ts +493 -0
  38. package/dist/client/search.d.ts.map +1 -0
  39. package/dist/client/search.js +435 -0
  40. package/dist/client/search.js.map +1 -0
  41. package/dist/client/start.d.ts +84 -0
  42. package/dist/client/start.d.ts.map +1 -0
  43. package/dist/client/start.js +185 -0
  44. package/dist/client/start.js.map +1 -0
  45. package/dist/client/streamText.d.ts +46 -0
  46. package/dist/client/streamText.d.ts.map +1 -0
  47. package/dist/client/streamText.js +127 -0
  48. package/dist/client/streamText.js.map +1 -0
  49. package/dist/client/streaming.d.ts +3778 -0
  50. package/dist/client/streaming.d.ts.map +1 -0
  51. package/dist/client/streaming.js +330 -0
  52. package/dist/client/streaming.js.map +1 -0
  53. package/dist/client/threads.d.ts +46 -0
  54. package/dist/client/threads.d.ts.map +1 -0
  55. package/dist/client/threads.js +49 -0
  56. package/dist/client/threads.js.map +1 -0
  57. package/dist/client/types.d.ts +461 -0
  58. package/dist/client/types.d.ts.map +1 -0
  59. package/dist/client/types.js +2 -0
  60. package/dist/client/types.js.map +1 -0
  61. package/dist/client/utils.d.ts +4 -0
  62. package/dist/client/utils.d.ts.map +1 -0
  63. package/dist/client/utils.js +21 -0
  64. package/dist/client/utils.js.map +1 -0
  65. package/dist/component/_generated/api.d.ts +48 -0
  66. package/dist/component/_generated/api.d.ts.map +1 -0
  67. package/dist/component/_generated/api.js +31 -0
  68. package/dist/component/_generated/api.js.map +1 -0
  69. package/dist/component/_generated/component.d.ts +3120 -0
  70. package/dist/component/_generated/component.d.ts.map +1 -0
  71. package/dist/component/_generated/component.js +11 -0
  72. package/dist/component/_generated/component.js.map +1 -0
  73. package/dist/component/_generated/dataModel.d.ts +46 -0
  74. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  75. package/dist/component/_generated/dataModel.js +11 -0
  76. package/dist/component/_generated/dataModel.js.map +1 -0
  77. package/dist/component/_generated/server.d.ts +121 -0
  78. package/dist/component/_generated/server.d.ts.map +1 -0
  79. package/dist/component/_generated/server.js +78 -0
  80. package/dist/component/_generated/server.js.map +1 -0
  81. package/dist/component/apiKeys.d.ts +11 -0
  82. package/dist/component/apiKeys.d.ts.map +1 -0
  83. package/dist/component/apiKeys.js +69 -0
  84. package/dist/component/apiKeys.js.map +1 -0
  85. package/dist/component/convex.config.d.ts +3 -0
  86. package/dist/component/convex.config.d.ts.map +1 -0
  87. package/dist/component/convex.config.js +3 -0
  88. package/dist/component/convex.config.js.map +1 -0
  89. package/dist/component/files.d.ts +97 -0
  90. package/dist/component/files.d.ts.map +1 -0
  91. package/dist/component/files.js +190 -0
  92. package/dist/component/files.js.map +1 -0
  93. package/dist/component/messages.d.ts +3851 -0
  94. package/dist/component/messages.d.ts.map +1 -0
  95. package/dist/component/messages.js +757 -0
  96. package/dist/component/messages.js.map +1 -0
  97. package/dist/component/schema.d.ts +8029 -0
  98. package/dist/component/schema.d.ts.map +1 -0
  99. package/dist/component/schema.js +147 -0
  100. package/dist/component/schema.js.map +1 -0
  101. package/dist/component/streams.d.ts +128 -0
  102. package/dist/component/streams.d.ts.map +1 -0
  103. package/dist/component/streams.js +413 -0
  104. package/dist/component/streams.js.map +1 -0
  105. package/dist/component/threads.d.ts +115 -0
  106. package/dist/component/threads.d.ts.map +1 -0
  107. package/dist/component/threads.js +208 -0
  108. package/dist/component/threads.js.map +1 -0
  109. package/dist/component/users.d.ts +52 -0
  110. package/dist/component/users.d.ts.map +1 -0
  111. package/dist/component/users.js +229 -0
  112. package/dist/component/users.js.map +1 -0
  113. package/dist/component/vector/index.d.ts +61 -0
  114. package/dist/component/vector/index.d.ts.map +1 -0
  115. package/dist/component/vector/index.js +146 -0
  116. package/dist/component/vector/index.js.map +1 -0
  117. package/dist/component/vector/tables.d.ts +58 -0
  118. package/dist/component/vector/tables.d.ts.map +1 -0
  119. package/dist/component/vector/tables.js +56 -0
  120. package/dist/component/vector/tables.js.map +1 -0
  121. package/dist/deltas.d.ts +43 -0
  122. package/dist/deltas.d.ts.map +1 -0
  123. package/dist/deltas.js +446 -0
  124. package/dist/deltas.js.map +1 -0
  125. package/dist/mapping.d.ts +76 -0
  126. package/dist/mapping.d.ts.map +1 -0
  127. package/dist/mapping.js +720 -0
  128. package/dist/mapping.js.map +1 -0
  129. package/dist/react/SmoothText.d.ts +5 -0
  130. package/dist/react/SmoothText.d.ts.map +1 -0
  131. package/dist/react/SmoothText.js +6 -0
  132. package/dist/react/SmoothText.js.map +1 -0
  133. package/dist/react/index.d.ts +25 -0
  134. package/dist/react/index.d.ts.map +1 -0
  135. package/dist/react/index.js +70 -0
  136. package/dist/react/index.js.map +1 -0
  137. package/dist/react/optimisticallySendMessage.d.ts +42 -0
  138. package/dist/react/optimisticallySendMessage.d.ts.map +1 -0
  139. package/dist/react/optimisticallySendMessage.js +74 -0
  140. package/dist/react/optimisticallySendMessage.js.map +1 -0
  141. package/dist/react/types.d.ts +12 -0
  142. package/dist/react/types.d.ts.map +1 -0
  143. package/dist/react/types.js +2 -0
  144. package/dist/react/types.js.map +1 -0
  145. package/dist/react/useDeltaStreams.d.ts +10 -0
  146. package/dist/react/useDeltaStreams.d.ts.map +1 -0
  147. package/dist/react/useDeltaStreams.js +106 -0
  148. package/dist/react/useDeltaStreams.js.map +1 -0
  149. package/dist/react/useSmoothText.d.ts +27 -0
  150. package/dist/react/useSmoothText.d.ts.map +1 -0
  151. package/dist/react/useSmoothText.js +68 -0
  152. package/dist/react/useSmoothText.js.map +1 -0
  153. package/dist/react/useStreamingUIMessages.d.ts +22 -0
  154. package/dist/react/useStreamingUIMessages.d.ts.map +1 -0
  155. package/dist/react/useStreamingUIMessages.js +92 -0
  156. package/dist/react/useStreamingUIMessages.js.map +1 -0
  157. package/dist/react/useThreadMessages.d.ts +104 -0
  158. package/dist/react/useThreadMessages.d.ts.map +1 -0
  159. package/dist/react/useThreadMessages.js +148 -0
  160. package/dist/react/useThreadMessages.js.map +1 -0
  161. package/dist/react/useUIMessages.d.ts +96 -0
  162. package/dist/react/useUIMessages.d.ts.map +1 -0
  163. package/dist/react/useUIMessages.js +108 -0
  164. package/dist/react/useUIMessages.js.map +1 -0
  165. package/dist/shared.d.ts +26 -0
  166. package/dist/shared.d.ts.map +1 -0
  167. package/dist/shared.js +67 -0
  168. package/dist/shared.js.map +1 -0
  169. package/dist/validators.d.ts +24516 -0
  170. package/dist/validators.d.ts.map +1 -0
  171. package/dist/validators.js +475 -0
  172. package/dist/validators.js.map +1 -0
  173. package/package.json +39 -39
  174. package/src/UIMessages.ts +0 -9
  175. package/src/client/approval.test.ts +144 -0
  176. package/src/client/index.ts +17 -9
  177. package/src/client/search.ts +0 -29
  178. package/src/client/start.ts +2 -2
  179. package/src/client/streamText.ts +9 -0
  180. package/src/client/streaming.ts +30 -23
  181. package/src/component/_generated/dataModel.ts +1 -1
  182. package/src/component/_generated/server.ts +0 -5
  183. package/src/mapping.ts +38 -22
  184. package/src/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
@@ -0,0 +1,208 @@
1
+ import { assert, omit, pick } from "convex-helpers";
2
+ import { paginator } from "convex-helpers/server/pagination";
3
+ import { partial } from "convex-helpers/validators";
4
+ import { paginationOptsValidator } from "convex/server";
5
+ import { vThreadDoc } from "../client/index.js";
6
+ import { vPaginationResult } from "../validators.js";
7
+ import { api, internal } from "./_generated/api.js";
8
+ import { action, internalMutation, mutation, query, } from "./_generated/server.js";
9
+ import { deleteMessage } from "./messages.js";
10
+ import { schema, v } from "./schema.js";
11
+ import { deleteStreamsPageForThreadId } from "./streams.js";
12
+ function publicThreadOrNull(thread) {
13
+ if (thread === null) {
14
+ return null;
15
+ }
16
+ return publicThread(thread);
17
+ }
18
+ function publicThread(thread) {
19
+ return omit(thread, ["defaultSystemPrompt", "parentThreadIds", "order"]);
20
+ }
21
+ export const getThread = query({
22
+ args: { threadId: v.id("threads") },
23
+ handler: async (ctx, args) => {
24
+ return publicThreadOrNull(await ctx.db.get(args.threadId));
25
+ },
26
+ returns: v.union(vThreadDoc, v.null()),
27
+ });
28
+ export const listThreadsByUserId = query({
29
+ args: {
30
+ userId: v.optional(v.string()),
31
+ order: v.optional(v.union(v.literal("asc"), v.literal("desc"))),
32
+ paginationOpts: v.optional(paginationOptsValidator),
33
+ },
34
+ handler: async (ctx, args) => {
35
+ const threads = await paginator(ctx.db, schema)
36
+ .query("threads")
37
+ .withIndex("userId", (q) => q.eq("userId", args.userId))
38
+ .order(args.order ?? "desc")
39
+ .paginate(args.paginationOpts ?? { cursor: null, numItems: 100 });
40
+ return {
41
+ ...threads,
42
+ page: threads.page.map(publicThread),
43
+ };
44
+ },
45
+ returns: vPaginationResult(vThreadDoc),
46
+ });
47
+ const vThread = schema.tables.threads.validator;
48
+ export const createThread = mutation({
49
+ args: omit(vThread.fields, ["order", "status"]),
50
+ handler: async (ctx, args) => {
51
+ const threadId = await ctx.db.insert("threads", {
52
+ ...args,
53
+ status: "active",
54
+ });
55
+ return publicThread((await ctx.db.get(threadId)));
56
+ },
57
+ returns: vThreadDoc,
58
+ });
59
+ export const threadFieldsSupportingPatch = [
60
+ "title",
61
+ "summary",
62
+ "status",
63
+ "userId",
64
+ ];
65
+ export const updateThread = mutation({
66
+ args: {
67
+ threadId: v.id("threads"),
68
+ patch: v.object(partial(pick(vThread.fields, threadFieldsSupportingPatch))),
69
+ },
70
+ handler: async (ctx, args) => {
71
+ const thread = await ctx.db.get(args.threadId);
72
+ assert(thread, `Thread ${args.threadId} not found`);
73
+ await ctx.db.patch(args.threadId, args.patch);
74
+ return publicThread((await ctx.db.get(args.threadId)));
75
+ },
76
+ returns: vThreadDoc,
77
+ });
78
+ export const searchThreadTitles = query({
79
+ args: {
80
+ query: v.string(),
81
+ userId: v.optional(v.union(v.string(), v.null())),
82
+ limit: v.number(),
83
+ },
84
+ handler: async (ctx, args) => {
85
+ const threads = await ctx.db
86
+ .query("threads")
87
+ .withSearchIndex("title", (q) => args.userId
88
+ ? q.search("title", args.query).eq("userId", args.userId ?? undefined)
89
+ : q.search("title", args.query))
90
+ .take(args.limit);
91
+ return threads.map(publicThread);
92
+ },
93
+ returns: v.array(vThreadDoc),
94
+ });
95
+ // When we expose this, we need to also hide all the messages and steps
96
+ // export const archiveThread = mutation({
97
+ // args: { threadId: v.id("threads") },
98
+ // handler: async (ctx, args) => {
99
+ // const thread = await ctx.db.get(args.threadId);
100
+ // assert(thread, `Thread ${args.threadId} not found`);
101
+ // await ctx.db.patch(args.threadId, { status: "archived" });
102
+ // return publicThread((await ctx.db.get(args.threadId))!);
103
+ // },
104
+ // returns: vThreadDoc,
105
+ // });
106
+ // TODO: delete thread
107
+ /**
108
+ * Use this to delete a thread and everything it contains.
109
+ * It will try to delete all pages synchronously.
110
+ * If it times out or fails, you'll have to run it again.
111
+ */
112
+ export const deleteAllForThreadIdSync = action({
113
+ args: { threadId: v.id("threads"), limit: v.optional(v.number()) },
114
+ handler: async (ctx, args) => {
115
+ let cursor = undefined;
116
+ while (true) {
117
+ const result = await ctx.runMutation(internal.threads._deletePageForThreadId, { threadId: args.threadId, cursor, limit: args.limit });
118
+ if (result.isDone) {
119
+ break;
120
+ }
121
+ cursor = result.cursor;
122
+ }
123
+ await ctx.runAction(api.streams.deleteAllStreamsForThreadIdSync, {
124
+ threadId: args.threadId,
125
+ });
126
+ },
127
+ returns: v.null(),
128
+ });
129
+ const deleteThreadArgs = {
130
+ threadId: v.id("threads"),
131
+ cursor: v.optional(v.string()),
132
+ messagesDone: v.optional(v.boolean()),
133
+ streamsDone: v.optional(v.boolean()),
134
+ streamOrder: v.optional(v.number()),
135
+ deltaCursor: v.optional(v.string()),
136
+ limit: v.optional(v.number()),
137
+ };
138
+ const deleteThreadReturns = {
139
+ cursor: v.string(),
140
+ isDone: v.boolean(),
141
+ };
142
+ export const _deletePageForThreadId = internalMutation({
143
+ args: deleteThreadArgs,
144
+ handler: deletePageForThreadIdHandler,
145
+ returns: deleteThreadReturns,
146
+ });
147
+ /**
148
+ * Use this to delete a thread and everything it contains.
149
+ * It will continue deleting pages asynchronously.
150
+ */
151
+ export const deleteAllForThreadIdAsync = mutation({
152
+ args: deleteThreadArgs,
153
+ handler: async (ctx, args) => {
154
+ let messagesResult = {
155
+ isDone: args.messagesDone ?? false,
156
+ cursor: args.cursor,
157
+ };
158
+ if (!args.messagesDone) {
159
+ messagesResult = await deletePageForThreadIdHandler(ctx, args);
160
+ }
161
+ let streamResult = {
162
+ isDone: args.streamsDone ?? false,
163
+ streamOrder: args.streamOrder,
164
+ deltaCursor: args.deltaCursor,
165
+ };
166
+ if (!args.streamsDone) {
167
+ streamResult = await deleteStreamsPageForThreadId(ctx, {
168
+ threadId: args.threadId,
169
+ streamOrder: args.streamOrder,
170
+ deltaCursor: args.deltaCursor,
171
+ });
172
+ }
173
+ const isDone = messagesResult.isDone && streamResult.isDone;
174
+ if (!isDone) {
175
+ await ctx.scheduler.runAfter(0, api.threads.deleteAllForThreadIdAsync, {
176
+ threadId: args.threadId,
177
+ cursor: messagesResult.cursor,
178
+ messagesDone: messagesResult.isDone,
179
+ streamsDone: streamResult.isDone,
180
+ streamOrder: streamResult.streamOrder,
181
+ deltaCursor: streamResult.deltaCursor,
182
+ });
183
+ }
184
+ return { isDone };
185
+ },
186
+ returns: v.object({ isDone: v.boolean() }),
187
+ });
188
+ async function deletePageForThreadIdHandler(ctx, args) {
189
+ const messages = await paginator(ctx.db, schema)
190
+ .query("messages")
191
+ .withIndex("threadId_status_tool_order_stepOrder", (q) => q.eq("threadId", args.threadId))
192
+ .paginate({
193
+ numItems: args.limit ?? 100,
194
+ cursor: args.cursor ?? null,
195
+ });
196
+ await Promise.all(messages.page.map((m) => deleteMessage(ctx, m)));
197
+ if (messages.isDone) {
198
+ const thread = await ctx.db.get(args.threadId);
199
+ if (thread) {
200
+ await ctx.db.delete(args.threadId);
201
+ }
202
+ }
203
+ return {
204
+ cursor: messages.continueCursor,
205
+ isDone: messages.isDone,
206
+ };
207
+ }
208
+ //# sourceMappingURL=threads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../src/component/threads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ export declare const listUsersWithThreads: import("convex/server").RegisteredQuery<"public", {
2
+ paginationOpts: {
3
+ id?: number;
4
+ endCursor?: string | null;
5
+ maximumRowsRead?: number;
6
+ maximumBytesRead?: number;
7
+ numItems: number;
8
+ cursor: string | null;
9
+ };
10
+ }, Promise<{
11
+ page: string[];
12
+ isDone: boolean;
13
+ continueCursor: import("convex/server").Cursor;
14
+ splitCursor?: import("convex/server").Cursor | null;
15
+ pageStatus?: "SplitRecommended" | "SplitRequired" | null;
16
+ }>>;
17
+ export declare const deleteAllForUserId: import("convex/server").RegisteredAction<"public", {
18
+ userId: string;
19
+ }, Promise<void>>;
20
+ export declare const deleteAllForUserIdAsync: import("convex/server").RegisteredMutation<"public", {
21
+ userId: string;
22
+ }, Promise<boolean>>;
23
+ export declare const _deleteAllForUserIdAsync: import("convex/server").RegisteredMutation<"internal", {
24
+ deltaCursor?: string | undefined;
25
+ streamOrder?: number | undefined;
26
+ streamsInProgress?: boolean | undefined;
27
+ userId: string;
28
+ messagesCursor: string | null;
29
+ threadsCursor: string | null;
30
+ threadInProgress: import("convex/values").GenericId<"threads"> | null;
31
+ }, Promise<boolean>>;
32
+ export declare const _deletePageForUserId: import("convex/server").RegisteredMutation<"internal", {
33
+ deltaCursor?: string | undefined;
34
+ streamOrder?: number | undefined;
35
+ streamsInProgress?: boolean | undefined;
36
+ userId: string;
37
+ messagesCursor: string | null;
38
+ threadsCursor: string | null;
39
+ threadInProgress: import("convex/values").GenericId<"threads"> | null;
40
+ }, Promise<{
41
+ deltaCursor?: string | undefined;
42
+ streamOrder?: number | undefined;
43
+ streamsInProgress?: boolean | undefined;
44
+ isDone: boolean;
45
+ messagesCursor: string | null;
46
+ threadsCursor: string;
47
+ threadInProgress: import("convex/values").GenericId<"threads"> | null;
48
+ }>>;
49
+ export declare const getThreadUserId: import("convex/server").RegisteredQuery<"internal", {
50
+ threadId: import("convex/values").GenericId<"threads">;
51
+ }, Promise<string | null>>;
52
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/component/users.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;GAgB/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;iBAiC7B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;oBAiBlC,CAAC;AAuBH,eAAO,MAAM,wBAAwB;;;;;;;;oBAInC,CAAC;AAqBH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;GAI/B,CAAC;AA6GH,eAAO,MAAM,eAAe;;0BAS1B,CAAC"}
@@ -0,0 +1,229 @@
1
+ import { paginator } from "convex-helpers/server/pagination";
2
+ import { stream } from "convex-helpers/server/stream";
3
+ import { nullable } from "convex-helpers/validators";
4
+ import { paginationOptsValidator } from "convex/server";
5
+ import { vPaginationResult } from "../validators.js";
6
+ import { internal } from "./_generated/api.js";
7
+ import { action, internalMutation, internalQuery, mutation, query, } from "./_generated/server.js";
8
+ import { deleteMessage } from "./messages.js";
9
+ import { deleteStreamsPageForThreadId } from "./streams.js";
10
+ import { schema, v } from "./schema.js";
11
+ // Note: it only searches for users with threads
12
+ export const listUsersWithThreads = query({
13
+ args: {
14
+ paginationOpts: paginationOptsValidator,
15
+ },
16
+ handler: async (ctx, args) => {
17
+ const results = await stream(ctx.db, schema)
18
+ .query("threads")
19
+ .withIndex("userId", (q) => q.gt("userId", ""))
20
+ .distinct(["userId"])
21
+ .paginate(args.paginationOpts);
22
+ return {
23
+ ...results,
24
+ page: results.page.map((t) => t.userId).filter((t) => !!t),
25
+ };
26
+ },
27
+ returns: vPaginationResult(v.string()),
28
+ });
29
+ export const deleteAllForUserId = action({
30
+ args: { userId: v.string() },
31
+ handler: async (ctx, args) => {
32
+ let threadsCursor = null;
33
+ let threadInProgress = null;
34
+ let messagesCursor = null;
35
+ let streamsInProgress = false;
36
+ let streamOrder = undefined;
37
+ let deltaCursor = undefined;
38
+ let isDone = false;
39
+ while (!isDone) {
40
+ const result = await ctx.runMutation(internal.users._deletePageForUserId, {
41
+ userId: args.userId,
42
+ messagesCursor,
43
+ threadInProgress,
44
+ threadsCursor,
45
+ streamsInProgress,
46
+ streamOrder,
47
+ deltaCursor,
48
+ });
49
+ messagesCursor = result.messagesCursor;
50
+ threadInProgress = result.threadInProgress;
51
+ threadsCursor = result.threadsCursor;
52
+ streamsInProgress = result.streamsInProgress ?? false;
53
+ streamOrder = result.streamOrder;
54
+ deltaCursor = result.deltaCursor;
55
+ isDone = result.isDone;
56
+ }
57
+ },
58
+ returns: v.null(),
59
+ });
60
+ export const deleteAllForUserIdAsync = mutation({
61
+ args: {
62
+ userId: v.string(),
63
+ },
64
+ handler: async (ctx, args) => {
65
+ const isDone = await deleteAllForUserIdAsyncHandler(ctx, {
66
+ userId: args.userId,
67
+ messagesCursor: null,
68
+ threadsCursor: null,
69
+ threadInProgress: null,
70
+ streamsInProgress: false,
71
+ streamOrder: undefined,
72
+ deltaCursor: undefined,
73
+ });
74
+ return isDone;
75
+ },
76
+ returns: v.boolean(),
77
+ });
78
+ const deleteAllArgs = {
79
+ userId: v.string(),
80
+ messagesCursor: nullable(v.string()),
81
+ threadsCursor: nullable(v.string()),
82
+ threadInProgress: nullable(v.id("threads")),
83
+ streamsInProgress: v.optional(v.boolean()),
84
+ streamOrder: v.optional(v.number()),
85
+ deltaCursor: v.optional(v.string()),
86
+ };
87
+ const deleteAllReturns = {
88
+ threadsCursor: v.string(),
89
+ threadInProgress: nullable(v.id("threads")),
90
+ messagesCursor: nullable(v.string()),
91
+ streamsInProgress: v.optional(v.boolean()),
92
+ streamOrder: v.optional(v.number()),
93
+ deltaCursor: v.optional(v.string()),
94
+ isDone: v.boolean(),
95
+ };
96
+ export const _deleteAllForUserIdAsync = internalMutation({
97
+ args: deleteAllArgs,
98
+ handler: deleteAllForUserIdAsyncHandler,
99
+ returns: v.boolean(),
100
+ });
101
+ async function deleteAllForUserIdAsyncHandler(ctx, args) {
102
+ const result = await deletePageForUserId(ctx, args);
103
+ if (!result.isDone) {
104
+ await ctx.scheduler.runAfter(0, internal.users._deleteAllForUserIdAsync, {
105
+ userId: args.userId,
106
+ messagesCursor: result.messagesCursor,
107
+ threadsCursor: result.threadsCursor,
108
+ threadInProgress: result.threadInProgress,
109
+ streamsInProgress: result.streamsInProgress ?? false,
110
+ streamOrder: result.streamOrder,
111
+ deltaCursor: result.deltaCursor,
112
+ });
113
+ }
114
+ return result.isDone;
115
+ }
116
+ export const _deletePageForUserId = internalMutation({
117
+ args: deleteAllArgs,
118
+ handler: deletePageForUserId,
119
+ returns: deleteAllReturns,
120
+ });
121
+ async function deletePageForUserId(ctx, args) {
122
+ let threadInProgress = args.threadInProgress;
123
+ let threadsCursor = args.threadsCursor;
124
+ let messagesCursor = args.messagesCursor;
125
+ let streamsInProgress = args.streamsInProgress ?? false;
126
+ let streamOrder = args.streamOrder;
127
+ let deltaCursor = args.deltaCursor;
128
+ // Phase 1: Get a thread to work on if we don't have one
129
+ if (!threadsCursor || !threadInProgress) {
130
+ const threads = await paginator(ctx.db, schema)
131
+ .query("threads")
132
+ .withIndex("userId", (q) => q.eq("userId", args.userId))
133
+ .order("desc")
134
+ .paginate({
135
+ numItems: 1,
136
+ cursor: args.threadsCursor ?? null,
137
+ });
138
+ threadsCursor = threads.continueCursor;
139
+ if (threads.page.length > 0) {
140
+ threadInProgress = threads.page[0]._id;
141
+ messagesCursor = null;
142
+ streamsInProgress = false;
143
+ streamOrder = undefined;
144
+ deltaCursor = undefined;
145
+ }
146
+ else {
147
+ return {
148
+ isDone: true,
149
+ threadsCursor,
150
+ threadInProgress,
151
+ messagesCursor,
152
+ streamsInProgress,
153
+ streamOrder,
154
+ deltaCursor,
155
+ };
156
+ }
157
+ }
158
+ // Phase 2: Delete messages for the current thread
159
+ if (!streamsInProgress) {
160
+ const messages = await paginator(ctx.db, schema)
161
+ .query("messages")
162
+ .withIndex("threadId_status_tool_order_stepOrder", (q) => q.eq("threadId", threadInProgress))
163
+ .order("desc")
164
+ .paginate({
165
+ numItems: 100,
166
+ cursor: args.messagesCursor,
167
+ });
168
+ await Promise.all(messages.page.map((m) => deleteMessage(ctx, m)));
169
+ if (messages.isDone) {
170
+ // Messages are done, move to streams deletion phase
171
+ streamsInProgress = true;
172
+ messagesCursor = null;
173
+ streamOrder = undefined;
174
+ deltaCursor = undefined;
175
+ }
176
+ else {
177
+ messagesCursor = messages.continueCursor;
178
+ }
179
+ return {
180
+ messagesCursor,
181
+ threadsCursor,
182
+ threadInProgress,
183
+ streamsInProgress,
184
+ streamOrder,
185
+ deltaCursor,
186
+ isDone: false,
187
+ };
188
+ }
189
+ // Phase 3: Delete streams for the current thread
190
+ const streamResult = await deleteStreamsPageForThreadId(ctx, {
191
+ threadId: threadInProgress,
192
+ streamOrder,
193
+ deltaCursor,
194
+ });
195
+ if (streamResult.isDone) {
196
+ // Streams are done, delete the thread and reset for next thread
197
+ await ctx.db.delete(threadInProgress);
198
+ threadInProgress = null;
199
+ messagesCursor = null;
200
+ streamsInProgress = false;
201
+ streamOrder = undefined;
202
+ deltaCursor = undefined;
203
+ }
204
+ else {
205
+ // Continue with streams deletion
206
+ streamOrder = streamResult.streamOrder;
207
+ deltaCursor = streamResult.deltaCursor;
208
+ }
209
+ return {
210
+ messagesCursor,
211
+ threadsCursor,
212
+ threadInProgress,
213
+ streamsInProgress,
214
+ streamOrder,
215
+ deltaCursor,
216
+ isDone: false,
217
+ };
218
+ }
219
+ export const getThreadUserId = internalQuery({
220
+ args: {
221
+ threadId: v.id("threads"),
222
+ },
223
+ returns: v.union(v.string(), v.null()),
224
+ handler: async (ctx, args) => {
225
+ const thread = await ctx.db.get(args.threadId);
226
+ return thread?.userId ?? null;
227
+ },
228
+ });
229
+ //# sourceMappingURL=users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/component/users.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import type { Id } from "../_generated/dataModel.js";
2
+ import { type ActionCtx, type MutationCtx } from "../_generated/server.js";
3
+ import { type EmbeddingsWithoutDenormalizedFields, type VectorDimension } from "./tables.js";
4
+ export declare const paginate: import("convex/server").RegisteredQuery<"public", {
5
+ table?: string | undefined;
6
+ cursor?: string | undefined;
7
+ limit: number;
8
+ vectorDimension: 128 | 256 | 512 | 768 | 1024 | 1408 | 1536 | 2048 | 3072 | 4096;
9
+ targetModel: string;
10
+ }, Promise<{
11
+ ids: (import("convex/values").GenericId<"embeddings_128"> | import("convex/values").GenericId<"embeddings_256"> | import("convex/values").GenericId<"embeddings_512"> | import("convex/values").GenericId<"embeddings_768"> | import("convex/values").GenericId<"embeddings_1024"> | import("convex/values").GenericId<"embeddings_1408"> | import("convex/values").GenericId<"embeddings_1536"> | import("convex/values").GenericId<"embeddings_2048"> | import("convex/values").GenericId<"embeddings_3072"> | import("convex/values").GenericId<"embeddings_4096">)[];
12
+ isDone: boolean;
13
+ continueCursor: string;
14
+ }>>;
15
+ export declare const deleteBatchForThread: import("convex/server").RegisteredMutation<"public", {
16
+ cursor?: string | undefined;
17
+ threadId: string;
18
+ model: string;
19
+ limit: number;
20
+ vectorDimension: 128 | 256 | 512 | 768 | 1024 | 1408 | 1536 | 2048 | 3072 | 4096;
21
+ }, Promise<{
22
+ isDone: boolean;
23
+ continueCursor: string;
24
+ }>>;
25
+ export declare const insertBatch: import("convex/server").RegisteredMutation<"public", {
26
+ vectors: {
27
+ userId?: string | undefined;
28
+ threadId?: string | undefined;
29
+ messageId?: import("convex/values").GenericId<"messages"> | undefined;
30
+ model: string;
31
+ table: string;
32
+ vector: number[];
33
+ }[];
34
+ vectorDimension: 128 | 256 | 512 | 768 | 1024 | 1408 | 1536 | 2048 | 3072 | 4096;
35
+ }, Promise<(string & {
36
+ __tableName: "embeddings_128" | "embeddings_256" | "embeddings_512" | "embeddings_768" | "embeddings_1024" | "embeddings_1408" | "embeddings_1536" | "embeddings_2048" | "embeddings_3072" | "embeddings_4096";
37
+ })[]>>;
38
+ export declare function insertVector(ctx: MutationCtx, dimension: VectorDimension, v: EmbeddingsWithoutDenormalizedFields): Promise<import("convex/values").GenericId<"embeddings_128" | "embeddings_256" | "embeddings_512" | "embeddings_768" | "embeddings_1024" | "embeddings_1408" | "embeddings_1536" | "embeddings_2048" | "embeddings_3072" | "embeddings_4096">>;
39
+ export declare function searchVectors(ctx: ActionCtx, vector: number[], args: {
40
+ dimension: VectorDimension;
41
+ model: string;
42
+ table: string;
43
+ userId?: string;
44
+ threadId?: Id<"threads">;
45
+ searchAllMessagesForUserId?: string;
46
+ limit?: number;
47
+ }): Promise<{
48
+ _id: import("convex/values").GenericId<"embeddings_128" | "embeddings_256" | "embeddings_512" | "embeddings_768" | "embeddings_1024" | "embeddings_1408" | "embeddings_1536" | "embeddings_2048" | "embeddings_3072" | "embeddings_4096">;
49
+ _score: number;
50
+ }[]>;
51
+ export declare const updateBatch: import("convex/server").RegisteredMutation<"public", {
52
+ vectors: {
53
+ id: import("convex/values").GenericId<"embeddings_128" | "embeddings_256" | "embeddings_512" | "embeddings_768" | "embeddings_1024" | "embeddings_1408" | "embeddings_1536" | "embeddings_2048" | "embeddings_3072" | "embeddings_4096">;
54
+ model: string;
55
+ vector: number[];
56
+ }[];
57
+ }, Promise<void>>;
58
+ export declare const deleteBatch: import("convex/server").RegisteredMutation<"public", {
59
+ ids: import("convex/values").GenericId<"embeddings_128" | "embeddings_256" | "embeddings_512" | "embeddings_768" | "embeddings_1024" | "embeddings_1408" | "embeddings_1536" | "embeddings_2048" | "embeddings_3072" | "embeddings_4096">[];
60
+ }, Promise<void>>;
61
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/component/vector/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,WAAW,EAEjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,KAAK,mCAAmC,EAExC,KAAK,eAAe,EAIrB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,QAAQ;;;;;;;;;;GAiCnB,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;GAqC/B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;MAsBtB,CAAC;AAEH,wBAAsB,YAAY,CAChC,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,eAAe,EAC1B,CAAC,EAAE,mCAAmC,iPASvC;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE;IACJ,SAAS,EAAE,eAAe,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;IACzB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;;KAoBF;AAED,eAAO,MAAM,WAAW;;;;;;iBAyBtB,CAAC;AAEH,eAAO,MAAM,WAAW;;iBAQtB,CAAC"}