@convex-dev/agent 0.1.10-alpha.1 → 0.1.11

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 (175) hide show
  1. package/README.md +1 -1
  2. package/dist/esm/client/index.d.ts +10 -11
  3. package/dist/esm/client/index.d.ts.map +1 -1
  4. package/dist/esm/client/index.js +27 -28
  5. package/dist/esm/client/index.js.map +1 -1
  6. package/dist/esm/client/streaming.d.ts.map +1 -1
  7. package/dist/esm/client/streaming.js +1 -7
  8. package/dist/esm/client/streaming.js.map +1 -1
  9. package/dist/esm/component/_generated/api.d.ts +2 -13
  10. package/dist/esm/component/files.d.ts +1 -1
  11. package/dist/esm/component/files.d.ts.map +1 -1
  12. package/dist/esm/component/files.js +6 -4
  13. package/dist/esm/component/files.js.map +1 -1
  14. package/dist/esm/component/messages.d.ts +30 -30
  15. package/dist/esm/component/schema.d.ts +74 -84
  16. package/dist/esm/component/schema.d.ts.map +1 -1
  17. package/dist/esm/component/schema.js +2 -3
  18. package/dist/esm/component/schema.js.map +1 -1
  19. package/dist/esm/component/streams.d.ts +0 -7
  20. package/dist/esm/component/streams.d.ts.map +1 -1
  21. package/dist/esm/component/streams.js +22 -49
  22. package/dist/esm/component/streams.js.map +1 -1
  23. package/dist/esm/component/threads.d.ts +8 -8
  24. package/dist/esm/component/vector/tables.d.ts +3 -5
  25. package/dist/esm/component/vector/tables.d.ts.map +1 -1
  26. package/dist/esm/mapping.d.ts +4 -3
  27. package/dist/esm/mapping.d.ts.map +1 -1
  28. package/dist/esm/mapping.js +7 -5
  29. package/dist/esm/mapping.js.map +1 -1
  30. package/dist/esm/react/deltas.d.ts.map +1 -1
  31. package/dist/esm/react/deltas.js +2 -2
  32. package/dist/esm/react/deltas.js.map +1 -1
  33. package/dist/esm/react/index.d.ts +2 -4
  34. package/dist/esm/react/index.d.ts.map +1 -1
  35. package/dist/esm/react/index.js +9 -22
  36. package/dist/esm/react/index.js.map +1 -1
  37. package/dist/esm/react/optimisticallySendMessage.js +1 -1
  38. package/dist/esm/react/optimisticallySendMessage.js.map +1 -1
  39. package/dist/esm/validators.d.ts +10 -15
  40. package/dist/esm/validators.d.ts.map +1 -1
  41. package/dist/esm/validators.js +0 -2
  42. package/dist/esm/validators.js.map +1 -1
  43. package/dist/esm.tsbuildinfo +1 -1
  44. package/package.json +24 -49
  45. package/src/client/index.ts +42 -39
  46. package/src/client/streaming.ts +1 -7
  47. package/src/component/_generated/api.d.ts +2 -13
  48. package/src/component/files.ts +6 -4
  49. package/src/component/schema.ts +2 -3
  50. package/src/component/streams.ts +39 -85
  51. package/src/component/vector/tables.ts +1 -1
  52. package/src/mapping.ts +17 -6
  53. package/src/react/deltas.ts +2 -4
  54. package/src/react/index.ts +11 -23
  55. package/src/react/optimisticallySendMessage.ts +1 -1
  56. package/src/validators.ts +0 -6
  57. package/dist/commonjs/client/_generated/_ignore.d.ts +0 -1
  58. package/dist/commonjs/client/_generated/_ignore.d.ts.map +0 -1
  59. package/dist/commonjs/client/_generated/_ignore.js +0 -3
  60. package/dist/commonjs/client/_generated/_ignore.js.map +0 -1
  61. package/dist/commonjs/client/createTool.d.ts +0 -47
  62. package/dist/commonjs/client/createTool.d.ts.map +0 -1
  63. package/dist/commonjs/client/createTool.js +0 -46
  64. package/dist/commonjs/client/createTool.js.map +0 -1
  65. package/dist/commonjs/client/files.d.ts +0 -56
  66. package/dist/commonjs/client/files.d.ts.map +0 -1
  67. package/dist/commonjs/client/files.js +0 -124
  68. package/dist/commonjs/client/files.js.map +0 -1
  69. package/dist/commonjs/client/index.d.ts +0 -1356
  70. package/dist/commonjs/client/index.d.ts.map +0 -1
  71. package/dist/commonjs/client/index.js +0 -1148
  72. package/dist/commonjs/client/index.js.map +0 -1
  73. package/dist/commonjs/client/streaming.d.ts +0 -57
  74. package/dist/commonjs/client/streaming.d.ts.map +0 -1
  75. package/dist/commonjs/client/streaming.js +0 -149
  76. package/dist/commonjs/client/streaming.js.map +0 -1
  77. package/dist/commonjs/client/types.d.ts +0 -352
  78. package/dist/commonjs/client/types.d.ts.map +0 -1
  79. package/dist/commonjs/client/types.js +0 -2
  80. package/dist/commonjs/client/types.js.map +0 -1
  81. package/dist/commonjs/component/_generated/api.d.ts +0 -1949
  82. package/dist/commonjs/component/_generated/api.d.ts.map +0 -1
  83. package/dist/commonjs/component/_generated/api.js +0 -22
  84. package/dist/commonjs/component/_generated/api.js.map +0 -1
  85. package/dist/commonjs/component/_generated/dataModel.d.ts +0 -60
  86. package/dist/commonjs/component/_generated/server.d.ts +0 -149
  87. package/dist/commonjs/component/_generated/server.d.ts.map +0 -1
  88. package/dist/commonjs/component/_generated/server.js +0 -74
  89. package/dist/commonjs/component/_generated/server.js.map +0 -1
  90. package/dist/commonjs/component/apiKeys.d.ts +0 -11
  91. package/dist/commonjs/component/apiKeys.d.ts.map +0 -1
  92. package/dist/commonjs/component/apiKeys.js +0 -69
  93. package/dist/commonjs/component/apiKeys.js.map +0 -1
  94. package/dist/commonjs/component/convex.config.d.ts +0 -3
  95. package/dist/commonjs/component/convex.config.d.ts.map +0 -1
  96. package/dist/commonjs/component/convex.config.js +0 -3
  97. package/dist/commonjs/component/convex.config.js.map +0 -1
  98. package/dist/commonjs/component/files.d.ts +0 -90
  99. package/dist/commonjs/component/files.d.ts.map +0 -1
  100. package/dist/commonjs/component/files.js +0 -150
  101. package/dist/commonjs/component/files.js.map +0 -1
  102. package/dist/commonjs/component/messages.d.ts +0 -1479
  103. package/dist/commonjs/component/messages.d.ts.map +0 -1
  104. package/dist/commonjs/component/messages.js +0 -478
  105. package/dist/commonjs/component/messages.js.map +0 -1
  106. package/dist/commonjs/component/schema.d.ts +0 -4592
  107. package/dist/commonjs/component/schema.d.ts.map +0 -1
  108. package/dist/commonjs/component/schema.js +0 -165
  109. package/dist/commonjs/component/schema.js.map +0 -1
  110. package/dist/commonjs/component/streams.d.ts +0 -249
  111. package/dist/commonjs/component/streams.d.ts.map +0 -1
  112. package/dist/commonjs/component/streams.js +0 -346
  113. package/dist/commonjs/component/streams.js.map +0 -1
  114. package/dist/commonjs/component/threads.d.ts +0 -101
  115. package/dist/commonjs/component/threads.d.ts.map +0 -1
  116. package/dist/commonjs/component/threads.js +0 -185
  117. package/dist/commonjs/component/threads.js.map +0 -1
  118. package/dist/commonjs/component/users.d.ts +0 -52
  119. package/dist/commonjs/component/users.d.ts.map +0 -1
  120. package/dist/commonjs/component/users.js +0 -230
  121. package/dist/commonjs/component/users.js.map +0 -1
  122. package/dist/commonjs/component/vector/index.d.ts +0 -61
  123. package/dist/commonjs/component/vector/index.d.ts.map +0 -1
  124. package/dist/commonjs/component/vector/index.js +0 -148
  125. package/dist/commonjs/component/vector/index.js.map +0 -1
  126. package/dist/commonjs/component/vector/tables.d.ts +0 -60
  127. package/dist/commonjs/component/vector/tables.d.ts.map +0 -1
  128. package/dist/commonjs/component/vector/tables.js +0 -56
  129. package/dist/commonjs/component/vector/tables.js.map +0 -1
  130. package/dist/commonjs/mapping.d.ts +0 -50
  131. package/dist/commonjs/mapping.d.ts.map +0 -1
  132. package/dist/commonjs/mapping.js +0 -257
  133. package/dist/commonjs/mapping.js.map +0 -1
  134. package/dist/commonjs/package.json +0 -3
  135. package/dist/commonjs/react/deltas.d.ts +0 -29
  136. package/dist/commonjs/react/deltas.d.ts.map +0 -1
  137. package/dist/commonjs/react/deltas.js +0 -268
  138. package/dist/commonjs/react/deltas.js.map +0 -1
  139. package/dist/commonjs/react/index.d.ts +0 -97
  140. package/dist/commonjs/react/index.d.ts.map +0 -1
  141. package/dist/commonjs/react/index.js +0 -224
  142. package/dist/commonjs/react/index.js.map +0 -1
  143. package/dist/commonjs/react/optimisticallySendMessage.d.ts +0 -8
  144. package/dist/commonjs/react/optimisticallySendMessage.d.ts.map +0 -1
  145. package/dist/commonjs/react/optimisticallySendMessage.js +0 -40
  146. package/dist/commonjs/react/optimisticallySendMessage.js.map +0 -1
  147. package/dist/commonjs/react/toUIMessages.d.ts +0 -13
  148. package/dist/commonjs/react/toUIMessages.d.ts.map +0 -1
  149. package/dist/commonjs/react/toUIMessages.js +0 -146
  150. package/dist/commonjs/react/toUIMessages.js.map +0 -1
  151. package/dist/commonjs/react/types.d.ts +0 -26
  152. package/dist/commonjs/react/types.d.ts.map +0 -1
  153. package/dist/commonjs/react/types.js +0 -2
  154. package/dist/commonjs/react/types.js.map +0 -1
  155. package/dist/commonjs/react/useSmoothText.d.ts +0 -20
  156. package/dist/commonjs/react/useSmoothText.d.ts.map +0 -1
  157. package/dist/commonjs/react/useSmoothText.js +0 -51
  158. package/dist/commonjs/react/useSmoothText.js.map +0 -1
  159. package/dist/commonjs/shared.d.ts +0 -10
  160. package/dist/commonjs/shared.d.ts.map +0 -1
  161. package/dist/commonjs/shared.js +0 -30
  162. package/dist/commonjs/shared.js.map +0 -1
  163. package/dist/commonjs/validators.d.ts +0 -5721
  164. package/dist/commonjs/validators.d.ts.map +0 -1
  165. package/dist/commonjs/validators.js +0 -317
  166. package/dist/commonjs/validators.js.map +0 -1
  167. package/dist/commonjs/vitest.config.d.ts +0 -3
  168. package/dist/commonjs/vitest.config.d.ts.map +0 -1
  169. package/dist/commonjs/vitest.config.js +0 -7
  170. package/dist/commonjs/vitest.config.js.map +0 -1
  171. package/dist/commonjs.tsbuildinfo +0 -1
  172. package/dist/esm/vitest.config.d.ts +0 -3
  173. package/dist/esm/vitest.config.d.ts.map +0 -1
  174. package/dist/esm/vitest.config.js +0 -7
  175. package/dist/esm/vitest.config.js.map +0 -1
@@ -1,97 +0,0 @@
1
- import { type ErrorMessage } from "convex-helpers";
2
- import { type UsePaginatedQueryResult } from "convex/react";
3
- import type { UIMessage } from "./toUIMessages.js";
4
- import { toUIMessages } from "./toUIMessages.js";
5
- import type { ThreadQuery, ThreadStreamQuery, ThreadMessagesArgs, ThreadMessagesResult } from "./types.js";
6
- export { optimisticallySendMessage } from "./optimisticallySendMessage.js";
7
- export { useSmoothText } from "./useSmoothText.js";
8
- export { toUIMessages, type UIMessage };
9
- /**
10
- * A hook that fetches messages from a thread.
11
- *
12
- * This hook is a wrapper around `usePaginatedQuery` and `useStreamingThreadMessages`.
13
- * It will fetch both full messages and streaming messages, and merge them together.
14
- *
15
- * The query must take as arguments `{ threadId, paginationOpts }` and return a
16
- * pagination result of objects that extend `MessageDoc`.
17
- *
18
- * For streaming, it should look like this:
19
- * ```ts
20
- * export const listThreadMessages = query({
21
- * args: {
22
- * threadId: v.string(),
23
- * paginationOpts: paginationOptsValidator,
24
- * streamArgs: vStreamArgs,
25
- * ... other arguments you want
26
- * },
27
- * handler: async (ctx, { threadId, paginationOpts, streamArgs }) => {
28
- * // await authorizeThreadAccess(ctx, threadId);
29
- * const paginated = await agent.listMessages(ctx, { threadId, paginationOpts });
30
- * const streams = await agent.syncStreams(ctx, { threadId, streamArgs });
31
- * // Here you could filter out / modify the documents & stream deltas.
32
- * return { ...paginated, streams };
33
- * },
34
- * });
35
- * ```
36
- *
37
- * Then the hook can be used like this:
38
- * ```ts
39
- * const messages = useThreadMessages(
40
- * api.myModule.listThreadMessages,
41
- * { threadId },
42
- * { initialNumItems: 10, stream: true }
43
- * );
44
- * ```
45
- *
46
- * @param query The query to use to fetch messages.
47
- * It must take as arguments `{ threadId, paginationOpts }` and return a
48
- * pagination result of objects that extend `MessageDoc`.
49
- * To support streaming, it must also take in `streamArgs: vStreamArgs` and
50
- * return a `streams` object returned from `agent.syncStreams`.
51
- * @param args The arguments to pass to the query other than `paginationOpts`
52
- * and `streamArgs`. So `{ threadId }` at minimum, plus any other arguments that
53
- * you want to pass to the query.
54
- * @param options The options for the query. Similar to usePaginatedQuery.
55
- * To enable streaming, pass `stream: true`.
56
- * @returns The messages. If stream is true, it will return a list of messages
57
- * that includes both full messages and streaming messages.
58
- */
59
- export declare function useThreadMessages<Query extends ThreadQuery<any, any>>(query: Query, args: ThreadMessagesArgs<Query> | "skip", options: {
60
- initialNumItems: number;
61
- stream?: Query extends ThreadStreamQuery ? boolean : ErrorMessage<"To enable streaming, your query must take in streamArgs: vStreamArgs and return a streams object returned from agent.syncStreams. See docs.">;
62
- }): UsePaginatedQueryResult<ThreadMessagesResult<Query> & {
63
- streaming?: boolean;
64
- }>;
65
- /**
66
- * A hook that fetches streaming messages from a thread.
67
- * This ONLY returns streaming messages. To get both, use `useThreadMessages`.
68
- *
69
- * @param query The query to use to fetch messages.
70
- * It must take as arguments `{ threadId, paginationOpts, streamArgs }` and
71
- * return a `streams` object returned from `agent.syncStreams`.
72
- * @param args The arguments to pass to the query other than `paginationOpts`
73
- * and `streamArgs`. So `{ threadId }` at minimum, plus any other arguments that
74
- * you want to pass to the query.
75
- * @returns The streaming messages.
76
- */
77
- export declare function useStreamingThreadMessages<Query extends ThreadStreamQuery<any, any>>(query: Query, args: (ThreadMessagesArgs<Query> & {
78
- startOrder?: number;
79
- }) | "skip"): Array<ThreadMessagesResult<Query>> | undefined;
80
- /**
81
- * @deprecated use useThreadMessages or useStreamingThreadMessages instead
82
- * Use this hook to stream text from a server action, using the
83
- * toTextStreamResponse or equivalent HTTP streaming endpoint returning text.
84
- * @param url The URL of the server action to stream text from.
85
- * e.g. https://....convex.site/yourendpoint
86
- * @param threadId The ID of the thread to stream text from.
87
- * @param token The auth token to use for the request.
88
- * e.g. useAuthToken() from @convex-dev/auth/react
89
- * @returns A tuple containing the {text, loading, error} and a function to call the endpoint
90
- * with a given prompt, passing up { prompt, threadId } as the body in JSON.
91
- */
92
- export declare function useStreamingText(url: string, threadId: string | null, token?: string): readonly [{
93
- readonly text: string;
94
- readonly loading: boolean;
95
- readonly error: Error | null;
96
- }, (prompt: string) => Promise<void>];
97
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAEL,KAAK,uBAAuB,EAE7B,MAAM,cAAc,CAAC;AAOtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,iBAAiB,CAE/B,KAAK,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,EAEnC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,MAAM,EACxC,OAAO,EAAE;IACP,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,KAAK,SAAS,iBAAiB,GACpC,OAAO,GACP,YAAY,CAAC,6IAA6I,CAAC,CAAC;CACjK,GACA,uBAAuB,CACxB,oBAAoB,CAAC,KAAK,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CACtD,CA8CA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAExC,KAAK,SAAS,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,EAEzC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,GACnE,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CA4EhD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,KAAK,CAAC,EAAE,MAAM;;;;YAOS,MAAM,oBA2C9B"}
@@ -1,224 +0,0 @@
1
- "use client";
2
- import { omit } from "convex-helpers";
3
- import { useQuery, } from "convex/react";
4
- import { usePaginatedQuery } from "convex-helpers/react";
5
- import { useMemo, useRef, useState } from "react";
6
- import { toUIMessages } from "./toUIMessages.js";
7
- import { mergeDeltas } from "./deltas.js";
8
- export { optimisticallySendMessage } from "./optimisticallySendMessage.js";
9
- export { useSmoothText } from "./useSmoothText.js";
10
- export { toUIMessages };
11
- /**
12
- * A hook that fetches messages from a thread.
13
- *
14
- * This hook is a wrapper around `usePaginatedQuery` and `useStreamingThreadMessages`.
15
- * It will fetch both full messages and streaming messages, and merge them together.
16
- *
17
- * The query must take as arguments `{ threadId, paginationOpts }` and return a
18
- * pagination result of objects that extend `MessageDoc`.
19
- *
20
- * For streaming, it should look like this:
21
- * ```ts
22
- * export const listThreadMessages = query({
23
- * args: {
24
- * threadId: v.string(),
25
- * paginationOpts: paginationOptsValidator,
26
- * streamArgs: vStreamArgs,
27
- * ... other arguments you want
28
- * },
29
- * handler: async (ctx, { threadId, paginationOpts, streamArgs }) => {
30
- * // await authorizeThreadAccess(ctx, threadId);
31
- * const paginated = await agent.listMessages(ctx, { threadId, paginationOpts });
32
- * const streams = await agent.syncStreams(ctx, { threadId, streamArgs });
33
- * // Here you could filter out / modify the documents & stream deltas.
34
- * return { ...paginated, streams };
35
- * },
36
- * });
37
- * ```
38
- *
39
- * Then the hook can be used like this:
40
- * ```ts
41
- * const messages = useThreadMessages(
42
- * api.myModule.listThreadMessages,
43
- * { threadId },
44
- * { initialNumItems: 10, stream: true }
45
- * );
46
- * ```
47
- *
48
- * @param query The query to use to fetch messages.
49
- * It must take as arguments `{ threadId, paginationOpts }` and return a
50
- * pagination result of objects that extend `MessageDoc`.
51
- * To support streaming, it must also take in `streamArgs: vStreamArgs` and
52
- * return a `streams` object returned from `agent.syncStreams`.
53
- * @param args The arguments to pass to the query other than `paginationOpts`
54
- * and `streamArgs`. So `{ threadId }` at minimum, plus any other arguments that
55
- * you want to pass to the query.
56
- * @param options The options for the query. Similar to usePaginatedQuery.
57
- * To enable streaming, pass `stream: true`.
58
- * @returns The messages. If stream is true, it will return a list of messages
59
- * that includes both full messages and streaming messages.
60
- */
61
- export function useThreadMessages(query, args, options) {
62
- // These are full messages
63
- const paginated = usePaginatedQuery(query, args, { initialNumItems: options.initialNumItems });
64
- // These are streaming messages that will not include full messages.
65
- const streamMessages = useStreamingThreadMessages(query, !options.stream ||
66
- args === "skip" ||
67
- paginated.status === "LoadingFirstPage"
68
- ? "skip"
69
- : { ...args, startOrder: paginated.results.at(-1)?.order });
70
- const merged = useMemo(() => {
71
- const streamListMessages = streamMessages?.map((m) => ({
72
- ...m,
73
- streaming: !m.status || m.status === "streaming",
74
- })) ?? [];
75
- return {
76
- ...paginated,
77
- results: paginated.results
78
- .map((m) => ({ ...m, streaming: false }))
79
- .concat(streamListMessages)
80
- .sort((a, b) => a.order === b.order ? a.stepOrder - b.stepOrder : a.order - b.order)
81
- // They shouldn't overlap, but check for duplicates just in case.
82
- .filter((m, i, arr) => !arr[i - 1] ||
83
- m.order !== arr[i - 1].order ||
84
- m.stepOrder !== arr[i - 1].stepOrder),
85
- };
86
- }, [paginated, streamMessages]);
87
- return merged;
88
- }
89
- /**
90
- * A hook that fetches streaming messages from a thread.
91
- * This ONLY returns streaming messages. To get both, use `useThreadMessages`.
92
- *
93
- * @param query The query to use to fetch messages.
94
- * It must take as arguments `{ threadId, paginationOpts, streamArgs }` and
95
- * return a `streams` object returned from `agent.syncStreams`.
96
- * @param args The arguments to pass to the query other than `paginationOpts`
97
- * and `streamArgs`. So `{ threadId }` at minimum, plus any other arguments that
98
- * you want to pass to the query.
99
- * @returns The streaming messages.
100
- */
101
- export function useStreamingThreadMessages(query, args) {
102
- // Invariant: streamMessages[streamId] is comprised of all deltas up to the
103
- // cursor. There can be multiple messages in the same stream, e.g. for tool
104
- // calls.
105
- const [streams, setStreams] = useState([]);
106
- const startOrderRef = useRef(0);
107
- const queryArgs = args === "skip" ? args : omit(args, ["startOrder"]);
108
- if (args !== "skip" && !startOrderRef.current && args.startOrder) {
109
- startOrderRef.current = args.startOrder;
110
- }
111
- // Get all the active streams
112
- const streamList = useQuery(query, queryArgs === "skip"
113
- ? queryArgs
114
- : {
115
- ...queryArgs,
116
- paginationOpts: { cursor: null, numItems: 0 },
117
- streamArgs: {
118
- kind: "list",
119
- startOrder: startOrderRef.current,
120
- },
121
- });
122
- // Get the cursors for all the active streams
123
- const cursors = useMemo(() => {
124
- if (!streamList?.streams)
125
- return [];
126
- if (streamList.streams.kind !== "list") {
127
- throw new Error("Expected list streams");
128
- }
129
- return streamList.streams.messages.map(({ streamId }) => {
130
- const stream = streams.find((s) => s.streamId === streamId);
131
- const cursor = stream?.cursor ?? 0;
132
- return { streamId, cursor };
133
- });
134
- }, [streamList, streams]);
135
- // Get the deltas for all the active streams, if any.
136
- const cursorQuery = useQuery(query, queryArgs === "skip" || !streamList
137
- ? "skip"
138
- : {
139
- ...queryArgs,
140
- paginationOpts: { cursor: null, numItems: 0 },
141
- streamArgs: { kind: "deltas", cursors },
142
- });
143
- // Merge any deltas into the streamChunks, keeping it unmodified if unchanged.
144
- const threadId = args === "skip" ? undefined : args.threadId;
145
- const [messages, newStreams, changed] = useMemo(() => {
146
- if (!threadId)
147
- return [undefined, [], false];
148
- if (!streamList)
149
- return [undefined, [], false];
150
- if (cursorQuery && cursorQuery.streams?.kind !== "deltas") {
151
- throw new Error("Expected deltas streams");
152
- }
153
- return mergeDeltas(threadId, streamList.streams.messages, streams, cursorQuery?.streams?.deltas ?? []);
154
- }, [threadId, cursorQuery, streams, streamList]);
155
- // Now assemble the chunks into messages
156
- if (!threadId) {
157
- return undefined;
158
- }
159
- if (changed) {
160
- setStreams(newStreams);
161
- }
162
- return messages;
163
- }
164
- /**
165
- * @deprecated use useThreadMessages or useStreamingThreadMessages instead
166
- * Use this hook to stream text from a server action, using the
167
- * toTextStreamResponse or equivalent HTTP streaming endpoint returning text.
168
- * @param url The URL of the server action to stream text from.
169
- * e.g. https://....convex.site/yourendpoint
170
- * @param threadId The ID of the thread to stream text from.
171
- * @param token The auth token to use for the request.
172
- * e.g. useAuthToken() from @convex-dev/auth/react
173
- * @returns A tuple containing the {text, loading, error} and a function to call the endpoint
174
- * with a given prompt, passing up { prompt, threadId } as the body in JSON.
175
- */
176
- export function useStreamingText(url, threadId, token) {
177
- const [text, setText] = useState("");
178
- const [loading, setLoading] = useState(false);
179
- const [error, setError] = useState(null);
180
- const readStream = useMemo(() => async (prompt) => {
181
- if (!threadId)
182
- return;
183
- try {
184
- setText("");
185
- setLoading(true);
186
- setError(null);
187
- const response = await fetch(url, {
188
- method: "POST",
189
- headers: {
190
- "Content-Type": "application/json",
191
- ...(token ? { Authorization: `Bearer ${token}` } : {}),
192
- },
193
- body: JSON.stringify({ prompt, threadId }),
194
- });
195
- if (!response.ok) {
196
- throw new Error(`HTTP error! status: ${response.status}`);
197
- }
198
- if (!response.body) {
199
- throw new Error("No body");
200
- }
201
- const reader = response.body.getReader();
202
- const decoder = new TextDecoder();
203
- let accumulatedText = "";
204
- while (true) {
205
- const { done, value } = await reader.read();
206
- if (done) {
207
- break;
208
- }
209
- accumulatedText += decoder.decode(value);
210
- setText(accumulatedText);
211
- }
212
- }
213
- catch (e) {
214
- if (e instanceof Error && e.name !== "AbortError") {
215
- setError(e);
216
- }
217
- }
218
- finally {
219
- setLoading(false);
220
- }
221
- }, [threadId, token, url]);
222
- return [{ text, loading, error }, readStream];
223
- }
224
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import type { MessageDoc } from "../client/index.js";
2
- import type { OptimisticLocalStore } from "convex/browser";
3
- import type { ThreadQuery } from "./types.js";
4
- export declare function optimisticallySendMessage(query: ThreadQuery<unknown, MessageDoc>): (store: OptimisticLocalStore, args: {
5
- threadId: string;
6
- prompt: string;
7
- }) => void;
8
- //# sourceMappingURL=optimisticallySendMessage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"optimisticallySendMessage.d.ts","sourceRoot":"","sources":["../../../src/react/optimisticallySendMessage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,GACtC,CACD,KAAK,EAAE,oBAAoB,EAC3B,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KACvC,IAAI,CAmCR"}
@@ -1,40 +0,0 @@
1
- import { insertAtTop } from "convex/react";
2
- export function optimisticallySendMessage(query) {
3
- return (store, args) => {
4
- const queries = store.getAllQueries(query);
5
- let maxOrder = -1;
6
- let maxStepOrder = 0;
7
- for (const q of queries) {
8
- if (q.args?.threadId !== args.threadId)
9
- continue;
10
- if (q.args.streamArgs)
11
- continue;
12
- for (const m of q.value?.page ?? []) {
13
- maxOrder = Math.max(maxOrder, m.order);
14
- maxStepOrder = Math.max(maxStepOrder, m.stepOrder);
15
- }
16
- }
17
- const order = maxOrder + 1;
18
- const stepOrder = 0;
19
- insertAtTop({
20
- paginatedQuery: query,
21
- argsToMatch: { threadId: args.threadId, streamArgs: undefined },
22
- item: {
23
- _creationTime: Date.now(),
24
- _id: crypto.randomUUID(),
25
- order,
26
- stepOrder,
27
- status: "pending",
28
- threadId: args.threadId,
29
- tool: false,
30
- message: {
31
- role: "user",
32
- content: args.prompt,
33
- },
34
- text: args.prompt,
35
- },
36
- localQueryStore: store,
37
- });
38
- };
39
- }
40
- //# sourceMappingURL=optimisticallySendMessage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"optimisticallySendMessage.js","sourceRoot":"","sources":["../../../src/react/optimisticallySendMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAK3C,MAAM,UAAU,yBAAyB,CACvC,KAAuC;IAKvC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC,QAAQ;gBAAE,SAAS;YACjD,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU;gBAAE,SAAS;YAChC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;gBACpC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBACvC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,WAAW,CAAC;YACV,cAAc,EAAE,KAAK;YACrB,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE;YAC/D,IAAI,EAAE;gBACJ,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;gBACzB,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE;gBACxB,KAAK;gBACL,SAAS;gBACT,MAAM,EAAE,SAAS;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,IAAI,CAAC,MAAM;iBACrB;gBACD,IAAI,EAAE,IAAI,CAAC,MAAM;aAClB;YACD,eAAe,EAAE,KAAK;SACvB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -1,13 +0,0 @@
1
- import type { UIMessage as AIUIMessage } from "ai";
2
- import type { MessageDoc } from "../client/index.js";
3
- import type { MessageStatus } from "../validators.js";
4
- export type UIMessage = AIUIMessage & {
5
- key: string;
6
- order: number;
7
- stepOrder: number;
8
- status: "streaming" | MessageStatus;
9
- };
10
- export declare function toUIMessages(messages: (MessageDoc & {
11
- streaming?: boolean;
12
- })[]): UIMessage[];
13
- //# sourceMappingURL=toUIMessages.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toUIMessages.d.ts","sourceRoot":"","sources":["../../../src/react/toUIMessages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,IAAI,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC;CACrC,CAAC;AAEF,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,CAAC,UAAU,GAAG;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,EAAE,GACjD,SAAS,EAAE,CA2Jb"}
@@ -1,146 +0,0 @@
1
- import { deserializeMessage, toUIFilePart } from "../mapping.js";
2
- export function toUIMessages(messages) {
3
- const uiMessages = [];
4
- let assistantMessage;
5
- for (const message of messages) {
6
- const coreMessage = message.message && deserializeMessage(message.message);
7
- const text = message.text ?? "";
8
- const content = coreMessage?.content;
9
- const nonStringContent = content && typeof content !== "string" ? content : [];
10
- if (!coreMessage)
11
- continue;
12
- const common = {
13
- id: message.id ?? message._id,
14
- createdAt: new Date(message._creationTime),
15
- order: message.order,
16
- stepOrder: message.stepOrder,
17
- status: message.streaming ? "streaming" : message.status,
18
- key: `${message.threadId}-${message.order}-${message.stepOrder}`,
19
- };
20
- if (coreMessage.role === "system") {
21
- uiMessages.push({
22
- ...common,
23
- role: "system",
24
- content: text,
25
- parts: [{ type: "text", text }],
26
- });
27
- }
28
- else if (coreMessage.role === "user") {
29
- const parts = [];
30
- if (text) {
31
- parts.push({ type: "text", text });
32
- }
33
- nonStringContent.forEach((contentPart) => {
34
- switch (contentPart.type) {
35
- case "file":
36
- case "image":
37
- parts.push(toUIFilePart(contentPart));
38
- break;
39
- }
40
- });
41
- uiMessages.push({
42
- ...common,
43
- role: "user",
44
- content: message.text ?? "",
45
- parts,
46
- });
47
- }
48
- else {
49
- if (coreMessage.role === "tool" && !assistantMessage) {
50
- console.warn("Tool message without preceding assistant message.. skipping", message);
51
- continue;
52
- }
53
- if (!assistantMessage) {
54
- assistantMessage = {
55
- ...common,
56
- role: "assistant",
57
- content: "",
58
- parts: [],
59
- };
60
- uiMessages.push(assistantMessage);
61
- }
62
- else {
63
- assistantMessage.status = message.streaming
64
- ? "streaming"
65
- : message.status;
66
- }
67
- // update it to the last message's id
68
- assistantMessage.id = message.id ?? message._id;
69
- if (message.text) {
70
- assistantMessage.parts.push({
71
- type: "text",
72
- text: message.text,
73
- });
74
- assistantMessage.content += message.text;
75
- }
76
- if (message.reasoning) {
77
- assistantMessage.parts.push({
78
- type: "reasoning",
79
- reasoning: message.reasoning,
80
- details: message.reasoningDetails ?? [],
81
- });
82
- }
83
- for (const source of message.sources ?? []) {
84
- assistantMessage.parts.push({
85
- type: "source",
86
- source,
87
- });
88
- }
89
- for (const contentPart of nonStringContent) {
90
- switch (contentPart.type) {
91
- case "file":
92
- case "image":
93
- assistantMessage.parts.push(toUIFilePart(contentPart));
94
- break;
95
- case "tool-call":
96
- assistantMessage.parts.push({
97
- type: "step-start",
98
- });
99
- assistantMessage.parts.push({
100
- type: "tool-invocation",
101
- toolInvocation: {
102
- state: "call",
103
- step: assistantMessage.parts.filter((part) => part.type === "tool-invocation").length,
104
- toolCallId: contentPart.toolCallId,
105
- toolName: contentPart.toolName,
106
- args: contentPart.args,
107
- },
108
- });
109
- break;
110
- case "tool-result": {
111
- const call = assistantMessage.parts.find((part) => part.type === "tool-invocation" &&
112
- part.toolInvocation.toolCallId === contentPart.toolCallId);
113
- const toolInvocation = {
114
- state: "result",
115
- toolCallId: contentPart.toolCallId,
116
- toolName: contentPart.toolName,
117
- args: call?.toolInvocation.args,
118
- result: contentPart.result,
119
- step: call?.toolInvocation.step ??
120
- assistantMessage.parts.filter((part) => part.type === "tool-invocation").length,
121
- };
122
- if (call) {
123
- call.toolInvocation = toolInvocation;
124
- }
125
- else {
126
- console.warn("Tool result without preceding tool call.. adding anyways", contentPart);
127
- assistantMessage.parts.push({
128
- type: "tool-invocation",
129
- toolInvocation,
130
- });
131
- }
132
- break;
133
- }
134
- }
135
- }
136
- }
137
- if (!message.tool &&
138
- assistantMessage &&
139
- assistantMessage.parts.length > 0) {
140
- // Reset it so the next set of tool calls will create a new assistant message
141
- assistantMessage = undefined;
142
- }
143
- }
144
- return uiMessages;
145
- }
146
- //# sourceMappingURL=toUIMessages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toUIMessages.js","sourceRoot":"","sources":["../../../src/react/toUIMessages.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import type { BetterOmit, Expand } from "convex-helpers";
2
- import type { FunctionArgs, FunctionReference, PaginationOptions, PaginationResult } from "convex/server";
3
- import type { MessageDoc } from "../client/index.js";
4
- import type { SyncStreamsReturnValue } from "../client/types.js";
5
- import type { StreamArgs } from "../validators.js";
6
- export type ThreadQuery<Args = unknown, M extends MessageDoc = MessageDoc> = FunctionReference<"query", "public", {
7
- threadId: string;
8
- paginationOpts: PaginationOptions;
9
- /**
10
- * If { stream: true } is passed, it will also query for stream deltas.
11
- * In order for this to work, the query must take as an argument streamArgs.
12
- */
13
- streamArgs?: StreamArgs;
14
- } & Args, PaginationResult<M> & {
15
- streams?: SyncStreamsReturnValue;
16
- }>;
17
- export type ThreadStreamQuery<Args = Record<string, unknown>, M extends MessageDoc = MessageDoc> = FunctionReference<"query", "public", {
18
- threadId: string;
19
- paginationOpts: PaginationOptions;
20
- streamArgs?: StreamArgs;
21
- } & Args, PaginationResult<M> & {
22
- streams: SyncStreamsReturnValue;
23
- }>;
24
- export type ThreadMessagesArgs<Query extends ThreadQuery<unknown, MessageDoc>> = Query extends ThreadQuery<unknown, MessageDoc> ? Expand<BetterOmit<FunctionArgs<Query>, "paginationOpts" | "streamArgs">> : never;
25
- export type ThreadMessagesResult<Query extends ThreadQuery<unknown, MessageDoc>> = Query extends ThreadQuery<unknown, infer M> ? M : never;
26
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/react/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,WAAW,CACrB,IAAI,GAAG,OAAO,EACd,CAAC,SAAS,UAAU,GAAG,UAAU,IAC/B,iBAAiB,CACnB,OAAO,EACP,QAAQ,EACR;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,iBAAiB,CAAC;IAElC;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,GAAG,IAAI,EACR,gBAAgB,CAAC,CAAC,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,sBAAsB,CAAA;CAAE,CAC3D,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAC3B,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,CAAC,SAAS,UAAU,GAAG,UAAU,IAC/B,iBAAiB,CACnB,OAAO,EACP,QAAQ,EACR;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,iBAAiB,CAAC;IAClC,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,GAAG,IAAI,EACR,gBAAgB,CAAC,CAAC,CAAC,GAAG;IAAE,OAAO,EAAE,sBAAsB,CAAA;CAAE,CAC1D,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,IAC3E,KAAK,SAAS,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,GAC1C,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,gBAAgB,GAAG,YAAY,CAAC,CAAC,GACxE,KAAK,CAAC;AAEZ,MAAM,MAAM,oBAAoB,CAC9B,KAAK,SAAS,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,IAC5C,KAAK,SAAS,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/react/types.ts"],"names":[],"mappings":""}
@@ -1,20 +0,0 @@
1
- /**
2
- * A hook that smoothly displays text as it is streamed.
3
- *
4
- * @param text The text to display. Pass in the full text each time.
5
- * @param charsPerSec The number of characters to display per second.
6
- * @returns A tuple of the visible text and the state of the smooth text,
7
- * including the current cursor position and whether it's still streaming.
8
- * This allows you to decide if it's too far behind and you want to adjust
9
- * the charsPerSec or just prefer the full text.
10
- */
11
- export declare function useSmoothText(text: string, { charsPerSec, }?: {
12
- /**
13
- * The number of characters to display per second.
14
- */
15
- charsPerSec?: number;
16
- }): [string, {
17
- cursor: number;
18
- isStreaming: boolean;
19
- }];
20
- //# sourceMappingURL=useSmoothText.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useSmoothText.d.ts","sourceRoot":"","sources":["../../../src/react/useSmoothText.ts"],"names":[],"mappings":"AAKA;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,EACE,WAAiB,GAClB,GAAE;IACD;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAsDpD"}