@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.
- package/dist/UIMessages.d.ts +46 -0
- package/dist/UIMessages.d.ts.map +1 -0
- package/dist/UIMessages.js +634 -0
- package/dist/UIMessages.js.map +1 -0
- package/dist/client/createTool.d.ts +167 -0
- package/dist/client/createTool.d.ts.map +1 -0
- package/dist/client/createTool.js +116 -0
- package/dist/client/createTool.js.map +1 -0
- package/dist/client/defaultComponent.d.ts +11 -0
- package/dist/client/defaultComponent.d.ts.map +1 -0
- package/dist/client/defaultComponent.js +7 -0
- package/dist/client/defaultComponent.js.map +1 -0
- package/dist/client/definePlaygroundAPI.d.ts +1725 -0
- package/dist/client/definePlaygroundAPI.d.ts.map +1 -0
- package/dist/client/definePlaygroundAPI.js +271 -0
- package/dist/client/definePlaygroundAPI.js.map +1 -0
- package/dist/client/files.d.ts +69 -0
- package/dist/client/files.d.ts.map +1 -0
- package/dist/client/files.js +181 -0
- package/dist/client/files.js.map +1 -0
- package/dist/client/index.d.ts +2091 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +929 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/messages.d.ts +461 -0
- package/dist/client/messages.d.ts.map +1 -0
- package/dist/client/messages.js +106 -0
- package/dist/client/messages.js.map +1 -0
- package/dist/client/mockModel.d.ts +42 -0
- package/dist/client/mockModel.d.ts.map +1 -0
- package/dist/client/mockModel.js +182 -0
- package/dist/client/mockModel.js.map +1 -0
- package/dist/client/saveInputMessages.d.ts +20 -0
- package/dist/client/saveInputMessages.d.ts.map +1 -0
- package/dist/client/saveInputMessages.js +58 -0
- package/dist/client/saveInputMessages.js.map +1 -0
- package/dist/client/search.d.ts +493 -0
- package/dist/client/search.d.ts.map +1 -0
- package/dist/client/search.js +435 -0
- package/dist/client/search.js.map +1 -0
- package/dist/client/start.d.ts +84 -0
- package/dist/client/start.d.ts.map +1 -0
- package/dist/client/start.js +185 -0
- package/dist/client/start.js.map +1 -0
- package/dist/client/streamText.d.ts +46 -0
- package/dist/client/streamText.d.ts.map +1 -0
- package/dist/client/streamText.js +127 -0
- package/dist/client/streamText.js.map +1 -0
- package/dist/client/streaming.d.ts +3778 -0
- package/dist/client/streaming.d.ts.map +1 -0
- package/dist/client/streaming.js +330 -0
- package/dist/client/streaming.js.map +1 -0
- package/dist/client/threads.d.ts +46 -0
- package/dist/client/threads.d.ts.map +1 -0
- package/dist/client/threads.js +49 -0
- package/dist/client/threads.js.map +1 -0
- package/dist/client/types.d.ts +461 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/utils.d.ts +4 -0
- package/dist/client/utils.d.ts.map +1 -0
- package/dist/client/utils.js +21 -0
- package/dist/client/utils.js.map +1 -0
- package/dist/component/_generated/api.d.ts +48 -0
- package/dist/component/_generated/api.d.ts.map +1 -0
- package/dist/component/_generated/api.js +31 -0
- package/dist/component/_generated/api.js.map +1 -0
- package/dist/component/_generated/component.d.ts +3120 -0
- package/dist/component/_generated/component.d.ts.map +1 -0
- package/dist/component/_generated/component.js +11 -0
- package/dist/component/_generated/component.js.map +1 -0
- package/dist/component/_generated/dataModel.d.ts +46 -0
- package/dist/component/_generated/dataModel.d.ts.map +1 -0
- package/dist/component/_generated/dataModel.js +11 -0
- package/dist/component/_generated/dataModel.js.map +1 -0
- package/dist/component/_generated/server.d.ts +121 -0
- package/dist/component/_generated/server.d.ts.map +1 -0
- package/dist/component/_generated/server.js +78 -0
- package/dist/component/_generated/server.js.map +1 -0
- package/dist/component/apiKeys.d.ts +11 -0
- package/dist/component/apiKeys.d.ts.map +1 -0
- package/dist/component/apiKeys.js +69 -0
- package/dist/component/apiKeys.js.map +1 -0
- package/dist/component/convex.config.d.ts +3 -0
- package/dist/component/convex.config.d.ts.map +1 -0
- package/dist/component/convex.config.js +3 -0
- package/dist/component/convex.config.js.map +1 -0
- package/dist/component/files.d.ts +97 -0
- package/dist/component/files.d.ts.map +1 -0
- package/dist/component/files.js +190 -0
- package/dist/component/files.js.map +1 -0
- package/dist/component/messages.d.ts +3851 -0
- package/dist/component/messages.d.ts.map +1 -0
- package/dist/component/messages.js +757 -0
- package/dist/component/messages.js.map +1 -0
- package/dist/component/schema.d.ts +8029 -0
- package/dist/component/schema.d.ts.map +1 -0
- package/dist/component/schema.js +147 -0
- package/dist/component/schema.js.map +1 -0
- package/dist/component/streams.d.ts +128 -0
- package/dist/component/streams.d.ts.map +1 -0
- package/dist/component/streams.js +413 -0
- package/dist/component/streams.js.map +1 -0
- package/dist/component/threads.d.ts +115 -0
- package/dist/component/threads.d.ts.map +1 -0
- package/dist/component/threads.js +208 -0
- package/dist/component/threads.js.map +1 -0
- package/dist/component/users.d.ts +52 -0
- package/dist/component/users.d.ts.map +1 -0
- package/dist/component/users.js +229 -0
- package/dist/component/users.js.map +1 -0
- package/dist/component/vector/index.d.ts +61 -0
- package/dist/component/vector/index.d.ts.map +1 -0
- package/dist/component/vector/index.js +146 -0
- package/dist/component/vector/index.js.map +1 -0
- package/dist/component/vector/tables.d.ts +58 -0
- package/dist/component/vector/tables.d.ts.map +1 -0
- package/dist/component/vector/tables.js +56 -0
- package/dist/component/vector/tables.js.map +1 -0
- package/dist/deltas.d.ts +43 -0
- package/dist/deltas.d.ts.map +1 -0
- package/dist/deltas.js +446 -0
- package/dist/deltas.js.map +1 -0
- package/dist/mapping.d.ts +76 -0
- package/dist/mapping.d.ts.map +1 -0
- package/dist/mapping.js +720 -0
- package/dist/mapping.js.map +1 -0
- package/dist/react/SmoothText.d.ts +5 -0
- package/dist/react/SmoothText.d.ts.map +1 -0
- package/dist/react/SmoothText.js +6 -0
- package/dist/react/SmoothText.js.map +1 -0
- package/dist/react/index.d.ts +25 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +70 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/optimisticallySendMessage.d.ts +42 -0
- package/dist/react/optimisticallySendMessage.d.ts.map +1 -0
- package/dist/react/optimisticallySendMessage.js +74 -0
- package/dist/react/optimisticallySendMessage.js.map +1 -0
- package/dist/react/types.d.ts +12 -0
- package/dist/react/types.d.ts.map +1 -0
- package/dist/react/types.js +2 -0
- package/dist/react/types.js.map +1 -0
- package/dist/react/useDeltaStreams.d.ts +10 -0
- package/dist/react/useDeltaStreams.d.ts.map +1 -0
- package/dist/react/useDeltaStreams.js +106 -0
- package/dist/react/useDeltaStreams.js.map +1 -0
- package/dist/react/useSmoothText.d.ts +27 -0
- package/dist/react/useSmoothText.d.ts.map +1 -0
- package/dist/react/useSmoothText.js +68 -0
- package/dist/react/useSmoothText.js.map +1 -0
- package/dist/react/useStreamingUIMessages.d.ts +22 -0
- package/dist/react/useStreamingUIMessages.d.ts.map +1 -0
- package/dist/react/useStreamingUIMessages.js +92 -0
- package/dist/react/useStreamingUIMessages.js.map +1 -0
- package/dist/react/useThreadMessages.d.ts +104 -0
- package/dist/react/useThreadMessages.d.ts.map +1 -0
- package/dist/react/useThreadMessages.js +148 -0
- package/dist/react/useThreadMessages.js.map +1 -0
- package/dist/react/useUIMessages.d.ts +96 -0
- package/dist/react/useUIMessages.d.ts.map +1 -0
- package/dist/react/useUIMessages.js +108 -0
- package/dist/react/useUIMessages.js.map +1 -0
- package/dist/shared.d.ts +26 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +67 -0
- package/dist/shared.js.map +1 -0
- package/dist/validators.d.ts +24516 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +475 -0
- package/dist/validators.js.map +1 -0
- package/package.json +39 -39
- package/src/UIMessages.ts +0 -9
- package/src/client/approval.test.ts +144 -0
- package/src/client/index.ts +17 -9
- package/src/client/search.ts +0 -29
- package/src/client/start.ts +2 -2
- package/src/client/streamText.ts +9 -0
- package/src/client/streaming.ts +30 -23
- package/src/component/_generated/dataModel.ts +1 -1
- package/src/component/_generated/server.ts +0 -5
- package/src/mapping.ts +38 -22
- package/src/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../src/mapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmoothText.d.ts","sourceRoot":"","sources":["../../src/react/SmoothText.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE3E,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,GAAG,OAAO,EACX,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,iBAAiB,UAGtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmoothText.js","sourceRoot":"","sources":["../../src/react/SmoothText.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA0B,MAAM,oBAAoB,CAAC;AAE3E,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EACJ,GAAG,OAAO,EAC2B;IACrC,MAAM,CAAC,WAAW,CAAC,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export { toUIMessages, type UIMessage } from "../UIMessages.js";
|
|
2
|
+
export { optimisticallySendMessage } from "./optimisticallySendMessage.js";
|
|
3
|
+
export { useSmoothText } from "./useSmoothText.js";
|
|
4
|
+
export { SmoothText } from "./SmoothText.js";
|
|
5
|
+
export { type ThreadMessagesQuery, useThreadMessages, useStreamingThreadMessages, } from "./useThreadMessages.js";
|
|
6
|
+
export { type UIMessagesQuery, useUIMessages } from "./useUIMessages.js";
|
|
7
|
+
export { useStreamingUIMessages } from "./useStreamingUIMessages.js";
|
|
8
|
+
/**
|
|
9
|
+
* @deprecated use useThreadMessages or useStreamingThreadMessages instead
|
|
10
|
+
* Use this hook to stream text from a server action, using the
|
|
11
|
+
* toTextStreamResponse or equivalent HTTP streaming endpoint returning text.
|
|
12
|
+
* @param url The URL of the server action to stream text from.
|
|
13
|
+
* e.g. https://....convex.site/yourendpoint
|
|
14
|
+
* @param threadId The ID of the thread to stream text from.
|
|
15
|
+
* @param token The auth token to use for the request.
|
|
16
|
+
* e.g. useAuthToken() from @convex-dev/auth/react
|
|
17
|
+
* @returns A tuple containing the {text, loading, error} and a function to call the endpoint
|
|
18
|
+
* with a given prompt, passing up { prompt, threadId } as the body in JSON.
|
|
19
|
+
*/
|
|
20
|
+
export declare function useStreamingText(url: string, threadId: string | null, token?: string): readonly [{
|
|
21
|
+
readonly text: string;
|
|
22
|
+
readonly loading: boolean;
|
|
23
|
+
readonly error: Error | null;
|
|
24
|
+
}, (prompt: string) => Promise<void>];
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,KAAK,mBAAmB,EACxB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,KAAK,CAAC,EAAE,MAAM;;;;YAOS,MAAM,oBA2C9B"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMemo, useState } from "react";
|
|
3
|
+
export { toUIMessages } from "../UIMessages.js";
|
|
4
|
+
export { optimisticallySendMessage } from "./optimisticallySendMessage.js";
|
|
5
|
+
export { useSmoothText } from "./useSmoothText.js";
|
|
6
|
+
export { SmoothText } from "./SmoothText.js";
|
|
7
|
+
export { useThreadMessages, useStreamingThreadMessages, } from "./useThreadMessages.js";
|
|
8
|
+
export { useUIMessages } from "./useUIMessages.js";
|
|
9
|
+
export { useStreamingUIMessages } from "./useStreamingUIMessages.js";
|
|
10
|
+
/**
|
|
11
|
+
* @deprecated use useThreadMessages or useStreamingThreadMessages instead
|
|
12
|
+
* Use this hook to stream text from a server action, using the
|
|
13
|
+
* toTextStreamResponse or equivalent HTTP streaming endpoint returning text.
|
|
14
|
+
* @param url The URL of the server action to stream text from.
|
|
15
|
+
* e.g. https://....convex.site/yourendpoint
|
|
16
|
+
* @param threadId The ID of the thread to stream text from.
|
|
17
|
+
* @param token The auth token to use for the request.
|
|
18
|
+
* e.g. useAuthToken() from @convex-dev/auth/react
|
|
19
|
+
* @returns A tuple containing the {text, loading, error} and a function to call the endpoint
|
|
20
|
+
* with a given prompt, passing up { prompt, threadId } as the body in JSON.
|
|
21
|
+
*/
|
|
22
|
+
export function useStreamingText(url, threadId, token) {
|
|
23
|
+
const [text, setText] = useState("");
|
|
24
|
+
const [loading, setLoading] = useState(false);
|
|
25
|
+
const [error, setError] = useState(null);
|
|
26
|
+
const readStream = useMemo(() => async (prompt) => {
|
|
27
|
+
if (!threadId)
|
|
28
|
+
return;
|
|
29
|
+
try {
|
|
30
|
+
setText("");
|
|
31
|
+
setLoading(true);
|
|
32
|
+
setError(null);
|
|
33
|
+
const response = await fetch(url, {
|
|
34
|
+
method: "POST",
|
|
35
|
+
headers: {
|
|
36
|
+
"Content-Type": "application/json",
|
|
37
|
+
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
|
38
|
+
},
|
|
39
|
+
body: JSON.stringify({ prompt, threadId }),
|
|
40
|
+
});
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
43
|
+
}
|
|
44
|
+
if (!response.body) {
|
|
45
|
+
throw new Error("No body");
|
|
46
|
+
}
|
|
47
|
+
const reader = response.body.getReader();
|
|
48
|
+
const decoder = new TextDecoder();
|
|
49
|
+
let accumulatedText = "";
|
|
50
|
+
while (true) {
|
|
51
|
+
const { done, value } = await reader.read();
|
|
52
|
+
if (done) {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
accumulatedText += decoder.decode(value);
|
|
56
|
+
setText(accumulatedText);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
if (e instanceof Error && e.name !== "AbortError") {
|
|
61
|
+
setError(e);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
setLoading(false);
|
|
66
|
+
}
|
|
67
|
+
}, [threadId, token, url]);
|
|
68
|
+
return [{ text, loading, error }, readStream];
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAkB,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAEL,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAwB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAW,EACX,QAAuB,EACvB,KAAc;IAEd,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAG,OAAO,CACxB,GAAG,EAAE,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;QAC7B,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,IAAI,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,CAAC;YACZ,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvD;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;aAC3C,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;YAClC,IAAI,eAAe,GAAG,EAAE,CAAC;YAEzB,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM;gBACR,CAAC;gBACD,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzC,OAAO,CAAC,eAAe,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAClD,QAAQ,CAAC,CAAC,CAAC,CAAC;YACd,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EACD,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CACvB,CAAC;IACF,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,CAAU,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { MessageDoc, StreamArgs } from "../validators.js";
|
|
2
|
+
import type { OptimisticLocalStore } from "convex/browser";
|
|
3
|
+
import type { UIMessage } from "../UIMessages.js";
|
|
4
|
+
import type { FunctionReference, PaginationOptions, PaginationResult } from "convex/server";
|
|
5
|
+
import type { SyncStreamsReturnValue } from "@convex-dev/agent";
|
|
6
|
+
/**
|
|
7
|
+
* Adds a sent message to the end of a list of messages, so it shows up until
|
|
8
|
+
* the message is saved on the server and arrives in the query.
|
|
9
|
+
* It generates a message with fields that match both MessageDoc and UIMessage,
|
|
10
|
+
* for convenience. It will not include any other fields you might have in your
|
|
11
|
+
* regular query, however.
|
|
12
|
+
*
|
|
13
|
+
* @param query The query used to fetch messages, typically with
|
|
14
|
+
* useThreadMessages or useUIMessages.
|
|
15
|
+
* @returns A function that can be used to optimistically send a message.
|
|
16
|
+
* If your mutation takes different arguments than { threadId, prompt }, you can
|
|
17
|
+
* use it as a helper function in your optimistic update:
|
|
18
|
+
* ```ts
|
|
19
|
+
* const sendMessage = useMutation(
|
|
20
|
+
* api.chatStreaming.streamStoryAsynchronously,
|
|
21
|
+
* ).withOptimisticUpdate(
|
|
22
|
+
* (store, args) => {
|
|
23
|
+
* optimisticallySendMessage(api.chatStreaming.listThreadMessages)(store, {
|
|
24
|
+
* threadId:
|
|
25
|
+
* prompt: whatever you would have passed to the mutation,
|
|
26
|
+
* })
|
|
27
|
+
* }
|
|
28
|
+
* );
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function optimisticallySendMessage(query: FunctionReference<"query", "public", {
|
|
32
|
+
threadId: string;
|
|
33
|
+
paginationOpts: PaginationOptions;
|
|
34
|
+
streamArgs?: StreamArgs;
|
|
35
|
+
}, PaginationResult<MessageDoc | UIMessage> & {
|
|
36
|
+
streams?: SyncStreamsReturnValue;
|
|
37
|
+
}>): (store: OptimisticLocalStore, args: {
|
|
38
|
+
threadId: string;
|
|
39
|
+
prompt: string;
|
|
40
|
+
}) => void;
|
|
41
|
+
export declare function randomUUID(): string;
|
|
42
|
+
//# sourceMappingURL=optimisticallySendMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimisticallySendMessage.d.ts","sourceRoot":"","sources":["../../src/react/optimisticallySendMessage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,iBAAiB,CACtB,OAAO,EACP,QAAQ,EACR;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,iBAAiB,CAAC;IAClC,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,EACD,gBAAgB,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG;IACzC,OAAO,CAAC,EAAE,sBAAsB,CAAC;CAClC,CACF,GACA,CACD,KAAK,EAAE,oBAAoB,EAC3B,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KACvC,IAAI,CAoCR;AAED,wBAAgB,UAAU,WAWzB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { insertAtTop } from "convex/react";
|
|
2
|
+
/**
|
|
3
|
+
* Adds a sent message to the end of a list of messages, so it shows up until
|
|
4
|
+
* the message is saved on the server and arrives in the query.
|
|
5
|
+
* It generates a message with fields that match both MessageDoc and UIMessage,
|
|
6
|
+
* for convenience. It will not include any other fields you might have in your
|
|
7
|
+
* regular query, however.
|
|
8
|
+
*
|
|
9
|
+
* @param query The query used to fetch messages, typically with
|
|
10
|
+
* useThreadMessages or useUIMessages.
|
|
11
|
+
* @returns A function that can be used to optimistically send a message.
|
|
12
|
+
* If your mutation takes different arguments than { threadId, prompt }, you can
|
|
13
|
+
* use it as a helper function in your optimistic update:
|
|
14
|
+
* ```ts
|
|
15
|
+
* const sendMessage = useMutation(
|
|
16
|
+
* api.chatStreaming.streamStoryAsynchronously,
|
|
17
|
+
* ).withOptimisticUpdate(
|
|
18
|
+
* (store, args) => {
|
|
19
|
+
* optimisticallySendMessage(api.chatStreaming.listThreadMessages)(store, {
|
|
20
|
+
* threadId:
|
|
21
|
+
* prompt: whatever you would have passed to the mutation,
|
|
22
|
+
* })
|
|
23
|
+
* }
|
|
24
|
+
* );
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function optimisticallySendMessage(query) {
|
|
28
|
+
return (store, args) => {
|
|
29
|
+
const queries = store.getAllQueries(query);
|
|
30
|
+
let maxOrder = -1;
|
|
31
|
+
for (const q of queries) {
|
|
32
|
+
if (q.args?.threadId !== args.threadId)
|
|
33
|
+
continue;
|
|
34
|
+
if (q.args.streamArgs)
|
|
35
|
+
continue;
|
|
36
|
+
for (const m of q.value?.page ?? []) {
|
|
37
|
+
maxOrder = Math.max(maxOrder, m.order);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const order = maxOrder + 1;
|
|
41
|
+
const stepOrder = 0;
|
|
42
|
+
const id = randomUUID();
|
|
43
|
+
const { prompt, ...rest } = args;
|
|
44
|
+
insertAtTop({
|
|
45
|
+
paginatedQuery: query,
|
|
46
|
+
argsToMatch: { threadId: args.threadId, streamArgs: undefined },
|
|
47
|
+
item: {
|
|
48
|
+
...rest,
|
|
49
|
+
_creationTime: Date.now(),
|
|
50
|
+
_id: id,
|
|
51
|
+
id,
|
|
52
|
+
key: `${args.threadId}-${order}-${stepOrder}`,
|
|
53
|
+
order,
|
|
54
|
+
stepOrder,
|
|
55
|
+
status: "pending",
|
|
56
|
+
tool: false,
|
|
57
|
+
message: { role: "user", content: prompt },
|
|
58
|
+
parts: [{ type: "text", text: prompt }],
|
|
59
|
+
role: "user",
|
|
60
|
+
text: prompt,
|
|
61
|
+
},
|
|
62
|
+
localQueryStore: store,
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export function randomUUID() {
|
|
67
|
+
if (typeof crypto !== "undefined" &&
|
|
68
|
+
typeof crypto.randomUUID === "function") {
|
|
69
|
+
return crypto.randomUUID();
|
|
70
|
+
}
|
|
71
|
+
return (Math.random().toString(36).substring(2, 15) +
|
|
72
|
+
Math.random().toString(36).substring(2, 15));
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=optimisticallySendMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimisticallySendMessage.js","sourceRoot":"","sources":["../../src/react/optimisticallySendMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAW3C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAWC;IAKD,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,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;YACzC,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC;QAC3B,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QACjC,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,GAAG,IAAI;gBACP,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;gBACzB,GAAG,EAAE,EAAE;gBACP,EAAE;gBACF,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,SAAS,EAAE;gBAC7C,KAAK;gBACL,SAAS;gBACT,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;gBAC1C,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gBACvC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;aACb;YACD,eAAe,EAAE,KAAK;SACvB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IACE,OAAO,MAAM,KAAK,WAAW;QAC7B,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EACvC,CAAC;QACD,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO,CACL,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAC5C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BetterOmit, Expand } from "convex-helpers";
|
|
2
|
+
import type { FunctionArgs, FunctionReference } from "convex/server";
|
|
3
|
+
import type { SyncStreamsReturnValue } from "../client/types.js";
|
|
4
|
+
import type { StreamArgs } from "../validators.js";
|
|
5
|
+
export type StreamQuery<Args = Record<string, unknown>> = FunctionReference<"query", "public", {
|
|
6
|
+
threadId: string;
|
|
7
|
+
streamArgs?: StreamArgs;
|
|
8
|
+
} & Args, {
|
|
9
|
+
streams: SyncStreamsReturnValue;
|
|
10
|
+
}>;
|
|
11
|
+
export type StreamQueryArgs<Query extends StreamQuery<unknown>> = Query extends StreamQuery<unknown> ? Expand<BetterOmit<FunctionArgs<Query>, "streamArgs">> : never;
|
|
12
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,iBAAiB,CACzE,OAAO,EACP,QAAQ,EACR;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,GAAG,IAAI,EACR;IAAE,OAAO,EAAE,sBAAsB,CAAA;CAAE,CACpC,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,KAAK,SAAS,WAAW,CAAC,OAAO,CAAC,IAC5D,KAAK,SAAS,WAAW,CAAC,OAAO,CAAC,GAC9B,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC,GACrD,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/react/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { StreamQuery, StreamQueryArgs } from "./types.js";
|
|
2
|
+
import type { StreamDelta, StreamMessage } from "../validators.js";
|
|
3
|
+
export declare function useDeltaStreams<Query extends StreamQuery<any> = StreamQuery<object>>(query: Query, args: StreamQueryArgs<Query> | "skip", options?: {
|
|
4
|
+
startOrder?: number;
|
|
5
|
+
skipStreamIds?: string[];
|
|
6
|
+
}): {
|
|
7
|
+
streamMessage: StreamMessage;
|
|
8
|
+
deltas: StreamDelta[];
|
|
9
|
+
}[] | undefined;
|
|
10
|
+
//# sourceMappingURL=useDeltaStreams.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDeltaStreams.d.ts","sourceRoot":"","sources":["../../src/react/useDeltaStreams.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG/D,OAAO,KAAK,EAAc,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAM/E,wBAAgB,eAAe,CAC7B,KAAK,SAAS,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,EAEpD,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,MAAM,EACrC,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,GACA;IAAE,aAAa,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,EAAE,GAAG,SAAS,CA2IvE"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { sorted } from "../shared.js";
|
|
3
|
+
import { useQuery } from "convex/react";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import { assert } from "convex-helpers";
|
|
6
|
+
export function useDeltaStreams(query, args, options) {
|
|
7
|
+
// We hold onto and modify state directly to avoid re-running unnecessarily.
|
|
8
|
+
const [state] = useState({
|
|
9
|
+
startOrder: options?.startOrder ?? 0,
|
|
10
|
+
deltaStreams: undefined,
|
|
11
|
+
threadId: args === "skip" ? undefined : args.threadId,
|
|
12
|
+
});
|
|
13
|
+
const [cursors, setCursors] = useState({});
|
|
14
|
+
if (args !== "skip" && state.threadId !== args.threadId) {
|
|
15
|
+
state.threadId = args.threadId;
|
|
16
|
+
state.deltaStreams = undefined;
|
|
17
|
+
state.startOrder = options?.startOrder ?? 0;
|
|
18
|
+
setCursors({});
|
|
19
|
+
}
|
|
20
|
+
if (state.deltaStreams?.length ||
|
|
21
|
+
(options?.startOrder && options.startOrder < state.startOrder)) {
|
|
22
|
+
const cacheFriendlyStartOrder = options?.startOrder
|
|
23
|
+
? // round down to the nearest 10 for some cache benefits
|
|
24
|
+
options.startOrder - (options.startOrder % 10)
|
|
25
|
+
: 0;
|
|
26
|
+
if (cacheFriendlyStartOrder !== state.startOrder) {
|
|
27
|
+
state.startOrder = cacheFriendlyStartOrder;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Get all the active streams
|
|
31
|
+
const streamList = useQuery(query, args === "skip"
|
|
32
|
+
? args
|
|
33
|
+
: {
|
|
34
|
+
...args,
|
|
35
|
+
streamArgs: {
|
|
36
|
+
kind: "list",
|
|
37
|
+
startOrder: state.startOrder,
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
const streamMessages = args === "skip"
|
|
41
|
+
? undefined
|
|
42
|
+
: !streamList
|
|
43
|
+
? state.deltaStreams?.map(({ streamMessage }) => streamMessage)
|
|
44
|
+
: sorted(streamList.streams.messages.filter(({ streamId, order }) => !options?.skipStreamIds?.includes(streamId) &&
|
|
45
|
+
(!options?.startOrder || order >= options.startOrder)));
|
|
46
|
+
// When no active streams remain, clear the stale state so we stop
|
|
47
|
+
// returning old streaming UIMessages.
|
|
48
|
+
if (streamMessages !== undefined && streamMessages.length === 0) {
|
|
49
|
+
state.deltaStreams = undefined;
|
|
50
|
+
}
|
|
51
|
+
// Get the deltas for all the active streams, if any.
|
|
52
|
+
const cursorQuery = useQuery(query, args === "skip" || !streamMessages?.length
|
|
53
|
+
? "skip"
|
|
54
|
+
: {
|
|
55
|
+
...args,
|
|
56
|
+
streamArgs: {
|
|
57
|
+
kind: "deltas",
|
|
58
|
+
cursors: streamMessages.map(({ streamId }) => ({
|
|
59
|
+
streamId,
|
|
60
|
+
cursor: cursors[streamId] ?? 0,
|
|
61
|
+
})),
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
const newDeltas = cursorQuery?.streams.deltas;
|
|
65
|
+
if (newDeltas?.length && streamMessages) {
|
|
66
|
+
const newDeltasByStreamId = new Map();
|
|
67
|
+
for (const delta of newDeltas) {
|
|
68
|
+
const oldCursor = cursors[delta.streamId];
|
|
69
|
+
if (oldCursor && delta.start < oldCursor)
|
|
70
|
+
continue;
|
|
71
|
+
const existing = newDeltasByStreamId.get(delta.streamId);
|
|
72
|
+
if (existing) {
|
|
73
|
+
const previousEnd = existing.at(-1).end;
|
|
74
|
+
assert(previousEnd === delta.start, `Gap found in deltas for ${delta.streamId} jumping to ${delta.start} from ${previousEnd}`);
|
|
75
|
+
existing.push(delta);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
assert(!oldCursor || oldCursor === delta.start, `Gap found - first delta after ${oldCursor} is ${delta.start} for stream ${delta.streamId}`);
|
|
79
|
+
newDeltasByStreamId.set(delta.streamId, [delta]);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const newCursors = {};
|
|
83
|
+
for (const { streamId } of streamMessages) {
|
|
84
|
+
const cursor = newDeltasByStreamId.get(streamId)?.at(-1)?.end ?? cursors[streamId];
|
|
85
|
+
if (cursor !== undefined) {
|
|
86
|
+
newCursors[streamId] = cursor;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
setCursors(newCursors);
|
|
90
|
+
// we defensively create a new object so object identity matches contents
|
|
91
|
+
state.deltaStreams = streamMessages.map((streamMessage) => {
|
|
92
|
+
const streamId = streamMessage.streamId;
|
|
93
|
+
const old = state.deltaStreams?.find((ds) => ds.streamMessage.streamId === streamId);
|
|
94
|
+
const newDeltas = newDeltasByStreamId.get(streamId);
|
|
95
|
+
if (!newDeltas && streamMessage === old?.streamMessage) {
|
|
96
|
+
return old;
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
streamMessage,
|
|
100
|
+
deltas: [...(old?.deltas ?? []), ...(newDeltas ?? [])],
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return state.deltaStreams;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=useDeltaStreams.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDeltaStreams.js","sourceRoot":"","sources":["../../src/react/useDeltaStreams.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAMb,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,MAAM,UAAU,eAAe,CAG7B,KAAY,EACZ,IAAqC,EACrC,OAGC;IAED,4EAA4E;IAC5E,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CASrB;QACD,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,CAAC;QACpC,YAAY,EAAE,SAAS;QACvB,QAAQ,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;KACtD,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAyB,EAAE,CAAC,CAAC;IACnE,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxD,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC;QAC/B,KAAK,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC;QAC5C,UAAU,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IACE,KAAK,CAAC,YAAY,EAAE,MAAM;QAC1B,CAAC,OAAO,EAAE,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,EAC9D,CAAC;QACD,MAAM,uBAAuB,GAAG,OAAO,EAAE,UAAU;YACjD,CAAC,CAAC,uDAAuD;gBACvD,OAAO,CAAC,UAAU,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC;YAChD,CAAC,CAAC,CAAC,CAAC;QACN,IAAI,uBAAuB,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;YACjD,KAAK,CAAC,UAAU,GAAG,uBAAuB,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,UAAU,GAAG,QAAQ,CACzB,KAAK,EACL,IAAI,KAAK,MAAM;QACb,CAAC,CAAC,IAAI;QACN,CAAC,CAAE;YACC,GAAG,IAAI;YACP,UAAU,EAAE;gBACV,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE,KAAK,CAAC,UAAU;aACf;SACQ,CAGlB,CAAC;IAEd,MAAM,cAAc,GAClB,IAAI,KAAK,MAAM;QACb,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,CAAC,UAAU;YACX,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC;YAC/D,CAAC,CAAC,MAAM,CACJ,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAChC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CACtB,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC,QAAQ,CAAC;gBAC3C,CAAC,CAAC,OAAO,EAAE,UAAU,IAAI,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC,CACxD,CACF,CAAC;IAEV,kEAAkE;IAClE,sCAAsC;IACtC,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC;IACjC,CAAC;IAED,qDAAqD;IACrD,MAAM,WAAW,GAAG,QAAQ,CAC1B,KAAK,EACL,IAAI,KAAK,MAAM,IAAI,CAAC,cAAc,EAAE,MAAM;QACxC,CAAC,CAAE,MAAgB;QACnB,CAAC,CAAE;YACC,GAAG,IAAI;YACP,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC7C,QAAQ;oBACR,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;iBAC/B,CAAC,CAAC;aACU;SACQ,CAGlB,CAAC;IAEd,MAAM,SAAS,GAAG,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC;IAC9C,IAAI,SAAS,EAAE,MAAM,IAAI,cAAc,EAAE,CAAC;QACxC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAyB,CAAC;QAC7D,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,SAAS,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS;gBAAE,SAAS;YACnD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,WAAW,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC;gBACzC,MAAM,CACJ,WAAW,KAAK,KAAK,CAAC,KAAK,EAC3B,2BAA2B,KAAK,CAAC,QAAQ,eAAe,KAAK,CAAC,KAAK,SAAS,WAAW,EAAE,CAC1F,CAAC;gBACF,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,MAAM,CACJ,CAAC,SAAS,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK,EACvC,iCAAiC,SAAS,OAAO,KAAK,CAAC,KAAK,eAAe,KAAK,CAAC,QAAQ,EAAE,CAC5F,CAAC;gBACF,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QACD,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,cAAc,EAAE,CAAC;YAC1C,MAAM,MAAM,GACV,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;YAChC,CAAC;QACH,CAAC;QACD,UAAU,CAAC,UAAU,CAAC,CAAC;QAEvB,yEAAyE;QACzE,KAAK,CAAC,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;YACxD,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;YACxC,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,IAAI,CAClC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,KAAK,QAAQ,CAC/C,CAAC;YACF,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAI,CAAC,SAAS,IAAI,aAAa,KAAK,GAAG,EAAE,aAAa,EAAE,CAAC;gBACvD,OAAO,GAAG,CAAC;YACb,CAAC;YACD,OAAO;gBACL,aAAa;gBACb,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;aACvD,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC,YAAY,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type SmoothTextOptions = {
|
|
2
|
+
/**
|
|
3
|
+
* The number of characters to display per second.
|
|
4
|
+
*/
|
|
5
|
+
charsPerSec?: number;
|
|
6
|
+
/**
|
|
7
|
+
* Whether to initially start streaming.
|
|
8
|
+
* If this later turns to false, it'll continue streaming.
|
|
9
|
+
* This will start streaming the first value it sees.
|
|
10
|
+
*/
|
|
11
|
+
startStreaming?: boolean;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* A hook that smoothly displays text as it is streamed.
|
|
15
|
+
*
|
|
16
|
+
* @param text The text to display. Pass in the full text each time.
|
|
17
|
+
* @param charsPerSec The number of characters to display per second.
|
|
18
|
+
* @returns A tuple of the visible text and the state of the smooth text,
|
|
19
|
+
* including the current cursor position and whether it's still streaming.
|
|
20
|
+
* This allows you to decide if it's too far behind and you want to adjust
|
|
21
|
+
* the charsPerSec or just prefer the full text.
|
|
22
|
+
*/
|
|
23
|
+
export declare function useSmoothText(text: string, { charsPerSec, startStreaming, }?: SmoothTextOptions): [string, {
|
|
24
|
+
cursor: number;
|
|
25
|
+
isStreaming: boolean;
|
|
26
|
+
}];
|
|
27
|
+
//# sourceMappingURL=useSmoothText.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSmoothText.d.ts","sourceRoot":"","sources":["../../src/react/useSmoothText.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AACF;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,EACE,WAAmC,EACnC,cAAsB,GACvB,GAAE,iBAAsB,GACxB,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAwEpD"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from "react";
|
|
2
|
+
const FPS = 20;
|
|
3
|
+
const MS_PER_FRAME = 1000 / FPS;
|
|
4
|
+
const INITIAL_CHARS_PER_SEC = 128;
|
|
5
|
+
/**
|
|
6
|
+
* A hook that smoothly displays text as it is streamed.
|
|
7
|
+
*
|
|
8
|
+
* @param text The text to display. Pass in the full text each time.
|
|
9
|
+
* @param charsPerSec The number of characters to display per second.
|
|
10
|
+
* @returns A tuple of the visible text and the state of the smooth text,
|
|
11
|
+
* including the current cursor position and whether it's still streaming.
|
|
12
|
+
* This allows you to decide if it's too far behind and you want to adjust
|
|
13
|
+
* the charsPerSec or just prefer the full text.
|
|
14
|
+
*/
|
|
15
|
+
export function useSmoothText(text, { charsPerSec = INITIAL_CHARS_PER_SEC, startStreaming = false, } = {}) {
|
|
16
|
+
const [visibleText, setVisibleText] = useState(startStreaming ? "" : text || "");
|
|
17
|
+
const smoothState = useRef({
|
|
18
|
+
tick: Date.now(),
|
|
19
|
+
cursor: visibleText.length,
|
|
20
|
+
lastUpdate: Date.now(),
|
|
21
|
+
lastUpdateLength: text.length,
|
|
22
|
+
charsPerMs: charsPerSec / 1000,
|
|
23
|
+
initial: true,
|
|
24
|
+
});
|
|
25
|
+
const isStreaming = smoothState.current.cursor < text.length;
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (!isStreaming) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (smoothState.current.lastUpdateLength !== text.length) {
|
|
31
|
+
const timeSinceLastUpdate = Date.now() - smoothState.current.lastUpdate;
|
|
32
|
+
const latestCharsPerMs = (text.length - smoothState.current.lastUpdateLength) /
|
|
33
|
+
timeSinceLastUpdate;
|
|
34
|
+
// Is the rate increasing?
|
|
35
|
+
const rateError = latestCharsPerMs - smoothState.current.charsPerMs;
|
|
36
|
+
// Is our visible text falling behind what it could show?
|
|
37
|
+
const charLag = smoothState.current.lastUpdateLength - smoothState.current.cursor;
|
|
38
|
+
const lagRate = charLag / timeSinceLastUpdate;
|
|
39
|
+
const charsPerMs = latestCharsPerMs +
|
|
40
|
+
(smoothState.current.initial
|
|
41
|
+
? 0
|
|
42
|
+
: Math.max(0, (rateError + lagRate) / 2));
|
|
43
|
+
smoothState.current.initial = false;
|
|
44
|
+
// Smooth out the charsPerSec by weighting it with the previous value.
|
|
45
|
+
smoothState.current.charsPerMs = Math.min((2 * charsPerMs + smoothState.current.charsPerMs) / 3, smoothState.current.charsPerMs * 2);
|
|
46
|
+
}
|
|
47
|
+
smoothState.current.tick = Math.max(smoothState.current.tick, Date.now() - MS_PER_FRAME);
|
|
48
|
+
smoothState.current.lastUpdate = Date.now();
|
|
49
|
+
smoothState.current.lastUpdateLength = text.length;
|
|
50
|
+
function update() {
|
|
51
|
+
if (smoothState.current.cursor >= text.length) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const now = Date.now();
|
|
55
|
+
const timeSinceLastUpdate = now - smoothState.current.tick;
|
|
56
|
+
const charsSinceLastUpdate = Math.floor(timeSinceLastUpdate * smoothState.current.charsPerMs);
|
|
57
|
+
const chars = Math.min(charsSinceLastUpdate, text.length - smoothState.current.cursor);
|
|
58
|
+
smoothState.current.cursor += chars;
|
|
59
|
+
smoothState.current.tick += chars / smoothState.current.charsPerMs;
|
|
60
|
+
setVisibleText(text.slice(0, smoothState.current.cursor));
|
|
61
|
+
}
|
|
62
|
+
update();
|
|
63
|
+
const interval = setInterval(update, MS_PER_FRAME);
|
|
64
|
+
return () => clearInterval(interval);
|
|
65
|
+
}, [text, isStreaming, charsPerSec]);
|
|
66
|
+
return [visibleText, { cursor: smoothState.current.cursor, isStreaming }];
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=useSmoothText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSmoothText.js","sourceRoot":"","sources":["../../src/react/useSmoothText.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type UIDataTypes, type UITools } from "ai";
|
|
2
|
+
import type { StreamQuery, StreamQueryArgs } from "./types.js";
|
|
3
|
+
import { type UIMessage } from "../UIMessages.js";
|
|
4
|
+
/**
|
|
5
|
+
* A hook that fetches streaming messages from a thread and converts them to UIMessages
|
|
6
|
+
* using AI SDK's readUIMessageStream.
|
|
7
|
+
* This ONLY returns streaming UIMessages. To get both full and streaming messages,
|
|
8
|
+
* use `useUIMessages`.
|
|
9
|
+
*
|
|
10
|
+
* @param query The query to use to fetch messages.
|
|
11
|
+
* It must take as arguments `{ threadId, paginationOpts, streamArgs }` and
|
|
12
|
+
* return a `streams` object returned from `agent.syncStreams`.
|
|
13
|
+
* @param args The arguments to pass to the query other than `paginationOpts`
|
|
14
|
+
* and `streamArgs`. So `{ threadId }` at minimum, plus any other arguments that
|
|
15
|
+
* you want to pass to the query.
|
|
16
|
+
* @returns The streaming UIMessages.
|
|
17
|
+
*/
|
|
18
|
+
export declare function useStreamingUIMessages<METADATA = unknown, DATA_PARTS extends UIDataTypes = UIDataTypes, TOOLS extends UITools = UITools, Query extends StreamQuery<any> = StreamQuery<object>>(query: Query, args: StreamQueryArgs<Query> | "skip", options?: {
|
|
19
|
+
startOrder?: number;
|
|
20
|
+
skipStreamIds?: string[];
|
|
21
|
+
}): UIMessage<METADATA, DATA_PARTS, TOOLS>[] | undefined;
|
|
22
|
+
//# sourceMappingURL=useStreamingUIMessages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStreamingUIMessages.d.ts","sourceRoot":"","sources":["../../src/react/useStreamingUIMessages.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAuB,KAAK,OAAO,EAAE,MAAM,IAAI,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAiBlD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,GAAG,OAAO,EAClB,UAAU,SAAS,WAAW,GAAG,WAAW,EAC5C,KAAK,SAAS,OAAO,GAAG,OAAO,EAC/B,KAAK,SAAS,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,EAEpD,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,MAAM,EACrC,OAAO,CAAC,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,GAEA,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,GAAG,SAAS,CA8FtD"}
|