@assistant-ui/react 0.8.6 → 0.8.7

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 (196) hide show
  1. package/dist/cloud/auiV0.d.ts.map +1 -1
  2. package/dist/cloud/auiV0.js +9 -2
  3. package/dist/cloud/auiV0.js.map +1 -1
  4. package/dist/cloud/auiV0.mjs +9 -2
  5. package/dist/cloud/auiV0.mjs.map +1 -1
  6. package/dist/primitives/contentPart/useContentPartFile.d.ts +5 -0
  7. package/dist/primitives/contentPart/useContentPartFile.d.ts.map +1 -0
  8. package/dist/{runtimes/edge/streams/utils/index.js → primitives/contentPart/useContentPartFile.js} +18 -12
  9. package/dist/primitives/contentPart/useContentPartFile.js.map +1 -0
  10. package/dist/primitives/contentPart/useContentPartFile.mjs +18 -0
  11. package/dist/primitives/contentPart/useContentPartFile.mjs.map +1 -0
  12. package/dist/primitives/contentPart/useContentPartSource.d.ts +5 -0
  13. package/dist/primitives/contentPart/useContentPartSource.d.ts.map +1 -0
  14. package/dist/{runtimes/edge/streams/utils/PipeableTransformStream.js → primitives/contentPart/useContentPartSource.js} +18 -16
  15. package/dist/primitives/contentPart/useContentPartSource.js.map +1 -0
  16. package/dist/primitives/contentPart/useContentPartSource.mjs +18 -0
  17. package/dist/primitives/contentPart/useContentPartSource.mjs.map +1 -0
  18. package/dist/primitives/index.d.ts +3 -1
  19. package/dist/primitives/index.d.ts.map +1 -1
  20. package/dist/primitives/index.js +7 -1
  21. package/dist/primitives/index.js.map +1 -1
  22. package/dist/primitives/index.mjs +5 -1
  23. package/dist/primitives/index.mjs.map +1 -1
  24. package/dist/runtimes/adapters/thread-history/ThreadHistoryAdapter.d.ts +5 -1
  25. package/dist/runtimes/adapters/thread-history/ThreadHistoryAdapter.d.ts.map +1 -1
  26. package/dist/runtimes/adapters/thread-history/ThreadHistoryAdapter.js.map +1 -1
  27. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.d.ts +1 -1
  28. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.d.ts.map +1 -1
  29. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.js +2 -2
  30. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.js.map +1 -1
  31. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.mjs +2 -2
  32. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.mjs.map +1 -1
  33. package/dist/runtimes/edge/EdgeChatAdapter.d.ts +1 -2
  34. package/dist/runtimes/edge/EdgeChatAdapter.d.ts.map +1 -1
  35. package/dist/runtimes/edge/EdgeChatAdapter.js +6 -8
  36. package/dist/runtimes/edge/EdgeChatAdapter.js.map +1 -1
  37. package/dist/runtimes/edge/EdgeChatAdapter.mjs +9 -8
  38. package/dist/runtimes/edge/EdgeChatAdapter.mjs.map +1 -1
  39. package/dist/runtimes/edge/converters/fromLanguageModelMessages.d.ts +2 -2
  40. package/dist/runtimes/edge/converters/fromLanguageModelMessages.d.ts.map +1 -1
  41. package/dist/runtimes/edge/converters/fromLanguageModelMessages.js +5 -2
  42. package/dist/runtimes/edge/converters/fromLanguageModelMessages.js.map +1 -1
  43. package/dist/runtimes/edge/converters/fromLanguageModelMessages.mjs +5 -2
  44. package/dist/runtimes/edge/converters/fromLanguageModelMessages.mjs.map +1 -1
  45. package/dist/runtimes/edge/converters/toCoreMessages.d.ts.map +1 -1
  46. package/dist/runtimes/edge/converters/toCoreMessages.js +1 -1
  47. package/dist/runtimes/edge/converters/toCoreMessages.js.map +1 -1
  48. package/dist/runtimes/edge/converters/toCoreMessages.mjs +1 -1
  49. package/dist/runtimes/edge/converters/toCoreMessages.mjs.map +1 -1
  50. package/dist/runtimes/edge/converters/toLanguageModelMessages.d.ts.map +1 -1
  51. package/dist/runtimes/edge/converters/toLanguageModelMessages.js +2 -1
  52. package/dist/runtimes/edge/converters/toLanguageModelMessages.js.map +1 -1
  53. package/dist/runtimes/edge/converters/toLanguageModelMessages.mjs +2 -1
  54. package/dist/runtimes/edge/converters/toLanguageModelMessages.mjs.map +1 -1
  55. package/dist/runtimes/edge/createEdgeRuntimeAPI.d.ts +2 -2
  56. package/dist/runtimes/edge/createEdgeRuntimeAPI.d.ts.map +1 -1
  57. package/dist/runtimes/edge/createEdgeRuntimeAPI.js +17 -34
  58. package/dist/runtimes/edge/createEdgeRuntimeAPI.js.map +1 -1
  59. package/dist/runtimes/edge/createEdgeRuntimeAPI.mjs +21 -37
  60. package/dist/runtimes/edge/createEdgeRuntimeAPI.mjs.map +1 -1
  61. package/dist/runtimes/edge/index.d.ts +0 -1
  62. package/dist/runtimes/edge/index.d.ts.map +1 -1
  63. package/dist/runtimes/edge/index.js +1 -3
  64. package/dist/runtimes/edge/index.js.map +1 -1
  65. package/dist/runtimes/edge/index.mjs +0 -1
  66. package/dist/runtimes/edge/index.mjs.map +1 -1
  67. package/dist/runtimes/edge/streams/toolResultStream.d.ts +2 -33
  68. package/dist/runtimes/edge/streams/toolResultStream.d.ts.map +1 -1
  69. package/dist/runtimes/edge/streams/toolResultStream.js +19 -96
  70. package/dist/runtimes/edge/streams/toolResultStream.js.map +1 -1
  71. package/dist/runtimes/edge/streams/toolResultStream.mjs +19 -86
  72. package/dist/runtimes/edge/streams/toolResultStream.mjs.map +1 -1
  73. package/dist/runtimes/external-store/ThreadMessageLike.d.ts.map +1 -1
  74. package/dist/runtimes/external-store/ThreadMessageLike.js +1 -0
  75. package/dist/runtimes/external-store/ThreadMessageLike.js.map +1 -1
  76. package/dist/runtimes/external-store/ThreadMessageLike.mjs +1 -0
  77. package/dist/runtimes/external-store/ThreadMessageLike.mjs.map +1 -1
  78. package/dist/runtimes/local/ChatModelAdapter.d.ts +2 -2
  79. package/dist/runtimes/local/ChatModelAdapter.d.ts.map +1 -1
  80. package/dist/runtimes/local/ChatModelAdapter.js.map +1 -1
  81. package/dist/runtimes/local/LocalRuntimeOptions.d.ts +1 -1
  82. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts +3 -2
  83. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts.map +1 -1
  84. package/dist/runtimes/local/LocalThreadRuntimeCore.js +22 -7
  85. package/dist/runtimes/local/LocalThreadRuntimeCore.js.map +1 -1
  86. package/dist/runtimes/local/LocalThreadRuntimeCore.mjs +22 -7
  87. package/dist/runtimes/local/LocalThreadRuntimeCore.mjs.map +1 -1
  88. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  89. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js +1 -1
  90. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  91. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.mjs +1 -1
  92. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.mjs.map +1 -1
  93. package/dist/runtimes/utils/MessageRepository.d.ts +1 -0
  94. package/dist/runtimes/utils/MessageRepository.d.ts.map +1 -1
  95. package/dist/runtimes/utils/MessageRepository.js +3 -0
  96. package/dist/runtimes/utils/MessageRepository.js.map +1 -1
  97. package/dist/runtimes/utils/MessageRepository.mjs +3 -0
  98. package/dist/runtimes/utils/MessageRepository.mjs.map +1 -1
  99. package/dist/types/AssistantTypes.d.ts +1 -1
  100. package/dist/types/AssistantTypes.d.ts.map +1 -1
  101. package/dist/types/AssistantTypes.js.map +1 -1
  102. package/dist/utils/json/is-json.d.ts +1 -1
  103. package/dist/utils/json/is-json.d.ts.map +1 -1
  104. package/dist/utils/json/is-json.js +10 -4
  105. package/dist/utils/json/is-json.js.map +1 -1
  106. package/dist/utils/json/is-json.mjs +10 -4
  107. package/dist/utils/json/is-json.mjs.map +1 -1
  108. package/package.json +5 -5
  109. package/src/cloud/auiV0.ts +9 -2
  110. package/src/primitives/contentPart/useContentPartFile.tsx +18 -0
  111. package/src/primitives/contentPart/useContentPartSource.tsx +18 -0
  112. package/src/primitives/index.ts +3 -1
  113. package/src/runtimes/adapters/thread-history/ThreadHistoryAdapter.ts +5 -1
  114. package/src/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.ts +2 -2
  115. package/src/runtimes/edge/EdgeChatAdapter.ts +18 -19
  116. package/src/runtimes/edge/converters/fromLanguageModelMessages.ts +24 -14
  117. package/src/runtimes/edge/converters/toCoreMessages.ts +6 -2
  118. package/src/runtimes/edge/converters/toLanguageModelMessages.ts +3 -2
  119. package/src/runtimes/edge/createEdgeRuntimeAPI.ts +25 -47
  120. package/src/runtimes/edge/index.ts +0 -2
  121. package/src/runtimes/edge/streams/toolResultStream.ts +28 -152
  122. package/src/runtimes/external-store/ThreadMessageLike.tsx +2 -1
  123. package/src/runtimes/local/ChatModelAdapter.tsx +2 -0
  124. package/src/runtimes/local/LocalThreadRuntimeCore.tsx +31 -7
  125. package/src/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.tsx +1 -2
  126. package/src/runtimes/utils/MessageRepository.tsx +4 -0
  127. package/src/types/AssistantTypes.ts +2 -1
  128. package/src/utils/json/is-json.ts +17 -4
  129. package/dist/runtimes/edge/streams/AssistantStreamChunkType.d.ts +0 -62
  130. package/dist/runtimes/edge/streams/AssistantStreamChunkType.d.ts.map +0 -1
  131. package/dist/runtimes/edge/streams/AssistantStreamChunkType.js +0 -46
  132. package/dist/runtimes/edge/streams/AssistantStreamChunkType.js.map +0 -1
  133. package/dist/runtimes/edge/streams/AssistantStreamChunkType.mjs +0 -21
  134. package/dist/runtimes/edge/streams/AssistantStreamChunkType.mjs.map +0 -1
  135. package/dist/runtimes/edge/streams/assistantDecoderStream.d.ts +0 -5
  136. package/dist/runtimes/edge/streams/assistantDecoderStream.d.ts.map +0 -1
  137. package/dist/runtimes/edge/streams/assistantDecoderStream.js +0 -170
  138. package/dist/runtimes/edge/streams/assistantDecoderStream.js.map +0 -1
  139. package/dist/runtimes/edge/streams/assistantDecoderStream.mjs +0 -147
  140. package/dist/runtimes/edge/streams/assistantDecoderStream.mjs.map +0 -1
  141. package/dist/runtimes/edge/streams/assistantEncoderStream.d.ts +0 -5
  142. package/dist/runtimes/edge/streams/assistantEncoderStream.d.ts.map +0 -1
  143. package/dist/runtimes/edge/streams/assistantEncoderStream.js +0 -137
  144. package/dist/runtimes/edge/streams/assistantEncoderStream.js.map +0 -1
  145. package/dist/runtimes/edge/streams/assistantEncoderStream.mjs +0 -114
  146. package/dist/runtimes/edge/streams/assistantEncoderStream.mjs.map +0 -1
  147. package/dist/runtimes/edge/streams/runResultStream.d.ts +0 -4
  148. package/dist/runtimes/edge/streams/runResultStream.d.ts.map +0 -1
  149. package/dist/runtimes/edge/streams/runResultStream.js +0 -313
  150. package/dist/runtimes/edge/streams/runResultStream.js.map +0 -1
  151. package/dist/runtimes/edge/streams/runResultStream.mjs +0 -288
  152. package/dist/runtimes/edge/streams/runResultStream.mjs.map +0 -1
  153. package/dist/runtimes/edge/streams/utils/PipeableTransformStream.d.ts +0 -4
  154. package/dist/runtimes/edge/streams/utils/PipeableTransformStream.d.ts.map +0 -1
  155. package/dist/runtimes/edge/streams/utils/PipeableTransformStream.js.map +0 -1
  156. package/dist/runtimes/edge/streams/utils/PipeableTransformStream.mjs +0 -15
  157. package/dist/runtimes/edge/streams/utils/PipeableTransformStream.mjs.map +0 -1
  158. package/dist/runtimes/edge/streams/utils/StreamPart.d.ts +0 -7
  159. package/dist/runtimes/edge/streams/utils/StreamPart.d.ts.map +0 -1
  160. package/dist/runtimes/edge/streams/utils/StreamPart.js +0 -19
  161. package/dist/runtimes/edge/streams/utils/StreamPart.js.map +0 -1
  162. package/dist/runtimes/edge/streams/utils/StreamPart.mjs +0 -1
  163. package/dist/runtimes/edge/streams/utils/StreamPart.mjs.map +0 -1
  164. package/dist/runtimes/edge/streams/utils/chunkByLineStream.d.ts +0 -2
  165. package/dist/runtimes/edge/streams/utils/chunkByLineStream.d.ts.map +0 -1
  166. package/dist/runtimes/edge/streams/utils/chunkByLineStream.js +0 -48
  167. package/dist/runtimes/edge/streams/utils/chunkByLineStream.js.map +0 -1
  168. package/dist/runtimes/edge/streams/utils/chunkByLineStream.mjs +0 -23
  169. package/dist/runtimes/edge/streams/utils/chunkByLineStream.mjs.map +0 -1
  170. package/dist/runtimes/edge/streams/utils/index.d.ts +0 -14
  171. package/dist/runtimes/edge/streams/utils/index.d.ts.map +0 -1
  172. package/dist/runtimes/edge/streams/utils/index.js.map +0 -1
  173. package/dist/runtimes/edge/streams/utils/index.mjs +0 -11
  174. package/dist/runtimes/edge/streams/utils/index.mjs.map +0 -1
  175. package/dist/runtimes/edge/streams/utils/streamPartDecoderStream.d.ts +0 -4
  176. package/dist/runtimes/edge/streams/utils/streamPartDecoderStream.d.ts.map +0 -1
  177. package/dist/runtimes/edge/streams/utils/streamPartDecoderStream.js +0 -50
  178. package/dist/runtimes/edge/streams/utils/streamPartDecoderStream.js.map +0 -1
  179. package/dist/runtimes/edge/streams/utils/streamPartDecoderStream.mjs +0 -25
  180. package/dist/runtimes/edge/streams/utils/streamPartDecoderStream.mjs.map +0 -1
  181. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.d.ts +0 -3
  182. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.d.ts.map +0 -1
  183. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.js +0 -48
  184. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.js.map +0 -1
  185. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.mjs +0 -23
  186. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.mjs.map +0 -1
  187. package/src/runtimes/edge/streams/AssistantStreamChunkType.ts +0 -73
  188. package/src/runtimes/edge/streams/assistantDecoderStream.ts +0 -170
  189. package/src/runtimes/edge/streams/assistantEncoderStream.ts +0 -126
  190. package/src/runtimes/edge/streams/runResultStream.ts +0 -360
  191. package/src/runtimes/edge/streams/utils/PipeableTransformStream.ts +0 -10
  192. package/src/runtimes/edge/streams/utils/StreamPart.ts +0 -3
  193. package/src/runtimes/edge/streams/utils/chunkByLineStream.ts +0 -24
  194. package/src/runtimes/edge/streams/utils/index.ts +0 -15
  195. package/src/runtimes/edge/streams/utils/streamPartDecoderStream.ts +0 -29
  196. package/src/runtimes/edge/streams/utils/streamPartEncoderStream.ts +0 -23
@@ -1,163 +1,39 @@
1
1
  import { Tool } from "../../../model-context/ModelContextTypes";
2
- import { LanguageModelV1StreamPart } from "@ai-sdk/provider";
3
2
  import { z } from "zod";
4
- import sjson from "secure-json-parse";
5
- import { ReadonlyJSONValue } from "../../../utils/json/json-value";
6
-
7
- export type ToolResultStreamPart =
8
- | LanguageModelV1StreamPart
9
- | {
10
- type: "annotations";
11
- annotations: ReadonlyJSONValue[];
12
- }
13
- | {
14
- type: "data";
15
- data: ReadonlyJSONValue[];
16
- }
17
- | {
18
- type: "source";
19
- source: {
20
- readonly sourceType: "url";
21
- readonly id: string;
22
- readonly url: string;
23
- readonly title?: string;
24
- };
25
- }
26
- | {
27
- type: "tool-result";
28
- toolCallType: "function";
29
- toolCallId: string;
30
- toolName: string;
31
- result: unknown;
32
- isError?: boolean;
33
- }
34
- | {
35
- type: "step-finish";
36
- finishReason:
37
- | "stop"
38
- | "length"
39
- | "content-filter"
40
- | "tool-calls"
41
- | "error"
42
- | "other"
43
- | "unknown";
44
- usage: {
45
- promptTokens: number;
46
- completionTokens: number;
47
- };
48
- isContinued: boolean;
49
- };
3
+ import { ToolExecutionStream } from "assistant-stream";
50
4
 
51
5
  export function toolResultStream(
52
6
  tools: Record<string, Tool<any, any>> | undefined,
53
7
  abortSignal: AbortSignal,
54
8
  ) {
55
- const toolCallExecutions = new Map<string, Promise<any>>();
56
-
57
- return new TransformStream<ToolResultStreamPart, ToolResultStreamPart>({
58
- transform(chunk, controller) {
59
- // forward everything
60
- controller.enqueue(chunk);
61
-
62
- // handle tool calls
63
- const chunkType = chunk.type;
64
- switch (chunkType) {
65
- case "tool-call": {
66
- const { toolCallId, toolCallType, toolName, args: argsText } = chunk;
67
- const tool = tools?.[toolName];
68
- if (!tool || !tool.execute) return;
69
-
70
- let args;
71
- try {
72
- args = sjson.parse(argsText);
73
- } catch (e) {
74
- controller.enqueue({
75
- type: "tool-result",
76
- toolCallType,
77
- toolCallId,
78
- toolName,
79
- result:
80
- "Function parameter parsing failed. " +
81
- JSON.stringify((e as Error).message),
82
- isError: true,
83
- });
84
- return;
85
- }
86
-
87
- toolCallExecutions.set(
88
- toolCallId,
89
- (async () => {
90
- if (!tool.execute) return;
91
-
92
- let executeFn = tool.execute;
93
-
94
- if (tool.parameters instanceof z.ZodType) {
95
- const result = tool.parameters.safeParse(args);
96
- if (!result.success) {
97
- executeFn =
98
- tool.experimental_onSchemaValidationError ??
99
- (() => {
100
- throw (
101
- "Function parameter validation failed. " +
102
- JSON.stringify(result.error.issues)
103
- );
104
- });
105
- }
106
- }
107
-
108
- try {
109
- const result = await executeFn(args, {
110
- toolCallId,
111
- abortSignal,
112
- });
113
-
114
- controller.enqueue({
115
- type: "tool-result",
116
- toolCallType,
117
- toolCallId,
118
- toolName,
119
- result: result === undefined ? "<no result>" : result,
120
- });
121
- } catch (error) {
122
- controller.enqueue({
123
- type: "tool-result",
124
- toolCallType,
125
- toolCallId,
126
- toolName,
127
- result: "Error: " + error,
128
- isError: true,
129
- });
130
- } finally {
131
- toolCallExecutions.delete(toolCallId);
132
- }
133
- })(),
134
- );
135
- break;
136
- }
137
-
138
- // ignore other parts
139
- case "text-delta":
140
- case "reasoning":
141
- case "source":
142
- case "tool-call-delta":
143
- case "tool-result":
144
- case "step-finish":
145
- case "finish":
146
- case "error":
147
- case "response-metadata":
148
- case "annotations":
149
- case "data":
150
- break;
151
-
152
- default: {
153
- const unhandledType: never = chunkType;
154
- throw new Error(`Unhandled chunk type: ${unhandledType}`);
155
- }
9
+ return new ToolExecutionStream(({ toolCallId, toolName, args }) => {
10
+ const tool = tools?.[toolName];
11
+ if (!tool || !tool.execute) return undefined;
12
+
13
+ let executeFn = tool.execute;
14
+
15
+ if (tool.parameters instanceof z.ZodType) {
16
+ const result = tool.parameters.safeParse(args);
17
+ if (!result.success) {
18
+ executeFn =
19
+ tool.experimental_onSchemaValidationError ??
20
+ (() => {
21
+ throw (
22
+ "Function parameter validation failed. " +
23
+ JSON.stringify(result.error.issues)
24
+ );
25
+ });
156
26
  }
157
- },
27
+ }
28
+
29
+ const getResult = async () => {
30
+ const result = await executeFn(args, {
31
+ toolCallId,
32
+ abortSignal,
33
+ });
34
+ return result === undefined ? "<no result>" : result;
35
+ };
158
36
 
159
- async flush() {
160
- await Promise.all(toolCallExecutions.values());
161
- },
37
+ return getResult();
162
38
  });
163
39
  }
@@ -100,6 +100,7 @@ export const fromThreadMessageLike = (
100
100
  if (part.text.trim().length === 0) return null;
101
101
  return part;
102
102
 
103
+ case "file":
103
104
  case "source":
104
105
  return part;
105
106
 
@@ -121,7 +122,7 @@ export const fromThreadMessageLike = (
121
122
  }
122
123
 
123
124
  default: {
124
- const unhandledType: "image" | "audio" | "file" = type;
125
+ const unhandledType: "image" | "audio" = type;
125
126
  throw new Error(
126
127
  `Unsupported assistant content part type: ${unhandledType}`,
127
128
  );
@@ -1,4 +1,5 @@
1
1
  import type {
2
+ FileContentPart,
2
3
  MessageStatus,
3
4
  ReasoningContentPart,
4
5
  RunConfig,
@@ -34,6 +35,7 @@ export type CoreChatModelRunResult = Omit<ChatModelRunResult, "content"> & {
34
35
  | ReasoningContentPart
35
36
  | ToolCallContentPart
36
37
  | SourceContentPart
38
+ | FileContentPart
37
39
  )[];
38
40
  };
39
41
 
@@ -1,7 +1,7 @@
1
1
  import { generateId } from "../../internal";
2
2
  import type { AppendMessage, ThreadAssistantMessage } from "../../types";
3
3
  import { fromCoreMessage } from "../edge";
4
- import type { ChatModelRunResult } from "./ChatModelAdapter";
4
+ import type { ChatModelAdapter, ChatModelRunResult } from "./ChatModelAdapter";
5
5
  import { shouldContinue } from "./shouldContinue";
6
6
  import { LocalRuntimeOptionsBase } from "./LocalRuntimeOptions";
7
7
  import {
@@ -97,6 +97,18 @@ export class LocalThreadRuntimeCore
97
97
  if (!repo) return;
98
98
  this.repository.import(repo);
99
99
  this._notifySubscribers();
100
+
101
+ const resume = this.adapters.history?.resume?.bind(this.adapters.history);
102
+ if (repo.unstable_resume && resume) {
103
+ this.startRun(
104
+ {
105
+ parentId: this.repository.headId,
106
+ sourceId: this.repository.headId,
107
+ runConfig: this._lastRunConfig,
108
+ },
109
+ resume,
110
+ );
111
+ }
100
112
  });
101
113
 
102
114
  return this._loadPromise;
@@ -127,10 +139,10 @@ export class LocalThreadRuntimeCore
127
139
  }
128
140
  }
129
141
 
130
- public async startRun({
131
- parentId,
132
- runConfig,
133
- }: StartRunConfig): Promise<void> {
142
+ public async startRun(
143
+ { parentId, runConfig }: StartRunConfig,
144
+ runCallback?: ChatModelAdapter["run"],
145
+ ): Promise<void> {
134
146
  this.ensureInitialized();
135
147
 
136
148
  this.repository.resetHead(parentId);
@@ -159,7 +171,13 @@ export class LocalThreadRuntimeCore
159
171
  this._suggestionsController = null;
160
172
 
161
173
  do {
162
- message = await this.performRoundtrip(parentId, message, runConfig);
174
+ message = await this.performRoundtrip(
175
+ parentId,
176
+ message,
177
+ runConfig,
178
+ runCallback,
179
+ );
180
+ runCallback = undefined;
163
181
  } while (shouldContinue(message, this._options.unstable_humanToolNames));
164
182
  } finally {
165
183
  this._notifyEventSubscribers("run-end");
@@ -192,6 +210,7 @@ export class LocalThreadRuntimeCore
192
210
  parentId: string | null,
193
211
  message: ThreadAssistantMessage,
194
212
  runConfig: RunConfig | undefined,
213
+ runCallback?: ChatModelAdapter["run"],
195
214
  ) {
196
215
  const messages = this.repository.getMessages();
197
216
 
@@ -268,7 +287,12 @@ export class LocalThreadRuntimeCore
268
287
  try {
269
288
  this._lastRunConfig = runConfig ?? {};
270
289
  const context = this.getModelContext();
271
- const promiseOrGenerator = this.adapters.chatModel.run({
290
+
291
+ runCallback =
292
+ runCallback ??
293
+ this.adapters.chatModel.run.bind(this.adapters.chatModel);
294
+
295
+ const promiseOrGenerator = runCallback({
272
296
  messages,
273
297
  runConfig: this._lastRunConfig,
274
298
  abortSignal: this.abortController.signal,
@@ -422,8 +422,7 @@ export class RemoteThreadListThreadListRuntimeCore
422
422
  const messageStream = AssistantMessageStream.fromAssistantStream(stream);
423
423
  for await (const result of messageStream) {
424
424
  const newTitle =
425
- result.content.filter((c) => c.type === "text")[0]?.text ??
426
- "New Thread";
425
+ result.parts.filter((c) => c.type === "text")[0]?.text ?? "New Thread";
427
426
  const state = this._state.baseValue;
428
427
  this._state.update({
429
428
  ...state,
@@ -147,6 +147,10 @@ export class MessageRepository {
147
147
  return messages;
148
148
  });
149
149
 
150
+ get headId() {
151
+ return this.head?.current.id ?? null;
152
+ }
153
+
150
154
  getMessages() {
151
155
  return this._messages.value;
152
156
  }
@@ -111,7 +111,8 @@ export type ThreadAssistantContentPart =
111
111
  | TextContentPart
112
112
  | ReasoningContentPart
113
113
  | ToolCallContentPart
114
- | SourceContentPart;
114
+ | SourceContentPart
115
+ | FileContentPart;
115
116
 
116
117
  type MessageCommonProps = {
117
118
  readonly id: string;
@@ -4,23 +4,36 @@ import {
4
4
  ReadonlyJSONValue,
5
5
  } from "./json-value";
6
6
 
7
- export function isJSONValue(value: unknown): value is ReadonlyJSONValue {
7
+ export function isJSONValue(
8
+ value: unknown,
9
+ currentDepth: number = 0,
10
+ ): value is ReadonlyJSONValue {
11
+ // Protect against too deep recursion
12
+ if (currentDepth > 100) {
13
+ return false;
14
+ }
15
+
8
16
  if (
9
17
  value === null ||
10
18
  typeof value === "string" ||
11
- typeof value === "number" ||
12
19
  typeof value === "boolean"
13
20
  ) {
14
21
  return true;
15
22
  }
16
23
 
24
+ // Handle special number cases
25
+ if (typeof value === "number") {
26
+ return !Number.isNaN(value) && Number.isFinite(value);
27
+ }
28
+
17
29
  if (Array.isArray(value)) {
18
- return value.every(isJSONValue);
30
+ return value.every((item) => isJSONValue(item, currentDepth + 1));
19
31
  }
20
32
 
21
33
  if (typeof value === "object") {
22
34
  return Object.entries(value).every(
23
- ([key, val]) => typeof key === "string" && isJSONValue(val),
35
+ ([key, val]) =>
36
+ typeof key === "string" && isJSONValue(val, currentDepth + 1),
24
37
  );
25
38
  }
26
39
 
@@ -1,62 +0,0 @@
1
- import { LanguageModelV1StreamPart } from "@ai-sdk/provider";
2
- import { ReadonlyJSONValue } from "../../../utils/json/json-value";
3
- export declare enum AssistantStreamChunkType {
4
- TextDelta = "0",
5
- Data = "2",
6
- Error = "3",
7
- Annotation = "8",
8
- ToolCall = "9",
9
- ToolCallResult = "a",
10
- ToolCallBegin = "b",
11
- ToolCallDelta = "c",
12
- FinishMessage = "d",
13
- FinishStep = "e",
14
- StartStep = "f",
15
- ReasoningDelta = "g",
16
- Source = "h"
17
- }
18
- export type AssistantStreamChunk = {
19
- [AssistantStreamChunkType.TextDelta]: string;
20
- [AssistantStreamChunkType.Data]: ReadonlyJSONValue[];
21
- [AssistantStreamChunkType.Annotation]: ReadonlyJSONValue[];
22
- [AssistantStreamChunkType.ToolCall]: {
23
- toolCallId: string;
24
- toolName: string;
25
- args: unknown;
26
- };
27
- [AssistantStreamChunkType.ToolCallBegin]: {
28
- toolCallId: string;
29
- toolName: string;
30
- };
31
- [AssistantStreamChunkType.ToolCallDelta]: {
32
- toolCallId: string;
33
- argsTextDelta: string;
34
- };
35
- [AssistantStreamChunkType.ToolCallResult]: {
36
- toolCallId: string;
37
- result: any;
38
- };
39
- [AssistantStreamChunkType.Error]: unknown;
40
- [AssistantStreamChunkType.FinishStep]: {
41
- finishReason: "stop" | "length" | "content-filter" | "tool-calls" | "error" | "other" | "unknown";
42
- usage: {
43
- promptTokens: number;
44
- completionTokens: number;
45
- };
46
- isContinued: boolean;
47
- };
48
- [AssistantStreamChunkType.FinishMessage]: Omit<LanguageModelV1StreamPart & {
49
- type: "finish";
50
- }, "type">;
51
- [AssistantStreamChunkType.StartStep]: {
52
- id: string;
53
- };
54
- [AssistantStreamChunkType.ReasoningDelta]: string;
55
- [AssistantStreamChunkType.Source]: {
56
- readonly sourceType: "url";
57
- readonly id: string;
58
- readonly url: string;
59
- readonly title?: string;
60
- };
61
- };
62
- //# sourceMappingURL=AssistantStreamChunkType.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AssistantStreamChunkType.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/streams/AssistantStreamChunkType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,oBAAY,wBAAwB;IAClC,SAAS,MAAM;IACf,IAAI,MAAM;IACV,KAAK,MAAM;IACX,UAAU,MAAM;IAChB,QAAQ,MAAM;IACd,cAAc,MAAM;IACpB,aAAa,MAAM;IACnB,aAAa,MAAM;IACnB,aAAa,MAAM;IACnB,UAAU,MAAM;IAChB,SAAS,MAAM;IACf,cAAc,MAAM;IACpB,MAAM,MAAM;CACb;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC7C,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACrD,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC3D,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EAAE;QACnC,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;IACF,CAAC,wBAAwB,CAAC,aAAa,CAAC,EAAE;QACxC,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,CAAC,wBAAwB,CAAC,aAAa,CAAC,EAAE;QACxC,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,CAAC,wBAAwB,CAAC,cAAc,CAAC,EAAE;QACzC,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,GAAG,CAAC;KACb,CAAC;IACF,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAC1C,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE;QACrC,YAAY,EACR,MAAM,GACN,QAAQ,GACR,gBAAgB,GAChB,YAAY,GACZ,OAAO,GACP,OAAO,GACP,SAAS,CAAC;QACd,KAAK,EAAE;YACL,YAAY,EAAE,MAAM,CAAC;YACrB,gBAAgB,EAAE,MAAM,CAAC;SAC1B,CAAC;QACF,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,CAAC,wBAAwB,CAAC,aAAa,CAAC,EAAE,IAAI,CAC5C,yBAAyB,GAAG;QAC1B,IAAI,EAAE,QAAQ,CAAC;KAChB,EACD,MAAM,CACP,CAAC;IACF,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE;QACpC,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,CAAC,wBAAwB,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAClD,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAAE;QACjC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;QAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH,CAAC"}
@@ -1,46 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/runtimes/edge/streams/AssistantStreamChunkType.ts
21
- var AssistantStreamChunkType_exports = {};
22
- __export(AssistantStreamChunkType_exports, {
23
- AssistantStreamChunkType: () => AssistantStreamChunkType
24
- });
25
- module.exports = __toCommonJS(AssistantStreamChunkType_exports);
26
- var AssistantStreamChunkType = /* @__PURE__ */ ((AssistantStreamChunkType2) => {
27
- AssistantStreamChunkType2["TextDelta"] = "0";
28
- AssistantStreamChunkType2["Data"] = "2";
29
- AssistantStreamChunkType2["Error"] = "3";
30
- AssistantStreamChunkType2["Annotation"] = "8";
31
- AssistantStreamChunkType2["ToolCall"] = "9";
32
- AssistantStreamChunkType2["ToolCallResult"] = "a";
33
- AssistantStreamChunkType2["ToolCallBegin"] = "b";
34
- AssistantStreamChunkType2["ToolCallDelta"] = "c";
35
- AssistantStreamChunkType2["FinishMessage"] = "d";
36
- AssistantStreamChunkType2["FinishStep"] = "e";
37
- AssistantStreamChunkType2["StartStep"] = "f";
38
- AssistantStreamChunkType2["ReasoningDelta"] = "g";
39
- AssistantStreamChunkType2["Source"] = "h";
40
- return AssistantStreamChunkType2;
41
- })(AssistantStreamChunkType || {});
42
- // Annotate the CommonJS export names for ESM import in node:
43
- 0 && (module.exports = {
44
- AssistantStreamChunkType
45
- });
46
- //# sourceMappingURL=AssistantStreamChunkType.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/runtimes/edge/streams/AssistantStreamChunkType.ts"],"sourcesContent":["import { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { ReadonlyJSONValue } from \"../../../utils/json/json-value\";\n\nexport enum AssistantStreamChunkType {\n TextDelta = \"0\",\n Data = \"2\",\n Error = \"3\",\n Annotation = \"8\",\n ToolCall = \"9\",\n ToolCallResult = \"a\",\n ToolCallBegin = \"b\",\n ToolCallDelta = \"c\",\n FinishMessage = \"d\",\n FinishStep = \"e\",\n StartStep = \"f\",\n ReasoningDelta = \"g\",\n Source = \"h\",\n}\n\nexport type AssistantStreamChunk = {\n [AssistantStreamChunkType.TextDelta]: string;\n [AssistantStreamChunkType.Data]: ReadonlyJSONValue[];\n [AssistantStreamChunkType.Annotation]: ReadonlyJSONValue[];\n [AssistantStreamChunkType.ToolCall]: {\n toolCallId: string;\n toolName: string;\n args: unknown;\n };\n [AssistantStreamChunkType.ToolCallBegin]: {\n toolCallId: string;\n toolName: string;\n };\n [AssistantStreamChunkType.ToolCallDelta]: {\n toolCallId: string;\n argsTextDelta: string;\n };\n [AssistantStreamChunkType.ToolCallResult]: {\n toolCallId: string;\n result: any;\n };\n [AssistantStreamChunkType.Error]: unknown;\n [AssistantStreamChunkType.FinishStep]: {\n finishReason:\n | \"stop\"\n | \"length\"\n | \"content-filter\"\n | \"tool-calls\"\n | \"error\"\n | \"other\"\n | \"unknown\";\n usage: {\n promptTokens: number;\n completionTokens: number;\n };\n isContinued: boolean;\n };\n [AssistantStreamChunkType.FinishMessage]: Omit<\n LanguageModelV1StreamPart & {\n type: \"finish\";\n },\n \"type\"\n >;\n [AssistantStreamChunkType.StartStep]: {\n id: string;\n };\n [AssistantStreamChunkType.ReasoningDelta]: string;\n [AssistantStreamChunkType.Source]: {\n readonly sourceType: \"url\";\n readonly id: string;\n readonly url: string;\n readonly title?: string;\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,IAAK,2BAAL,kBAAKA,8BAAL;AACL,EAAAA,0BAAA,eAAY;AACZ,EAAAA,0BAAA,UAAO;AACP,EAAAA,0BAAA,WAAQ;AACR,EAAAA,0BAAA,gBAAa;AACb,EAAAA,0BAAA,cAAW;AACX,EAAAA,0BAAA,oBAAiB;AACjB,EAAAA,0BAAA,mBAAgB;AAChB,EAAAA,0BAAA,mBAAgB;AAChB,EAAAA,0BAAA,mBAAgB;AAChB,EAAAA,0BAAA,gBAAa;AACb,EAAAA,0BAAA,eAAY;AACZ,EAAAA,0BAAA,oBAAiB;AACjB,EAAAA,0BAAA,YAAS;AAbC,SAAAA;AAAA,GAAA;","names":["AssistantStreamChunkType"]}
@@ -1,21 +0,0 @@
1
- // src/runtimes/edge/streams/AssistantStreamChunkType.ts
2
- var AssistantStreamChunkType = /* @__PURE__ */ ((AssistantStreamChunkType2) => {
3
- AssistantStreamChunkType2["TextDelta"] = "0";
4
- AssistantStreamChunkType2["Data"] = "2";
5
- AssistantStreamChunkType2["Error"] = "3";
6
- AssistantStreamChunkType2["Annotation"] = "8";
7
- AssistantStreamChunkType2["ToolCall"] = "9";
8
- AssistantStreamChunkType2["ToolCallResult"] = "a";
9
- AssistantStreamChunkType2["ToolCallBegin"] = "b";
10
- AssistantStreamChunkType2["ToolCallDelta"] = "c";
11
- AssistantStreamChunkType2["FinishMessage"] = "d";
12
- AssistantStreamChunkType2["FinishStep"] = "e";
13
- AssistantStreamChunkType2["StartStep"] = "f";
14
- AssistantStreamChunkType2["ReasoningDelta"] = "g";
15
- AssistantStreamChunkType2["Source"] = "h";
16
- return AssistantStreamChunkType2;
17
- })(AssistantStreamChunkType || {});
18
- export {
19
- AssistantStreamChunkType
20
- };
21
- //# sourceMappingURL=AssistantStreamChunkType.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/runtimes/edge/streams/AssistantStreamChunkType.ts"],"sourcesContent":["import { LanguageModelV1StreamPart } from \"@ai-sdk/provider\";\nimport { ReadonlyJSONValue } from \"../../../utils/json/json-value\";\n\nexport enum AssistantStreamChunkType {\n TextDelta = \"0\",\n Data = \"2\",\n Error = \"3\",\n Annotation = \"8\",\n ToolCall = \"9\",\n ToolCallResult = \"a\",\n ToolCallBegin = \"b\",\n ToolCallDelta = \"c\",\n FinishMessage = \"d\",\n FinishStep = \"e\",\n StartStep = \"f\",\n ReasoningDelta = \"g\",\n Source = \"h\",\n}\n\nexport type AssistantStreamChunk = {\n [AssistantStreamChunkType.TextDelta]: string;\n [AssistantStreamChunkType.Data]: ReadonlyJSONValue[];\n [AssistantStreamChunkType.Annotation]: ReadonlyJSONValue[];\n [AssistantStreamChunkType.ToolCall]: {\n toolCallId: string;\n toolName: string;\n args: unknown;\n };\n [AssistantStreamChunkType.ToolCallBegin]: {\n toolCallId: string;\n toolName: string;\n };\n [AssistantStreamChunkType.ToolCallDelta]: {\n toolCallId: string;\n argsTextDelta: string;\n };\n [AssistantStreamChunkType.ToolCallResult]: {\n toolCallId: string;\n result: any;\n };\n [AssistantStreamChunkType.Error]: unknown;\n [AssistantStreamChunkType.FinishStep]: {\n finishReason:\n | \"stop\"\n | \"length\"\n | \"content-filter\"\n | \"tool-calls\"\n | \"error\"\n | \"other\"\n | \"unknown\";\n usage: {\n promptTokens: number;\n completionTokens: number;\n };\n isContinued: boolean;\n };\n [AssistantStreamChunkType.FinishMessage]: Omit<\n LanguageModelV1StreamPart & {\n type: \"finish\";\n },\n \"type\"\n >;\n [AssistantStreamChunkType.StartStep]: {\n id: string;\n };\n [AssistantStreamChunkType.ReasoningDelta]: string;\n [AssistantStreamChunkType.Source]: {\n readonly sourceType: \"url\";\n readonly id: string;\n readonly url: string;\n readonly title?: string;\n };\n};\n"],"mappings":";AAGO,IAAK,2BAAL,kBAAKA,8BAAL;AACL,EAAAA,0BAAA,eAAY;AACZ,EAAAA,0BAAA,UAAO;AACP,EAAAA,0BAAA,WAAQ;AACR,EAAAA,0BAAA,gBAAa;AACb,EAAAA,0BAAA,cAAW;AACX,EAAAA,0BAAA,oBAAiB;AACjB,EAAAA,0BAAA,mBAAgB;AAChB,EAAAA,0BAAA,mBAAgB;AAChB,EAAAA,0BAAA,mBAAgB;AAChB,EAAAA,0BAAA,gBAAa;AACb,EAAAA,0BAAA,eAAY;AACZ,EAAAA,0BAAA,oBAAiB;AACjB,EAAAA,0BAAA,YAAS;AAbC,SAAAA;AAAA,GAAA;","names":["AssistantStreamChunkType"]}
@@ -1,5 +0,0 @@
1
- import { AssistantStreamChunk } from "./AssistantStreamChunkType";
2
- import { StreamPart } from "./utils/StreamPart";
3
- import { ToolResultStreamPart } from "./toolResultStream";
4
- export declare function assistantDecoderStream(): TransformStream<StreamPart<AssistantStreamChunk>, ToolResultStreamPart>;
5
- //# sourceMappingURL=assistantDecoderStream.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assistantDecoderStream.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/streams/assistantDecoderStream.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAErB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,wBAAgB,sBAAsB,4EAkKrC"}