@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,126 +0,0 @@
1
- import {
2
- AssistantStreamChunk,
3
- AssistantStreamChunkType,
4
- } from "./AssistantStreamChunkType";
5
- import { StreamPart } from "./utils/StreamPart";
6
- import { ToolResultStreamPart } from "./toolResultStream";
7
-
8
- export function assistantEncoderStream() {
9
- const toolCalls = new Set<string>();
10
- return new TransformStream<
11
- ToolResultStreamPart,
12
- StreamPart<AssistantStreamChunk>
13
- >({
14
- transform(chunk, controller) {
15
- const chunkType = chunk.type;
16
- switch (chunkType) {
17
- case "reasoning": {
18
- controller.enqueue({
19
- type: AssistantStreamChunkType.ReasoningDelta,
20
- value: chunk.textDelta,
21
- });
22
- break;
23
- }
24
-
25
- case "source":
26
- controller.enqueue({
27
- type: AssistantStreamChunkType.Source,
28
- value: chunk.source,
29
- });
30
- break;
31
-
32
- case "text-delta": {
33
- if (!chunk.textDelta) break; // ignore empty text deltas
34
- controller.enqueue({
35
- type: AssistantStreamChunkType.TextDelta,
36
- value: chunk.textDelta,
37
- });
38
- break;
39
- }
40
- case "tool-call-delta": {
41
- if (!toolCalls.has(chunk.toolCallId)) {
42
- toolCalls.add(chunk.toolCallId);
43
- controller.enqueue({
44
- type: AssistantStreamChunkType.ToolCallBegin,
45
- value: {
46
- toolCallId: chunk.toolCallId,
47
- toolName: chunk.toolName,
48
- },
49
- });
50
- }
51
-
52
- controller.enqueue({
53
- type: AssistantStreamChunkType.ToolCallDelta,
54
- value: {
55
- toolCallId: chunk.toolCallId,
56
- argsTextDelta: chunk.argsTextDelta,
57
- },
58
- });
59
- break;
60
- }
61
-
62
- case "annotations": {
63
- controller.enqueue({
64
- type: AssistantStreamChunkType.Annotation,
65
- value: chunk.annotations,
66
- });
67
- break;
68
- }
69
-
70
- case "data": {
71
- controller.enqueue({
72
- type: AssistantStreamChunkType.Data,
73
- value: chunk.data,
74
- });
75
- break;
76
- }
77
-
78
- // ignore
79
- case "tool-call":
80
- case "response-metadata":
81
- break;
82
-
83
- case "tool-result": {
84
- controller.enqueue({
85
- type: AssistantStreamChunkType.ToolCallResult,
86
- value: {
87
- toolCallId: chunk.toolCallId,
88
- result: chunk.result,
89
- },
90
- });
91
- break;
92
- }
93
-
94
- case "step-finish": {
95
- const { type, ...rest } = chunk;
96
- controller.enqueue({
97
- type: AssistantStreamChunkType.FinishStep,
98
- value: rest,
99
- });
100
- break;
101
- }
102
-
103
- case "finish": {
104
- const { type, ...rest } = chunk;
105
- controller.enqueue({
106
- type: AssistantStreamChunkType.FinishMessage,
107
- value: rest,
108
- });
109
- break;
110
- }
111
-
112
- case "error": {
113
- controller.enqueue({
114
- type: AssistantStreamChunkType.Error,
115
- value: chunk.error,
116
- });
117
- break;
118
- }
119
- default: {
120
- const unhandledType: never = chunkType;
121
- throw new Error(`Unhandled chunk type: ${unhandledType}`);
122
- }
123
- }
124
- },
125
- });
126
- }
@@ -1,360 +0,0 @@
1
- import { CoreChatModelRunResult } from "../../local/ChatModelAdapter";
2
- import { parsePartialJson } from "../../../utils/json/parse-partial-json";
3
- import { LanguageModelV1StreamPart } from "@ai-sdk/provider";
4
- import { ToolResultStreamPart } from "./toolResultStream";
5
- import { MessageStatus, ToolCallContentPart } from "../../../types";
6
-
7
- export function runResultStream() {
8
- let message: CoreChatModelRunResult = {
9
- content: [],
10
- status: { type: "running" },
11
- };
12
-
13
- return new TransformStream<ToolResultStreamPart, CoreChatModelRunResult>({
14
- transform(chunk, controller) {
15
- const chunkType = chunk.type;
16
- switch (chunkType) {
17
- case "reasoning": {
18
- message = appendOrUpdateReasoning(message, chunk.textDelta);
19
- controller.enqueue(message);
20
- break;
21
- }
22
-
23
- case "text-delta": {
24
- message = appendOrUpdateText(message, chunk.textDelta);
25
- controller.enqueue(message);
26
- break;
27
- }
28
-
29
- case "tool-call-delta": {
30
- const { toolCallId, toolName, argsTextDelta } = chunk;
31
-
32
- message = appendOrUpdateToolCall(
33
- message,
34
- toolCallId,
35
- toolName,
36
- argsTextDelta,
37
- );
38
- controller.enqueue(message);
39
- break;
40
- }
41
-
42
- case "tool-call":
43
- // ignoring tool call events because they are converted to tool-call-delta as well
44
- case "response-metadata":
45
- break;
46
-
47
- case "annotations": {
48
- message = appendAnnotations(message, chunk);
49
- controller.enqueue(message);
50
- break;
51
- }
52
-
53
- case "data": {
54
- message = appendData(message, chunk);
55
- controller.enqueue(message);
56
- break;
57
- }
58
-
59
- case "source": {
60
- message = appendSource(message, chunk);
61
- controller.enqueue(message);
62
- break;
63
- }
64
-
65
- case "tool-result": {
66
- message = appendOrUpdateToolResult(
67
- message,
68
- chunk.toolCallId,
69
- chunk.toolName,
70
- chunk.result,
71
- );
72
- controller.enqueue(message);
73
- break;
74
- }
75
- case "step-finish": {
76
- message = appendStepFinish(message, chunk);
77
- controller.enqueue(message);
78
- break;
79
- }
80
- case "finish": {
81
- message = appendOrUpdateFinish(message, chunk);
82
- controller.enqueue(message);
83
- break;
84
- }
85
- case "error": {
86
- if (
87
- chunk.error instanceof Error &&
88
- chunk.error.name === "AbortError"
89
- ) {
90
- message = appendOrUpdateCancel(message);
91
- controller.enqueue(message);
92
- break;
93
- } else {
94
- throw chunk.error;
95
- }
96
- }
97
- default: {
98
- const unhandledType: never = chunkType;
99
- throw new Error(`Unhandled chunk type: ${unhandledType}`);
100
- }
101
- }
102
- },
103
- flush(controller) {
104
- if (message.status?.type === "running") {
105
- const requiresAction = message.content?.at(-1)?.type === "tool-call";
106
- message = appendOrUpdateFinish(message, {
107
- type: "finish",
108
- finishReason: requiresAction ? "tool-calls" : "unknown",
109
- usage: {
110
- promptTokens: 0,
111
- completionTokens: 0,
112
- },
113
- });
114
- controller.enqueue(message);
115
- }
116
- },
117
- });
118
- }
119
-
120
- const appendOrUpdateReasoning = (
121
- message: CoreChatModelRunResult,
122
- textDelta: string,
123
- ) => {
124
- let contentParts = message.content ?? [];
125
- let contentPart = message.content?.at(-1);
126
- if (contentPart?.type !== "reasoning") {
127
- contentPart = { type: "reasoning", text: textDelta };
128
- } else {
129
- contentParts = contentParts.slice(0, -1);
130
- contentPart = { type: "reasoning", text: contentPart.text + textDelta };
131
- }
132
- return {
133
- ...message,
134
- content: contentParts.concat([contentPart]),
135
- };
136
- };
137
-
138
- const appendOrUpdateText = (
139
- message: CoreChatModelRunResult,
140
- textDelta: string,
141
- ) => {
142
- let contentParts = message.content ?? [];
143
- let contentPart = message.content?.at(-1);
144
- if (contentPart?.type !== "text") {
145
- contentPart = { type: "text", text: textDelta };
146
- } else {
147
- contentParts = contentParts.slice(0, -1);
148
- contentPart = { type: "text", text: contentPart.text + textDelta };
149
- }
150
- return {
151
- ...message,
152
- content: contentParts.concat([contentPart]),
153
- };
154
- };
155
-
156
- const appendOrUpdateToolCall = (
157
- message: CoreChatModelRunResult,
158
- toolCallId: string,
159
- toolName: string,
160
- argsTextDelta: string,
161
- ): CoreChatModelRunResult => {
162
- let contentParts = message.content ?? [];
163
- const contentPartIdx = contentParts.findIndex(
164
- (c) => c.type === "tool-call" && c.toolCallId === toolCallId,
165
- );
166
- let contentPart =
167
- contentPartIdx === -1
168
- ? null
169
- : (contentParts[contentPartIdx] as ToolCallContentPart);
170
-
171
- if (contentPart == null) {
172
- contentPart = {
173
- type: "tool-call",
174
- toolCallId,
175
- toolName,
176
- argsText: argsTextDelta,
177
- args: argsTextDelta ? parsePartialJson(argsTextDelta) : {},
178
- };
179
- contentParts = [...contentParts, contentPart];
180
- } else {
181
- const argsText = contentPart.argsText + argsTextDelta;
182
- contentPart = {
183
- ...contentPart,
184
- argsText,
185
- args: argsTextDelta ? parsePartialJson(argsText) : {},
186
- };
187
- contentParts = [
188
- ...contentParts.slice(0, contentPartIdx),
189
- contentPart,
190
- ...contentParts.slice(contentPartIdx + 1),
191
- ];
192
- }
193
-
194
- return {
195
- ...message,
196
- content: contentParts,
197
- };
198
- };
199
-
200
- const appendOrUpdateToolResult = (
201
- message: CoreChatModelRunResult,
202
- toolCallId: string,
203
- toolName: string,
204
- result: any,
205
- ) => {
206
- let found = false;
207
- const newContentParts = message.content?.map((part) => {
208
- if (part.type !== "tool-call" || part.toolCallId !== toolCallId)
209
- return part;
210
- found = true;
211
-
212
- if (part.toolName !== toolName)
213
- throw new Error(
214
- `Tool call ${toolCallId} found with tool name ${part.toolName}, but expected ${toolName}`,
215
- );
216
-
217
- return {
218
- ...part,
219
- result,
220
- };
221
- });
222
- if (!found)
223
- throw new Error(
224
- `Received tool result for unknown tool call "${toolName}" / "${toolCallId}". This is likely an internal bug in assistant-ui.`,
225
- );
226
-
227
- return {
228
- ...message,
229
- content: newContentParts!,
230
- };
231
- };
232
-
233
- const appendAnnotations = (
234
- message: CoreChatModelRunResult,
235
- chunk: ToolResultStreamPart & { type: "annotations" },
236
- ): CoreChatModelRunResult => {
237
- return {
238
- ...message,
239
- metadata: {
240
- ...message.metadata,
241
- unstable_annotations: [
242
- ...(message.metadata?.unstable_annotations ?? []),
243
- ...chunk.annotations,
244
- ],
245
- },
246
- };
247
- };
248
-
249
- const appendData = (
250
- message: CoreChatModelRunResult,
251
- chunk: ToolResultStreamPart & { type: "data" },
252
- ): CoreChatModelRunResult => {
253
- return {
254
- ...message,
255
- metadata: {
256
- ...message.metadata,
257
- unstable_data: [
258
- ...(message.metadata?.unstable_data ?? []),
259
- ...chunk.data,
260
- ],
261
- },
262
- };
263
- };
264
-
265
- const appendStepFinish = (
266
- message: CoreChatModelRunResult,
267
- chunk: ToolResultStreamPart & { type: "step-finish" },
268
- ): CoreChatModelRunResult => {
269
- const { type, ...rest } = chunk;
270
- const steps = [
271
- ...(message.metadata?.steps ?? []),
272
- {
273
- usage: rest.usage,
274
- },
275
- ];
276
- return {
277
- ...message,
278
- metadata: {
279
- ...message.metadata,
280
- steps,
281
- },
282
- };
283
- };
284
-
285
- const appendOrUpdateFinish = (
286
- message: CoreChatModelRunResult,
287
- chunk: LanguageModelV1StreamPart & { type: "finish" },
288
- ): CoreChatModelRunResult => {
289
- const { type, ...rest } = chunk;
290
-
291
- const steps = [
292
- ...(message.metadata?.steps ?? []),
293
- {
294
- logprobs: rest.logprobs,
295
- usage: rest.usage,
296
- },
297
- ];
298
- return {
299
- ...message,
300
- status: getStatus(chunk),
301
- metadata: {
302
- ...message.metadata,
303
- steps,
304
- },
305
- };
306
- };
307
-
308
- const appendSource = (
309
- message: CoreChatModelRunResult,
310
- chunk: ToolResultStreamPart & { type: "source" },
311
- ): CoreChatModelRunResult => {
312
- return {
313
- ...message,
314
- content: [
315
- ...message.content,
316
- {
317
- type: "source",
318
- ...chunk.source,
319
- },
320
- ],
321
- };
322
- };
323
-
324
- const getStatus = (
325
- chunk:
326
- | (LanguageModelV1StreamPart & { type: "finish" })
327
- | (ToolResultStreamPart & { type: "step-finish" }),
328
- ): MessageStatus => {
329
- if (chunk.finishReason === "tool-calls") {
330
- return {
331
- type: "requires-action",
332
- reason: "tool-calls",
333
- };
334
- } else if (
335
- chunk.finishReason === "stop" ||
336
- chunk.finishReason === "unknown"
337
- ) {
338
- return {
339
- type: "complete",
340
- reason: chunk.finishReason,
341
- };
342
- } else {
343
- return {
344
- type: "incomplete",
345
- reason: chunk.finishReason,
346
- };
347
- }
348
- };
349
-
350
- const appendOrUpdateCancel = (
351
- message: CoreChatModelRunResult,
352
- ): CoreChatModelRunResult => {
353
- return {
354
- ...message,
355
- status: {
356
- type: "incomplete",
357
- reason: "cancelled",
358
- },
359
- };
360
- };
@@ -1,10 +0,0 @@
1
- export class PipeableTransformStream<I, O> extends TransformStream<I, O> {
2
- constructor(transform: (readable: ReadableStream<I>) => ReadableStream<O>) {
3
- super();
4
- const readable = transform(super.readable as any);
5
- Object.defineProperty(this, "readable", {
6
- value: readable,
7
- writable: false,
8
- });
9
- }
10
- }
@@ -1,3 +0,0 @@
1
- export type StreamPart<T extends Record<string, unknown>> = {
2
- [K in keyof T]: { type: K; value: T[K] };
3
- }[keyof T];
@@ -1,24 +0,0 @@
1
- export function chunkByLineStream() {
2
- let buffer = "";
3
-
4
- return new TransformStream({
5
- transform(chunk, controller) {
6
- buffer += chunk;
7
- const lines = buffer.split("\n");
8
-
9
- // Process all complete lines
10
- for (let i = 0; i < lines.length - 1; i++) {
11
- controller.enqueue(lines[i]);
12
- }
13
-
14
- // Keep the last incomplete line in the buffer
15
- buffer = lines[lines.length - 1]!;
16
- },
17
- flush(controller) {
18
- // flush any remaining content in the buffer
19
- if (buffer) {
20
- controller.enqueue(buffer);
21
- }
22
- },
23
- });
24
- }
@@ -1,15 +0,0 @@
1
- import { streamPartDecoderStream } from "./streamPartDecoderStream";
2
- import { streamPartEncoderStream } from "./streamPartEncoderStream";
3
- import { StreamPart } from "./StreamPart";
4
-
5
- export declare namespace StreamUtils {
6
- export { StreamPart };
7
- }
8
-
9
- /**
10
- * @deprecated `streamUtils` will be replaced with `assistant-stream` once it is ready.
11
- */
12
- export const streamUtils = {
13
- streamPartEncoderStream,
14
- streamPartDecoderStream,
15
- };
@@ -1,29 +0,0 @@
1
- import { chunkByLineStream } from "./chunkByLineStream";
2
- import { PipeableTransformStream } from "./PipeableTransformStream";
3
- import { StreamPart } from "./StreamPart";
4
-
5
- const decodeStreamPart = <T extends Record<string, unknown>>(
6
- part: string,
7
- ): StreamPart<T> => {
8
- const index = part.indexOf(":");
9
- if (index === -1) throw new Error("Invalid stream part");
10
- return {
11
- type: part.slice(0, index),
12
- value: JSON.parse(part.slice(index + 1)),
13
- };
14
- };
15
-
16
- export function streamPartDecoderStream<T extends Record<string, unknown>>() {
17
- const decodeStream = new TransformStream<string, StreamPart<T>>({
18
- transform(chunk, controller) {
19
- controller.enqueue(decodeStreamPart<T>(chunk));
20
- },
21
- });
22
-
23
- return new PipeableTransformStream((readable) => {
24
- return readable
25
- .pipeThrough(new TextDecoderStream())
26
- .pipeThrough(chunkByLineStream())
27
- .pipeThrough(decodeStream);
28
- });
29
- }
@@ -1,23 +0,0 @@
1
- import { PipeableTransformStream } from "./PipeableTransformStream";
2
- import { StreamPart } from "./StreamPart";
3
-
4
- function encodeStreamPart<T extends Record<string, unknown>>({
5
- type,
6
- value,
7
- }: StreamPart<T>): string {
8
- return `${type as string}:${JSON.stringify(value)}\n`;
9
- }
10
-
11
- export function streamPartEncoderStream<T extends Record<string, unknown>>() {
12
- const encodeStream = new TransformStream<StreamPart<T>, string>({
13
- transform(chunk, controller) {
14
- controller.enqueue(encodeStreamPart<T>(chunk));
15
- },
16
- });
17
-
18
- return new PipeableTransformStream((readable) => {
19
- return readable
20
- .pipeThrough(encodeStream)
21
- .pipeThrough(new TextEncoderStream());
22
- });
23
- }