@assistant-ui/react-ai-sdk 1.3.23 → 1.3.25
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/README.md +14 -40
- package/dist/frontendTools.d.ts +2 -6
- package/dist/frontendTools.d.ts.map +1 -1
- package/dist/frontendTools.js +35 -3
- package/dist/frontendTools.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/modelContentEnvelope.d.ts +14 -0
- package/dist/modelContentEnvelope.d.ts.map +1 -0
- package/dist/modelContentEnvelope.js +20 -0
- package/dist/modelContentEnvelope.js.map +1 -0
- package/dist/ui/resumable.d.ts +20 -0
- package/dist/ui/resumable.d.ts.map +1 -0
- package/dist/ui/resumable.js +25 -0
- package/dist/ui/resumable.js.map +1 -0
- package/dist/ui/use-chat/AssistantChatTransport.d.ts +7 -1
- package/dist/ui/use-chat/AssistantChatTransport.d.ts.map +1 -1
- package/dist/ui/use-chat/AssistantChatTransport.js +73 -2
- package/dist/ui/use-chat/AssistantChatTransport.js.map +1 -1
- package/dist/ui/use-chat/useAISDKRuntime.d.ts +17 -2
- package/dist/ui/use-chat/useAISDKRuntime.d.ts.map +1 -1
- package/dist/ui/use-chat/useAISDKRuntime.js +12 -2
- package/dist/ui/use-chat/useAISDKRuntime.js.map +1 -1
- package/dist/ui/use-chat/useChatRuntime.d.ts +2 -0
- package/dist/ui/use-chat/useChatRuntime.d.ts.map +1 -1
- package/dist/ui/use-chat/useChatRuntime.js +31 -1
- package/dist/ui/use-chat/useChatRuntime.js.map +1 -1
- package/dist/ui/utils/convertMessage.d.ts +4 -0
- package/dist/ui/utils/convertMessage.d.ts.map +1 -1
- package/dist/ui/utils/convertMessage.js +87 -5
- package/dist/ui/utils/convertMessage.js.map +1 -1
- package/package.json +4 -5
- package/src/frontendTools.test.ts +128 -0
- package/src/frontendTools.ts +41 -6
- package/src/index.ts +8 -0
- package/src/modelContentEnvelope.ts +39 -0
- package/src/ui/resumable.ts +42 -0
- package/src/ui/use-chat/AssistantChatTransport.ts +104 -3
- package/src/ui/use-chat/useAISDKRuntime.test.ts +50 -0
- package/src/ui/use-chat/useAISDKRuntime.ts +34 -1
- package/src/ui/use-chat/useChatRuntime.ts +38 -0
- package/src/ui/utils/convertMessage.test.ts +331 -0
- package/src/ui/utils/convertMessage.ts +107 -16
package/README.md
CHANGED
|
@@ -1,58 +1,32 @@
|
|
|
1
1
|
# `@assistant-ui/react-ai-sdk`
|
|
2
2
|
|
|
3
|
-
Vercel AI SDK integration for `@assistant-ui/react`.
|
|
3
|
+
[Vercel AI SDK](https://sdk.vercel.ai) v6 integration for `@assistant-ui/react`. Wraps the AI SDK chat in an assistant-ui runtime and forwards system messages and frontend tools through `AssistantChatTransport`.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Installation
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
```bash
|
|
8
|
+
npm install @assistant-ui/react @assistant-ui/react-ai-sdk
|
|
9
|
+
```
|
|
10
10
|
|
|
11
11
|
## Usage
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
```tsx
|
|
14
|
+
"use client";
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
import { useChatRuntime } from
|
|
17
|
-
import {
|
|
16
|
+
import { AssistantRuntimeProvider } from "@assistant-ui/react";
|
|
17
|
+
import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
|
|
18
|
+
import { Thread } from "@/components/assistant-ui/thread";
|
|
18
19
|
|
|
19
|
-
function
|
|
20
|
-
// By default, uses AssistantChatTransport which forwards system messages and tools
|
|
20
|
+
export function Chat() {
|
|
21
21
|
const runtime = useChatRuntime();
|
|
22
|
-
|
|
23
22
|
return (
|
|
24
23
|
<AssistantRuntimeProvider runtime={runtime}>
|
|
25
|
-
|
|
24
|
+
<Thread />
|
|
26
25
|
</AssistantRuntimeProvider>
|
|
27
26
|
);
|
|
28
27
|
}
|
|
29
28
|
```
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
When you need to customize the transport configuration:
|
|
34
|
-
|
|
35
|
-
```typescript
|
|
36
|
-
import { DefaultChatTransport } from "ai";
|
|
37
|
-
import { AssistantChatTransport } from "@assistant-ui/react-ai-sdk";
|
|
38
|
-
import { useChatRuntime } from "@assistant-ui/react-ai-sdk";
|
|
39
|
-
|
|
40
|
-
// Custom API URL while keeping system/tools forwarding
|
|
41
|
-
const runtime = useChatRuntime({
|
|
42
|
-
transport: new AssistantChatTransport({
|
|
43
|
-
api: "/my-custom-api/chat",
|
|
44
|
-
}),
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
// Or disable system/tools forwarding entirely
|
|
48
|
-
const runtime = useChatRuntime({
|
|
49
|
-
transport: new DefaultChatTransport(),
|
|
50
|
-
});
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
**Important:** When customizing the API URL, you must explicitly use `AssistantChatTransport` to keep frontend system messages and tools forwarding.
|
|
54
|
-
|
|
55
|
-
## AssistantChatTransport vs DefaultChatTransport
|
|
30
|
+
`useChatRuntime` defaults to `AssistantChatTransport`, which forwards frontend system messages and tool definitions to your backend. To customize the API URL, the cache, or other transport settings, pass a configured `AssistantChatTransport` to keep that forwarding behavior; pass `DefaultChatTransport` to opt out.
|
|
56
31
|
|
|
57
|
-
|
|
58
|
-
- **DefaultChatTransport**: Standard AI SDK transport without automatic forwarding
|
|
32
|
+
Full reference at [assistant-ui.com/docs/runtimes/ai-sdk](https://www.assistant-ui.com/docs/runtimes/ai-sdk).
|
package/dist/frontendTools.d.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
+
import { type ToolSet } from "ai";
|
|
1
2
|
import type { JSONSchema7 } from "json-schema";
|
|
2
3
|
export declare const frontendTools: (tools: Record<string, {
|
|
3
4
|
description?: string;
|
|
4
5
|
parameters: JSONSchema7;
|
|
5
|
-
}>) =>
|
|
6
|
-
[k: string]: {
|
|
7
|
-
inputSchema: import("ai").Schema<unknown>;
|
|
8
|
-
description?: string;
|
|
9
|
-
};
|
|
10
|
-
};
|
|
6
|
+
}>) => ToolSet;
|
|
11
7
|
//# sourceMappingURL=frontendTools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontendTools.d.ts","sourceRoot":"","sources":["../src/frontendTools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"frontendTools.d.ts","sourceRoot":"","sources":["../src/frontendTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAoC/C,eAAO,MAAM,aAAa,GACxB,OAAO,MAAM,CAAC,MAAM,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,WAAW,CAAA;CAAE,CAAC,KACvE,OAUW,CAAC"}
|
package/dist/frontendTools.js
CHANGED
|
@@ -1,9 +1,41 @@
|
|
|
1
1
|
import { jsonSchema } from "ai";
|
|
2
|
-
|
|
2
|
+
import { unwrapModelContentEnvelope } from "./modelContentEnvelope.js";
|
|
3
|
+
const toAISDKContent = (parts) => ({
|
|
4
|
+
type: "content",
|
|
5
|
+
value: parts.map((part) => {
|
|
6
|
+
if (part.type === "text") {
|
|
7
|
+
return { type: "text", text: part.text };
|
|
8
|
+
}
|
|
9
|
+
const isImage = part.mediaType.startsWith("image/");
|
|
10
|
+
return isImage
|
|
11
|
+
? {
|
|
12
|
+
type: "image-data",
|
|
13
|
+
data: part.data,
|
|
14
|
+
mediaType: part.mediaType,
|
|
15
|
+
}
|
|
16
|
+
: {
|
|
17
|
+
type: "file-data",
|
|
18
|
+
data: part.data,
|
|
19
|
+
mediaType: part.mediaType,
|
|
20
|
+
...(part.filename !== undefined && { filename: part.filename }),
|
|
21
|
+
};
|
|
22
|
+
}),
|
|
23
|
+
});
|
|
24
|
+
const defaultToModelOutput = ({ output }) => {
|
|
25
|
+
const { modelContent } = unwrapModelContentEnvelope(output);
|
|
26
|
+
if (modelContent !== undefined) {
|
|
27
|
+
return toAISDKContent(modelContent);
|
|
28
|
+
}
|
|
29
|
+
return typeof output === "string"
|
|
30
|
+
? { type: "text", value: output }
|
|
31
|
+
: { type: "json", value: (output ?? null) };
|
|
32
|
+
};
|
|
33
|
+
export const frontendTools = (tools) => Object.fromEntries(Object.entries(tools).map(([name, t]) => [
|
|
3
34
|
name,
|
|
4
35
|
{
|
|
5
|
-
...(
|
|
6
|
-
inputSchema: jsonSchema(
|
|
36
|
+
...(t.description !== undefined && { description: t.description }),
|
|
37
|
+
inputSchema: jsonSchema(t.parameters),
|
|
38
|
+
toModelOutput: defaultToModelOutput,
|
|
7
39
|
},
|
|
8
40
|
]));
|
|
9
41
|
//# sourceMappingURL=frontendTools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontendTools.js","sourceRoot":"","sources":["../src/frontendTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"frontendTools.js","sourceRoot":"","sources":["../src/frontendTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgB,MAAM,IAAI,CAAC;AAG9C,OAAO,EAAE,0BAA0B,EAAE,kCAA+B;AAEpE,MAAM,cAAc,GAAG,CAAC,KAAsC,EAAE,EAAE,CAAC,CAAC;IAClE,IAAI,EAAE,SAAkB;IACxB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACpD,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO,OAAO;YACZ,CAAC,CAAC;gBACE,IAAI,EAAE,YAAqB;gBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B;YACH,CAAC,CAAC;gBACE,IAAI,EAAE,WAAoB;gBAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;aAChE,CAAC;IACR,CAAC,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,EAAE,MAAM,EAAuB,EAAE,EAAE;IAC/D,MAAM,EAAE,YAAY,EAAE,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC5D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,cAAc,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,OAAO,MAAM,KAAK,QAAQ;QAC/B,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,KAAK,EAAE,MAAM,EAAE;QAC1C,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,KAAK,EAAE,CAAC,MAAM,IAAI,IAAI,CAAQ,EAAE,CAAC;AAChE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,KAAwE,EAC/D,EAAE,CACX,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACvC,IAAI;IACJ;QACE,GAAG,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAClE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;QACrC,aAAa,EAAE,oBAAoB;KACpC;CACF,CAAC,CACQ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ export { useAISDKRuntime } from "./ui/use-chat/useAISDKRuntime.js";
|
|
|
4
4
|
export { useChatRuntime } from "./ui/use-chat/useChatRuntime.js";
|
|
5
5
|
export type { UseChatRuntimeOptions } from "./ui/use-chat/useChatRuntime.js";
|
|
6
6
|
export { AssistantChatTransport } from "./ui/use-chat/AssistantChatTransport.js";
|
|
7
|
+
export { RESUMABLE_STREAM_ID_HEADER, createResumableSessionStorage, } from "./ui/resumable.js";
|
|
8
|
+
export type { AssistantChatResumableOptions, ResumableClientStorage, } from "./ui/resumable.js";
|
|
7
9
|
export { frontendTools } from "./frontendTools.js";
|
|
8
10
|
export { injectQuoteContext } from "./injectQuoteContext.js";
|
|
9
11
|
export type { ThreadTokenUsage, TokenUsageExtractableMessage } from "./usage.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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"}
|
|
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,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,0BAAuB;AACxB,YAAY,EACV,6BAA6B,EAC7B,sBAAsB,GACvB,0BAAuB;AACxB,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
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
export { useAISDKRuntime } from "./ui/use-chat/useAISDKRuntime.js";
|
|
4
4
|
export { useChatRuntime } from "./ui/use-chat/useChatRuntime.js";
|
|
5
5
|
export { AssistantChatTransport } from "./ui/use-chat/AssistantChatTransport.js";
|
|
6
|
+
export { RESUMABLE_STREAM_ID_HEADER, createResumableSessionStorage, } from "./ui/resumable.js";
|
|
6
7
|
export { frontendTools } from "./frontendTools.js";
|
|
7
8
|
export { injectQuoteContext } from "./injectQuoteContext.js";
|
|
8
9
|
export { getThreadMessageTokenUsage, useThreadTokenUsage } from "./usage.js";
|
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,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"}
|
|
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,EACL,0BAA0B,EAC1B,6BAA6B,GAC9B,0BAAuB;AAKxB,OAAO,EAAE,aAAa,EAAE,2BAAwB;AAChD,OAAO,EAAE,kBAAkB,EAAE,gCAA6B;AAE1D,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,mBAAgB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ToolModelContentPart } from "assistant-stream";
|
|
2
|
+
declare const ENVELOPE_KEY = "__aui_modelContent";
|
|
3
|
+
export type ModelContentEnvelope<TResult = unknown> = {
|
|
4
|
+
readonly [ENVELOPE_KEY]: readonly ToolModelContentPart[];
|
|
5
|
+
readonly value: TResult;
|
|
6
|
+
};
|
|
7
|
+
export declare function isModelContentEnvelope(value: unknown): value is ModelContentEnvelope;
|
|
8
|
+
export declare function wrapModelContentEnvelope<TResult>(result: TResult, modelContent: readonly ToolModelContentPart[]): ModelContentEnvelope<TResult>;
|
|
9
|
+
export declare function unwrapModelContentEnvelope(output: unknown): {
|
|
10
|
+
result: unknown;
|
|
11
|
+
modelContent?: readonly ToolModelContentPart[];
|
|
12
|
+
};
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=modelContentEnvelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelContentEnvelope.d.ts","sourceRoot":"","sources":["../src/modelContentEnvelope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,QAAA,MAAM,YAAY,uBAAuB,CAAC;AAE1C,MAAM,MAAM,oBAAoB,CAAC,OAAO,GAAG,OAAO,IAAI;IACpD,QAAQ,CAAC,CAAC,YAAY,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACzD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,oBAAoB,CAO/B;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAC9C,MAAM,EAAE,OAAO,EACf,YAAY,EAAE,SAAS,oBAAoB,EAAE,GAC5C,oBAAoB,CAAC,OAAO,CAAC,CAE/B;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG;IAC3D,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAChD,CAQA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const ENVELOPE_KEY = "__aui_modelContent";
|
|
2
|
+
export function isModelContentEnvelope(value) {
|
|
3
|
+
return (value != null &&
|
|
4
|
+
typeof value === "object" &&
|
|
5
|
+
ENVELOPE_KEY in value &&
|
|
6
|
+
Array.isArray(value[ENVELOPE_KEY]));
|
|
7
|
+
}
|
|
8
|
+
export function wrapModelContentEnvelope(result, modelContent) {
|
|
9
|
+
return { [ENVELOPE_KEY]: modelContent, value: result };
|
|
10
|
+
}
|
|
11
|
+
export function unwrapModelContentEnvelope(output) {
|
|
12
|
+
if (isModelContentEnvelope(output)) {
|
|
13
|
+
return {
|
|
14
|
+
result: output.value,
|
|
15
|
+
modelContent: output[ENVELOPE_KEY],
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
return { result: output };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=modelContentEnvelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelContentEnvelope.js","sourceRoot":"","sources":["../src/modelContentEnvelope.ts"],"names":[],"mappings":"AAEA,MAAM,YAAY,GAAG,oBAAoB,CAAC;AAO1C,MAAM,UAAU,sBAAsB,CACpC,KAAc;IAEd,OAAO,CACL,KAAK,IAAI,IAAI;QACb,OAAO,KAAK,KAAK,QAAQ;QACzB,YAAY,IAAI,KAAK;QACrB,KAAK,CAAC,OAAO,CAAE,KAAiC,CAAC,YAAY,CAAC,CAAC,CAChE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAAe,EACf,YAA6C;IAE7C,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAe;IAIxD,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,KAAK;YACpB,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;SACnC,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export { RESUMABLE_STREAM_ID_HEADER } from "assistant-stream/resumable";
|
|
2
|
+
export type ResumableClientStorage = {
|
|
3
|
+
getStreamId(): string | null;
|
|
4
|
+
setStreamId(id: string): void;
|
|
5
|
+
clear(): void;
|
|
6
|
+
};
|
|
7
|
+
/** `sessionStorage`-backed storage for the pending resumable stream id. */
|
|
8
|
+
export declare function createResumableSessionStorage(options?: {
|
|
9
|
+
key?: string;
|
|
10
|
+
}): ResumableClientStorage;
|
|
11
|
+
export type AssistantChatResumableOptions = {
|
|
12
|
+
storage: ResumableClientStorage;
|
|
13
|
+
resumeApi: string | ((streamId: string) => string);
|
|
14
|
+
/**
|
|
15
|
+
* Defaults to scanning for the AI SDK UIMessageStream `finish` marker.
|
|
16
|
+
* Cancellation never invokes this callback, only natural completion does.
|
|
17
|
+
*/
|
|
18
|
+
isFinishEvent?: (chunk: Uint8Array, accumulator: string) => boolean;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=resumable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resumable.d.ts","sourceRoot":"","sources":["../../src/ui/resumable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAIxE,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,IAAI,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAEF,2EAA2E;AAC3E,wBAAgB,6BAA6B,CAAC,OAAO,CAAC,EAAE;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,sBAAsB,CAgBzB;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,sBAAsB,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACnD;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;CACrE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
export { RESUMABLE_STREAM_ID_HEADER } from "assistant-stream/resumable";
|
|
3
|
+
const DEFAULT_STORAGE_KEY = "aui-resumable-stream-id";
|
|
4
|
+
/** `sessionStorage`-backed storage for the pending resumable stream id. */
|
|
5
|
+
export function createResumableSessionStorage(options) {
|
|
6
|
+
const key = options?.key ?? DEFAULT_STORAGE_KEY;
|
|
7
|
+
return {
|
|
8
|
+
getStreamId() {
|
|
9
|
+
if (typeof window === "undefined")
|
|
10
|
+
return null;
|
|
11
|
+
return window.sessionStorage.getItem(key);
|
|
12
|
+
},
|
|
13
|
+
setStreamId(id) {
|
|
14
|
+
if (typeof window === "undefined")
|
|
15
|
+
return;
|
|
16
|
+
window.sessionStorage.setItem(key, id);
|
|
17
|
+
},
|
|
18
|
+
clear() {
|
|
19
|
+
if (typeof window === "undefined")
|
|
20
|
+
return;
|
|
21
|
+
window.sessionStorage.removeItem(key);
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=resumable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resumable.js","sourceRoot":"","sources":["../../src/ui/resumable.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAExE,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AAQtD,2EAA2E;AAC3E,MAAM,UAAU,6BAA6B,CAAC,OAE7C;IACC,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,mBAAmB,CAAC;IAChD,OAAO;QACL,WAAW;YACT,IAAI,OAAO,MAAM,KAAK,WAAW;gBAAE,OAAO,IAAI,CAAC;YAC/C,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC;QACD,WAAW,CAAC,EAAE;YACZ,IAAI,OAAO,MAAM,KAAK,WAAW;gBAAE,OAAO;YAC1C,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,KAAK;YACH,IAAI,OAAO,MAAM,KAAK,WAAW;gBAAE,OAAO;YAC1C,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import type { AssistantRuntime, ThreadListItemRuntime } from "@assistant-ui/core";
|
|
2
2
|
import { DefaultChatTransport, type HttpChatTransportInitOptions, type UIMessage } from "ai";
|
|
3
|
+
import { type AssistantChatResumableOptions } from "../resumable.js";
|
|
3
4
|
type InitializableThreadListItem = Pick<ThreadListItemRuntime, "initialize">;
|
|
5
|
+
export type AssistantChatTransportInitOptions<UI_MESSAGE extends UIMessage> = HttpChatTransportInitOptions<UI_MESSAGE> & {
|
|
6
|
+
resumable?: AssistantChatResumableOptions;
|
|
7
|
+
};
|
|
4
8
|
export declare class AssistantChatTransport<UI_MESSAGE extends UIMessage> extends DefaultChatTransport<UI_MESSAGE> {
|
|
5
9
|
private runtime;
|
|
6
10
|
private getThreadListItem;
|
|
7
|
-
|
|
11
|
+
private readonly resumable;
|
|
12
|
+
constructor(initOptions?: AssistantChatTransportInitOptions<UI_MESSAGE>);
|
|
8
13
|
setRuntime(runtime: AssistantRuntime): void;
|
|
14
|
+
getResumableAdapter(): AssistantChatResumableOptions | undefined;
|
|
9
15
|
__internal_setGetThreadListItem(getter: () => InitializableThreadListItem | undefined): void;
|
|
10
16
|
}
|
|
11
17
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantChatTransport.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/AssistantChatTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,KAAK,4BAA4B,EACjC,KAAK,SAAS,EACf,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"AssistantChatTransport.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/AssistantChatTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,KAAK,4BAA4B,EACjC,KAAK,SAAS,EACf,MAAM,IAAI,CAAC;AAEZ,OAAO,EAEL,KAAK,6BAA6B,EACnC,wBAAqB;AAEtB,KAAK,2BAA2B,GAAG,IAAI,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;AAM7E,MAAM,MAAM,iCAAiC,CAAC,UAAU,SAAS,SAAS,IACxE,4BAA4B,CAAC,UAAU,CAAC,GAAG;IACzC,SAAS,CAAC,EAAE,6BAA6B,CAAC;CAC3C,CAAC;AAEJ,qBAAa,sBAAsB,CACjC,UAAU,SAAS,SAAS,CAC5B,SAAQ,oBAAoB,CAAC,UAAU,CAAC;IACxC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,iBAAiB,CAEX;IACd,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4C;gBAE1D,WAAW,CAAC,EAAE,iCAAiC,CAAC,UAAU,CAAC;IAkDvE,UAAU,CAAC,OAAO,EAAE,gBAAgB;IAIpC,mBAAmB,IAAI,6BAA6B,GAAG,SAAS;IAIhE,+BAA+B,CAC7B,MAAM,EAAE,MAAM,2BAA2B,GAAG,SAAS;CAIxD"}
|
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
import { DefaultChatTransport, } from "ai";
|
|
2
2
|
import { toToolsJSONSchema } from "assistant-stream";
|
|
3
|
+
import { RESUMABLE_STREAM_ID_HEADER, } from "../resumable.js";
|
|
4
|
+
const FINISH_MARKER = '"type":"finish"';
|
|
5
|
+
const FINISH_BUFFER_LIMIT = 4096;
|
|
6
|
+
const FINISH_BUFFER_TAIL = 1024;
|
|
3
7
|
export class AssistantChatTransport extends DefaultChatTransport {
|
|
4
8
|
runtime;
|
|
5
9
|
getThreadListItem;
|
|
10
|
+
resumable;
|
|
6
11
|
constructor(initOptions) {
|
|
12
|
+
const { resumable, ...rest } = initOptions ?? {};
|
|
13
|
+
const userFetch = rest.fetch;
|
|
14
|
+
const userPrepareReconnect = rest.prepareReconnectToStreamRequest;
|
|
7
15
|
super({
|
|
8
|
-
...
|
|
16
|
+
...rest,
|
|
17
|
+
...(resumable && {
|
|
18
|
+
fetch: wrapFetchWithResumable(resumable, userFetch),
|
|
19
|
+
prepareReconnectToStreamRequest: wrapPrepareReconnect(resumable, userPrepareReconnect),
|
|
20
|
+
}),
|
|
9
21
|
prepareSendMessagesRequest: async (options) => {
|
|
10
22
|
const context = this.runtime?.thread.getModelContext();
|
|
11
23
|
const threadListItem = this.getThreadListItem?.() ?? this.runtime?.threads.mainItem;
|
|
@@ -20,7 +32,7 @@ export class AssistantChatTransport extends DefaultChatTransport {
|
|
|
20
32
|
...options?.body,
|
|
21
33
|
},
|
|
22
34
|
};
|
|
23
|
-
const preparedRequest = await
|
|
35
|
+
const preparedRequest = await rest.prepareSendMessagesRequest?.(optionsEx);
|
|
24
36
|
return {
|
|
25
37
|
...preparedRequest,
|
|
26
38
|
body: preparedRequest?.body ?? {
|
|
@@ -34,12 +46,71 @@ export class AssistantChatTransport extends DefaultChatTransport {
|
|
|
34
46
|
};
|
|
35
47
|
},
|
|
36
48
|
});
|
|
49
|
+
this.resumable = resumable;
|
|
37
50
|
}
|
|
38
51
|
setRuntime(runtime) {
|
|
39
52
|
this.runtime = runtime;
|
|
40
53
|
}
|
|
54
|
+
getResumableAdapter() {
|
|
55
|
+
return this.resumable;
|
|
56
|
+
}
|
|
41
57
|
__internal_setGetThreadListItem(getter) {
|
|
42
58
|
this.getThreadListItem = getter;
|
|
43
59
|
}
|
|
44
60
|
}
|
|
61
|
+
function wrapFetchWithResumable(resumable, userFetch) {
|
|
62
|
+
const baseFetch = userFetch
|
|
63
|
+
? (input, init) => userFetch(input, init)
|
|
64
|
+
: globalThis.fetch.bind(globalThis);
|
|
65
|
+
return async (input, init) => {
|
|
66
|
+
const res = await baseFetch(input, init);
|
|
67
|
+
const id = res.headers.get(RESUMABLE_STREAM_ID_HEADER);
|
|
68
|
+
if (id)
|
|
69
|
+
resumable.storage.setStreamId(id);
|
|
70
|
+
if (!res.body)
|
|
71
|
+
return res;
|
|
72
|
+
const detectFinish = resumable.isFinishEvent ?? defaultIsFinishEvent;
|
|
73
|
+
// a single decoder is required so multi-byte sequences split across
|
|
74
|
+
// chunks buffer via stream: true rather than getting dropped.
|
|
75
|
+
const decoder = new TextDecoder();
|
|
76
|
+
let accumulator = "";
|
|
77
|
+
const tap = new TransformStream({
|
|
78
|
+
transform(chunk, controller) {
|
|
79
|
+
controller.enqueue(chunk);
|
|
80
|
+
accumulator += decoder.decode(chunk, { stream: true });
|
|
81
|
+
if (detectFinish(chunk, accumulator)) {
|
|
82
|
+
resumable.storage.clear();
|
|
83
|
+
accumulator = "";
|
|
84
|
+
}
|
|
85
|
+
else if (accumulator.length > FINISH_BUFFER_LIMIT) {
|
|
86
|
+
accumulator = accumulator.slice(-FINISH_BUFFER_TAIL);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
return new Response(res.body.pipeThrough(tap), {
|
|
91
|
+
status: res.status,
|
|
92
|
+
statusText: res.statusText,
|
|
93
|
+
headers: res.headers,
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function defaultIsFinishEvent(_chunk, accumulator) {
|
|
98
|
+
return accumulator.includes(FINISH_MARKER);
|
|
99
|
+
}
|
|
100
|
+
function wrapPrepareReconnect(resumable, userPrepareReconnect) {
|
|
101
|
+
return async (options) => {
|
|
102
|
+
const streamId = resumable.storage.getStreamId();
|
|
103
|
+
if (!streamId) {
|
|
104
|
+
throw new Error("AssistantChatTransport: no resumable stream id available; nothing to resume");
|
|
105
|
+
}
|
|
106
|
+
const api = typeof resumable.resumeApi === "function"
|
|
107
|
+
? resumable.resumeApi(streamId)
|
|
108
|
+
: resumable.resumeApi;
|
|
109
|
+
const userPrepared = await userPrepareReconnect?.({ ...options, api });
|
|
110
|
+
return {
|
|
111
|
+
...userPrepared,
|
|
112
|
+
api: userPrepared?.api ?? api,
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
}
|
|
45
116
|
//# sourceMappingURL=AssistantChatTransport.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantChatTransport.js","sourceRoot":"","sources":["../../../src/ui/use-chat/AssistantChatTransport.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,oBAAoB,GAGrB,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"AssistantChatTransport.js","sourceRoot":"","sources":["../../../src/ui/use-chat/AssistantChatTransport.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,oBAAoB,GAGrB,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,0BAA0B,GAE3B,wBAAqB;AAItB,MAAM,aAAa,GAAG,iBAAiB,CAAC;AACxC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAOhC,MAAM,OAAO,sBAEX,SAAQ,oBAAgC;IAChC,OAAO,CAA+B;IACtC,iBAAiB,CAEX;IACG,SAAS,CAA4C;IAEtE,YAAY,WAA2D;QACrE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,WAAW,IAAI,EAAE,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7B,MAAM,oBAAoB,GAAG,IAAI,CAAC,+BAA+B,CAAC;QAElE,KAAK,CAAC;YACJ,GAAG,IAAI;YACP,GAAG,CAAC,SAAS,IAAI;gBACf,KAAK,EAAE,sBAAsB,CAAC,SAAS,EAAE,SAAS,CAAC;gBACnD,+BAA+B,EAAE,oBAAoB,CACnD,SAAS,EACT,oBAAoB,CACrB;aACF,CAAC;YACF,0BAA0B,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;gBACvD,MAAM,cAAc,GAClB,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC;gBAC/D,MAAM,EAAE,GAAG,CAAC,MAAM,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,IAAI,OAAO,CAAC,EAAE,CAAC;gBAExE,MAAM,SAAS,GAAG;oBAChB,GAAG,OAAO;oBACV,IAAI,EAAE;wBACJ,YAAY,EAAE,OAAO,EAAE,YAAY;wBACnC,MAAM,EAAE,OAAO,EAAE,MAAM;wBACvB,MAAM,EAAE,OAAO,EAAE,MAAM;wBACvB,KAAK,EAAE,iBAAiB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;wBAC9C,GAAG,OAAO,EAAE,IAAI;qBACjB;iBACF,CAAC;gBACF,MAAM,eAAe,GACnB,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC,SAAS,CAAC,CAAC;gBAErD,OAAO;oBACL,GAAG,eAAe;oBAClB,IAAI,EAAE,eAAe,EAAE,IAAI,IAAI;wBAC7B,GAAG,SAAS,CAAC,IAAI;wBACjB,EAAE;wBACF,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;wBACxB,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,QAAQ,EAAE,OAAO,CAAC,eAAe;qBAClC;iBACF,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,UAAU,CAAC,OAAyB;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,+BAA+B,CAC7B,MAAqD;QAErD,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC;IAClC,CAAC;CACF;AAED,SAAS,sBAAsB,CAC7B,SAAwC,EACxC,SAA2D;IAE3D,MAAM,SAAS,GAA4B,SAAS;QAClD,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,KAA0B,EAAE,IAAI,CAAC;QAC9D,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEtC,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACvD,IAAI,EAAE;YAAE,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,OAAO,GAAG,CAAC;QAE1B,MAAM,YAAY,GAAG,SAAS,CAAC,aAAa,IAAI,oBAAoB,CAAC;QACrE,oEAAoE;QACpE,8DAA8D;QAC9D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,eAAe,CAAyB;YACtD,SAAS,CAAC,KAAK,EAAE,UAAU;gBACzB,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC1B,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvD,IAAI,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC;oBACrC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC1B,WAAW,GAAG,EAAE,CAAC;gBACnB,CAAC;qBAAM,IAAI,WAAW,CAAC,MAAM,GAAG,mBAAmB,EAAE,CAAC;oBACpD,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;YAC7C,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAkB,EAAE,WAAmB;IACnE,OAAO,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,oBAAoB,CAC3B,SAAwC,EACxC,oBAAgG;IAIhG,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GACP,OAAO,SAAS,CAAC,SAAS,KAAK,UAAU;YACvC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC;YAC/B,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;QAC1B,MAAM,YAAY,GAAG,MAAM,oBAAoB,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QACvE,OAAO;YACL,GAAG,YAAY;YACf,GAAG,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG;SAC9B,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { UIMessage, useChat, CreateUIMessage } from "@ai-sdk/react";
|
|
2
|
-
import type { ExternalStoreAdapter, ThreadHistoryAdapter, AssistantRuntime, AppendMessage } from "@assistant-ui/core";
|
|
2
|
+
import type { ExternalStoreAdapter, ThreadHistoryAdapter, AssistantRuntime, ThreadSuggestion, AppendMessage } from "@assistant-ui/core";
|
|
3
3
|
export type CustomToCreateMessageFunction = <UI_MESSAGE extends UIMessage = UIMessage>(message: AppendMessage) => CreateUIMessage<UI_MESSAGE>;
|
|
4
4
|
export type AISDKRuntimeAdapter = {
|
|
5
5
|
adapters?: (NonNullable<ExternalStoreAdapter["adapters"]> & {
|
|
@@ -15,6 +15,21 @@ export type AISDKRuntimeAdapter = {
|
|
|
15
15
|
* @default true
|
|
16
16
|
*/
|
|
17
17
|
cancelPendingToolCallsOnSend?: boolean | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Called when `runtime.thread.resumeRun(config)` is invoked.
|
|
20
|
+
*
|
|
21
|
+
* When omitted, `resumeRun` throws `"Runtime does not support resuming runs."`.
|
|
22
|
+
* Provide this to bridge resume invocations into a custom replay channel
|
|
23
|
+
* (for example, an SSE reconnect endpoint keyed by turn id).
|
|
24
|
+
*/
|
|
25
|
+
onResume?: ExternalStoreAdapter["onResume"];
|
|
26
|
+
/**
|
|
27
|
+
* Follow up suggestions to surface on the thread. Use this to drive
|
|
28
|
+
* dynamic suggestions from application state, tool results, or backend
|
|
29
|
+
* responses; flows into `thread.suggestions` and is rendered by
|
|
30
|
+
* components that read it (such as the shadcn `ThreadFollowupSuggestions`).
|
|
31
|
+
*/
|
|
32
|
+
suggestions?: readonly ThreadSuggestion[] | undefined;
|
|
18
33
|
};
|
|
19
|
-
export declare const useAISDKRuntime: <UI_MESSAGE extends UIMessage = UIMessage>(chatHelpers: ReturnType<typeof useChat<UI_MESSAGE>>, { adapters, toCreateMessage: customToCreateMessage, cancelPendingToolCallsOnSend, }?: AISDKRuntimeAdapter) => AssistantRuntime;
|
|
34
|
+
export declare const useAISDKRuntime: <UI_MESSAGE extends UIMessage = UIMessage>(chatHelpers: ReturnType<typeof useChat<UI_MESSAGE>>, { adapters, toCreateMessage: customToCreateMessage, cancelPendingToolCallsOnSend, onResume, suggestions, }?: AISDKRuntimeAdapter) => AssistantRuntime;
|
|
20
35
|
//# sourceMappingURL=useAISDKRuntime.d.ts.map
|
|
@@ -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,
|
|
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,EAEhB,gBAAgB,EAIhB,aAAa,EAGd,MAAM,oBAAoB,CAAC;AAmB5B,MAAM,MAAM,6BAA6B,GAAG,CAC1C,UAAU,SAAS,SAAS,GAAG,SAAS,EAExC,OAAO,EAAE,aAAa,KACnB,eAAe,CAAC,UAAU,CAAC,CAAC;AAYjC,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;IACnD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC5C;;;;;OAKG;IACH,WAAW,CAAC,EAAE,SAAS,gBAAgB,EAAE,GAAG,SAAS,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EACtE,aAAa,UAAU,CAAC,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,EACnD,6GAMG,mBAAwB,qBAwQ5B,CAAC"}
|
|
@@ -8,6 +8,7 @@ import { toCreateMessage } from "../utils/toCreateMessage.js";
|
|
|
8
8
|
import { vercelAttachmentAdapter } from "../utils/vercelAttachmentAdapter.js";
|
|
9
9
|
import { getVercelAIMessages } from "../getVercelAIMessages.js";
|
|
10
10
|
import { AISDKMessageConverter } from "../utils/convertMessage.js";
|
|
11
|
+
import { wrapModelContentEnvelope } from "../../modelContentEnvelope.js";
|
|
11
12
|
import { aiSDKV6FormatAdapter, } from "../adapters/aiSDKFormatAdapter.js";
|
|
12
13
|
import { useExternalHistory, toExportedMessageRepository, } from "./useExternalHistory.js";
|
|
13
14
|
import { useStreamingTiming } from "./useStreamingTiming.js";
|
|
@@ -16,10 +17,12 @@ const toUIMessage = (createMessage, fallbackRole) => ({
|
|
|
16
17
|
id: createMessage.id ?? generateId(),
|
|
17
18
|
role: createMessage.role ?? fallbackRole,
|
|
18
19
|
});
|
|
19
|
-
export const useAISDKRuntime = (chatHelpers, { adapters, toCreateMessage: customToCreateMessage, cancelPendingToolCallsOnSend = true, } = {}) => {
|
|
20
|
+
export const useAISDKRuntime = (chatHelpers, { adapters, toCreateMessage: customToCreateMessage, cancelPendingToolCallsOnSend = true, onResume, suggestions, } = {}) => {
|
|
20
21
|
const contextAdapters = useRuntimeAdapters();
|
|
21
22
|
const [toolStatuses, setToolStatuses] = useState({});
|
|
22
23
|
const toolArgsKeyOrderCacheRef = useRef(new Map());
|
|
24
|
+
const toolLastInputCacheRef = useRef(new Map());
|
|
25
|
+
const mcpAppMetadataCacheRef = useRef(new Map());
|
|
23
26
|
const lastRunConfigRef = useRef(undefined);
|
|
24
27
|
const hasExecutingTools = Object.values(toolStatuses).some((s) => s?.type === "executing");
|
|
25
28
|
const isRunning = chatHelpers.status === "submitted" ||
|
|
@@ -33,6 +36,8 @@ export const useAISDKRuntime = (chatHelpers, { adapters, toCreateMessage: custom
|
|
|
33
36
|
toolStatuses,
|
|
34
37
|
messageTiming,
|
|
35
38
|
toolArgsKeyOrderCache: toolArgsKeyOrderCacheRef.current,
|
|
39
|
+
toolLastInputCache: toolLastInputCacheRef.current,
|
|
40
|
+
mcpAppMetadataCache: mcpAppMetadataCacheRef.current,
|
|
36
41
|
...(chatHelpers.error && { error: chatHelpers.error.message }),
|
|
37
42
|
}), [toolStatuses, messageTiming, chatHelpers.error]),
|
|
38
43
|
});
|
|
@@ -49,10 +54,13 @@ export const useAISDKRuntime = (chatHelpers, { adapters, toCreateMessage: custom
|
|
|
49
54
|
getTools: () => runtimeRef.current.thread.getModelContext().tools,
|
|
50
55
|
onResult: (command) => {
|
|
51
56
|
if (command.type === "add-tool-result") {
|
|
57
|
+
const output = command.modelContent !== undefined
|
|
58
|
+
? wrapModelContentEnvelope(command.result, command.modelContent)
|
|
59
|
+
: command.result;
|
|
52
60
|
chatHelpers.addToolResult({
|
|
53
61
|
tool: command.toolName,
|
|
54
62
|
toolCallId: command.toolCallId,
|
|
55
|
-
output
|
|
63
|
+
output,
|
|
56
64
|
options: { metadata: lastRunConfigRef.current },
|
|
57
65
|
});
|
|
58
66
|
}
|
|
@@ -193,6 +201,8 @@ export const useAISDKRuntime = (chatHelpers, { adapters, toCreateMessage: custom
|
|
|
193
201
|
}
|
|
194
202
|
},
|
|
195
203
|
onResumeToolCall: (options) => toolInvocations.resume(options.toolCallId, options.payload),
|
|
204
|
+
...(onResume && { onResume }),
|
|
205
|
+
...(suggestions && { suggestions }),
|
|
196
206
|
adapters: {
|
|
197
207
|
attachments: vercelAttachmentAdapter,
|
|
198
208
|
...contextAdapters,
|
|
@@ -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,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,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":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,GAEnB,MAAM,0BAA0B,CAAC;AAclC,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,kBAAkB,EAAE,uCAAoC;AACjE,OAAO,EAAE,eAAe,EAAE,oCAAiC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,4CAAyC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,kCAA+B;AAC7D,OAAO,EAAE,qBAAqB,EAAE,mCAAgC;AAChE,OAAO,EAAE,wBAAwB,EAAE,sCAAmC;AACtE,OAAO,EAEL,oBAAoB,GACrB,0CAAuC;AACxC,OAAO,EACL,kBAAkB,EAClB,2BAA2B,GAC5B,gCAA6B;AAC9B,OAAO,EAAE,kBAAkB,EAAE,gCAA6B;AAQ1D,MAAM,WAAW,GAAG,CAClB,aAA0C,EAC1C,YAAgC,EACpB,EAAE,CACd,CAAC;IACC,GAAG,aAAa;IAChB,EAAE,EAAE,aAAa,CAAC,EAAE,IAAI,UAAU,EAAE;IACpC,IAAI,EAAE,aAAa,CAAC,IAAI,IAAI,YAAY;CACzC,CAAe,CAAC;AAmCnB,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,WAAmD,EACnD,EACE,QAAQ,EACR,eAAe,EAAE,qBAAqB,EACtC,4BAA4B,GAAG,IAAI,EACnC,QAAQ,EACR,WAAW,MACY,EAAE,EAC3B,EAAE;IACF,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;IAC7C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAE9C,EAAE,CAAC,CAAC;IACN,MAAM,wBAAwB,GAAG,MAAM,CACrC,IAAI,GAAG,EAAE,CACV,CAAC;IACF,MAAM,qBAAqB,GAAG,MAAM,CAClC,IAAI,GAAG,EAAE,CACV,CAAC;IACF,MAAM,sBAAsB,GAAG,MAAM,CAA8B,IAAI,GAAG,EAAE,CAAC,CAAC;IAC9E,MAAM,gBAAgB,GAAG,MAAM,CAAwB,SAAS,CAAC,CAAC;IAElE,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CACxD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,WAAW,CAC/B,CAAC;IACF,MAAM,SAAS,GACb,WAAW,CAAC,MAAM,KAAK,WAAW;QAClC,WAAW,CAAC,MAAM,KAAK,WAAW;QAClC,iBAAiB,CAAC;IAEpB,MAAM,aAAa,GAAG,kBAAkB,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAE1E,MAAM,QAAQ,GAAG,qBAAqB,CAAC,iBAAiB,CAAC;QACvD,SAAS;QACT,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,QAAQ,EAAE,OAAO,CACf,GAAG,EAAE,CAAC,CAAC;YACL,YAAY;YACZ,aAAa;YACb,qBAAqB,EAAE,wBAAwB,CAAC,OAAO;YACvD,kBAAkB,EAAE,qBAAqB,CAAC,OAAO;YACjD,mBAAmB,EAAE,sBAAsB,CAAC,OAAO;YACnD,GAAG,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;SAC/D,CAAC,EACF,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,CAAC,KAAK,CAAC,CACjD;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,IAAI,OAAO;YACT,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,MAAM,eAAe,GAAG,kBAAkB,CAAC;QACzC,KAAK,EAAE;YACL,QAAQ;YACR,SAAS;SACV;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,KAAK;QACjE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE;YACpB,IAAI,OAAO,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACvC,MAAM,MAAM,GACV,OAAO,CAAC,YAAY,KAAK,SAAS;oBAChC,CAAC,CAAC,wBAAwB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC;oBAChE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;gBACrB,WAAW,CAAC,aAAa,CAAC;oBACxB,IAAI,EAAE,OAAO,CAAC,QAAQ;oBACtB,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM;oBACN,OAAO,EAAE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,OAAO,EAAE;iBAChD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,eAAe;KAChB,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,kBAAkB,CAClC,UAAU,EACV,QAAQ,EAAE,OAAO,IAAI,eAAe,EAAE,OAAO,EAC7C,qBAAqB,CAAC,gBAEF,EACpB,oBAGC,EACD,CAAC,QAAQ,EAAE,EAAE;QACX,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC,CACF,CAAC;IAEF,MAAM,wBAAwB,GAAG,KAAK,IAAI,EAAE;QAC1C,IAAI,CAAC,4BAA4B;YAAE,OAAO;QAE1C,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;QAE9B,2GAA2G;QAC3G,WAAW,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE;YACnC,MAAM,WAAW,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,WAAW,EAAE,IAAI,KAAK,WAAW;gBAAE,OAAO,QAAQ,CAAC;YAEvD,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAC;gBACrC,IAAI,IAAI,CAAC,KAAK,KAAK,kBAAkB,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc;oBACpE,OAAO,IAAI,CAAC;gBAEd,UAAU,GAAG,IAAI,CAAC;gBAClB,OAAO;oBACL,GAAG,IAAI;oBACP,KAAK,EAAE,cAAuB;oBAC9B,SAAS,EAAE,oDAAoD;iBAChE,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU;gBAAE,OAAO,QAAQ,CAAC;YACjC,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,uBAAuB,CAAC;QACtC,SAAS;QACT,QAAQ;QACR,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE,CACxB,WAAW,CAAC,WAAW,CACrB,QAAQ;aACL,GAAG,CAAC,CAAA,mBAA+B,CAAA,CAAC;aACpC,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,EAAE,CACV;QACH,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CACrB,WAAW,CAAC,WAAW,CACrB,QAAQ;aACL,GAAG,CAAC,CAAA,mBAA+B,CAAA,CAAC;aACpC,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,EAAE,CACV;QACH,qBAAqB,EAAE,GAAwC,EAAE;YAC/D,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAEpD,MAAM,gBAAgB,GAAoC,EAAE,CAAC;YAC7D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;YAEjD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACrC,MAAM,aAAa,GAAG,wBAAwB,CAC5C,IAAI,CAAC,OAAO,CACb,CAAC;gBACF,IAAI,QAAQ,GACV,IAAI,CAAC,QAAQ,IAAI,IAAI;oBACnB,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;oBACtD,CAAC,CAAC,IAAI,CAAC;gBACX,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;oBACzC,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;oBAC3D,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,YAAyB,CAAC,CAAC;gBACnE,CAAC;gBACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7B,cAAc,CAAC,GAAG,CAChB,IAAI,CAAC,OAAO,CAAC,EAAE,EACf,oBAAoB,CAAC,KAAK,CACxB,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAe,CACtD,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAwC;gBAClD,QAAQ,EAAE,gBAAgB;aAC3B,CAAC;YAEF,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;gBAC5B,MAAM,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC;YACzE,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,mBAAmB,EAAE,CAAC,IAAyC,EAAE,EAAE;YACjE,+DAA+D;YAC/D,MAAM,YAAY,GAAG,2BAA2B,CAC9C,qBAAqB,CAAC,gBAAgB,EACtC,IAAI,CACL,CAAC;YAEF,6CAA6C;YAC7C,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACjD,CAAC;QACD,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,WAAW,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;QACD,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACvB,MAAM,aAAa,GAAG,CACpB,qBAAqB,IAAI,eAAe,CACzC,CAAa,OAAO,CAAC,CAAC;YAEvB,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;gBACnD,WAAW,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;oBACnC,GAAG,OAAO;oBACV,WAAW,CAAa,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC;iBACrD,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,gBAAgB,CAAC,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC;YAC7C,MAAM,wBAAwB,EAAE,CAAC;YACjC,MAAM,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE;gBAC3C,QAAQ,EAAE,OAAO,CAAC,SAAS;aAC5B,CAAC,CAAC;QACL,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,aAAa,GAAG,CACpB,qBAAqB,IAAI,eAAe,CACzC,CAAa,OAAO,CAAC,CAAC;YAEvB,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;gBACnD,WAAW,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;oBACnC,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC;oBAChD,WAAW,CAAa,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC;iBACrD,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,gBAAgB,CAAC,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC;YAC7C,WAAW,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE,CAClC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAC9C,CAAC;YACF,MAAM,WAAW,CAAC,WAAW,CAAC,aAAa,EAAE;gBAC3C,QAAQ,EAAE,OAAO,CAAC,SAAS;aAC5B,CAAC,CAAC;QACL,CAAC;QACD,QAAQ,EAAE,KAAK,EAAE,QAAuB,EAAE,MAAM,EAAE,EAAE;YAClD,gBAAgB,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;YAC5C,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACvE,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAErC,MAAM,WAAW,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;YACnD,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC;YACvD,IAAI,OAAO,EAAE,CAAC;gBACZ,WAAW,CAAC,aAAa,CAAC;oBACxB,KAAK,EAAE,cAAc;oBACrB,IAAI,EAAE,UAAU;oBAChB,UAAU;oBACV,SAAS,EACP,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;oBAC9D,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,aAAa,CAAC;oBACxB,KAAK,EAAE,kBAAkB;oBACzB,IAAI,EAAE,UAAU;oBAChB,UAAU;oBACV,MAAM,EAAE,MAAM;oBACd,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,CAC5B,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC;QAC7D,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC7B,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;QACnC,QAAQ,EAAE;YACR,WAAW,EAAE,uBAAuB;YACpC,GAAG,eAAe;YAClB,GAAG,QAAQ;SACZ;QACD,SAAS;KACV,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -7,6 +7,8 @@ export type UseChatRuntimeOptions<UI_MESSAGE extends UIMessage = UIMessage> = Ch
|
|
|
7
7
|
cloud?: AssistantCloud | undefined;
|
|
8
8
|
adapters?: AISDKRuntimeAdapter["adapters"] | undefined;
|
|
9
9
|
toCreateMessage?: CustomToCreateMessageFunction;
|
|
10
|
+
onResume?: AISDKRuntimeAdapter["onResume"];
|
|
11
|
+
suggestions?: AISDKRuntimeAdapter["suggestions"];
|
|
10
12
|
};
|
|
11
13
|
export declare const useChatRuntime: <UI_MESSAGE extends UIMessage = UIMessage>({ cloud, ...options }?: UseChatRuntimeOptions<UI_MESSAGE>) => AssistantRuntime;
|
|
12
14
|
//# sourceMappingURL=useChatRuntime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChatRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useChatRuntime.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAM3D,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EACnC,6BAA0B;AAC3B,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"useChatRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useChatRuntime.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAM3D,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EACnC,6BAA0B;AAC3B,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,IAAI,CAAC;AAKlD,MAAM,MAAM,qBAAqB,CAAC,UAAU,SAAS,SAAS,GAAG,SAAS,IACxE,QAAQ,CAAC,UAAU,CAAC,GAAG;IACrB,KAAK,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;IACvD,eAAe,CAAC,EAAE,6BAA6B,CAAC;IAChD,QAAQ,CAAC,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC3C,WAAW,CAAC,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;CAClD,CAAC;AAyGJ,eAAO,MAAM,cAAc,GAAI,UAAU,SAAS,SAAS,GAAG,SAAS,EAAE,wBAGtE,qBAAqB,CAAC,UAAU,CAAM,KAAG,gBAU3C,CAAC"}
|