@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.
Files changed (221) hide show
  1. package/dist/api/ThreadRuntime.d.ts.map +1 -1
  2. package/dist/api/ThreadRuntime.js +3 -1
  3. package/dist/api/ThreadRuntime.js.map +1 -1
  4. package/dist/api/ThreadRuntime.mjs +3 -1
  5. package/dist/api/ThreadRuntime.mjs.map +1 -1
  6. package/dist/cloud/AssistantCloudRuns.d.ts +2 -2
  7. package/dist/cloud/AssistantCloudRuns.d.ts.map +1 -1
  8. package/dist/cloud/AssistantCloudRuns.js.map +1 -1
  9. package/dist/cloud/AssistantCloudRuns.mjs.map +1 -1
  10. package/dist/cloud/auiV0.d.ts +1 -2
  11. package/dist/cloud/auiV0.d.ts.map +1 -1
  12. package/dist/cloud/auiV0.js.map +1 -1
  13. package/dist/cloud/auiV0.mjs.map +1 -1
  14. package/dist/context/react/AttachmentContext.d.ts +108 -108
  15. package/dist/index.d.ts +0 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1 -4
  18. package/dist/index.js.map +1 -1
  19. package/dist/index.mjs +1 -3
  20. package/dist/index.mjs.map +1 -1
  21. package/dist/internal.d.ts +1 -1
  22. package/dist/internal.d.ts.map +1 -1
  23. package/dist/internal.js +4 -4
  24. package/dist/internal.js.map +1 -1
  25. package/dist/internal.mjs +3 -3
  26. package/dist/internal.mjs.map +1 -1
  27. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
  28. package/dist/primitives/assistantModal/AssistantModalRoot.js +5 -2
  29. package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
  30. package/dist/primitives/assistantModal/AssistantModalRoot.mjs +5 -2
  31. package/dist/primitives/assistantModal/AssistantModalRoot.mjs.map +1 -1
  32. package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts +1 -1
  33. package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts.map +1 -1
  34. package/dist/runtimes/composer/BaseComposerRuntimeCore.js +3 -1
  35. package/dist/runtimes/composer/BaseComposerRuntimeCore.js.map +1 -1
  36. package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs +3 -1
  37. package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs.map +1 -1
  38. package/dist/runtimes/external-store/ThreadMessageLike.d.ts.map +1 -1
  39. package/dist/runtimes/external-store/ThreadMessageLike.js +2 -2
  40. package/dist/runtimes/external-store/ThreadMessageLike.js.map +1 -1
  41. package/dist/runtimes/external-store/ThreadMessageLike.mjs +1 -1
  42. package/dist/runtimes/external-store/ThreadMessageLike.mjs.map +1 -1
  43. package/dist/runtimes/index.d.ts +1 -2
  44. package/dist/runtimes/index.d.ts.map +1 -1
  45. package/dist/runtimes/index.js +6 -5
  46. package/dist/runtimes/index.js.map +1 -1
  47. package/dist/runtimes/index.mjs +7 -3
  48. package/dist/runtimes/index.mjs.map +1 -1
  49. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts.map +1 -1
  50. package/dist/runtimes/local/LocalThreadRuntimeCore.js +3 -3
  51. package/dist/runtimes/local/LocalThreadRuntimeCore.js.map +1 -1
  52. package/dist/runtimes/local/LocalThreadRuntimeCore.mjs +4 -4
  53. package/dist/runtimes/local/LocalThreadRuntimeCore.mjs.map +1 -1
  54. package/dist/runtimes/remote-thread-list/adapter/cloud.d.ts.map +1 -1
  55. package/dist/runtimes/remote-thread-list/adapter/cloud.js +2 -2
  56. package/dist/runtimes/remote-thread-list/adapter/cloud.js.map +1 -1
  57. package/dist/runtimes/remote-thread-list/adapter/cloud.mjs +2 -2
  58. package/dist/runtimes/remote-thread-list/adapter/cloud.mjs.map +1 -1
  59. package/dist/runtimes/{edge/streams → streams}/toolResultStream.d.ts +1 -1
  60. package/dist/runtimes/streams/toolResultStream.d.ts.map +1 -0
  61. package/dist/runtimes/{edge/streams → streams}/toolResultStream.js +1 -1
  62. package/dist/runtimes/streams/toolResultStream.js.map +1 -0
  63. package/dist/runtimes/{edge/streams → streams}/toolResultStream.mjs +1 -1
  64. package/dist/runtimes/streams/toolResultStream.mjs.map +1 -0
  65. package/dist/runtimes/utils/MessageRepository.d.ts +2 -2
  66. package/dist/runtimes/utils/MessageRepository.d.ts.map +1 -1
  67. package/dist/runtimes/utils/MessageRepository.js +1 -5
  68. package/dist/runtimes/utils/MessageRepository.js.map +1 -1
  69. package/dist/runtimes/utils/MessageRepository.mjs +1 -5
  70. package/dist/runtimes/utils/MessageRepository.mjs.map +1 -1
  71. package/dist/types/AssistantTypes.d.ts +3 -60
  72. package/dist/types/AssistantTypes.d.ts.map +1 -1
  73. package/dist/types/AssistantTypes.js.map +1 -1
  74. package/dist/types/AttachmentTypes.d.ts +3 -3
  75. package/dist/types/AttachmentTypes.d.ts.map +1 -1
  76. package/dist/types/AttachmentTypes.js.map +1 -1
  77. package/dist/types/index.d.ts +1 -1
  78. package/dist/types/index.d.ts.map +1 -1
  79. package/dist/types/index.js.map +1 -1
  80. package/package.json +11 -17
  81. package/src/api/ThreadRuntime.ts +2 -0
  82. package/src/cloud/AssistantCloudRuns.tsx +2 -2
  83. package/src/cloud/auiV0.ts +1 -2
  84. package/src/index.ts +0 -2
  85. package/src/internal.ts +1 -1
  86. package/src/primitives/assistantModal/AssistantModalRoot.tsx +6 -2
  87. package/src/runtimes/composer/BaseComposerRuntimeCore.tsx +2 -0
  88. package/src/runtimes/external-store/ThreadMessageLike.tsx +1 -1
  89. package/src/runtimes/index.ts +4 -2
  90. package/src/runtimes/local/LocalThreadRuntimeCore.tsx +4 -4
  91. package/src/runtimes/remote-thread-list/adapter/cloud.tsx +1 -2
  92. package/src/runtimes/{edge/streams → streams}/toolResultStream.ts +1 -1
  93. package/src/runtimes/utils/MessageRepository.tsx +3 -7
  94. package/src/tests/MessageRepository.test.ts +7 -10
  95. package/src/types/AssistantTypes.ts +3 -81
  96. package/src/types/AttachmentTypes.ts +3 -3
  97. package/src/types/index.ts +0 -9
  98. package/dist/edge.d.ts +0 -2
  99. package/dist/edge.d.ts.map +0 -1
  100. package/dist/edge.js +0 -33
  101. package/dist/edge.js.map +0 -1
  102. package/dist/edge.mjs +0 -10
  103. package/dist/edge.mjs.map +0 -1
  104. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.d.ts +0 -9
  105. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.d.ts.map +0 -1
  106. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.js +0 -58
  107. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.js.map +0 -1
  108. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.mjs +0 -35
  109. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.mjs.map +0 -1
  110. package/dist/runtimes/dangerous-in-browser/index.d.ts +0 -2
  111. package/dist/runtimes/dangerous-in-browser/index.d.ts.map +0 -1
  112. package/dist/runtimes/dangerous-in-browser/index.js +0 -31
  113. package/dist/runtimes/dangerous-in-browser/index.js.map +0 -1
  114. package/dist/runtimes/dangerous-in-browser/index.mjs +0 -8
  115. package/dist/runtimes/dangerous-in-browser/index.mjs.map +0 -1
  116. package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.d.ts +0 -5
  117. package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.d.ts.map +0 -1
  118. package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.js +0 -40
  119. package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.js.map +0 -1
  120. package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.mjs +0 -18
  121. package/dist/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.mjs.map +0 -1
  122. package/dist/runtimes/edge/EdgeModelAdapter.d.ts +0 -48
  123. package/dist/runtimes/edge/EdgeModelAdapter.d.ts.map +0 -1
  124. package/dist/runtimes/edge/EdgeModelAdapter.js +0 -127
  125. package/dist/runtimes/edge/EdgeModelAdapter.js.map +0 -1
  126. package/dist/runtimes/edge/EdgeModelAdapter.mjs +0 -94
  127. package/dist/runtimes/edge/EdgeModelAdapter.mjs.map +0 -1
  128. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.d.ts +0 -345
  129. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.d.ts.map +0 -1
  130. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.js +0 -106
  131. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.js.map +0 -1
  132. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.mjs +0 -84
  133. package/dist/runtimes/edge/EdgeRuntimeRequestOptions.mjs.map +0 -1
  134. package/dist/runtimes/edge/converters/fromCoreMessage.d.ts +0 -8
  135. package/dist/runtimes/edge/converters/fromCoreMessage.d.ts.map +0 -1
  136. package/dist/runtimes/edge/converters/fromCoreMessage.js +0 -89
  137. package/dist/runtimes/edge/converters/fromCoreMessage.js.map +0 -1
  138. package/dist/runtimes/edge/converters/fromCoreMessage.mjs +0 -63
  139. package/dist/runtimes/edge/converters/fromCoreMessage.mjs.map +0 -1
  140. package/dist/runtimes/edge/converters/fromLanguageModelMessages.d.ts +0 -8
  141. package/dist/runtimes/edge/converters/fromLanguageModelMessages.d.ts.map +0 -1
  142. package/dist/runtimes/edge/converters/fromLanguageModelMessages.js +0 -149
  143. package/dist/runtimes/edge/converters/fromLanguageModelMessages.js.map +0 -1
  144. package/dist/runtimes/edge/converters/fromLanguageModelMessages.mjs +0 -124
  145. package/dist/runtimes/edge/converters/fromLanguageModelMessages.mjs.map +0 -1
  146. package/dist/runtimes/edge/converters/fromLanguageModelTools.d.ts +0 -4
  147. package/dist/runtimes/edge/converters/fromLanguageModelTools.d.ts.map +0 -1
  148. package/dist/runtimes/edge/converters/fromLanguageModelTools.js +0 -41
  149. package/dist/runtimes/edge/converters/fromLanguageModelTools.js.map +0 -1
  150. package/dist/runtimes/edge/converters/fromLanguageModelTools.mjs +0 -16
  151. package/dist/runtimes/edge/converters/fromLanguageModelTools.mjs.map +0 -1
  152. package/dist/runtimes/edge/converters/index.d.ts +0 -35
  153. package/dist/runtimes/edge/converters/index.d.ts.map +0 -1
  154. package/dist/runtimes/edge/converters/index.js +0 -50
  155. package/dist/runtimes/edge/converters/index.js.map +0 -1
  156. package/dist/runtimes/edge/converters/index.mjs +0 -24
  157. package/dist/runtimes/edge/converters/index.mjs.map +0 -1
  158. package/dist/runtimes/edge/converters/toCoreMessages.d.ts +0 -12
  159. package/dist/runtimes/edge/converters/toCoreMessages.d.ts.map +0 -1
  160. package/dist/runtimes/edge/converters/toCoreMessages.js +0 -74
  161. package/dist/runtimes/edge/converters/toCoreMessages.js.map +0 -1
  162. package/dist/runtimes/edge/converters/toCoreMessages.mjs +0 -48
  163. package/dist/runtimes/edge/converters/toCoreMessages.mjs.map +0 -1
  164. package/dist/runtimes/edge/converters/toLanguageModelMessages.d.ts +0 -6
  165. package/dist/runtimes/edge/converters/toLanguageModelMessages.d.ts.map +0 -1
  166. package/dist/runtimes/edge/converters/toLanguageModelMessages.js +0 -168
  167. package/dist/runtimes/edge/converters/toLanguageModelMessages.js.map +0 -1
  168. package/dist/runtimes/edge/converters/toLanguageModelMessages.mjs +0 -143
  169. package/dist/runtimes/edge/converters/toLanguageModelMessages.mjs.map +0 -1
  170. package/dist/runtimes/edge/converters/toLanguageModelTools.d.ts +0 -4
  171. package/dist/runtimes/edge/converters/toLanguageModelTools.d.ts.map +0 -1
  172. package/dist/runtimes/edge/converters/toLanguageModelTools.js +0 -50
  173. package/dist/runtimes/edge/converters/toLanguageModelTools.js.map +0 -1
  174. package/dist/runtimes/edge/converters/toLanguageModelTools.mjs +0 -15
  175. package/dist/runtimes/edge/converters/toLanguageModelTools.mjs.map +0 -1
  176. package/dist/runtimes/edge/createEdgeRuntimeAPI.d.ts +0 -36
  177. package/dist/runtimes/edge/createEdgeRuntimeAPI.d.ts.map +0 -1
  178. package/dist/runtimes/edge/createEdgeRuntimeAPI.js +0 -179
  179. package/dist/runtimes/edge/createEdgeRuntimeAPI.js.map +0 -1
  180. package/dist/runtimes/edge/createEdgeRuntimeAPI.mjs +0 -156
  181. package/dist/runtimes/edge/createEdgeRuntimeAPI.mjs.map +0 -1
  182. package/dist/runtimes/edge/index.d.ts +0 -6
  183. package/dist/runtimes/edge/index.d.ts.map +0 -1
  184. package/dist/runtimes/edge/index.js +0 -40
  185. package/dist/runtimes/edge/index.js.map +0 -1
  186. package/dist/runtimes/edge/index.mjs +0 -11
  187. package/dist/runtimes/edge/index.mjs.map +0 -1
  188. package/dist/runtimes/edge/streams/toolResultStream.d.ts.map +0 -1
  189. package/dist/runtimes/edge/streams/toolResultStream.js.map +0 -1
  190. package/dist/runtimes/edge/streams/toolResultStream.mjs.map +0 -1
  191. package/dist/runtimes/edge/useEdgeRuntime.d.ts +0 -5
  192. package/dist/runtimes/edge/useEdgeRuntime.d.ts.map +0 -1
  193. package/dist/runtimes/edge/useEdgeRuntime.js +0 -41
  194. package/dist/runtimes/edge/useEdgeRuntime.js.map +0 -1
  195. package/dist/runtimes/edge/useEdgeRuntime.mjs +0 -17
  196. package/dist/runtimes/edge/useEdgeRuntime.mjs.map +0 -1
  197. package/dist/utils/json/parse-partial-json.d.ts +0 -4
  198. package/dist/utils/json/parse-partial-json.d.ts.map +0 -1
  199. package/dist/utils/json/parse-partial-json.js +0 -90
  200. package/dist/utils/json/parse-partial-json.js.map +0 -1
  201. package/dist/utils/json/parse-partial-json.mjs +0 -54
  202. package/dist/utils/json/parse-partial-json.mjs.map +0 -1
  203. package/edge/README.md +0 -1
  204. package/edge/package.json +0 -5
  205. package/src/edge.ts +0 -4
  206. package/src/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.ts +0 -42
  207. package/src/runtimes/dangerous-in-browser/index.ts +0 -4
  208. package/src/runtimes/dangerous-in-browser/useDangerousInBrowserRuntime.ts +0 -21
  209. package/src/runtimes/edge/EdgeModelAdapter.ts +0 -188
  210. package/src/runtimes/edge/EdgeRuntimeRequestOptions.ts +0 -109
  211. package/src/runtimes/edge/converters/fromCoreMessage.ts +0 -76
  212. package/src/runtimes/edge/converters/fromLanguageModelMessages.ts +0 -149
  213. package/src/runtimes/edge/converters/fromLanguageModelTools.ts +0 -16
  214. package/src/runtimes/edge/converters/index.ts +0 -41
  215. package/src/runtimes/edge/converters/toCoreMessages.ts +0 -64
  216. package/src/runtimes/edge/converters/toLanguageModelMessages.ts +0 -184
  217. package/src/runtimes/edge/converters/toLanguageModelTools.ts +0 -18
  218. package/src/runtimes/edge/createEdgeRuntimeAPI.ts +0 -234
  219. package/src/runtimes/edge/index.ts +0 -7
  220. package/src/runtimes/edge/useEdgeRuntime.ts +0 -17
  221. package/src/utils/json/parse-partial-json.ts +0 -74
@@ -1,21 +0,0 @@
1
- "use client";
2
-
3
- import { LocalRuntimeOptions, useLocalRuntime } from "..";
4
- import { useState } from "react";
5
- import {
6
- DangerousInBrowserAdapter,
7
- DangerousInBrowserAdapterOptions,
8
- } from "./DangerousInBrowserAdapter";
9
- import { splitLocalRuntimeOptions } from "../local/LocalRuntimeOptions";
10
-
11
- export type DangerousInBrowserRuntimeOptions =
12
- DangerousInBrowserAdapterOptions & LocalRuntimeOptions;
13
-
14
- export const useDangerousInBrowserRuntime = (
15
- options: DangerousInBrowserRuntimeOptions,
16
- ) => {
17
- const { localRuntimeOptions, otherOptions } =
18
- splitLocalRuntimeOptions(options);
19
- const [adapter] = useState(() => new DangerousInBrowserAdapter(otherOptions));
20
- return useLocalRuntime(adapter, localRuntimeOptions);
21
- };
@@ -1,188 +0,0 @@
1
- import {
2
- ChatModelAdapter,
3
- ChatModelRunOptions,
4
- } from "../local/ChatModelAdapter";
5
- import { toCoreMessages } from "./converters/toCoreMessages";
6
- import { toLanguageModelTools } from "./converters/toLanguageModelTools";
7
- import { EdgeRuntimeRequestOptions } from "./EdgeRuntimeRequestOptions";
8
- import { toolResultStream } from "./streams/toolResultStream";
9
- import { toLanguageModelMessages } from "./converters";
10
- import { ThreadMessage } from "../../types";
11
- import { Tool } from "../../model-context";
12
- import { z } from "zod";
13
- import zodToJsonSchema from "zod-to-json-schema";
14
- import { JSONSchema7 } from "json-schema";
15
- import {
16
- AssistantMessageAccumulator,
17
- DataStreamDecoder,
18
- } from "assistant-stream";
19
-
20
- export function asAsyncIterable<T>(
21
- source: ReadableStream<T>,
22
- ): AsyncIterable<T> {
23
- return {
24
- [Symbol.asyncIterator]: () => {
25
- const reader = source.getReader();
26
- return {
27
- async next(): Promise<IteratorResult<T, undefined>> {
28
- const { done, value } = await reader.read();
29
- return done
30
- ? { done: true, value: undefined }
31
- : { done: false, value };
32
- },
33
- };
34
- },
35
- };
36
- }
37
-
38
- type HeadersValue = Record<string, string> | Headers;
39
-
40
- export type EdgeModelAdapterOptions = {
41
- api: string;
42
-
43
- // experimental_prepareRequestBody?: (options: {
44
- // id: string;
45
- // messages: UIMessage[];
46
- // requestData?: JSONValue;
47
- // requestBody?: object;
48
- // }) => unknown;
49
-
50
- // onToolCall?: ({
51
- // toolCall,
52
- // }: {
53
- // toolCall: UIMessageToolInvocation;
54
- // }) => void | Promise<unknown> | unknown;
55
-
56
- /**
57
- * Callback function to be called when the API response is received.
58
- */
59
- onResponse?: (response: Response) => void | Promise<void>;
60
- /**
61
- * Optional callback function that is called when the assistant message is finished streaming.
62
- */
63
- onFinish?: (message: ThreadMessage) => void;
64
- /**
65
- * Callback function to be called when an error is encountered.
66
- */
67
- onError?: (error: Error) => void;
68
-
69
- credentials?: RequestCredentials;
70
-
71
- /**
72
- * Headers to be sent with the request.
73
- * Can be a static headers object or a function that returns a Promise of headers.
74
- */
75
- headers?: HeadersValue | (() => Promise<HeadersValue>);
76
-
77
- body?: object;
78
-
79
- /**
80
- * @deprecated Renamed to `sendExtraMessageFields`.
81
- */
82
- unstable_sendMessageIds?: boolean;
83
-
84
- /**
85
- * When enabled, the adapter will not strip `id` from messages in the messages array.
86
- */
87
- sendExtraMessageFields?: boolean;
88
-
89
- /**
90
- * When enabled, the adapter will send messages in the format expected by the Vercel AI SDK Core.
91
- * This feature will be removed in the future in favor of a better solution.
92
- *
93
- * `v2` sends frontend tools in a format that can be directly passed to `stremaText`
94
- */
95
- unstable_AISDKInterop?: boolean | "v2" | undefined;
96
- };
97
-
98
- const toAISDKTools = (tools: Record<string, Tool<any, any>>) => {
99
- return Object.fromEntries(
100
- Object.entries(tools).map(([name, tool]) => [
101
- name,
102
- {
103
- ...(tool.description ? { description: tool.description } : undefined),
104
- parameters: (tool.parameters instanceof z.ZodType
105
- ? zodToJsonSchema(tool.parameters)
106
- : tool.parameters) as JSONSchema7,
107
- },
108
- ]),
109
- );
110
- };
111
-
112
- export class EdgeModelAdapter implements ChatModelAdapter {
113
- constructor(private options: EdgeModelAdapterOptions) {}
114
-
115
- async *run({
116
- messages,
117
- runConfig,
118
- abortSignal,
119
- context,
120
- unstable_assistantMessageId,
121
- unstable_getMessage,
122
- }: ChatModelRunOptions) {
123
- const headersValue =
124
- typeof this.options.headers === "function"
125
- ? await this.options.headers()
126
- : this.options.headers;
127
-
128
- const headers = new Headers(headersValue);
129
- headers.set("Content-Type", "application/json");
130
-
131
- const result = await fetch(this.options.api, {
132
- method: "POST",
133
- headers,
134
- credentials: this.options.credentials ?? "same-origin",
135
- body: JSON.stringify({
136
- system: context.system,
137
- messages: this.options.unstable_AISDKInterop
138
- ? (toLanguageModelMessages(messages, {
139
- unstable_includeId:
140
- this.options.unstable_sendMessageIds ||
141
- this.options.sendExtraMessageFields,
142
- }) as EdgeRuntimeRequestOptions["messages"]) // TODO figure out a better way to do this
143
- : toCoreMessages(messages, {
144
- unstable_includeId:
145
- this.options.unstable_sendMessageIds ||
146
- this.options.sendExtraMessageFields,
147
- }),
148
- tools: context.tools
149
- ? this.options.unstable_AISDKInterop === "v2"
150
- ? (toAISDKTools(context.tools) as any)
151
- : toLanguageModelTools(context.tools)
152
- : [],
153
- unstable_assistantMessageId,
154
- runConfig,
155
- ...context.callSettings,
156
- ...context.config,
157
-
158
- ...this.options.body,
159
- } satisfies EdgeRuntimeRequestOptions),
160
- signal: abortSignal,
161
- });
162
-
163
- await this.options.onResponse?.(result);
164
-
165
- try {
166
- if (!result.ok) {
167
- throw new Error(`Status ${result.status}: ${await result.text()}`);
168
- }
169
- if (!result.body) {
170
- throw new Error("Response body is null");
171
- }
172
-
173
- const stream = result.body
174
- .pipeThrough(new DataStreamDecoder())
175
- .pipeThrough(toolResultStream(context.tools, abortSignal))
176
- .pipeThrough(new AssistantMessageAccumulator());
177
-
178
- for await (const update of asAsyncIterable(stream)) {
179
- yield update;
180
- }
181
-
182
- this.options.onFinish?.(unstable_getMessage());
183
- } catch (error: unknown) {
184
- this.options.onError?.(error as Error);
185
- throw error;
186
- }
187
- }
188
- }
@@ -1,109 +0,0 @@
1
- import { JSONSchema7 } from "json-schema";
2
- import {
3
- LanguageModelConfigSchema,
4
- LanguageModelV1CallSettingsSchema,
5
- } from "../../model-context/ModelContextTypes";
6
- import { z } from "zod";
7
- import { ReadonlyJSONObject } from "../../utils/json/json-value";
8
-
9
- const LanguageModelV1FunctionToolSchema = z.object({
10
- type: z.literal("function"),
11
- name: z.string(),
12
- description: z.string().optional(),
13
- parameters: z.custom<JSONSchema7>(
14
- (val) => typeof val === "object" && val !== null,
15
- ),
16
- });
17
-
18
- const TextContentPartSchema = z.object({
19
- type: z.literal("text"),
20
- text: z.string(),
21
- });
22
-
23
- const ImageContentPartSchema = z.object({
24
- type: z.literal("image"),
25
- image: z.string(),
26
- });
27
-
28
- const FileContentPartSchema = z.object({
29
- type: z.literal("file"),
30
- data: z.string(),
31
- mimeType: z.string(),
32
- });
33
-
34
- const Unstable_AudioContentPart = z.object({
35
- type: z.literal("audio"),
36
- audio: z.object({
37
- data: z.string(),
38
- format: z.union([z.literal("mp3"), z.literal("wav")]),
39
- }),
40
- });
41
-
42
- const CoreToolCallContentPartSchema = z.object({
43
- type: z.literal("tool-call"),
44
- toolCallId: z.string(),
45
- toolName: z.string(),
46
- args: z
47
- .record(z.unknown())
48
- .refine((c): c is ReadonlyJSONObject => c !== undefined),
49
- result: z.unknown().optional(),
50
- isError: z.boolean().optional(),
51
- });
52
-
53
- const CoreUserMessageSchema = z.object({
54
- role: z.literal("user"),
55
- content: z
56
- .array(
57
- z.discriminatedUnion("type", [
58
- TextContentPartSchema,
59
- ImageContentPartSchema,
60
- FileContentPartSchema,
61
- Unstable_AudioContentPart,
62
- ]),
63
- )
64
- .min(1)
65
- .readonly(),
66
- });
67
-
68
- const CoreAssistantMessageSchema = z.object({
69
- role: z.literal("assistant"),
70
- content: z
71
- .array(
72
- z.discriminatedUnion("type", [
73
- TextContentPartSchema,
74
- CoreToolCallContentPartSchema,
75
- ]),
76
- )
77
- .min(1)
78
- .readonly(),
79
- });
80
-
81
- const CoreSystemMessageSchema = z.object({
82
- role: z.literal("system"),
83
- content: z.tuple([TextContentPartSchema]).readonly(),
84
- });
85
-
86
- const CoreMessageSchema = z.discriminatedUnion("role", [
87
- CoreSystemMessageSchema,
88
- CoreUserMessageSchema,
89
- CoreAssistantMessageSchema,
90
- ]);
91
-
92
- export const EdgeRuntimeRequestOptionsSchema = z
93
- .object({
94
- system: z.string().optional(),
95
- messages: z.array(CoreMessageSchema).min(1).readonly(),
96
- runConfig: z
97
- .object({
98
- custom: z.record(z.unknown()).optional(),
99
- })
100
- .optional(),
101
- tools: z.array(LanguageModelV1FunctionToolSchema).readonly().optional(),
102
- unstable_assistantMessageId: z.string().optional(),
103
- })
104
- .merge(LanguageModelV1CallSettingsSchema)
105
- .merge(LanguageModelConfigSchema);
106
-
107
- export type EdgeRuntimeRequestOptions = z.infer<
108
- typeof EdgeRuntimeRequestOptionsSchema
109
- >;
@@ -1,76 +0,0 @@
1
- import { generateId } from "../../../internal";
2
- import {
3
- ThreadMessage,
4
- CoreMessage,
5
- ToolCallContentPart,
6
- MessageStatus,
7
- CompleteAttachment,
8
- } from "../../../types";
9
-
10
- export const fromCoreMessages = (
11
- message: readonly CoreMessage[],
12
- ): ThreadMessage[] => {
13
- return message.map((message) => fromCoreMessage(message));
14
- };
15
-
16
- export const fromCoreMessage = (
17
- message: CoreMessage,
18
- {
19
- id = generateId(),
20
- status = { type: "complete", reason: "unknown" } as MessageStatus,
21
- attachments = [] as readonly CompleteAttachment[],
22
- } = {},
23
- ): ThreadMessage => {
24
- const commonProps = {
25
- id,
26
- createdAt: new Date(),
27
- };
28
-
29
- const role = message.role;
30
- switch (role) {
31
- case "assistant":
32
- return {
33
- ...commonProps,
34
- role,
35
- content: message.content.map((part) => {
36
- if (part.type === "tool-call") {
37
- return {
38
- ...part,
39
- argsText: JSON.stringify(part.args),
40
- } satisfies ToolCallContentPart;
41
- }
42
- return part;
43
- }),
44
- status,
45
-
46
- metadata: {
47
- unstable_annotations: [],
48
- unstable_data: [],
49
- steps: [],
50
- custom: {},
51
- },
52
- } satisfies ThreadMessage;
53
-
54
- case "user":
55
- return {
56
- ...commonProps,
57
- role,
58
- content: message.content,
59
- attachments,
60
- metadata: { custom: {} },
61
- } satisfies ThreadMessage;
62
-
63
- case "system":
64
- return {
65
- ...commonProps,
66
- role,
67
- content: message.content,
68
- metadata: { custom: {} },
69
- } satisfies ThreadMessage;
70
-
71
- default: {
72
- const unsupportedRole: never = role;
73
- throw new Error(`Unknown message role: ${unsupportedRole}`);
74
- }
75
- }
76
- };
@@ -1,149 +0,0 @@
1
- import { LanguageModelV1Message } from "@ai-sdk/provider";
2
- import { CoreMessage, ToolCallContentPart } from "../../../types";
3
- import { Writable } from "stream";
4
- import { ReadonlyJSONObject } from "../../../utils/json/json-value";
5
-
6
- type fromLanguageModelMessagesOptions = {
7
- mergeSteps?: boolean;
8
- };
9
-
10
- export const fromLanguageModelMessages = (
11
- lm: LanguageModelV1Message[],
12
- { mergeSteps }: fromLanguageModelMessagesOptions = {},
13
- ): CoreMessage[] => {
14
- const messages: CoreMessage[] = [];
15
-
16
- for (const lmMessage of lm) {
17
- const role = lmMessage.role;
18
- switch (role) {
19
- case "system": {
20
- messages.push({
21
- role: "system",
22
- content: [
23
- {
24
- type: "text",
25
- text: lmMessage.content,
26
- },
27
- ],
28
- });
29
- break;
30
- }
31
- case "user": {
32
- messages.push({
33
- role: "user",
34
- content: lmMessage.content.map((part) => {
35
- const type = part.type;
36
- switch (type) {
37
- case "text": {
38
- return {
39
- type: "text",
40
- text: part.text,
41
- };
42
- }
43
- case "image": {
44
- if (part.image instanceof URL) {
45
- return {
46
- type: "image",
47
- image: part.image.href,
48
- };
49
- }
50
- throw new Error("Only images with URL data are supported");
51
- }
52
- case "file": {
53
- if (part.data instanceof URL) {
54
- return {
55
- type: "file",
56
- data: part.data.href,
57
- mimeType: part.mimeType,
58
- };
59
- }
60
- throw new Error("Only files with URL data are supported");
61
- }
62
-
63
- default: {
64
- const unhandledType: never = type;
65
- throw new Error(`Unknown content part type: ${unhandledType}`);
66
- }
67
- }
68
- }),
69
- });
70
- break;
71
- }
72
- case "assistant": {
73
- const newContent = lmMessage.content
74
- .map((part) => {
75
- if (part.type === "tool-call") {
76
- return {
77
- type: "tool-call",
78
- toolCallId: part.toolCallId,
79
- toolName: part.toolName,
80
- argsText: JSON.stringify(part.args),
81
- args: part.args as ReadonlyJSONObject,
82
- } satisfies ToolCallContentPart;
83
- }
84
- // TODO handle these
85
- if (
86
- part.type === "redacted-reasoning" ||
87
- part.type === "file" ||
88
- part.type === "reasoning"
89
- ) {
90
- return null;
91
- }
92
- return part;
93
- })
94
- .filter((p) => !!p);
95
-
96
- if (mergeSteps) {
97
- const previousMessage = messages[messages.length - 1];
98
- if (previousMessage?.role === "assistant") {
99
- previousMessage.content = [
100
- ...previousMessage.content,
101
- ...newContent,
102
- ];
103
- break;
104
- }
105
- }
106
-
107
- messages.push({
108
- role: "assistant",
109
- content: newContent,
110
- });
111
- break;
112
- }
113
- case "tool": {
114
- const previousMessage = messages[messages.length - 1];
115
- if (previousMessage?.role !== "assistant")
116
- throw new Error(
117
- "A tool message must be preceded by an assistant message.",
118
- );
119
-
120
- for (const tool of lmMessage.content) {
121
- const toolCall = previousMessage.content.find(
122
- (c): c is ToolCallContentPart =>
123
- c.type === "tool-call" && c.toolCallId === tool.toolCallId,
124
- );
125
- if (!toolCall)
126
- throw new Error("Received tool result for an unknown tool call.");
127
- if (toolCall.toolName !== tool.toolName)
128
- throw new Error("Tool call name mismatch.");
129
-
130
- type Writable<T> = { -readonly [P in keyof T]: T[P] };
131
- const writable = toolCall as Writable<ToolCallContentPart>;
132
- writable.result = tool.result;
133
- if (tool.isError) {
134
- writable.isError = true;
135
- }
136
- }
137
-
138
- break;
139
- }
140
-
141
- default: {
142
- const unhandledRole: never = role;
143
- throw new Error(`Unknown message role: ${unhandledRole}`);
144
- }
145
- }
146
- }
147
-
148
- return messages;
149
- };
@@ -1,16 +0,0 @@
1
- import { LanguageModelV1FunctionTool } from "@ai-sdk/provider";
2
- import { Tool } from "../../../model-context/ModelContextTypes";
3
-
4
- export const fromLanguageModelTools = (
5
- tools: LanguageModelV1FunctionTool[],
6
- ): Record<string, Tool<any, any>> => {
7
- return Object.fromEntries(
8
- tools.map((tool) => [
9
- tool.name,
10
- {
11
- description: tool.description,
12
- parameters: tool.parameters,
13
- },
14
- ]),
15
- );
16
- };
@@ -1,41 +0,0 @@
1
- /**
2
- * @deprecated This is an internal API and may change without notice.
3
- */
4
- export { toLanguageModelMessages } from "./toLanguageModelMessages";
5
-
6
- /**
7
- * @deprecated This is an internal API and may change without notice.
8
- */
9
- export { fromLanguageModelMessages } from "./fromLanguageModelMessages";
10
-
11
- export {
12
- /**
13
- * @deprecated This is an internal API and may change without notice.
14
- */
15
- fromCoreMessages,
16
- /**
17
- * @deprecated This is an internal API and may change without notice.
18
- */
19
- fromCoreMessage,
20
- } from "./fromCoreMessage";
21
-
22
- export {
23
- /**
24
- * @deprecated This is an internal API and may change without notice.
25
- */
26
- toCoreMessages,
27
- /**
28
- * @deprecated This is an internal API and may change without notice.
29
- */
30
- toCoreMessage,
31
- } from "./toCoreMessages";
32
-
33
- /**
34
- * @deprecated This is an internal API and may change without notice.
35
- */
36
- export { fromLanguageModelTools } from "./fromLanguageModelTools";
37
-
38
- /**
39
- * @deprecated This is an internal API and may change without notice.
40
- */
41
- export { toLanguageModelTools } from "./toLanguageModelTools";
@@ -1,64 +0,0 @@
1
- import { ThreadMessage, CoreMessage } from "../../../types";
2
-
3
- type CoreMessageWithConditionalId<T extends boolean> = T extends false
4
- ? CoreMessage
5
- : CoreMessage & { unstable_id?: string };
6
-
7
- export const toCoreMessages = <T extends boolean = false>(
8
- messages: readonly ThreadMessage[],
9
- options: { unstable_includeId?: T | undefined } = {},
10
- ): CoreMessageWithConditionalId<T>[] => {
11
- return messages.map((message) => toCoreMessage(message, options));
12
- };
13
-
14
- export const toCoreMessage = <T extends boolean = false>(
15
- message: ThreadMessage,
16
- options: { unstable_includeId?: T | undefined } = {},
17
- ): CoreMessageWithConditionalId<T> => {
18
- const includeId = options.unstable_includeId ?? false;
19
- const role = message.role;
20
- switch (role) {
21
- case "assistant":
22
- return {
23
- role,
24
- content: message.content
25
- .map((part) => {
26
- if (
27
- part.type === "reasoning" ||
28
- part.type === "source" ||
29
- part.type === "file"
30
- )
31
- return null; // reasoning, source, and file parts are omitted
32
- if (part.type === "tool-call") {
33
- const { argsText, ...rest } = part;
34
- return rest;
35
- }
36
- return part;
37
- })
38
- .filter((c) => !!c),
39
- ...(includeId ? { unstable_id: message.id } : {}),
40
- };
41
-
42
- case "user":
43
- return {
44
- role,
45
- content: [
46
- ...message.content,
47
- ...message.attachments.map((a) => a.content).flat(),
48
- ],
49
- ...(includeId ? { unstable_id: message.id } : {}),
50
- };
51
-
52
- case "system":
53
- return {
54
- role,
55
- content: message.content,
56
- ...(includeId ? { unstable_id: message.id } : {}),
57
- };
58
-
59
- default: {
60
- const unsupportedRole: never = role;
61
- throw new Error(`Unknown message role: ${unsupportedRole}`);
62
- }
63
- }
64
- };