@assistant-ui/react-ai-sdk 1.3.13 → 1.3.15
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/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/injectQuoteContext.d.ts +24 -0
- package/dist/injectQuoteContext.d.ts.map +1 -0
- package/dist/injectQuoteContext.js +58 -0
- package/dist/injectQuoteContext.js.map +1 -0
- package/dist/ui/use-chat/useAISDKRuntime.d.ts.map +1 -1
- package/dist/ui/use-chat/useAISDKRuntime.js +8 -0
- package/dist/ui/use-chat/useAISDKRuntime.js.map +1 -1
- package/dist/ui/use-chat/useChatRuntime.js +3 -3
- package/dist/ui/use-chat/useChatRuntime.js.map +1 -1
- package/dist/ui/utils/convertMessage.d.ts.map +1 -1
- package/package.json +10 -15
- package/src/index.ts +5 -1
- package/src/injectQuoteContext.ts +62 -0
- package/src/ui/use-chat/useAISDKRuntime.ts +9 -0
- package/src/ui/use-chat/useChatRuntime.ts +4 -4
- package/dist/ui/index.d.ts +0 -5
- package/dist/ui/index.d.ts.map +0 -1
- package/dist/ui/index.js +0 -4
- package/dist/ui/index.js.map +0 -1
- package/src/ui/index.ts +0 -4
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
/// <reference types="@assistant-ui/core/store" />
|
|
2
2
|
/// <reference types="@assistant-ui/core/react" />
|
|
3
|
-
export
|
|
3
|
+
export { useAISDKRuntime } from "./ui/use-chat/useAISDKRuntime.js";
|
|
4
|
+
export { useChatRuntime } from "./ui/use-chat/useChatRuntime.js";
|
|
5
|
+
export type { UseChatRuntimeOptions } from "./ui/use-chat/useChatRuntime.js";
|
|
6
|
+
export { AssistantChatTransport } from "./ui/use-chat/AssistantChatTransport.js";
|
|
4
7
|
export { frontendTools } from "./frontendTools.js";
|
|
8
|
+
export { injectQuoteContext } from "./injectQuoteContext.js";
|
|
5
9
|
export type { ThreadTokenUsage, TokenUsageExtractableMessage } from "./usage.js";
|
|
6
10
|
export { getThreadMessageTokenUsage, useThreadTokenUsage } from "./usage.js";
|
|
7
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,yCAAsC;AAChE,OAAO,EAAE,cAAc,EAAE,wCAAqC;AAC9D,YAAY,EAAE,qBAAqB,EAAE,wCAAqC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,gDAA6C;AAC9E,OAAO,EAAE,aAAa,EAAE,2BAAwB;AAChD,OAAO,EAAE,kBAAkB,EAAE,gCAA6B;AAC1D,YAAY,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,mBAAgB;AAC9E,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,mBAAgB"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/// <reference types="@assistant-ui/core/store" />
|
|
2
2
|
/// <reference types="@assistant-ui/core/react" />
|
|
3
|
-
export
|
|
3
|
+
export { useAISDKRuntime } from "./ui/use-chat/useAISDKRuntime.js";
|
|
4
|
+
export { useChatRuntime } from "./ui/use-chat/useChatRuntime.js";
|
|
5
|
+
export { AssistantChatTransport } from "./ui/use-chat/AssistantChatTransport.js";
|
|
4
6
|
export { frontendTools } from "./frontendTools.js";
|
|
7
|
+
export { injectQuoteContext } from "./injectQuoteContext.js";
|
|
5
8
|
export { getThreadMessageTokenUsage, useThreadTokenUsage } from "./usage.js";
|
|
6
9
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,kDAAkD;AAElD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,kDAAkD;AAElD,OAAO,EAAE,eAAe,EAAE,yCAAsC;AAChE,OAAO,EAAE,cAAc,EAAE,wCAAqC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,gDAA6C;AAC9E,OAAO,EAAE,aAAa,EAAE,2BAAwB;AAChD,OAAO,EAAE,kBAAkB,EAAE,gCAA6B;AAE1D,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,mBAAgB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { UIMessage } from "ai";
|
|
2
|
+
/**
|
|
3
|
+
* Injects quote context into messages as markdown blockquotes.
|
|
4
|
+
*
|
|
5
|
+
* Use this in your route handler before `convertToModelMessages` so the LLM
|
|
6
|
+
* sees the quoted text that the user is referring to.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { convertToModelMessages, streamText } from "ai";
|
|
11
|
+
* import { injectQuoteContext } from "@assistant-ui/react-ai-sdk";
|
|
12
|
+
*
|
|
13
|
+
* export async function POST(req: Request) {
|
|
14
|
+
* const { messages } = await req.json();
|
|
15
|
+
* const result = streamText({
|
|
16
|
+
* model: myModel,
|
|
17
|
+
* messages: await convertToModelMessages(injectQuoteContext(messages)),
|
|
18
|
+
* });
|
|
19
|
+
* return result.toUIMessageStreamResponse();
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function injectQuoteContext(messages: UIMessage[]): UIMessage[];
|
|
24
|
+
//# sourceMappingURL=injectQuoteContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectQuoteContext.d.ts","sourceRoot":"","sources":["../src/injectQuoteContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAepC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAyBrE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const getQuoteText = (metadata) => {
|
|
2
|
+
if (!metadata || typeof metadata !== "object")
|
|
3
|
+
return undefined;
|
|
4
|
+
const custom = metadata.custom;
|
|
5
|
+
if (!custom || typeof custom !== "object")
|
|
6
|
+
return undefined;
|
|
7
|
+
const quote = custom.quote;
|
|
8
|
+
if (!quote || typeof quote !== "object")
|
|
9
|
+
return undefined;
|
|
10
|
+
const text = quote.text;
|
|
11
|
+
return typeof text === "string" ? text : undefined;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Injects quote context into messages as markdown blockquotes.
|
|
15
|
+
*
|
|
16
|
+
* Use this in your route handler before `convertToModelMessages` so the LLM
|
|
17
|
+
* sees the quoted text that the user is referring to.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* import { convertToModelMessages, streamText } from "ai";
|
|
22
|
+
* import { injectQuoteContext } from "@assistant-ui/react-ai-sdk";
|
|
23
|
+
*
|
|
24
|
+
* export async function POST(req: Request) {
|
|
25
|
+
* const { messages } = await req.json();
|
|
26
|
+
* const result = streamText({
|
|
27
|
+
* model: myModel,
|
|
28
|
+
* messages: await convertToModelMessages(injectQuoteContext(messages)),
|
|
29
|
+
* });
|
|
30
|
+
* return result.toUIMessageStreamResponse();
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function injectQuoteContext(messages) {
|
|
35
|
+
return messages.map((msg) => {
|
|
36
|
+
if (msg.role !== "user")
|
|
37
|
+
return msg;
|
|
38
|
+
const text = getQuoteText(msg.metadata);
|
|
39
|
+
if (!text)
|
|
40
|
+
return msg;
|
|
41
|
+
const blockquote = text
|
|
42
|
+
.split(/\r?\n/)
|
|
43
|
+
.map((line) => `> ${line}`)
|
|
44
|
+
.join("\n");
|
|
45
|
+
const alreadyInjected = msg.parts[0]?.type === "text" &&
|
|
46
|
+
msg.parts[0].text === `${blockquote}\n\n`;
|
|
47
|
+
if (alreadyInjected)
|
|
48
|
+
return msg;
|
|
49
|
+
return {
|
|
50
|
+
...msg,
|
|
51
|
+
parts: [
|
|
52
|
+
{ type: "text", text: `${blockquote}\n\n` },
|
|
53
|
+
...(msg.parts ?? []),
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=injectQuoteContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectQuoteContext.js","sourceRoot":"","sources":["../src/injectQuoteContext.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,CAAC,QAAiB,EAAsB,EAAE;IAC7D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEhE,MAAM,MAAM,GAAI,QAAoC,CAAC,MAAM,CAAC;IAC5D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAE5D,MAAM,KAAK,GAAI,MAAkC,CAAC,KAAK,CAAC;IACxD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAE1D,MAAM,IAAI,GAAI,KAAiC,CAAC,IAAI,CAAC;IACrD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAqB;IACtD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,GAAG,CAAC;QAEpC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO,GAAG,CAAC;QAEtB,MAAM,UAAU,GAAG,IAAI;aACpB,KAAK,CAAC,OAAO,CAAC;aACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;aAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,eAAe,GACnB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM;YAC7B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,UAAU,MAAM,CAAC;QAC5C,IAAI,eAAe;YAAE,OAAO,GAAG,CAAC;QAEhC,OAAO;YACL,GAAG,GAAG;YACN,KAAK,EAAE;gBACL,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,UAAU,MAAM,EAAE;gBACpD,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;aACrB;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAISDKRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useAISDKRuntime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAQzE,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAKhB,aAAa,
|
|
1
|
+
{"version":3,"file":"useAISDKRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useAISDKRuntime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAQzE,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAKhB,aAAa,EAEd,MAAM,oBAAoB,CAAC;AAiB5B,MAAM,MAAM,6BAA6B,GAAG,CAC1C,UAAU,SAAS,SAAS,GAAG,SAAS,EAExC,OAAO,EAAE,aAAa,KACnB,eAAe,CAAC,UAAU,CAAC,CAAC;AAEjC,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EACL,CAAC,WAAW,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,GAAG;QAC/C,OAAO,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;KAC5C,CAAC,GACF,SAAS,CAAC;IACd,eAAe,CAAC,EAAE,6BAA6B,CAAC;IAChD;;;;;;;OAOG;IACH,4BAA4B,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACpD,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EACtE,aAAa,UAAU,CAAC,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,EACnD,sFAIG,mBAAwB,qBA8O5B,CAAC"}
|
|
@@ -15,6 +15,7 @@ export const useAISDKRuntime = (chatHelpers, { adapters, toCreateMessage: custom
|
|
|
15
15
|
const contextAdapters = useRuntimeAdapters();
|
|
16
16
|
const [toolStatuses, setToolStatuses] = useState({});
|
|
17
17
|
const toolArgsKeyOrderCacheRef = useRef(new Map());
|
|
18
|
+
const lastRunConfigRef = useRef(undefined);
|
|
18
19
|
const hasExecutingTools = Object.values(toolStatuses).some((s) => s?.type === "executing");
|
|
19
20
|
const isRunning = chatHelpers.status === "submitted" ||
|
|
20
21
|
chatHelpers.status === "streaming" ||
|
|
@@ -47,6 +48,7 @@ export const useAISDKRuntime = (chatHelpers, { adapters, toCreateMessage: custom
|
|
|
47
48
|
tool: command.toolName,
|
|
48
49
|
toolCallId: command.toolCallId,
|
|
49
50
|
output: command.result,
|
|
51
|
+
options: { metadata: lastRunConfigRef.current },
|
|
50
52
|
});
|
|
51
53
|
}
|
|
52
54
|
},
|
|
@@ -129,6 +131,7 @@ export const useAISDKRuntime = (chatHelpers, { adapters, toCreateMessage: custom
|
|
|
129
131
|
await toolInvocations.abort();
|
|
130
132
|
},
|
|
131
133
|
onNew: async (message) => {
|
|
134
|
+
lastRunConfigRef.current = message.runConfig;
|
|
132
135
|
await completePendingToolCalls();
|
|
133
136
|
const createMessage = (customToCreateMessage ?? toCreateMessage)(message);
|
|
134
137
|
await chatHelpers.sendMessage(createMessage, {
|
|
@@ -136,6 +139,7 @@ export const useAISDKRuntime = (chatHelpers, { adapters, toCreateMessage: custom
|
|
|
136
139
|
});
|
|
137
140
|
},
|
|
138
141
|
onEdit: async (message) => {
|
|
142
|
+
lastRunConfigRef.current = message.runConfig;
|
|
139
143
|
const newMessages = sliceMessagesUntil(chatHelpers.messages, message.parentId);
|
|
140
144
|
chatHelpers.setMessages(newMessages);
|
|
141
145
|
const createMessage = (customToCreateMessage ?? toCreateMessage)(message);
|
|
@@ -144,17 +148,20 @@ export const useAISDKRuntime = (chatHelpers, { adapters, toCreateMessage: custom
|
|
|
144
148
|
});
|
|
145
149
|
},
|
|
146
150
|
onReload: async (parentId, config) => {
|
|
151
|
+
lastRunConfigRef.current = config.runConfig;
|
|
147
152
|
const newMessages = sliceMessagesUntil(chatHelpers.messages, parentId);
|
|
148
153
|
chatHelpers.setMessages(newMessages);
|
|
149
154
|
await chatHelpers.regenerate({ metadata: config.runConfig });
|
|
150
155
|
},
|
|
151
156
|
onAddToolResult: ({ toolCallId, result, isError }) => {
|
|
157
|
+
const options = { metadata: lastRunConfigRef.current };
|
|
152
158
|
if (isError) {
|
|
153
159
|
chatHelpers.addToolOutput({
|
|
154
160
|
state: "output-error",
|
|
155
161
|
tool: toolCallId,
|
|
156
162
|
toolCallId,
|
|
157
163
|
errorText: typeof result === "string" ? result : JSON.stringify(result),
|
|
164
|
+
options,
|
|
158
165
|
});
|
|
159
166
|
}
|
|
160
167
|
else {
|
|
@@ -163,6 +170,7 @@ export const useAISDKRuntime = (chatHelpers, { adapters, toCreateMessage: custom
|
|
|
163
170
|
tool: toolCallId,
|
|
164
171
|
toolCallId,
|
|
165
172
|
output: result,
|
|
173
|
+
options,
|
|
166
174
|
});
|
|
167
175
|
}
|
|
168
176
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAISDKRuntime.js","sourceRoot":"","sources":["../../../src/ui/use-chat/useAISDKRuntime.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"useAISDKRuntime.js","sourceRoot":"","sources":["../../../src/ui/use-chat/useAISDKRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useChat } from "@ai-sdk/react";
|
|
3
|
-
import { useCloudThreadListAdapter
|
|
3
|
+
import { useCloudThreadListAdapter, useRemoteThreadListRuntime, } from "@assistant-ui/core/react";
|
|
4
4
|
import { useAuiState } from "@assistant-ui/store";
|
|
5
5
|
import { useAISDKRuntime, } from "./useAISDKRuntime.js";
|
|
6
6
|
import { AssistantChatTransport } from "./AssistantChatTransport.js";
|
|
@@ -39,8 +39,8 @@ const useChatThreadRuntime = (options) => {
|
|
|
39
39
|
return runtime;
|
|
40
40
|
};
|
|
41
41
|
export const useChatRuntime = ({ cloud, ...options } = {}) => {
|
|
42
|
-
const cloudAdapter =
|
|
43
|
-
return
|
|
42
|
+
const cloudAdapter = useCloudThreadListAdapter({ cloud });
|
|
43
|
+
return useRemoteThreadListRuntime({
|
|
44
44
|
runtimeHook: function RuntimeHook() {
|
|
45
45
|
return useChatThreadRuntime(options);
|
|
46
46
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChatRuntime.js","sourceRoot":"","sources":["../../../src/ui/use-chat/useChatRuntime.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,OAAO,EAAkB,MAAM,eAAe,CAAC;AAGxD,OAAO,EACL,yBAAyB,
|
|
1
|
+
{"version":3,"file":"useChatRuntime.js","sourceRoot":"","sources":["../../../src/ui/use-chat/useChatRuntime.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,OAAO,EAAkB,MAAM,eAAe,CAAC;AAGxD,OAAO,EACL,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACL,eAAe,GAGhB,6BAA0B;AAE3B,OAAO,EAAE,sBAAsB,EAAE,oCAAiC;AAClE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AASnD,MAAM,uBAAuB,GAAG,CAC9B,SAAoC,EACT,EAAE;IAC7B,MAAM,YAAY,GAAG,MAAM,CAA4B,SAAS,CAAC,CAAC;IAClE,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CACH,IAAI,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE;QAC9B,GAAG,CAAC,CAAC,EAAE,IAAI;YACT,MAAM,GAAG,GACP,YAAY,CAAC,OAAO,CAAC,IAAuC,CAAC,CAAC;YAChE,OAAO,OAAO,GAAG,KAAK,UAAU;gBAC9B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;gBAChC,CAAC,CAAC,GAAG,CAAC;QACV,CAAC;KACF,CAAC,EACJ,EAAE,CACH,CAAC;IACF,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC3B,OAA2C,EACzB,EAAE;IACpB,MAAM,EACJ,QAAQ,EACR,SAAS,EAAE,gBAAgB,EAC3B,eAAe,EACf,GAAG,WAAW,EACf,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,MAAM,SAAS,GAAG,uBAAuB,CACvC,gBAAgB,IAAI,IAAI,sBAAsB,EAAE,CACjD,CAAC;IAEF,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC;QACnB,GAAG,WAAW;QACd,EAAE;QACF,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE;QACpC,QAAQ;QACR,GAAG,CAAC,eAAe,IAAI,EAAE,eAAe,EAAE,CAAC;KAC5C,CAAC,CAAC;IAEH,IAAI,SAAS,YAAY,sBAAsB,EAAE,CAAC;QAChD,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAA2C,EACvE,KAAK,EACL,GAAG,OAAO,KAC2B,EAAE,EAAoB,EAAE;IAC7D,MAAM,YAAY,GAAG,yBAAyB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,OAAO,0BAA0B,CAAC;QAChC,WAAW,EAAE,SAAS,WAAW;YAC/B,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,EAAE,YAAY;QACrB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/D,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,0BAA0B,CAAC;AAYlC,MAAM,MAAM,6BAA6B,GACvC,2BAA2B,CAAC,QAAQ,GAAG;IACrC,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;CAC5D,CAAC;AAmNJ,eAAO,MAAM,qBAAqB;;;;;;;;
|
|
1
|
+
{"version":3,"file":"convertMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/D,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,0BAA0B,CAAC;AAYlC,MAAM,MAAM,6BAA6B,GACvC,2BAA2B,CAAC,QAAQ,GAAG;IACrC,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;CAC5D,CAAC;AAmNJ,eAAO,MAAM,qBAAqB;;;;;;;;wHA7MU,qDACvB;uHAInB,qDACQ;;;CAiQT,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assistant-ui/react-ai-sdk",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.15",
|
|
4
4
|
"description": "Vercel AI SDK adapter for assistant-ui",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-sdk",
|
|
@@ -31,22 +31,19 @@
|
|
|
31
31
|
],
|
|
32
32
|
"sideEffects": false,
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@ai-sdk/react": "^3.0.
|
|
35
|
-
"
|
|
34
|
+
"@ai-sdk/react": "^3.0.136",
|
|
35
|
+
"@assistant-ui/core": "^0.1.8",
|
|
36
|
+
"@assistant-ui/store": "^0.2.4",
|
|
37
|
+
"ai": "^6.0.134",
|
|
38
|
+
"assistant-cloud": "*"
|
|
36
39
|
},
|
|
37
40
|
"peerDependencies": {
|
|
38
|
-
"@assistant-ui/core": "^0.1.3",
|
|
39
|
-
"@assistant-ui/store": "^0.2.2",
|
|
40
41
|
"@types/react": "*",
|
|
41
|
-
"assistant-cloud": "*",
|
|
42
42
|
"react": "^18 || ^19"
|
|
43
43
|
},
|
|
44
44
|
"peerDependenciesMeta": {
|
|
45
45
|
"@types/react": {
|
|
46
46
|
"optional": true
|
|
47
|
-
},
|
|
48
|
-
"assistant-cloud": {
|
|
49
|
-
"optional": true
|
|
50
47
|
}
|
|
51
48
|
},
|
|
52
49
|
"devDependencies": {
|
|
@@ -54,13 +51,11 @@
|
|
|
54
51
|
"@types/json-schema": "^7.0.15",
|
|
55
52
|
"@types/react": "^19.2.14",
|
|
56
53
|
"@types/react-dom": "^19.2.3",
|
|
57
|
-
"jsdom": "^
|
|
54
|
+
"jsdom": "^29.0.1",
|
|
58
55
|
"react": "^19.2.4",
|
|
59
|
-
"vitest": "^4.0
|
|
60
|
-
"@assistant-ui/
|
|
61
|
-
"
|
|
62
|
-
"@assistant-ui/x-buildutils": "0.0.2",
|
|
63
|
-
"assistant-stream": "0.3.4"
|
|
56
|
+
"vitest": "^4.1.0",
|
|
57
|
+
"@assistant-ui/x-buildutils": "0.0.3",
|
|
58
|
+
"assistant-stream": "0.3.7"
|
|
64
59
|
},
|
|
65
60
|
"publishConfig": {
|
|
66
61
|
"access": "public",
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
/// <reference types="@assistant-ui/core/store" />
|
|
2
2
|
/// <reference types="@assistant-ui/core/react" />
|
|
3
3
|
|
|
4
|
-
export
|
|
4
|
+
export { useAISDKRuntime } from "./ui/use-chat/useAISDKRuntime";
|
|
5
|
+
export { useChatRuntime } from "./ui/use-chat/useChatRuntime";
|
|
6
|
+
export type { UseChatRuntimeOptions } from "./ui/use-chat/useChatRuntime";
|
|
7
|
+
export { AssistantChatTransport } from "./ui/use-chat/AssistantChatTransport";
|
|
5
8
|
export { frontendTools } from "./frontendTools";
|
|
9
|
+
export { injectQuoteContext } from "./injectQuoteContext";
|
|
6
10
|
export type { ThreadTokenUsage, TokenUsageExtractableMessage } from "./usage";
|
|
7
11
|
export { getThreadMessageTokenUsage, useThreadTokenUsage } from "./usage";
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { UIMessage } from "ai";
|
|
2
|
+
|
|
3
|
+
const getQuoteText = (metadata: unknown): string | undefined => {
|
|
4
|
+
if (!metadata || typeof metadata !== "object") return undefined;
|
|
5
|
+
|
|
6
|
+
const custom = (metadata as Record<string, unknown>).custom;
|
|
7
|
+
if (!custom || typeof custom !== "object") return undefined;
|
|
8
|
+
|
|
9
|
+
const quote = (custom as Record<string, unknown>).quote;
|
|
10
|
+
if (!quote || typeof quote !== "object") return undefined;
|
|
11
|
+
|
|
12
|
+
const text = (quote as Record<string, unknown>).text;
|
|
13
|
+
return typeof text === "string" ? text : undefined;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Injects quote context into messages as markdown blockquotes.
|
|
18
|
+
*
|
|
19
|
+
* Use this in your route handler before `convertToModelMessages` so the LLM
|
|
20
|
+
* sees the quoted text that the user is referring to.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* import { convertToModelMessages, streamText } from "ai";
|
|
25
|
+
* import { injectQuoteContext } from "@assistant-ui/react-ai-sdk";
|
|
26
|
+
*
|
|
27
|
+
* export async function POST(req: Request) {
|
|
28
|
+
* const { messages } = await req.json();
|
|
29
|
+
* const result = streamText({
|
|
30
|
+
* model: myModel,
|
|
31
|
+
* messages: await convertToModelMessages(injectQuoteContext(messages)),
|
|
32
|
+
* });
|
|
33
|
+
* return result.toUIMessageStreamResponse();
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export function injectQuoteContext(messages: UIMessage[]): UIMessage[] {
|
|
38
|
+
return messages.map((msg) => {
|
|
39
|
+
if (msg.role !== "user") return msg;
|
|
40
|
+
|
|
41
|
+
const text = getQuoteText(msg.metadata);
|
|
42
|
+
if (!text) return msg;
|
|
43
|
+
|
|
44
|
+
const blockquote = text
|
|
45
|
+
.split(/\r?\n/)
|
|
46
|
+
.map((line) => `> ${line}`)
|
|
47
|
+
.join("\n");
|
|
48
|
+
|
|
49
|
+
const alreadyInjected =
|
|
50
|
+
msg.parts[0]?.type === "text" &&
|
|
51
|
+
msg.parts[0].text === `${blockquote}\n\n`;
|
|
52
|
+
if (alreadyInjected) return msg;
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
...msg,
|
|
56
|
+
parts: [
|
|
57
|
+
{ type: "text" as const, text: `${blockquote}\n\n` },
|
|
58
|
+
...(msg.parts ?? []),
|
|
59
|
+
],
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
}
|
|
@@ -18,6 +18,7 @@ import type {
|
|
|
18
18
|
MessageFormatItem,
|
|
19
19
|
MessageFormatRepository,
|
|
20
20
|
AppendMessage,
|
|
21
|
+
RunConfig,
|
|
21
22
|
} from "@assistant-ui/core";
|
|
22
23
|
import { getExternalStoreMessages } from "@assistant-ui/core";
|
|
23
24
|
import { sliceMessagesUntil } from "../utils/sliceMessagesUntil";
|
|
@@ -74,6 +75,7 @@ export const useAISDKRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(
|
|
|
74
75
|
const toolArgsKeyOrderCacheRef = useRef<Map<string, Map<string, string[]>>>(
|
|
75
76
|
new Map(),
|
|
76
77
|
);
|
|
78
|
+
const lastRunConfigRef = useRef<RunConfig | undefined>(undefined);
|
|
77
79
|
|
|
78
80
|
const hasExecutingTools = Object.values(toolStatuses).some(
|
|
79
81
|
(s) => s?.type === "executing",
|
|
@@ -117,6 +119,7 @@ export const useAISDKRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(
|
|
|
117
119
|
tool: command.toolName,
|
|
118
120
|
toolCallId: command.toolCallId,
|
|
119
121
|
output: command.result,
|
|
122
|
+
options: { metadata: lastRunConfigRef.current },
|
|
120
123
|
});
|
|
121
124
|
}
|
|
122
125
|
},
|
|
@@ -237,6 +240,7 @@ export const useAISDKRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(
|
|
|
237
240
|
await toolInvocations.abort();
|
|
238
241
|
},
|
|
239
242
|
onNew: async (message) => {
|
|
243
|
+
lastRunConfigRef.current = message.runConfig;
|
|
240
244
|
await completePendingToolCalls();
|
|
241
245
|
|
|
242
246
|
const createMessage = (
|
|
@@ -247,6 +251,7 @@ export const useAISDKRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(
|
|
|
247
251
|
});
|
|
248
252
|
},
|
|
249
253
|
onEdit: async (message) => {
|
|
254
|
+
lastRunConfigRef.current = message.runConfig;
|
|
250
255
|
const newMessages = sliceMessagesUntil(
|
|
251
256
|
chatHelpers.messages,
|
|
252
257
|
message.parentId,
|
|
@@ -261,12 +266,14 @@ export const useAISDKRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(
|
|
|
261
266
|
});
|
|
262
267
|
},
|
|
263
268
|
onReload: async (parentId: string | null, config) => {
|
|
269
|
+
lastRunConfigRef.current = config.runConfig;
|
|
264
270
|
const newMessages = sliceMessagesUntil(chatHelpers.messages, parentId);
|
|
265
271
|
chatHelpers.setMessages(newMessages);
|
|
266
272
|
|
|
267
273
|
await chatHelpers.regenerate({ metadata: config.runConfig });
|
|
268
274
|
},
|
|
269
275
|
onAddToolResult: ({ toolCallId, result, isError }) => {
|
|
276
|
+
const options = { metadata: lastRunConfigRef.current };
|
|
270
277
|
if (isError) {
|
|
271
278
|
chatHelpers.addToolOutput({
|
|
272
279
|
state: "output-error",
|
|
@@ -274,6 +281,7 @@ export const useAISDKRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(
|
|
|
274
281
|
toolCallId,
|
|
275
282
|
errorText:
|
|
276
283
|
typeof result === "string" ? result : JSON.stringify(result),
|
|
284
|
+
options,
|
|
277
285
|
});
|
|
278
286
|
} else {
|
|
279
287
|
chatHelpers.addToolOutput({
|
|
@@ -281,6 +289,7 @@ export const useAISDKRuntime = <UI_MESSAGE extends UIMessage = UIMessage>(
|
|
|
281
289
|
tool: toolCallId,
|
|
282
290
|
toolCallId,
|
|
283
291
|
output: result,
|
|
292
|
+
options,
|
|
284
293
|
});
|
|
285
294
|
}
|
|
286
295
|
},
|
|
@@ -4,8 +4,8 @@ import { useChat, type UIMessage } from "@ai-sdk/react";
|
|
|
4
4
|
import type { AssistantCloud } from "assistant-cloud";
|
|
5
5
|
import type { AssistantRuntime } from "@assistant-ui/core";
|
|
6
6
|
import {
|
|
7
|
-
useCloudThreadListAdapter
|
|
8
|
-
useRemoteThreadListRuntime
|
|
7
|
+
useCloudThreadListAdapter,
|
|
8
|
+
useRemoteThreadListRuntime,
|
|
9
9
|
} from "@assistant-ui/core/react";
|
|
10
10
|
import { useAuiState } from "@assistant-ui/store";
|
|
11
11
|
import {
|
|
@@ -84,8 +84,8 @@ export const useChatRuntime = <UI_MESSAGE extends UIMessage = UIMessage>({
|
|
|
84
84
|
cloud,
|
|
85
85
|
...options
|
|
86
86
|
}: UseChatRuntimeOptions<UI_MESSAGE> = {}): AssistantRuntime => {
|
|
87
|
-
const cloudAdapter =
|
|
88
|
-
return
|
|
87
|
+
const cloudAdapter = useCloudThreadListAdapter({ cloud });
|
|
88
|
+
return useRemoteThreadListRuntime({
|
|
89
89
|
runtimeHook: function RuntimeHook() {
|
|
90
90
|
return useChatThreadRuntime(options);
|
|
91
91
|
},
|
package/dist/ui/index.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export { useAISDKRuntime } from "./use-chat/useAISDKRuntime.js";
|
|
2
|
-
export { useChatRuntime } from "./use-chat/useChatRuntime.js";
|
|
3
|
-
export type { UseChatRuntimeOptions } from "./use-chat/useChatRuntime.js";
|
|
4
|
-
export { AssistantChatTransport } from "./use-chat/AssistantChatTransport.js";
|
|
5
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/ui/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,sCAAmC;AAC7D,OAAO,EAAE,cAAc,EAAE,qCAAkC;AAC3D,YAAY,EAAE,qBAAqB,EAAE,qCAAkC;AACvE,OAAO,EAAE,sBAAsB,EAAE,6CAA0C"}
|
package/dist/ui/index.js
DELETED
package/dist/ui/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,sCAAmC;AAC7D,OAAO,EAAE,cAAc,EAAE,qCAAkC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,6CAA0C"}
|
package/src/ui/index.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { useAISDKRuntime } from "./use-chat/useAISDKRuntime";
|
|
2
|
-
export { useChatRuntime } from "./use-chat/useChatRuntime";
|
|
3
|
-
export type { UseChatRuntimeOptions } from "./use-chat/useChatRuntime";
|
|
4
|
-
export { AssistantChatTransport } from "./use-chat/AssistantChatTransport";
|