@assistant-ui/react-ai-sdk 1.3.13 → 1.3.14
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/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 +8 -13
- package/src/index.ts +5 -1
- package/src/injectQuoteContext.ts +62 -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,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.14",
|
|
4
4
|
"description": "Vercel AI SDK adapter for assistant-ui",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-sdk",
|
|
@@ -32,21 +32,18 @@
|
|
|
32
32
|
"sideEffects": false,
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@ai-sdk/react": "^3.0.118",
|
|
35
|
-
"
|
|
35
|
+
"@assistant-ui/core": "^0.1.6",
|
|
36
|
+
"@assistant-ui/store": "^0.2.3",
|
|
37
|
+
"ai": "^6.0.116",
|
|
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": {
|
|
@@ -56,11 +53,9 @@
|
|
|
56
53
|
"@types/react-dom": "^19.2.3",
|
|
57
54
|
"jsdom": "^28.1.0",
|
|
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.6"
|
|
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
|
+
}
|
|
@@ -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";
|