@assistant-ui/react-ai-sdk 1.1.1 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useExternalHistory.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useExternalHistory.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EAEpB,uBAAuB,EACvB,yBAAyB,EAG1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAA+B,SAAS,
|
|
1
|
+
{"version":3,"file":"useExternalHistory.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useExternalHistory.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EAEpB,uBAAuB,EACvB,yBAAyB,EAG1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAA+B,SAAS,EAAe,MAAM,OAAO,CAAC;AAI5E,eAAO,MAAM,2BAA2B,GAAI,QAAQ,EAClD,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,EAC3D,UAAU,uBAAuB,CAAC,QAAQ,CAAC,KAC1C,yBAWF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,QAAQ,EACzC,YAAY,SAAS,CAAC,gBAAgB,CAAC,EACvC,gBAAgB,oBAAoB,GAAG,SAAS,EAChD,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,EAC3D,sBAAsB,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,EACzD,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,IAAI,YAmG9C,CAAC"}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
INTERNAL,
|
|
7
7
|
useAssistantApi
|
|
8
8
|
} from "@assistant-ui/react";
|
|
9
|
-
import { useRef, useEffect, useState } from "react";
|
|
9
|
+
import { useRef, useEffect, useState, useCallback } from "react";
|
|
10
10
|
var { MessageRepository } = INTERNAL;
|
|
11
11
|
var toExportedMessageRepository = (toThreadMessages, messages) => {
|
|
12
12
|
return {
|
|
@@ -23,9 +23,13 @@ var toExportedMessageRepository = (toThreadMessages, messages) => {
|
|
|
23
23
|
var useExternalHistory = (runtimeRef, historyAdapter, toThreadMessages, storageFormatAdapter, onSetMessages) => {
|
|
24
24
|
const loadedRef = useRef(false);
|
|
25
25
|
const api = useAssistantApi();
|
|
26
|
+
const optionalThreadListItem = useCallback(
|
|
27
|
+
() => api.threadListItem.source ? api.threadListItem() : null,
|
|
28
|
+
[api]
|
|
29
|
+
);
|
|
26
30
|
const [isLoading, setIsLoading] = useState(
|
|
27
31
|
// we only load history if there is a remote id
|
|
28
|
-
() =>
|
|
32
|
+
() => optionalThreadListItem()?.getState().remoteId !== void 0
|
|
29
33
|
);
|
|
30
34
|
const historyIds = useRef(/* @__PURE__ */ new Set());
|
|
31
35
|
const onSetMessagesRef = useRef(() => onSetMessages);
|
|
@@ -59,13 +63,20 @@ var useExternalHistory = (runtimeRef, historyAdapter, toThreadMessages, storageF
|
|
|
59
63
|
};
|
|
60
64
|
if (!loadedRef.current) {
|
|
61
65
|
loadedRef.current = true;
|
|
62
|
-
if (!
|
|
66
|
+
if (!optionalThreadListItem()?.getState().remoteId) {
|
|
63
67
|
setIsLoading(false);
|
|
64
68
|
return;
|
|
65
69
|
}
|
|
66
70
|
loadHistory();
|
|
67
71
|
}
|
|
68
|
-
}, [
|
|
72
|
+
}, [
|
|
73
|
+
api,
|
|
74
|
+
historyAdapter,
|
|
75
|
+
storageFormatAdapter,
|
|
76
|
+
toThreadMessages,
|
|
77
|
+
runtimeRef,
|
|
78
|
+
optionalThreadListItem
|
|
79
|
+
]);
|
|
69
80
|
useEffect(() => {
|
|
70
81
|
return runtimeRef.current.thread.subscribe(async () => {
|
|
71
82
|
const { messages, isRunning } = runtimeRef.current.thread.getState();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/ui/use-chat/useExternalHistory.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n AssistantRuntime,\n ThreadHistoryAdapter,\n ThreadMessage,\n MessageFormatAdapter,\n getExternalStoreMessages,\n MessageFormatRepository,\n ExportedMessageRepository,\n INTERNAL,\n useAssistantApi,\n} from \"@assistant-ui/react\";\nimport { useRef, useEffect, useState, RefObject } from \"react\";\n\nconst { MessageRepository } = INTERNAL;\n\nexport const toExportedMessageRepository = <TMessage,>(\n toThreadMessages: (messages: TMessage[]) => ThreadMessage[],\n messages: MessageFormatRepository<TMessage>,\n): ExportedMessageRepository => {\n return {\n headId: messages.headId!,\n messages: messages.messages.map((m) => {\n const message = toThreadMessages([m.message])[0]!;\n return {\n ...m,\n message,\n };\n }),\n };\n};\n\nexport const useExternalHistory = <TMessage,>(\n runtimeRef: RefObject<AssistantRuntime>,\n historyAdapter: ThreadHistoryAdapter | undefined,\n toThreadMessages: (messages: TMessage[]) => ThreadMessage[],\n storageFormatAdapter: MessageFormatAdapter<TMessage, any>,\n onSetMessages: (messages: TMessage[]) => void,\n) => {\n const loadedRef = useRef(false);\n\n const api = useAssistantApi();\n const [isLoading, setIsLoading] = useState(\n // we only load history if there is a remote id\n () =>
|
|
1
|
+
{"version":3,"sources":["../../../src/ui/use-chat/useExternalHistory.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n AssistantRuntime,\n ThreadHistoryAdapter,\n ThreadMessage,\n MessageFormatAdapter,\n getExternalStoreMessages,\n MessageFormatRepository,\n ExportedMessageRepository,\n INTERNAL,\n useAssistantApi,\n} from \"@assistant-ui/react\";\nimport { useRef, useEffect, useState, RefObject, useCallback } from \"react\";\n\nconst { MessageRepository } = INTERNAL;\n\nexport const toExportedMessageRepository = <TMessage,>(\n toThreadMessages: (messages: TMessage[]) => ThreadMessage[],\n messages: MessageFormatRepository<TMessage>,\n): ExportedMessageRepository => {\n return {\n headId: messages.headId!,\n messages: messages.messages.map((m) => {\n const message = toThreadMessages([m.message])[0]!;\n return {\n ...m,\n message,\n };\n }),\n };\n};\n\nexport const useExternalHistory = <TMessage,>(\n runtimeRef: RefObject<AssistantRuntime>,\n historyAdapter: ThreadHistoryAdapter | undefined,\n toThreadMessages: (messages: TMessage[]) => ThreadMessage[],\n storageFormatAdapter: MessageFormatAdapter<TMessage, any>,\n onSetMessages: (messages: TMessage[]) => void,\n) => {\n const loadedRef = useRef(false);\n\n const api = useAssistantApi();\n const optionalThreadListItem = useCallback(\n () => (api.threadListItem.source ? api.threadListItem() : null),\n [api],\n );\n\n const [isLoading, setIsLoading] = useState(\n // we only load history if there is a remote id\n () => optionalThreadListItem()?.getState().remoteId !== undefined,\n );\n\n const historyIds = useRef(new Set<string>());\n\n const onSetMessagesRef = useRef<typeof onSetMessages>(() => onSetMessages);\n useEffect(() => {\n onSetMessagesRef.current = onSetMessages;\n });\n\n // Load messages from history adapter on mount\n useEffect(() => {\n if (!historyAdapter || loadedRef.current) return;\n\n const loadHistory = async () => {\n setIsLoading(true);\n try {\n const repo = await historyAdapter\n .withFormat?.(storageFormatAdapter)\n .load();\n if (repo && repo.messages.length > 0) {\n const converted = toExportedMessageRepository(toThreadMessages, repo);\n runtimeRef.current.thread.import(converted);\n\n const tempRepo = new MessageRepository();\n tempRepo.import(converted);\n const messages = tempRepo.getMessages();\n\n onSetMessagesRef.current(\n messages.map(getExternalStoreMessages<TMessage>).flat(),\n );\n\n historyIds.current = new Set(\n converted.messages.map((m) => m.message.id),\n );\n }\n } catch (error) {\n console.error(\"Failed to load message history:\", error);\n } finally {\n setIsLoading(false);\n }\n };\n\n if (!loadedRef.current) {\n loadedRef.current = true;\n if (!optionalThreadListItem()?.getState().remoteId) {\n setIsLoading(false);\n return;\n }\n\n loadHistory();\n }\n }, [\n api,\n historyAdapter,\n storageFormatAdapter,\n toThreadMessages,\n runtimeRef,\n optionalThreadListItem,\n ]);\n\n useEffect(() => {\n return runtimeRef.current.thread.subscribe(async () => {\n const { messages, isRunning } = runtimeRef.current.thread.getState();\n if (isRunning) return;\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i]!;\n if (\n message.status === undefined ||\n message.status.type === \"complete\" ||\n message.status.type === \"incomplete\"\n ) {\n if (historyIds.current.has(message.id)) continue;\n historyIds.current.add(message.id);\n\n const parentId = i > 0 ? messages[i - 1]!.id : null;\n await historyAdapter?.withFormat?.(storageFormatAdapter).append({\n parentId,\n message: getExternalStoreMessages<TMessage>(message)[0]!,\n });\n }\n }\n });\n }, [historyAdapter, storageFormatAdapter, runtimeRef]);\n\n return isLoading;\n};\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/react-ai-sdk",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -19,17 +19,17 @@
|
|
|
19
19
|
"sideEffects": false,
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@ai-sdk/provider": "^2.0.0",
|
|
22
|
-
"@ai-sdk/react": "^2.0.
|
|
23
|
-
"ai": "^5.0.
|
|
22
|
+
"@ai-sdk/react": "^2.0.56",
|
|
23
|
+
"ai": "^5.0.56",
|
|
24
24
|
"@radix-ui/react-use-callback-ref": "^1.1.1",
|
|
25
25
|
"@types/json-schema": "^7.0.15",
|
|
26
|
-
"assistant-stream": "^0.2.
|
|
26
|
+
"assistant-stream": "^0.2.31",
|
|
27
27
|
"json-schema": "^0.4.0",
|
|
28
|
-
"zod": "^4.
|
|
29
|
-
"zustand": "^5.0.
|
|
28
|
+
"zod": "^4.1.11",
|
|
29
|
+
"zustand": "^5.0.8"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"@assistant-ui/react": "^0.11.
|
|
32
|
+
"@assistant-ui/react": "^0.11.21",
|
|
33
33
|
"@types/react": "*",
|
|
34
34
|
"assistant-cloud": "*",
|
|
35
35
|
"react": "^18 || ^19 || ^19.0.0-rc"
|
|
@@ -43,13 +43,13 @@
|
|
|
43
43
|
}
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@types/node": "^24.
|
|
47
|
-
"@types/react": "^19.1.
|
|
46
|
+
"@types/node": "^24.5.2",
|
|
47
|
+
"@types/react": "^19.1.15",
|
|
48
48
|
"eslint": "^9",
|
|
49
|
-
"eslint-config-next": "15.4
|
|
49
|
+
"eslint-config-next": "15.5.4",
|
|
50
50
|
"react": "19.1.1",
|
|
51
|
-
"tsx": "^4.20.
|
|
52
|
-
"@assistant-ui/react": "0.11.
|
|
51
|
+
"tsx": "^4.20.6",
|
|
52
|
+
"@assistant-ui/react": "0.11.21",
|
|
53
53
|
"@assistant-ui/x-buildutils": "0.0.1"
|
|
54
54
|
},
|
|
55
55
|
"publishConfig": {
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
INTERNAL,
|
|
12
12
|
useAssistantApi,
|
|
13
13
|
} from "@assistant-ui/react";
|
|
14
|
-
import { useRef, useEffect, useState, RefObject } from "react";
|
|
14
|
+
import { useRef, useEffect, useState, RefObject, useCallback } from "react";
|
|
15
15
|
|
|
16
16
|
const { MessageRepository } = INTERNAL;
|
|
17
17
|
|
|
@@ -41,9 +41,14 @@ export const useExternalHistory = <TMessage,>(
|
|
|
41
41
|
const loadedRef = useRef(false);
|
|
42
42
|
|
|
43
43
|
const api = useAssistantApi();
|
|
44
|
+
const optionalThreadListItem = useCallback(
|
|
45
|
+
() => (api.threadListItem.source ? api.threadListItem() : null),
|
|
46
|
+
[api],
|
|
47
|
+
);
|
|
48
|
+
|
|
44
49
|
const [isLoading, setIsLoading] = useState(
|
|
45
50
|
// we only load history if there is a remote id
|
|
46
|
-
() =>
|
|
51
|
+
() => optionalThreadListItem()?.getState().remoteId !== undefined,
|
|
47
52
|
);
|
|
48
53
|
|
|
49
54
|
const historyIds = useRef(new Set<string>());
|
|
@@ -88,14 +93,21 @@ export const useExternalHistory = <TMessage,>(
|
|
|
88
93
|
|
|
89
94
|
if (!loadedRef.current) {
|
|
90
95
|
loadedRef.current = true;
|
|
91
|
-
if (!
|
|
96
|
+
if (!optionalThreadListItem()?.getState().remoteId) {
|
|
92
97
|
setIsLoading(false);
|
|
93
98
|
return;
|
|
94
99
|
}
|
|
95
100
|
|
|
96
101
|
loadHistory();
|
|
97
102
|
}
|
|
98
|
-
}, [
|
|
103
|
+
}, [
|
|
104
|
+
api,
|
|
105
|
+
historyAdapter,
|
|
106
|
+
storageFormatAdapter,
|
|
107
|
+
toThreadMessages,
|
|
108
|
+
runtimeRef,
|
|
109
|
+
optionalThreadListItem,
|
|
110
|
+
]);
|
|
99
111
|
|
|
100
112
|
useEffect(() => {
|
|
101
113
|
return runtimeRef.current.thread.subscribe(async () => {
|