@assistant-ui/react 0.8.20 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/ThreadRuntime.d.ts.map +1 -1
- package/dist/api/ThreadRuntime.js +3 -1
- package/dist/api/ThreadRuntime.js.map +1 -1
- package/dist/api/ThreadRuntime.mjs +3 -1
- package/dist/api/ThreadRuntime.mjs.map +1 -1
- package/dist/cloud/AssistantCloudRuns.d.ts +2 -2
- package/dist/cloud/AssistantCloudRuns.d.ts.map +1 -1
- package/dist/cloud/AssistantCloudRuns.js.map +1 -1
- package/dist/cloud/AssistantCloudRuns.mjs.map +1 -1
- package/dist/cloud/auiV0.d.ts +1 -2
- package/dist/cloud/auiV0.d.ts.map +1 -1
- package/dist/cloud/auiV0.js.map +1 -1
- package/dist/cloud/auiV0.mjs.map +1 -1
- package/dist/context/react/AttachmentContext.d.ts +108 -108
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -3
- package/dist/index.mjs.map +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +4 -4
- package/dist/internal.js.map +1 -1
- package/dist/internal.mjs +3 -3
- package/dist/internal.mjs.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.js +5 -2
- package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
- package/dist/primitives/assistantModal/AssistantModalRoot.mjs +5 -2
- package/dist/primitives/assistantModal/AssistantModalRoot.mjs.map +1 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts +1 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.js +3 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.js.map +1 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs +3 -1
- package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/external-store/ThreadMessageLike.d.ts.map +1 -1
- package/dist/runtimes/external-store/ThreadMessageLike.js +2 -2
- package/dist/runtimes/external-store/ThreadMessageLike.js.map +1 -1
- package/dist/runtimes/external-store/ThreadMessageLike.mjs +1 -1
- package/dist/runtimes/external-store/ThreadMessageLike.mjs.map +1 -1
- package/dist/runtimes/index.d.ts +1 -2
- package/dist/runtimes/index.d.ts.map +1 -1
- package/dist/runtimes/index.js +6 -5
- package/dist/runtimes/index.js.map +1 -1
- package/dist/runtimes/index.mjs +7 -3
- package/dist/runtimes/index.mjs.map +1 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts.map +1 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.js +3 -3
- package/dist/runtimes/local/LocalThreadRuntimeCore.js.map +1 -1
- package/dist/runtimes/local/LocalThreadRuntimeCore.mjs +4 -4
- package/dist/runtimes/local/LocalThreadRuntimeCore.mjs.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/cloud.d.ts.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/cloud.js +2 -2
- package/dist/runtimes/remote-thread-list/adapter/cloud.js.map +1 -1
- package/dist/runtimes/remote-thread-list/adapter/cloud.mjs +2 -2
- package/dist/runtimes/remote-thread-list/adapter/cloud.mjs.map +1 -1
- package/dist/runtimes/{edge/streams → streams}/toolResultStream.d.ts +1 -1
- package/dist/runtimes/streams/toolResultStream.d.ts.map +1 -0
- package/dist/runtimes/{edge/streams → streams}/toolResultStream.js +1 -1
- package/dist/runtimes/streams/toolResultStream.js.map +1 -0
- package/dist/runtimes/{edge/streams → streams}/toolResultStream.mjs +1 -1
- package/dist/runtimes/streams/toolResultStream.mjs.map +1 -0
- package/dist/runtimes/utils/MessageRepository.d.ts +2 -2
- package/dist/runtimes/utils/MessageRepository.d.ts.map +1 -1
- package/dist/runtimes/utils/MessageRepository.js +1 -5
- package/dist/runtimes/utils/MessageRepository.js.map +1 -1
- package/dist/runtimes/utils/MessageRepository.mjs +1 -5
- package/dist/runtimes/utils/MessageRepository.mjs.map +1 -1
- package/dist/types/AssistantTypes.d.ts +3 -60
- package/dist/types/AssistantTypes.d.ts.map +1 -1
- package/dist/types/AssistantTypes.js.map +1 -1
- package/dist/types/AttachmentTypes.d.ts +3 -3
- package/dist/types/AttachmentTypes.d.ts.map +1 -1
- package/dist/types/AttachmentTypes.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +11 -17
- package/src/api/ThreadRuntime.ts +2 -0
- package/src/cloud/AssistantCloudRuns.tsx +2 -2
- package/src/cloud/auiV0.ts +1 -2
- package/src/index.ts +0 -2
- package/src/internal.ts +1 -1
- package/src/primitives/assistantModal/AssistantModalRoot.tsx +6 -2
- package/src/runtimes/composer/BaseComposerRuntimeCore.tsx +2 -0
- package/src/runtimes/external-store/ThreadMessageLike.tsx +1 -1
- package/src/runtimes/index.ts +4 -2
- package/src/runtimes/local/LocalThreadRuntimeCore.tsx +4 -4
- package/src/runtimes/remote-thread-list/adapter/cloud.tsx +1 -2
- package/src/runtimes/{edge/streams → streams}/toolResultStream.ts +1 -1
- package/src/runtimes/utils/MessageRepository.tsx +3 -7
- package/src/tests/MessageRepository.test.ts +7 -10
- package/src/types/AssistantTypes.ts +3 -81
- package/src/types/AttachmentTypes.ts +3 -3
- package/src/types/index.ts +0 -9
- package/dist/edge.d.ts +0 -2
- package/dist/edge.d.ts.map +0 -1
- package/dist/edge.js +0 -33
- package/dist/edge.js.map +0 -1
- package/dist/edge.mjs +0 -10
- package/dist/edge.mjs.map +0 -1
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.d.ts +0 -9
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.d.ts.map +0 -1
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.js +0 -58
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.js.map +0 -1
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.mjs +0 -35
- package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.mjs.map +0 -1
- package/dist/runtimes/dangerous-in-browser/index.d.ts +0 -2
- package/dist/runtimes/dangerous-in-browser/index.d.ts.map +0 -1
- package/dist/runtimes/dangerous-in-browser/index.js +0 -31
- package/dist/runtimes/dangerous-in-browser/index.js.map +0 -1
- package/dist/runtimes/dangerous-in-browser/index.mjs +0 -8
- package/dist/runtimes/dangerous-in-browser/index.mjs.map +0 -1
- package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.d.ts +0 -5
- package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.d.ts.map +0 -1
- package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.js +0 -40
- package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.js.map +0 -1
- package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.mjs +0 -18
- package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.mjs.map +0 -1
- package/dist/runtimes/edge/EdgeModelAdapter.d.ts +0 -48
- package/dist/runtimes/edge/EdgeModelAdapter.d.ts.map +0 -1
- package/dist/runtimes/edge/EdgeModelAdapter.js +0 -127
- package/dist/runtimes/edge/EdgeModelAdapter.js.map +0 -1
- package/dist/runtimes/edge/EdgeModelAdapter.mjs +0 -94
- package/dist/runtimes/edge/EdgeModelAdapter.mjs.map +0 -1
- package/dist/runtimes/edge/EdgeRuntimeRequestOptions.d.ts +0 -345
- package/dist/runtimes/edge/EdgeRuntimeRequestOptions.d.ts.map +0 -1
- package/dist/runtimes/edge/EdgeRuntimeRequestOptions.js +0 -106
- package/dist/runtimes/edge/EdgeRuntimeRequestOptions.js.map +0 -1
- package/dist/runtimes/edge/EdgeRuntimeRequestOptions.mjs +0 -84
- package/dist/runtimes/edge/EdgeRuntimeRequestOptions.mjs.map +0 -1
- package/dist/runtimes/edge/converters/fromCoreMessage.d.ts +0 -8
- package/dist/runtimes/edge/converters/fromCoreMessage.d.ts.map +0 -1
- package/dist/runtimes/edge/converters/fromCoreMessage.js +0 -89
- package/dist/runtimes/edge/converters/fromCoreMessage.js.map +0 -1
- package/dist/runtimes/edge/converters/fromCoreMessage.mjs +0 -63
- package/dist/runtimes/edge/converters/fromCoreMessage.mjs.map +0 -1
- package/dist/runtimes/edge/converters/fromLanguageModelMessages.d.ts +0 -8
- package/dist/runtimes/edge/converters/fromLanguageModelMessages.d.ts.map +0 -1
- package/dist/runtimes/edge/converters/fromLanguageModelMessages.js +0 -149
- package/dist/runtimes/edge/converters/fromLanguageModelMessages.js.map +0 -1
- package/dist/runtimes/edge/converters/fromLanguageModelMessages.mjs +0 -124
- package/dist/runtimes/edge/converters/fromLanguageModelMessages.mjs.map +0 -1
- package/dist/runtimes/edge/converters/fromLanguageModelTools.d.ts +0 -4
- package/dist/runtimes/edge/converters/fromLanguageModelTools.d.ts.map +0 -1
- package/dist/runtimes/edge/converters/fromLanguageModelTools.js +0 -41
- package/dist/runtimes/edge/converters/fromLanguageModelTools.js.map +0 -1
- package/dist/runtimes/edge/converters/fromLanguageModelTools.mjs +0 -16
- package/dist/runtimes/edge/converters/fromLanguageModelTools.mjs.map +0 -1
- package/dist/runtimes/edge/converters/index.d.ts +0 -35
- package/dist/runtimes/edge/converters/index.d.ts.map +0 -1
- package/dist/runtimes/edge/converters/index.js +0 -50
- package/dist/runtimes/edge/converters/index.js.map +0 -1
- package/dist/runtimes/edge/converters/index.mjs +0 -24
- package/dist/runtimes/edge/converters/index.mjs.map +0 -1
- package/dist/runtimes/edge/converters/toCoreMessages.d.ts +0 -12
- package/dist/runtimes/edge/converters/toCoreMessages.d.ts.map +0 -1
- package/dist/runtimes/edge/converters/toCoreMessages.js +0 -74
- package/dist/runtimes/edge/converters/toCoreMessages.js.map +0 -1
- package/dist/runtimes/edge/converters/toCoreMessages.mjs +0 -48
- package/dist/runtimes/edge/converters/toCoreMessages.mjs.map +0 -1
- package/dist/runtimes/edge/converters/toLanguageModelMessages.d.ts +0 -6
- package/dist/runtimes/edge/converters/toLanguageModelMessages.d.ts.map +0 -1
- package/dist/runtimes/edge/converters/toLanguageModelMessages.js +0 -168
- package/dist/runtimes/edge/converters/toLanguageModelMessages.js.map +0 -1
- package/dist/runtimes/edge/converters/toLanguageModelMessages.mjs +0 -143
- package/dist/runtimes/edge/converters/toLanguageModelMessages.mjs.map +0 -1
- package/dist/runtimes/edge/converters/toLanguageModelTools.d.ts +0 -4
- package/dist/runtimes/edge/converters/toLanguageModelTools.d.ts.map +0 -1
- package/dist/runtimes/edge/converters/toLanguageModelTools.js +0 -50
- package/dist/runtimes/edge/converters/toLanguageModelTools.js.map +0 -1
- package/dist/runtimes/edge/converters/toLanguageModelTools.mjs +0 -15
- package/dist/runtimes/edge/converters/toLanguageModelTools.mjs.map +0 -1
- package/dist/runtimes/edge/createEdgeRuntimeAPI.d.ts +0 -36
- package/dist/runtimes/edge/createEdgeRuntimeAPI.d.ts.map +0 -1
- package/dist/runtimes/edge/createEdgeRuntimeAPI.js +0 -179
- package/dist/runtimes/edge/createEdgeRuntimeAPI.js.map +0 -1
- package/dist/runtimes/edge/createEdgeRuntimeAPI.mjs +0 -156
- package/dist/runtimes/edge/createEdgeRuntimeAPI.mjs.map +0 -1
- package/dist/runtimes/edge/index.d.ts +0 -6
- package/dist/runtimes/edge/index.d.ts.map +0 -1
- package/dist/runtimes/edge/index.js +0 -40
- package/dist/runtimes/edge/index.js.map +0 -1
- package/dist/runtimes/edge/index.mjs +0 -11
- package/dist/runtimes/edge/index.mjs.map +0 -1
- package/dist/runtimes/edge/streams/toolResultStream.d.ts.map +0 -1
- package/dist/runtimes/edge/streams/toolResultStream.js.map +0 -1
- package/dist/runtimes/edge/streams/toolResultStream.mjs.map +0 -1
- package/dist/runtimes/edge/useEdgeRuntime.d.ts +0 -5
- package/dist/runtimes/edge/useEdgeRuntime.d.ts.map +0 -1
- package/dist/runtimes/edge/useEdgeRuntime.js +0 -41
- package/dist/runtimes/edge/useEdgeRuntime.js.map +0 -1
- package/dist/runtimes/edge/useEdgeRuntime.mjs +0 -17
- package/dist/runtimes/edge/useEdgeRuntime.mjs.map +0 -1
- package/dist/utils/json/parse-partial-json.d.ts +0 -4
- package/dist/utils/json/parse-partial-json.d.ts.map +0 -1
- package/dist/utils/json/parse-partial-json.js +0 -90
- package/dist/utils/json/parse-partial-json.js.map +0 -1
- package/dist/utils/json/parse-partial-json.mjs +0 -54
- package/dist/utils/json/parse-partial-json.mjs.map +0 -1
- package/edge/README.md +0 -1
- package/edge/package.json +0 -5
- package/src/edge.ts +0 -4
- package/src/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.ts +0 -42
- package/src/runtimes/dangerous-in-browser/index.ts +0 -4
- package/src/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.ts +0 -21
- package/src/runtimes/edge/EdgeModelAdapter.ts +0 -188
- package/src/runtimes/edge/EdgeRuntimeRequestOptions.ts +0 -109
- package/src/runtimes/edge/converters/fromCoreMessage.ts +0 -76
- package/src/runtimes/edge/converters/fromLanguageModelMessages.ts +0 -149
- package/src/runtimes/edge/converters/fromLanguageModelTools.ts +0 -16
- package/src/runtimes/edge/converters/index.ts +0 -41
- package/src/runtimes/edge/converters/toCoreMessages.ts +0 -64
- package/src/runtimes/edge/converters/toLanguageModelMessages.ts +0 -184
- package/src/runtimes/edge/converters/toLanguageModelTools.ts +0 -18
- package/src/runtimes/edge/createEdgeRuntimeAPI.ts +0 -234
- package/src/runtimes/edge/index.ts +0 -7
- package/src/runtimes/edge/useEdgeRuntime.ts +0 -17
- package/src/utils/json/parse-partial-json.ts +0 -74
@@ -1,184 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
LanguageModelV1FilePart,
|
3
|
-
LanguageModelV1ImagePart,
|
4
|
-
LanguageModelV1Message,
|
5
|
-
LanguageModelV1TextPart,
|
6
|
-
LanguageModelV1ToolCallPart,
|
7
|
-
LanguageModelV1ToolResultPart,
|
8
|
-
} from "@ai-sdk/provider";
|
9
|
-
import {
|
10
|
-
CoreMessage,
|
11
|
-
ThreadMessage,
|
12
|
-
TextContentPart,
|
13
|
-
CoreToolCallContentPart,
|
14
|
-
ToolCallContentPart,
|
15
|
-
} from "../../../types/AssistantTypes";
|
16
|
-
|
17
|
-
const assistantMessageSplitter = () => {
|
18
|
-
const stash: LanguageModelV1Message[] = [];
|
19
|
-
let assistantMessage = {
|
20
|
-
role: "assistant" as const,
|
21
|
-
content: [] as (LanguageModelV1TextPart | LanguageModelV1ToolCallPart)[],
|
22
|
-
};
|
23
|
-
let toolMessage = {
|
24
|
-
role: "tool" as const,
|
25
|
-
content: [] as LanguageModelV1ToolResultPart[],
|
26
|
-
};
|
27
|
-
|
28
|
-
return {
|
29
|
-
addTextContentPart: (part: TextContentPart) => {
|
30
|
-
if (toolMessage.content.length > 0) {
|
31
|
-
stash.push(assistantMessage);
|
32
|
-
stash.push(toolMessage);
|
33
|
-
|
34
|
-
assistantMessage = {
|
35
|
-
role: "assistant" as const,
|
36
|
-
content: [] as (
|
37
|
-
| LanguageModelV1TextPart
|
38
|
-
| LanguageModelV1ToolCallPart
|
39
|
-
)[],
|
40
|
-
};
|
41
|
-
|
42
|
-
toolMessage = {
|
43
|
-
role: "tool" as const,
|
44
|
-
content: [] as LanguageModelV1ToolResultPart[],
|
45
|
-
};
|
46
|
-
}
|
47
|
-
|
48
|
-
assistantMessage.content.push(part);
|
49
|
-
},
|
50
|
-
addToolCallPart: (part: CoreToolCallContentPart | ToolCallContentPart) => {
|
51
|
-
assistantMessage.content.push({
|
52
|
-
type: "tool-call",
|
53
|
-
toolCallId: part.toolCallId,
|
54
|
-
toolName: part.toolName,
|
55
|
-
args: part.args,
|
56
|
-
});
|
57
|
-
|
58
|
-
toolMessage.content.push({
|
59
|
-
type: "tool-result",
|
60
|
-
toolCallId: part.toolCallId,
|
61
|
-
toolName: part.toolName,
|
62
|
-
...("artifact" in part ? { artifact: part.artifact } : {}),
|
63
|
-
result:
|
64
|
-
part.result === undefined
|
65
|
-
? "Error: tool is has no configured code to run"
|
66
|
-
: part.result,
|
67
|
-
isError: part.isError ?? part.result === undefined,
|
68
|
-
});
|
69
|
-
},
|
70
|
-
getMessages: () => {
|
71
|
-
if (toolMessage.content.length > 0) {
|
72
|
-
return [...stash, assistantMessage, toolMessage];
|
73
|
-
}
|
74
|
-
|
75
|
-
return [...stash, assistantMessage];
|
76
|
-
},
|
77
|
-
};
|
78
|
-
};
|
79
|
-
|
80
|
-
export function toLanguageModelMessages(
|
81
|
-
message: readonly CoreMessage[] | readonly ThreadMessage[],
|
82
|
-
options: { unstable_includeId?: boolean | undefined } = {},
|
83
|
-
): LanguageModelV1Message[] {
|
84
|
-
const includeId = options.unstable_includeId ?? false;
|
85
|
-
return message.flatMap((message) => {
|
86
|
-
const role = message.role;
|
87
|
-
switch (role) {
|
88
|
-
case "system": {
|
89
|
-
return [
|
90
|
-
{
|
91
|
-
...(includeId
|
92
|
-
? { unstable_id: (message as ThreadMessage).id }
|
93
|
-
: {}),
|
94
|
-
role: "system",
|
95
|
-
content: message.content[0].text,
|
96
|
-
},
|
97
|
-
];
|
98
|
-
}
|
99
|
-
|
100
|
-
case "user": {
|
101
|
-
const attachments = "attachments" in message ? message.attachments : [];
|
102
|
-
const content = [
|
103
|
-
...message.content,
|
104
|
-
...attachments.map((a) => a.content).flat(),
|
105
|
-
];
|
106
|
-
const msg: LanguageModelV1Message = {
|
107
|
-
...(includeId ? { unstable_id: (message as ThreadMessage).id } : {}),
|
108
|
-
role: "user",
|
109
|
-
content: content.map(
|
110
|
-
(
|
111
|
-
part,
|
112
|
-
):
|
113
|
-
| LanguageModelV1TextPart
|
114
|
-
| LanguageModelV1ImagePart
|
115
|
-
| LanguageModelV1FilePart => {
|
116
|
-
const type = part.type;
|
117
|
-
switch (type) {
|
118
|
-
case "text": {
|
119
|
-
return part;
|
120
|
-
}
|
121
|
-
|
122
|
-
case "image": {
|
123
|
-
return {
|
124
|
-
type: "image",
|
125
|
-
image: new URL(part.image),
|
126
|
-
};
|
127
|
-
}
|
128
|
-
|
129
|
-
case "file": {
|
130
|
-
return {
|
131
|
-
type: "file",
|
132
|
-
data: new URL(part.data),
|
133
|
-
mimeType: part.mimeType,
|
134
|
-
};
|
135
|
-
}
|
136
|
-
|
137
|
-
default: {
|
138
|
-
const unhandledType: "audio" = type;
|
139
|
-
throw new Error(
|
140
|
-
`Unspported content part type: ${unhandledType}`,
|
141
|
-
);
|
142
|
-
}
|
143
|
-
}
|
144
|
-
},
|
145
|
-
),
|
146
|
-
};
|
147
|
-
return [msg];
|
148
|
-
}
|
149
|
-
|
150
|
-
case "assistant": {
|
151
|
-
const splitter = assistantMessageSplitter();
|
152
|
-
for (const part of message.content) {
|
153
|
-
const type = part.type;
|
154
|
-
switch (type) {
|
155
|
-
case "reasoning":
|
156
|
-
case "source":
|
157
|
-
case "file": {
|
158
|
-
break; // reasoning, source, and file parts are omitted
|
159
|
-
}
|
160
|
-
|
161
|
-
case "text": {
|
162
|
-
splitter.addTextContentPart(part);
|
163
|
-
break;
|
164
|
-
}
|
165
|
-
case "tool-call": {
|
166
|
-
splitter.addToolCallPart(part);
|
167
|
-
break;
|
168
|
-
}
|
169
|
-
default: {
|
170
|
-
const unhandledType: never = type;
|
171
|
-
throw new Error(`Unhandled content part type: ${unhandledType}`);
|
172
|
-
}
|
173
|
-
}
|
174
|
-
}
|
175
|
-
return splitter.getMessages();
|
176
|
-
}
|
177
|
-
|
178
|
-
default: {
|
179
|
-
const unhandledRole: never = role;
|
180
|
-
throw new Error(`Unknown message role: ${unhandledRole}`);
|
181
|
-
}
|
182
|
-
}
|
183
|
-
});
|
184
|
-
}
|
@@ -1,18 +0,0 @@
|
|
1
|
-
import { LanguageModelV1FunctionTool } from "@ai-sdk/provider";
|
2
|
-
import { JSONSchema7 } from "json-schema";
|
3
|
-
import { z } from "zod";
|
4
|
-
import zodToJsonSchema from "zod-to-json-schema";
|
5
|
-
import { Tool } from "../../../model-context/ModelContextTypes";
|
6
|
-
|
7
|
-
export const toLanguageModelTools = (
|
8
|
-
tools: Record<string, Tool<any, any>>,
|
9
|
-
): LanguageModelV1FunctionTool[] => {
|
10
|
-
return Object.entries(tools).map(([name, tool]) => ({
|
11
|
-
type: "function",
|
12
|
-
name,
|
13
|
-
...(tool.description ? { description: tool.description } : undefined),
|
14
|
-
parameters: (tool.parameters instanceof z.ZodType
|
15
|
-
? zodToJsonSchema(tool.parameters)
|
16
|
-
: tool.parameters) as JSONSchema7,
|
17
|
-
}));
|
18
|
-
};
|
@@ -1,234 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
LanguageModelV1,
|
3
|
-
LanguageModelV1ToolChoice,
|
4
|
-
LanguageModelV1FunctionTool,
|
5
|
-
LanguageModelV1Prompt,
|
6
|
-
LanguageModelV1CallOptions,
|
7
|
-
} from "@ai-sdk/provider";
|
8
|
-
import {
|
9
|
-
CoreMessage,
|
10
|
-
ThreadMessage,
|
11
|
-
ThreadStep,
|
12
|
-
} from "../../types/AssistantTypes";
|
13
|
-
import { EdgeRuntimeRequestOptionsSchema } from "./EdgeRuntimeRequestOptions";
|
14
|
-
import { toLanguageModelMessages } from "./converters/toLanguageModelMessages";
|
15
|
-
import { toLanguageModelTools } from "./converters/toLanguageModelTools";
|
16
|
-
import { toolResultStream } from "./streams/toolResultStream";
|
17
|
-
import {
|
18
|
-
LanguageModelConfig,
|
19
|
-
LanguageModelV1CallSettings,
|
20
|
-
LanguageModelV1CallSettingsSchema,
|
21
|
-
Tool,
|
22
|
-
} from "../../model-context/ModelContextTypes";
|
23
|
-
import { z } from "zod";
|
24
|
-
import {
|
25
|
-
AssistantMessage,
|
26
|
-
AssistantMessageAccumulator,
|
27
|
-
AssistantStreamChunk,
|
28
|
-
DataStreamEncoder,
|
29
|
-
} from "assistant-stream";
|
30
|
-
import { LanguageModelV1StreamDecoder } from "assistant-stream/ai-sdk";
|
31
|
-
|
32
|
-
type FinishResult = {
|
33
|
-
messages: readonly (CoreMessage | ThreadMessage)[];
|
34
|
-
metadata: {
|
35
|
-
steps: readonly ThreadStep[];
|
36
|
-
};
|
37
|
-
};
|
38
|
-
|
39
|
-
type LanguageModelCreator = (
|
40
|
-
config: LanguageModelConfig,
|
41
|
-
) => Promise<LanguageModelV1> | LanguageModelV1;
|
42
|
-
|
43
|
-
export type CreateEdgeRuntimeAPIOptions = LanguageModelV1CallSettings & {
|
44
|
-
model: LanguageModelV1 | LanguageModelCreator;
|
45
|
-
system?: string;
|
46
|
-
tools?: Record<string, Tool<any, any>>;
|
47
|
-
toolChoice?: LanguageModelV1ToolChoice;
|
48
|
-
onFinish?: (result: FinishResult) => void;
|
49
|
-
};
|
50
|
-
|
51
|
-
type GetEdgeRuntimeStreamOptions = {
|
52
|
-
abortSignal: AbortSignal;
|
53
|
-
requestData: z.infer<typeof EdgeRuntimeRequestOptionsSchema>;
|
54
|
-
options: CreateEdgeRuntimeAPIOptions;
|
55
|
-
};
|
56
|
-
|
57
|
-
export const getEdgeRuntimeStream = async ({
|
58
|
-
abortSignal,
|
59
|
-
requestData: unsafeRequest,
|
60
|
-
options: {
|
61
|
-
model: modelOrCreator,
|
62
|
-
system: serverSystem,
|
63
|
-
tools: serverTools = {},
|
64
|
-
toolChoice,
|
65
|
-
onFinish,
|
66
|
-
...unsafeSettings
|
67
|
-
},
|
68
|
-
}: GetEdgeRuntimeStreamOptions) => {
|
69
|
-
const settings = LanguageModelV1CallSettingsSchema.parse(unsafeSettings);
|
70
|
-
const lmServerTools = toLanguageModelTools(serverTools);
|
71
|
-
const hasServerTools = Object.values(serverTools).some((v) => !!v.execute);
|
72
|
-
|
73
|
-
const {
|
74
|
-
system: clientSystem,
|
75
|
-
tools: clientTools = [],
|
76
|
-
messages,
|
77
|
-
apiKey,
|
78
|
-
baseUrl,
|
79
|
-
modelName,
|
80
|
-
...callSettings
|
81
|
-
} = EdgeRuntimeRequestOptionsSchema.parse(unsafeRequest);
|
82
|
-
|
83
|
-
const systemMessages = [];
|
84
|
-
if (serverSystem) systemMessages.push(serverSystem);
|
85
|
-
if (clientSystem) systemMessages.push(clientSystem);
|
86
|
-
const system = systemMessages.join("\n\n");
|
87
|
-
|
88
|
-
for (const clientTool of clientTools) {
|
89
|
-
if (serverTools?.[clientTool.name]) {
|
90
|
-
throw new Error(
|
91
|
-
`Tool ${clientTool.name} was defined in both the client and server tools. This is not allowed.`,
|
92
|
-
);
|
93
|
-
}
|
94
|
-
}
|
95
|
-
|
96
|
-
const model =
|
97
|
-
typeof modelOrCreator === "function"
|
98
|
-
? await modelOrCreator({ apiKey, baseUrl, modelName })
|
99
|
-
: modelOrCreator;
|
100
|
-
|
101
|
-
let stream: ReadableStream<AssistantStreamChunk>;
|
102
|
-
const streamResult = await streamMessage({
|
103
|
-
...(settings as Partial<StreamMessageOptions>),
|
104
|
-
...callSettings,
|
105
|
-
|
106
|
-
model,
|
107
|
-
abortSignal,
|
108
|
-
|
109
|
-
...(!!system ? { system } : undefined),
|
110
|
-
messages,
|
111
|
-
tools: lmServerTools.concat(clientTools as LanguageModelV1FunctionTool[]),
|
112
|
-
...(toolChoice ? { toolChoice } : undefined),
|
113
|
-
});
|
114
|
-
stream = streamResult.stream.pipeThrough(new LanguageModelV1StreamDecoder());
|
115
|
-
|
116
|
-
// add tool results if we have server tools
|
117
|
-
const canExecuteTools = hasServerTools && toolChoice?.type !== "none";
|
118
|
-
if (canExecuteTools) {
|
119
|
-
stream = stream.pipeThrough(toolResultStream(serverTools, abortSignal));
|
120
|
-
}
|
121
|
-
|
122
|
-
if (canExecuteTools || onFinish) {
|
123
|
-
// tee the stream to process server tools and onFinish asap
|
124
|
-
const tees = stream.tee();
|
125
|
-
stream = tees[0];
|
126
|
-
let serverStream = tees[1];
|
127
|
-
|
128
|
-
if (onFinish) {
|
129
|
-
let lastChunk: AssistantMessage | undefined;
|
130
|
-
serverStream.pipeThrough(new AssistantMessageAccumulator()).pipeTo(
|
131
|
-
new WritableStream({
|
132
|
-
write(chunk) {
|
133
|
-
lastChunk = chunk;
|
134
|
-
},
|
135
|
-
close() {
|
136
|
-
if (!lastChunk?.status || lastChunk.status.type === "running")
|
137
|
-
return;
|
138
|
-
|
139
|
-
const resultingMessages = [
|
140
|
-
...messages,
|
141
|
-
{
|
142
|
-
id: "DEFAULT",
|
143
|
-
createdAt: new Date(),
|
144
|
-
role: "assistant",
|
145
|
-
content: lastChunk.content,
|
146
|
-
status: lastChunk.status,
|
147
|
-
metadata: lastChunk.metadata,
|
148
|
-
} satisfies ThreadMessage,
|
149
|
-
];
|
150
|
-
onFinish({
|
151
|
-
messages: resultingMessages,
|
152
|
-
metadata: {
|
153
|
-
steps: lastChunk.metadata.steps,
|
154
|
-
},
|
155
|
-
});
|
156
|
-
},
|
157
|
-
abort(e) {
|
158
|
-
console.error("Server stream processing error:", e);
|
159
|
-
},
|
160
|
-
}),
|
161
|
-
);
|
162
|
-
}
|
163
|
-
}
|
164
|
-
|
165
|
-
return stream;
|
166
|
-
};
|
167
|
-
|
168
|
-
export declare namespace getEdgeRuntimeResponse {
|
169
|
-
export type { GetEdgeRuntimeStreamOptions as Options };
|
170
|
-
}
|
171
|
-
|
172
|
-
export const getEdgeRuntimeResponse = async (
|
173
|
-
options: getEdgeRuntimeResponse.Options,
|
174
|
-
) => {
|
175
|
-
const stream = await getEdgeRuntimeStream(options);
|
176
|
-
return new Response(stream.pipeThrough(new DataStreamEncoder()), {
|
177
|
-
headers: {
|
178
|
-
"Content-Type": "text/plain; charset=utf-8",
|
179
|
-
"x-vercel-ai-data-stream": "v1",
|
180
|
-
},
|
181
|
-
});
|
182
|
-
};
|
183
|
-
|
184
|
-
export const createEdgeRuntimeAPI = (options: CreateEdgeRuntimeAPIOptions) => ({
|
185
|
-
POST: async (request: Request) =>
|
186
|
-
getEdgeRuntimeResponse({
|
187
|
-
abortSignal: request.signal,
|
188
|
-
requestData: await request.json(),
|
189
|
-
options,
|
190
|
-
}),
|
191
|
-
});
|
192
|
-
|
193
|
-
type StreamMessageOptions = LanguageModelV1CallSettings & {
|
194
|
-
model: LanguageModelV1;
|
195
|
-
system?: string;
|
196
|
-
messages: readonly CoreMessage[];
|
197
|
-
tools?: LanguageModelV1FunctionTool[];
|
198
|
-
toolChoice?: LanguageModelV1ToolChoice;
|
199
|
-
abortSignal: AbortSignal;
|
200
|
-
};
|
201
|
-
|
202
|
-
async function streamMessage({
|
203
|
-
model,
|
204
|
-
system,
|
205
|
-
messages,
|
206
|
-
tools,
|
207
|
-
toolChoice,
|
208
|
-
...options
|
209
|
-
}: StreamMessageOptions) {
|
210
|
-
return model.doStream({
|
211
|
-
inputFormat: "messages",
|
212
|
-
mode: {
|
213
|
-
type: "regular",
|
214
|
-
...(tools ? { tools } : undefined),
|
215
|
-
...(toolChoice ? { toolChoice } : undefined),
|
216
|
-
},
|
217
|
-
prompt: convertToLanguageModelPrompt(system, messages),
|
218
|
-
...(options as Partial<LanguageModelV1CallOptions>),
|
219
|
-
});
|
220
|
-
}
|
221
|
-
|
222
|
-
export function convertToLanguageModelPrompt(
|
223
|
-
system: string | undefined,
|
224
|
-
messages: readonly CoreMessage[],
|
225
|
-
): LanguageModelV1Prompt {
|
226
|
-
const languageModelMessages: LanguageModelV1Prompt = [];
|
227
|
-
|
228
|
-
if (system != null) {
|
229
|
-
languageModelMessages.push({ role: "system", content: system });
|
230
|
-
}
|
231
|
-
languageModelMessages.push(...toLanguageModelMessages(messages));
|
232
|
-
|
233
|
-
return languageModelMessages;
|
234
|
-
}
|
@@ -1,7 +0,0 @@
|
|
1
|
-
export * from "./converters";
|
2
|
-
|
3
|
-
export { useEdgeRuntime, type EdgeRuntimeOptions } from "./useEdgeRuntime";
|
4
|
-
export { EdgeModelAdapter as EdgeChatAdapter } from "./EdgeModelAdapter";
|
5
|
-
export type { EdgeRuntimeRequestOptions } from "./EdgeRuntimeRequestOptions";
|
6
|
-
|
7
|
-
export { unstable_runPendingTools } from "./streams/toolResultStream";
|
@@ -1,17 +0,0 @@
|
|
1
|
-
"use client";
|
2
|
-
|
3
|
-
import { LocalRuntimeOptions, useLocalRuntime } from "..";
|
4
|
-
import { EdgeModelAdapterOptions, EdgeModelAdapter } from "./EdgeModelAdapter";
|
5
|
-
import { splitLocalRuntimeOptions } from "../local/LocalRuntimeOptions";
|
6
|
-
|
7
|
-
export type EdgeRuntimeOptions = EdgeModelAdapterOptions & LocalRuntimeOptions;
|
8
|
-
|
9
|
-
export const useEdgeRuntime = (options: EdgeRuntimeOptions) => {
|
10
|
-
const { localRuntimeOptions, otherOptions } =
|
11
|
-
splitLocalRuntimeOptions(options);
|
12
|
-
|
13
|
-
return useLocalRuntime(
|
14
|
-
new EdgeModelAdapter(otherOptions),
|
15
|
-
localRuntimeOptions,
|
16
|
-
);
|
17
|
-
};
|
@@ -1,74 +0,0 @@
|
|
1
|
-
import sjson from "secure-json-parse";
|
2
|
-
import { fixJson } from "./fix-json";
|
3
|
-
import {
|
4
|
-
ContentPartStatus,
|
5
|
-
ToolCallContentPartStatus,
|
6
|
-
} from "../../types/AssistantTypes";
|
7
|
-
import { useContentPart } from "../../context";
|
8
|
-
|
9
|
-
const PARTIAL_JSON_COUNT_SYMBOL = Symbol("partial-json-count");
|
10
|
-
export const parsePartialJson = (json: string) => {
|
11
|
-
try {
|
12
|
-
return sjson.parse(json);
|
13
|
-
} catch {
|
14
|
-
try {
|
15
|
-
const [fixedJson, partialCount] = fixJson(json);
|
16
|
-
const res = sjson.parse(fixedJson);
|
17
|
-
res[PARTIAL_JSON_COUNT_SYMBOL] = partialCount;
|
18
|
-
return res;
|
19
|
-
} catch {
|
20
|
-
return undefined;
|
21
|
-
}
|
22
|
-
}
|
23
|
-
};
|
24
|
-
|
25
|
-
const COMPLETE_STATUS = Object.freeze({ type: "complete" });
|
26
|
-
|
27
|
-
const getFieldStatus = (
|
28
|
-
lastState: ContentPartStatus,
|
29
|
-
args: unknown,
|
30
|
-
fieldPath: string[],
|
31
|
-
partialCount: number,
|
32
|
-
): ContentPartStatus => {
|
33
|
-
if (fieldPath.length === 0) return lastState;
|
34
|
-
if (typeof args !== "object" || args === null) return COMPLETE_STATUS;
|
35
|
-
|
36
|
-
const path = fieldPath.at(-1)!;
|
37
|
-
|
38
|
-
// If the expected property does not exist, mark as incomplete
|
39
|
-
if (!Object.prototype.hasOwnProperty.call(args, path)) {
|
40
|
-
return lastState;
|
41
|
-
}
|
42
|
-
|
43
|
-
const argsKeys = Object.keys(args);
|
44
|
-
const isLast = argsKeys[argsKeys.length - 1] === path;
|
45
|
-
if (!isLast) return COMPLETE_STATUS;
|
46
|
-
|
47
|
-
return getFieldStatus(
|
48
|
-
lastState,
|
49
|
-
(args as Record<string, unknown>)[path],
|
50
|
-
fieldPath.slice(0, -1),
|
51
|
-
partialCount - 1,
|
52
|
-
);
|
53
|
-
};
|
54
|
-
|
55
|
-
const getToolArgsFieldStatus = (
|
56
|
-
status: ToolCallContentPartStatus,
|
57
|
-
args: Record<string, unknown>,
|
58
|
-
fieldPath: string[],
|
59
|
-
): ContentPartStatus => {
|
60
|
-
const partialCount = (args as any)[PARTIAL_JSON_COUNT_SYMBOL] ?? 0;
|
61
|
-
if (partialCount === 0) return COMPLETE_STATUS;
|
62
|
-
|
63
|
-
const lastState: ContentPartStatus =
|
64
|
-
status.type !== "requires-action" ? status : COMPLETE_STATUS;
|
65
|
-
|
66
|
-
return getFieldStatus(lastState, args, fieldPath, partialCount);
|
67
|
-
};
|
68
|
-
|
69
|
-
export const useToolArgsFieldStatus = (fieldPath: string[]) => {
|
70
|
-
return useContentPart((p) => {
|
71
|
-
if (p.type !== "tool-call") throw new Error("not a tool call");
|
72
|
-
return getToolArgsFieldStatus(p.status, p.args, fieldPath);
|
73
|
-
});
|
74
|
-
};
|