@assistant-ui/react 0.8.5 → 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 (289) hide show
  1. package/dist/api/MessageRuntime.js +1 -1
  2. package/dist/api/MessageRuntime.js.map +1 -1
  3. package/dist/api/MessageRuntime.mjs +1 -1
  4. package/dist/api/MessageRuntime.mjs.map +1 -1
  5. package/dist/api/subscribable/NestedSubscriptionSubject.d.ts.map +1 -1
  6. package/dist/api/subscribable/NestedSubscriptionSubject.js.map +1 -1
  7. package/dist/api/subscribable/NestedSubscriptionSubject.mjs.map +1 -1
  8. package/dist/cloud/auiV0.d.ts.map +1 -1
  9. package/dist/cloud/auiV0.js +9 -2
  10. package/dist/cloud/auiV0.js.map +1 -1
  11. package/dist/cloud/auiV0.mjs +9 -2
  12. package/dist/cloud/auiV0.mjs.map +1 -1
  13. package/dist/context/react/utils/createStateHookForRuntime.d.ts.map +1 -1
  14. package/dist/context/react/utils/createStateHookForRuntime.js.map +1 -1
  15. package/dist/context/react/utils/createStateHookForRuntime.mjs.map +1 -1
  16. package/dist/context/react/utils/ensureBinding.js.map +1 -1
  17. package/dist/context/react/utils/ensureBinding.mjs.map +1 -1
  18. package/dist/model-context/makeAssistantVisible.d.ts.map +1 -1
  19. package/dist/model-context/makeAssistantVisible.js +2 -1
  20. package/dist/model-context/makeAssistantVisible.js.map +1 -1
  21. package/dist/model-context/makeAssistantVisible.mjs +2 -1
  22. package/dist/model-context/makeAssistantVisible.mjs.map +1 -1
  23. package/dist/model-context/useAssistantInstructions.js +1 -1
  24. package/dist/model-context/useAssistantInstructions.js.map +1 -1
  25. package/dist/model-context/useAssistantInstructions.mjs +1 -1
  26. package/dist/model-context/useAssistantInstructions.mjs.map +1 -1
  27. package/dist/model-context/useAssistantToolUI.js +1 -1
  28. package/dist/model-context/useAssistantToolUI.js.map +1 -1
  29. package/dist/model-context/useAssistantToolUI.mjs +1 -1
  30. package/dist/model-context/useAssistantToolUI.mjs.map +1 -1
  31. package/dist/model-context/useInlineRender.d.ts.map +1 -1
  32. package/dist/model-context/useInlineRender.js +8 -5
  33. package/dist/model-context/useInlineRender.js.map +1 -1
  34. package/dist/model-context/useInlineRender.mjs +8 -5
  35. package/dist/model-context/useInlineRender.mjs.map +1 -1
  36. package/dist/primitives/assistantModal/AssistantModalRoot.d.ts.map +1 -1
  37. package/dist/primitives/assistantModal/AssistantModalRoot.js +6 -1
  38. package/dist/primitives/assistantModal/AssistantModalRoot.js.map +1 -1
  39. package/dist/primitives/assistantModal/AssistantModalRoot.mjs +6 -1
  40. package/dist/primitives/assistantModal/AssistantModalRoot.mjs.map +1 -1
  41. package/dist/primitives/composer/ComposerInput.d.ts.map +1 -1
  42. package/dist/primitives/composer/ComposerInput.js +7 -2
  43. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  44. package/dist/primitives/composer/ComposerInput.mjs +7 -2
  45. package/dist/primitives/composer/ComposerInput.mjs.map +1 -1
  46. package/dist/primitives/contentPart/useContentPartFile.d.ts +5 -0
  47. package/dist/primitives/contentPart/useContentPartFile.d.ts.map +1 -0
  48. package/dist/{runtimes/edge/streams/utils/index.js → primitives/contentPart/useContentPartFile.js} +18 -12
  49. package/dist/primitives/contentPart/useContentPartFile.js.map +1 -0
  50. package/dist/primitives/contentPart/useContentPartFile.mjs +18 -0
  51. package/dist/primitives/contentPart/useContentPartFile.mjs.map +1 -0
  52. package/dist/primitives/contentPart/useContentPartSource.d.ts +5 -0
  53. package/dist/primitives/contentPart/useContentPartSource.d.ts.map +1 -0
  54. package/dist/{runtimes/edge/streams/utils/PipeableTransformStream.js → primitives/contentPart/useContentPartSource.js} +18 -16
  55. package/dist/primitives/contentPart/useContentPartSource.js.map +1 -0
  56. package/dist/primitives/contentPart/useContentPartSource.mjs +18 -0
  57. package/dist/primitives/contentPart/useContentPartSource.mjs.map +1 -0
  58. package/dist/primitives/index.d.ts +3 -1
  59. package/dist/primitives/index.d.ts.map +1 -1
  60. package/dist/primitives/index.js +7 -1
  61. package/dist/primitives/index.js.map +1 -1
  62. package/dist/primitives/index.mjs +5 -1
  63. package/dist/primitives/index.mjs.map +1 -1
  64. package/dist/primitives/thread/ThreadScrollToBottom.d.ts.map +1 -1
  65. package/dist/primitives/thread/ThreadScrollToBottom.js.map +1 -1
  66. package/dist/primitives/thread/ThreadScrollToBottom.mjs +4 -1
  67. package/dist/primitives/thread/ThreadScrollToBottom.mjs.map +1 -1
  68. package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
  69. package/dist/primitives/thread/ThreadViewport.js +1 -0
  70. package/dist/primitives/thread/ThreadViewport.js.map +1 -1
  71. package/dist/primitives/thread/ThreadViewport.mjs +1 -0
  72. package/dist/primitives/thread/ThreadViewport.mjs.map +1 -1
  73. package/dist/primitives/thread/useThreadViewportAutoScroll.js +1 -1
  74. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
  75. package/dist/primitives/thread/useThreadViewportAutoScroll.mjs +1 -1
  76. package/dist/primitives/thread/useThreadViewportAutoScroll.mjs.map +1 -1
  77. package/dist/runtimes/adapters/thread-history/ThreadHistoryAdapter.d.ts +5 -1
  78. package/dist/runtimes/adapters/thread-history/ThreadHistoryAdapter.d.ts.map +1 -1
  79. package/dist/runtimes/adapters/thread-history/ThreadHistoryAdapter.js.map +1 -1
  80. package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts.map +1 -1
  81. package/dist/runtimes/composer/BaseComposerRuntimeCore.js +3 -1
  82. package/dist/runtimes/composer/BaseComposerRuntimeCore.js.map +1 -1
  83. package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs +3 -1
  84. package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs.map +1 -1
  85. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.d.ts +1 -1
  86. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.d.ts.map +1 -1
  87. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.js +2 -2
  88. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.js.map +1 -1
  89. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.mjs +2 -2
  90. package/dist/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.mjs.map +1 -1
  91. package/dist/runtimes/edge/EdgeChatAdapter.d.ts +8 -3
  92. package/dist/runtimes/edge/EdgeChatAdapter.d.ts.map +1 -1
  93. package/dist/runtimes/edge/EdgeChatAdapter.js +8 -9
  94. package/dist/runtimes/edge/EdgeChatAdapter.js.map +1 -1
  95. package/dist/runtimes/edge/EdgeChatAdapter.mjs +11 -9
  96. package/dist/runtimes/edge/EdgeChatAdapter.mjs.map +1 -1
  97. package/dist/runtimes/edge/converters/fromLanguageModelMessages.d.ts +2 -2
  98. package/dist/runtimes/edge/converters/fromLanguageModelMessages.d.ts.map +1 -1
  99. package/dist/runtimes/edge/converters/fromLanguageModelMessages.js +5 -2
  100. package/dist/runtimes/edge/converters/fromLanguageModelMessages.js.map +1 -1
  101. package/dist/runtimes/edge/converters/fromLanguageModelMessages.mjs +5 -2
  102. package/dist/runtimes/edge/converters/fromLanguageModelMessages.mjs.map +1 -1
  103. package/dist/runtimes/edge/converters/toCoreMessages.d.ts.map +1 -1
  104. package/dist/runtimes/edge/converters/toCoreMessages.js +1 -1
  105. package/dist/runtimes/edge/converters/toCoreMessages.js.map +1 -1
  106. package/dist/runtimes/edge/converters/toCoreMessages.mjs +1 -1
  107. package/dist/runtimes/edge/converters/toCoreMessages.mjs.map +1 -1
  108. package/dist/runtimes/edge/converters/toLanguageModelMessages.d.ts.map +1 -1
  109. package/dist/runtimes/edge/converters/toLanguageModelMessages.js +2 -1
  110. package/dist/runtimes/edge/converters/toLanguageModelMessages.js.map +1 -1
  111. package/dist/runtimes/edge/converters/toLanguageModelMessages.mjs +2 -1
  112. package/dist/runtimes/edge/converters/toLanguageModelMessages.mjs.map +1 -1
  113. package/dist/runtimes/edge/createEdgeRuntimeAPI.d.ts +2 -2
  114. package/dist/runtimes/edge/createEdgeRuntimeAPI.d.ts.map +1 -1
  115. package/dist/runtimes/edge/createEdgeRuntimeAPI.js +17 -34
  116. package/dist/runtimes/edge/createEdgeRuntimeAPI.js.map +1 -1
  117. package/dist/runtimes/edge/createEdgeRuntimeAPI.mjs +21 -37
  118. package/dist/runtimes/edge/createEdgeRuntimeAPI.mjs.map +1 -1
  119. package/dist/runtimes/edge/index.d.ts +0 -1
  120. package/dist/runtimes/edge/index.d.ts.map +1 -1
  121. package/dist/runtimes/edge/index.js +1 -3
  122. package/dist/runtimes/edge/index.js.map +1 -1
  123. package/dist/runtimes/edge/index.mjs +0 -1
  124. package/dist/runtimes/edge/index.mjs.map +1 -1
  125. package/dist/runtimes/edge/streams/toolResultStream.d.ts +2 -33
  126. package/dist/runtimes/edge/streams/toolResultStream.d.ts.map +1 -1
  127. package/dist/runtimes/edge/streams/toolResultStream.js +19 -96
  128. package/dist/runtimes/edge/streams/toolResultStream.js.map +1 -1
  129. package/dist/runtimes/edge/streams/toolResultStream.mjs +19 -86
  130. package/dist/runtimes/edge/streams/toolResultStream.mjs.map +1 -1
  131. package/dist/runtimes/external-store/ThreadMessageLike.d.ts.map +1 -1
  132. package/dist/runtimes/external-store/ThreadMessageLike.js +1 -0
  133. package/dist/runtimes/external-store/ThreadMessageLike.js.map +1 -1
  134. package/dist/runtimes/external-store/ThreadMessageLike.mjs +1 -0
  135. package/dist/runtimes/external-store/ThreadMessageLike.mjs.map +1 -1
  136. package/dist/runtimes/external-store/external-message-converter.js +1 -1
  137. package/dist/runtimes/external-store/external-message-converter.js.map +1 -1
  138. package/dist/runtimes/external-store/external-message-converter.mjs +1 -1
  139. package/dist/runtimes/external-store/external-message-converter.mjs.map +1 -1
  140. package/dist/runtimes/local/ChatModelAdapter.d.ts +2 -2
  141. package/dist/runtimes/local/ChatModelAdapter.d.ts.map +1 -1
  142. package/dist/runtimes/local/ChatModelAdapter.js.map +1 -1
  143. package/dist/runtimes/local/LocalRuntimeOptions.d.ts +1 -1
  144. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts +3 -2
  145. package/dist/runtimes/local/LocalThreadRuntimeCore.d.ts.map +1 -1
  146. package/dist/runtimes/local/LocalThreadRuntimeCore.js +22 -7
  147. package/dist/runtimes/local/LocalThreadRuntimeCore.js.map +1 -1
  148. package/dist/runtimes/local/LocalThreadRuntimeCore.mjs +22 -7
  149. package/dist/runtimes/local/LocalThreadRuntimeCore.mjs.map +1 -1
  150. package/dist/runtimes/local/useLocalRuntime.d.ts.map +1 -1
  151. package/dist/runtimes/local/useLocalRuntime.js +3 -1
  152. package/dist/runtimes/local/useLocalRuntime.js.map +1 -1
  153. package/dist/runtimes/local/useLocalRuntime.mjs +3 -1
  154. package/dist/runtimes/local/useLocalRuntime.mjs.map +1 -1
  155. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.js +1 -1
  156. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.js.map +1 -1
  157. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.mjs +1 -1
  158. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.mjs.map +1 -1
  159. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  160. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js +2 -2
  161. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  162. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.mjs +2 -2
  163. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.mjs.map +1 -1
  164. package/dist/runtimes/remote-thread-list/adapter/cloud.js +1 -1
  165. package/dist/runtimes/remote-thread-list/adapter/cloud.js.map +1 -1
  166. package/dist/runtimes/remote-thread-list/adapter/cloud.mjs +1 -1
  167. package/dist/runtimes/remote-thread-list/adapter/cloud.mjs.map +1 -1
  168. package/dist/runtimes/utils/MessageRepository.d.ts +1 -0
  169. package/dist/runtimes/utils/MessageRepository.d.ts.map +1 -1
  170. package/dist/runtimes/utils/MessageRepository.js +3 -0
  171. package/dist/runtimes/utils/MessageRepository.js.map +1 -1
  172. package/dist/runtimes/utils/MessageRepository.mjs +3 -0
  173. package/dist/runtimes/utils/MessageRepository.mjs.map +1 -1
  174. package/dist/types/AssistantTypes.d.ts +1 -1
  175. package/dist/types/AssistantTypes.d.ts.map +1 -1
  176. package/dist/types/AssistantTypes.js.map +1 -1
  177. package/dist/utils/json/is-json.d.ts +1 -1
  178. package/dist/utils/json/is-json.d.ts.map +1 -1
  179. package/dist/utils/json/is-json.js +10 -4
  180. package/dist/utils/json/is-json.js.map +1 -1
  181. package/dist/utils/json/is-json.mjs +10 -4
  182. package/dist/utils/json/is-json.mjs.map +1 -1
  183. package/package.json +3 -3
  184. package/src/api/MessageRuntime.ts +1 -1
  185. package/src/api/subscribable/NestedSubscriptionSubject.ts +7 -2
  186. package/src/cloud/auiV0.ts +9 -2
  187. package/src/context/react/utils/createStateHookForRuntime.ts +3 -0
  188. package/src/context/react/utils/ensureBinding.ts +1 -1
  189. package/src/model-context/makeAssistantVisible.tsx +3 -1
  190. package/src/model-context/useAssistantInstructions.tsx +1 -1
  191. package/src/model-context/useAssistantToolUI.tsx +1 -1
  192. package/src/model-context/useInlineRender.tsx +8 -5
  193. package/src/primitives/assistantModal/AssistantModalRoot.tsx +6 -1
  194. package/src/primitives/composer/ComposerInput.tsx +7 -2
  195. package/src/primitives/contentPart/useContentPartFile.tsx +18 -0
  196. package/src/primitives/contentPart/useContentPartSource.tsx +18 -0
  197. package/src/primitives/index.ts +3 -1
  198. package/src/primitives/thread/ThreadScrollToBottom.tsx +4 -1
  199. package/src/primitives/thread/ThreadViewport.tsx +3 -0
  200. package/src/primitives/thread/useThreadViewportAutoScroll.tsx +1 -1
  201. package/src/runtimes/adapters/thread-history/ThreadHistoryAdapter.ts +5 -1
  202. package/src/runtimes/composer/BaseComposerRuntimeCore.tsx +3 -1
  203. package/src/runtimes/dangerous-in-browser/DangerousInBrowserAdapter.ts +2 -2
  204. package/src/runtimes/edge/EdgeChatAdapter.ts +26 -15
  205. package/src/runtimes/edge/converters/fromLanguageModelMessages.ts +24 -14
  206. package/src/runtimes/edge/converters/toCoreMessages.ts +6 -2
  207. package/src/runtimes/edge/converters/toLanguageModelMessages.ts +3 -2
  208. package/src/runtimes/edge/createEdgeRuntimeAPI.ts +31 -48
  209. package/src/runtimes/edge/index.ts +0 -2
  210. package/src/runtimes/edge/streams/toolResultStream.ts +28 -152
  211. package/src/runtimes/external-store/ThreadMessageLike.tsx +2 -1
  212. package/src/runtimes/external-store/external-message-converter.tsx +1 -1
  213. package/src/runtimes/local/ChatModelAdapter.tsx +2 -0
  214. package/src/runtimes/local/LocalThreadRuntimeCore.tsx +31 -7
  215. package/src/runtimes/local/useLocalRuntime.tsx +3 -1
  216. package/src/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.tsx +1 -1
  217. package/src/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.tsx +2 -3
  218. package/src/runtimes/remote-thread-list/adapter/cloud.tsx +1 -1
  219. package/src/runtimes/utils/MessageRepository.tsx +4 -0
  220. package/src/types/AssistantTypes.ts +2 -1
  221. package/src/utils/json/is-json.ts +17 -4
  222. package/dist/runtimes/edge/streams/AssistantStreamChunkType.d.ts +0 -62
  223. package/dist/runtimes/edge/streams/AssistantStreamChunkType.d.ts.map +0 -1
  224. package/dist/runtimes/edge/streams/AssistantStreamChunkType.js +0 -46
  225. package/dist/runtimes/edge/streams/AssistantStreamChunkType.js.map +0 -1
  226. package/dist/runtimes/edge/streams/AssistantStreamChunkType.mjs +0 -21
  227. package/dist/runtimes/edge/streams/AssistantStreamChunkType.mjs.map +0 -1
  228. package/dist/runtimes/edge/streams/assistantDecoderStream.d.ts +0 -5
  229. package/dist/runtimes/edge/streams/assistantDecoderStream.d.ts.map +0 -1
  230. package/dist/runtimes/edge/streams/assistantDecoderStream.js +0 -170
  231. package/dist/runtimes/edge/streams/assistantDecoderStream.js.map +0 -1
  232. package/dist/runtimes/edge/streams/assistantDecoderStream.mjs +0 -147
  233. package/dist/runtimes/edge/streams/assistantDecoderStream.mjs.map +0 -1
  234. package/dist/runtimes/edge/streams/assistantEncoderStream.d.ts +0 -5
  235. package/dist/runtimes/edge/streams/assistantEncoderStream.d.ts.map +0 -1
  236. package/dist/runtimes/edge/streams/assistantEncoderStream.js +0 -137
  237. package/dist/runtimes/edge/streams/assistantEncoderStream.js.map +0 -1
  238. package/dist/runtimes/edge/streams/assistantEncoderStream.mjs +0 -114
  239. package/dist/runtimes/edge/streams/assistantEncoderStream.mjs.map +0 -1
  240. package/dist/runtimes/edge/streams/runResultStream.d.ts +0 -4
  241. package/dist/runtimes/edge/streams/runResultStream.d.ts.map +0 -1
  242. package/dist/runtimes/edge/streams/runResultStream.js +0 -313
  243. package/dist/runtimes/edge/streams/runResultStream.js.map +0 -1
  244. package/dist/runtimes/edge/streams/runResultStream.mjs +0 -288
  245. package/dist/runtimes/edge/streams/runResultStream.mjs.map +0 -1
  246. package/dist/runtimes/edge/streams/utils/PipeableTransformStream.d.ts +0 -4
  247. package/dist/runtimes/edge/streams/utils/PipeableTransformStream.d.ts.map +0 -1
  248. package/dist/runtimes/edge/streams/utils/PipeableTransformStream.js.map +0 -1
  249. package/dist/runtimes/edge/streams/utils/PipeableTransformStream.mjs +0 -15
  250. package/dist/runtimes/edge/streams/utils/PipeableTransformStream.mjs.map +0 -1
  251. package/dist/runtimes/edge/streams/utils/StreamPart.d.ts +0 -7
  252. package/dist/runtimes/edge/streams/utils/StreamPart.d.ts.map +0 -1
  253. package/dist/runtimes/edge/streams/utils/StreamPart.js +0 -19
  254. package/dist/runtimes/edge/streams/utils/StreamPart.js.map +0 -1
  255. package/dist/runtimes/edge/streams/utils/StreamPart.mjs +0 -1
  256. package/dist/runtimes/edge/streams/utils/StreamPart.mjs.map +0 -1
  257. package/dist/runtimes/edge/streams/utils/chunkByLineStream.d.ts +0 -2
  258. package/dist/runtimes/edge/streams/utils/chunkByLineStream.d.ts.map +0 -1
  259. package/dist/runtimes/edge/streams/utils/chunkByLineStream.js +0 -48
  260. package/dist/runtimes/edge/streams/utils/chunkByLineStream.js.map +0 -1
  261. package/dist/runtimes/edge/streams/utils/chunkByLineStream.mjs +0 -23
  262. package/dist/runtimes/edge/streams/utils/chunkByLineStream.mjs.map +0 -1
  263. package/dist/runtimes/edge/streams/utils/index.d.ts +0 -14
  264. package/dist/runtimes/edge/streams/utils/index.d.ts.map +0 -1
  265. package/dist/runtimes/edge/streams/utils/index.js.map +0 -1
  266. package/dist/runtimes/edge/streams/utils/index.mjs +0 -11
  267. package/dist/runtimes/edge/streams/utils/index.mjs.map +0 -1
  268. package/dist/runtimes/edge/streams/utils/streamPartDecoderStream.d.ts +0 -4
  269. package/dist/runtimes/edge/streams/utils/streamPartDecoderStream.d.ts.map +0 -1
  270. package/dist/runtimes/edge/streams/utils/streamPartDecoderStream.js +0 -50
  271. package/dist/runtimes/edge/streams/utils/streamPartDecoderStream.js.map +0 -1
  272. package/dist/runtimes/edge/streams/utils/streamPartDecoderStream.mjs +0 -25
  273. package/dist/runtimes/edge/streams/utils/streamPartDecoderStream.mjs.map +0 -1
  274. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.d.ts +0 -3
  275. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.d.ts.map +0 -1
  276. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.js +0 -48
  277. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.js.map +0 -1
  278. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.mjs +0 -23
  279. package/dist/runtimes/edge/streams/utils/streamPartEncoderStream.mjs.map +0 -1
  280. package/src/runtimes/edge/streams/AssistantStreamChunkType.ts +0 -73
  281. package/src/runtimes/edge/streams/assistantDecoderStream.ts +0 -170
  282. package/src/runtimes/edge/streams/assistantEncoderStream.ts +0 -126
  283. package/src/runtimes/edge/streams/runResultStream.ts +0 -360
  284. package/src/runtimes/edge/streams/utils/PipeableTransformStream.ts +0 -10
  285. package/src/runtimes/edge/streams/utils/StreamPart.ts +0 -3
  286. package/src/runtimes/edge/streams/utils/chunkByLineStream.ts +0 -24
  287. package/src/runtimes/edge/streams/utils/index.ts +0 -15
  288. package/src/runtimes/edge/streams/utils/streamPartDecoderStream.ts +0 -29
  289. package/src/runtimes/edge/streams/utils/streamPartEncoderStream.ts +0 -23
@@ -1,8 +1,8 @@
1
1
  import { LanguageModelV1Message } from "@ai-sdk/provider";
2
2
  import { CoreMessage } from "../../../types";
3
3
  type fromLanguageModelMessagesOptions = {
4
- mergeSteps: boolean;
4
+ mergeSteps?: boolean;
5
5
  };
6
- export declare const fromLanguageModelMessages: (lm: LanguageModelV1Message[], { mergeSteps }: fromLanguageModelMessagesOptions) => CoreMessage[];
6
+ export declare const fromLanguageModelMessages: (lm: LanguageModelV1Message[], { mergeSteps }?: fromLanguageModelMessagesOptions) => CoreMessage[];
7
7
  export {};
8
8
  //# sourceMappingURL=fromLanguageModelMessages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fromLanguageModelMessages.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/converters/fromLanguageModelMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAuB,MAAM,gBAAgB,CAAC;AAIlE,KAAK,gCAAgC,GAAG;IACtC,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,IAAI,sBAAsB,EAAE,EAC5B,gBAAgB,gCAAgC,KAC/C,WAAW,EA8Hb,CAAC"}
1
+ {"version":3,"file":"fromLanguageModelMessages.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/converters/fromLanguageModelMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAuB,MAAM,gBAAgB,CAAC;AAIlE,KAAK,gCAAgC,GAAG;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,IAAI,sBAAsB,EAAE,EAC5B,iBAAgB,gCAAqC,KACpD,WAAW,EAwIb,CAAC"}
@@ -23,7 +23,7 @@ __export(fromLanguageModelMessages_exports, {
23
23
  fromLanguageModelMessages: () => fromLanguageModelMessages
24
24
  });
25
25
  module.exports = __toCommonJS(fromLanguageModelMessages_exports);
26
- var fromLanguageModelMessages = (lm, { mergeSteps }) => {
26
+ var fromLanguageModelMessages = (lm, { mergeSteps } = {}) => {
27
27
  const messages = [];
28
28
  for (const lmMessage of lm) {
29
29
  const role = lmMessage.role;
@@ -91,8 +91,11 @@ var fromLanguageModelMessages = (lm, { mergeSteps }) => {
91
91
  args: part.args
92
92
  };
93
93
  }
94
+ if (part.type === "redacted-reasoning" || part.type === "file" || part.type === "reasoning") {
95
+ return null;
96
+ }
94
97
  return part;
95
- });
98
+ }).filter((p) => !!p);
96
99
  if (mergeSteps) {
97
100
  const previousMessage = messages[messages.length - 1];
98
101
  if (previousMessage?.role === "assistant") {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/runtimes/edge/converters/fromLanguageModelMessages.ts"],"sourcesContent":["import { LanguageModelV1Message } from \"@ai-sdk/provider\";\nimport { CoreMessage, ToolCallContentPart } from \"../../../types\";\nimport { Writable } from \"stream\";\nimport { ReadonlyJSONObject } from \"../../../utils/json/json-value\";\n\ntype fromLanguageModelMessagesOptions = {\n mergeSteps: boolean;\n};\n\nexport const fromLanguageModelMessages = (\n lm: LanguageModelV1Message[],\n { mergeSteps }: fromLanguageModelMessagesOptions,\n): CoreMessage[] => {\n const messages: CoreMessage[] = [];\n\n for (const lmMessage of lm) {\n const role = lmMessage.role;\n switch (role) {\n case \"system\": {\n messages.push({\n role: \"system\",\n content: [\n {\n type: \"text\",\n text: lmMessage.content,\n },\n ],\n });\n break;\n }\n case \"user\": {\n messages.push({\n role: \"user\",\n content: lmMessage.content.map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return {\n type: \"text\",\n text: part.text,\n };\n }\n case \"image\": {\n if (part.image instanceof URL) {\n return {\n type: \"image\",\n image: part.image.href,\n };\n }\n throw new Error(\"Only images with URL data are supported\");\n }\n case \"file\": {\n if (part.data instanceof URL) {\n return {\n type: \"file\",\n data: part.data.href,\n mimeType: part.mimeType,\n };\n }\n throw new Error(\"Only files with URL data are supported\");\n }\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unknown content part type: ${unhandledType}`);\n }\n }\n }),\n });\n break;\n }\n case \"assistant\": {\n const newContent = lmMessage.content.map((part) => {\n if (part.type === \"tool-call\") {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n argsText: JSON.stringify(part.args),\n args: part.args as ReadonlyJSONObject,\n } satisfies ToolCallContentPart;\n }\n return part;\n });\n\n if (mergeSteps) {\n const previousMessage = messages[messages.length - 1];\n if (previousMessage?.role === \"assistant\") {\n previousMessage.content = [\n ...previousMessage.content,\n ...newContent,\n ];\n break;\n }\n }\n\n messages.push({\n role: \"assistant\",\n content: newContent,\n });\n break;\n }\n case \"tool\": {\n const previousMessage = messages[messages.length - 1];\n if (previousMessage?.role !== \"assistant\")\n throw new Error(\n \"A tool message must be preceded by an assistant message.\",\n );\n\n for (const tool of lmMessage.content) {\n const toolCall = previousMessage.content.find(\n (c): c is ToolCallContentPart =>\n c.type === \"tool-call\" && c.toolCallId === tool.toolCallId,\n );\n if (!toolCall)\n throw new Error(\"Received tool result for an unknown tool call.\");\n if (toolCall.toolName !== tool.toolName)\n throw new Error(\"Tool call name mismatch.\");\n\n type Writable<T> = { -readonly [P in keyof T]: T[P] };\n const writable = toolCall as Writable<ToolCallContentPart>;\n writable.result = tool.result;\n if (tool.isError) {\n writable.isError = true;\n }\n }\n\n break;\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n }\n\n return messages;\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/runtimes/edge/converters/fromLanguageModelMessages.ts"],"sourcesContent":["import { LanguageModelV1Message } from \"@ai-sdk/provider\";\nimport { CoreMessage, ToolCallContentPart } from \"../../../types\";\nimport { Writable } from \"stream\";\nimport { ReadonlyJSONObject } from \"../../../utils/json/json-value\";\n\ntype fromLanguageModelMessagesOptions = {\n mergeSteps?: boolean;\n};\n\nexport const fromLanguageModelMessages = (\n lm: LanguageModelV1Message[],\n { mergeSteps }: fromLanguageModelMessagesOptions = {},\n): CoreMessage[] => {\n const messages: CoreMessage[] = [];\n\n for (const lmMessage of lm) {\n const role = lmMessage.role;\n switch (role) {\n case \"system\": {\n messages.push({\n role: \"system\",\n content: [\n {\n type: \"text\",\n text: lmMessage.content,\n },\n ],\n });\n break;\n }\n case \"user\": {\n messages.push({\n role: \"user\",\n content: lmMessage.content.map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return {\n type: \"text\",\n text: part.text,\n };\n }\n case \"image\": {\n if (part.image instanceof URL) {\n return {\n type: \"image\",\n image: part.image.href,\n };\n }\n throw new Error(\"Only images with URL data are supported\");\n }\n case \"file\": {\n if (part.data instanceof URL) {\n return {\n type: \"file\",\n data: part.data.href,\n mimeType: part.mimeType,\n };\n }\n throw new Error(\"Only files with URL data are supported\");\n }\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unknown content part type: ${unhandledType}`);\n }\n }\n }),\n });\n break;\n }\n case \"assistant\": {\n const newContent = lmMessage.content\n .map((part) => {\n if (part.type === \"tool-call\") {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n argsText: JSON.stringify(part.args),\n args: part.args as ReadonlyJSONObject,\n } satisfies ToolCallContentPart;\n }\n // TODO handle these\n if (\n part.type === \"redacted-reasoning\" ||\n part.type === \"file\" ||\n part.type === \"reasoning\"\n ) {\n return null;\n }\n return part;\n })\n .filter((p) => !!p);\n\n if (mergeSteps) {\n const previousMessage = messages[messages.length - 1];\n if (previousMessage?.role === \"assistant\") {\n previousMessage.content = [\n ...previousMessage.content,\n ...newContent,\n ];\n break;\n }\n }\n\n messages.push({\n role: \"assistant\",\n content: newContent,\n });\n break;\n }\n case \"tool\": {\n const previousMessage = messages[messages.length - 1];\n if (previousMessage?.role !== \"assistant\")\n throw new Error(\n \"A tool message must be preceded by an assistant message.\",\n );\n\n for (const tool of lmMessage.content) {\n const toolCall = previousMessage.content.find(\n (c): c is ToolCallContentPart =>\n c.type === \"tool-call\" && c.toolCallId === tool.toolCallId,\n );\n if (!toolCall)\n throw new Error(\"Received tool result for an unknown tool call.\");\n if (toolCall.toolName !== tool.toolName)\n throw new Error(\"Tool call name mismatch.\");\n\n type Writable<T> = { -readonly [P in keyof T]: T[P] };\n const writable = toolCall as Writable<ToolCallContentPart>;\n writable.result = tool.result;\n if (tool.isError) {\n writable.isError = true;\n }\n }\n\n break;\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n }\n\n return messages;\n};\n"],"mappings":"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","names":[]}
@@ -1,5 +1,5 @@
1
1
  // src/runtimes/edge/converters/fromLanguageModelMessages.ts
2
- var fromLanguageModelMessages = (lm, { mergeSteps }) => {
2
+ var fromLanguageModelMessages = (lm, { mergeSteps } = {}) => {
3
3
  const messages = [];
4
4
  for (const lmMessage of lm) {
5
5
  const role = lmMessage.role;
@@ -67,8 +67,11 @@ var fromLanguageModelMessages = (lm, { mergeSteps }) => {
67
67
  args: part.args
68
68
  };
69
69
  }
70
+ if (part.type === "redacted-reasoning" || part.type === "file" || part.type === "reasoning") {
71
+ return null;
72
+ }
70
73
  return part;
71
- });
74
+ }).filter((p) => !!p);
72
75
  if (mergeSteps) {
73
76
  const previousMessage = messages[messages.length - 1];
74
77
  if (previousMessage?.role === "assistant") {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/runtimes/edge/converters/fromLanguageModelMessages.ts"],"sourcesContent":["import { LanguageModelV1Message } from \"@ai-sdk/provider\";\nimport { CoreMessage, ToolCallContentPart } from \"../../../types\";\nimport { Writable } from \"stream\";\nimport { ReadonlyJSONObject } from \"../../../utils/json/json-value\";\n\ntype fromLanguageModelMessagesOptions = {\n mergeSteps: boolean;\n};\n\nexport const fromLanguageModelMessages = (\n lm: LanguageModelV1Message[],\n { mergeSteps }: fromLanguageModelMessagesOptions,\n): CoreMessage[] => {\n const messages: CoreMessage[] = [];\n\n for (const lmMessage of lm) {\n const role = lmMessage.role;\n switch (role) {\n case \"system\": {\n messages.push({\n role: \"system\",\n content: [\n {\n type: \"text\",\n text: lmMessage.content,\n },\n ],\n });\n break;\n }\n case \"user\": {\n messages.push({\n role: \"user\",\n content: lmMessage.content.map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return {\n type: \"text\",\n text: part.text,\n };\n }\n case \"image\": {\n if (part.image instanceof URL) {\n return {\n type: \"image\",\n image: part.image.href,\n };\n }\n throw new Error(\"Only images with URL data are supported\");\n }\n case \"file\": {\n if (part.data instanceof URL) {\n return {\n type: \"file\",\n data: part.data.href,\n mimeType: part.mimeType,\n };\n }\n throw new Error(\"Only files with URL data are supported\");\n }\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unknown content part type: ${unhandledType}`);\n }\n }\n }),\n });\n break;\n }\n case \"assistant\": {\n const newContent = lmMessage.content.map((part) => {\n if (part.type === \"tool-call\") {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n argsText: JSON.stringify(part.args),\n args: part.args as ReadonlyJSONObject,\n } satisfies ToolCallContentPart;\n }\n return part;\n });\n\n if (mergeSteps) {\n const previousMessage = messages[messages.length - 1];\n if (previousMessage?.role === \"assistant\") {\n previousMessage.content = [\n ...previousMessage.content,\n ...newContent,\n ];\n break;\n }\n }\n\n messages.push({\n role: \"assistant\",\n content: newContent,\n });\n break;\n }\n case \"tool\": {\n const previousMessage = messages[messages.length - 1];\n if (previousMessage?.role !== \"assistant\")\n throw new Error(\n \"A tool message must be preceded by an assistant message.\",\n );\n\n for (const tool of lmMessage.content) {\n const toolCall = previousMessage.content.find(\n (c): c is ToolCallContentPart =>\n c.type === \"tool-call\" && c.toolCallId === tool.toolCallId,\n );\n if (!toolCall)\n throw new Error(\"Received tool result for an unknown tool call.\");\n if (toolCall.toolName !== tool.toolName)\n throw new Error(\"Tool call name mismatch.\");\n\n type Writable<T> = { -readonly [P in keyof T]: T[P] };\n const writable = toolCall as Writable<ToolCallContentPart>;\n writable.result = tool.result;\n if (tool.isError) {\n writable.isError = true;\n }\n }\n\n break;\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n }\n\n return messages;\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/runtimes/edge/converters/fromLanguageModelMessages.ts"],"sourcesContent":["import { LanguageModelV1Message } from \"@ai-sdk/provider\";\nimport { CoreMessage, ToolCallContentPart } from \"../../../types\";\nimport { Writable } from \"stream\";\nimport { ReadonlyJSONObject } from \"../../../utils/json/json-value\";\n\ntype fromLanguageModelMessagesOptions = {\n mergeSteps?: boolean;\n};\n\nexport const fromLanguageModelMessages = (\n lm: LanguageModelV1Message[],\n { mergeSteps }: fromLanguageModelMessagesOptions = {},\n): CoreMessage[] => {\n const messages: CoreMessage[] = [];\n\n for (const lmMessage of lm) {\n const role = lmMessage.role;\n switch (role) {\n case \"system\": {\n messages.push({\n role: \"system\",\n content: [\n {\n type: \"text\",\n text: lmMessage.content,\n },\n ],\n });\n break;\n }\n case \"user\": {\n messages.push({\n role: \"user\",\n content: lmMessage.content.map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return {\n type: \"text\",\n text: part.text,\n };\n }\n case \"image\": {\n if (part.image instanceof URL) {\n return {\n type: \"image\",\n image: part.image.href,\n };\n }\n throw new Error(\"Only images with URL data are supported\");\n }\n case \"file\": {\n if (part.data instanceof URL) {\n return {\n type: \"file\",\n data: part.data.href,\n mimeType: part.mimeType,\n };\n }\n throw new Error(\"Only files with URL data are supported\");\n }\n\n default: {\n const unhandledType: never = type;\n throw new Error(`Unknown content part type: ${unhandledType}`);\n }\n }\n }),\n });\n break;\n }\n case \"assistant\": {\n const newContent = lmMessage.content\n .map((part) => {\n if (part.type === \"tool-call\") {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n argsText: JSON.stringify(part.args),\n args: part.args as ReadonlyJSONObject,\n } satisfies ToolCallContentPart;\n }\n // TODO handle these\n if (\n part.type === \"redacted-reasoning\" ||\n part.type === \"file\" ||\n part.type === \"reasoning\"\n ) {\n return null;\n }\n return part;\n })\n .filter((p) => !!p);\n\n if (mergeSteps) {\n const previousMessage = messages[messages.length - 1];\n if (previousMessage?.role === \"assistant\") {\n previousMessage.content = [\n ...previousMessage.content,\n ...newContent,\n ];\n break;\n }\n }\n\n messages.push({\n role: \"assistant\",\n content: newContent,\n });\n break;\n }\n case \"tool\": {\n const previousMessage = messages[messages.length - 1];\n if (previousMessage?.role !== \"assistant\")\n throw new Error(\n \"A tool message must be preceded by an assistant message.\",\n );\n\n for (const tool of lmMessage.content) {\n const toolCall = previousMessage.content.find(\n (c): c is ToolCallContentPart =>\n c.type === \"tool-call\" && c.toolCallId === tool.toolCallId,\n );\n if (!toolCall)\n throw new Error(\"Received tool result for an unknown tool call.\");\n if (toolCall.toolName !== tool.toolName)\n throw new Error(\"Tool call name mismatch.\");\n\n type Writable<T> = { -readonly [P in keyof T]: T[P] };\n const writable = toolCall as Writable<ToolCallContentPart>;\n writable.result = tool.result;\n if (tool.isError) {\n writable.isError = true;\n }\n }\n\n break;\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n }\n\n return messages;\n};\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"toCoreMessages.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/converters/toCoreMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE5D,KAAK,4BAA4B,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,SAAS,KAAK,GAClE,WAAW,GACX,WAAW,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,OAAO,GAAG,KAAK,EACtD,UAAU,SAAS,aAAa,EAAE,EAClC,UAAS;IAAE,kBAAkB,CAAC,EAAE,CAAC,GAAG,SAAS,CAAA;CAAO,KACnD,4BAA4B,CAAC,CAAC,CAAC,EAEjC,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,OAAO,GAAG,KAAK,EACrD,SAAS,aAAa,EACtB,UAAS;IAAE,kBAAkB,CAAC,EAAE,CAAC,GAAG,SAAS,CAAA;CAAO,KACnD,4BAA4B,CAAC,CAAC,CA2ChC,CAAC"}
1
+ {"version":3,"file":"toCoreMessages.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/converters/toCoreMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE5D,KAAK,4BAA4B,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,SAAS,KAAK,GAClE,WAAW,GACX,WAAW,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,OAAO,GAAG,KAAK,EACtD,UAAU,SAAS,aAAa,EAAE,EAClC,UAAS;IAAE,kBAAkB,CAAC,EAAE,CAAC,GAAG,SAAS,CAAA;CAAO,KACnD,4BAA4B,CAAC,CAAC,CAAC,EAEjC,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,OAAO,GAAG,KAAK,EACrD,SAAS,aAAa,EACtB,UAAS;IAAE,kBAAkB,CAAC,EAAE,CAAC,GAAG,SAAS,CAAA;CAAO,KACnD,4BAA4B,CAAC,CAAC,CA+ChC,CAAC"}
@@ -35,7 +35,7 @@ var toCoreMessage = (message, options = {}) => {
35
35
  return {
36
36
  role,
37
37
  content: message.content.map((part) => {
38
- if (part.type === "reasoning" || part.type === "source")
38
+ if (part.type === "reasoning" || part.type === "source" || part.type === "file")
39
39
  return null;
40
40
  if (part.type === "tool-call") {
41
41
  const { argsText, ...rest } = part;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/runtimes/edge/converters/toCoreMessages.ts"],"sourcesContent":["import { ThreadMessage, CoreMessage } from \"../../../types\";\n\ntype CoreMessageWithConditionalId<T extends boolean> = T extends false\n ? CoreMessage\n : CoreMessage & { unstable_id?: string };\n\nexport const toCoreMessages = <T extends boolean = false>(\n messages: readonly ThreadMessage[],\n options: { unstable_includeId?: T | undefined } = {},\n): CoreMessageWithConditionalId<T>[] => {\n return messages.map((message) => toCoreMessage(message, options));\n};\n\nexport const toCoreMessage = <T extends boolean = false>(\n message: ThreadMessage,\n options: { unstable_includeId?: T | undefined } = {},\n): CoreMessageWithConditionalId<T> => {\n const includeId = options.unstable_includeId ?? false;\n const role = message.role;\n switch (role) {\n case \"assistant\":\n return {\n role,\n content: message.content\n .map((part) => {\n if (part.type === \"reasoning\" || part.type === \"source\")\n return null; // reasoning and source parts are omitted\n if (part.type === \"tool-call\") {\n const { argsText, ...rest } = part;\n return rest;\n }\n return part;\n })\n .filter((c) => !!c),\n ...(includeId ? { unstable_id: message.id } : {}),\n };\n\n case \"user\":\n return {\n role,\n content: [\n ...message.content,\n ...message.attachments.map((a) => a.content).flat(),\n ],\n ...(includeId ? { unstable_id: message.id } : {}),\n };\n\n case \"system\":\n return {\n role,\n content: message.content,\n ...(includeId ? { unstable_id: message.id } : {}),\n };\n\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,IAAM,iBAAiB,CAC5B,UACA,UAAkD,CAAC,MACb;AACtC,SAAO,SAAS,IAAI,CAAC,YAAY,cAAc,SAAS,OAAO,CAAC;AAClE;AAEO,IAAM,gBAAgB,CAC3B,SACA,UAAkD,CAAC,MACf;AACpC,QAAM,YAAY,QAAQ,sBAAsB;AAChD,QAAM,OAAO,QAAQ;AACrB,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,SAAS,QAAQ,QACd,IAAI,CAAC,SAAS;AACb,cAAI,KAAK,SAAS,eAAe,KAAK,SAAS;AAC7C,mBAAO;AACT,cAAI,KAAK,SAAS,aAAa;AAC7B,kBAAM,EAAE,UAAU,GAAG,KAAK,IAAI;AAC9B,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT,CAAC,EACA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,QACpB,GAAI,YAAY,EAAE,aAAa,QAAQ,GAAG,IAAI,CAAC;AAAA,MACjD;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,SAAS;AAAA,UACP,GAAG,QAAQ;AAAA,UACX,GAAG,QAAQ,YAAY,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK;AAAA,QACpD;AAAA,QACA,GAAI,YAAY,EAAE,aAAa,QAAQ,GAAG,IAAI,CAAC;AAAA,MACjD;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,SAAS,QAAQ;AAAA,QACjB,GAAI,YAAY,EAAE,aAAa,QAAQ,GAAG,IAAI,CAAC;AAAA,MACjD;AAAA,IAEF,SAAS;AACP,YAAM,kBAAyB;AAC/B,YAAM,IAAI,MAAM,yBAAyB,eAAe,EAAE;AAAA,IAC5D;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/runtimes/edge/converters/toCoreMessages.ts"],"sourcesContent":["import { ThreadMessage, CoreMessage } from \"../../../types\";\n\ntype CoreMessageWithConditionalId<T extends boolean> = T extends false\n ? CoreMessage\n : CoreMessage & { unstable_id?: string };\n\nexport const toCoreMessages = <T extends boolean = false>(\n messages: readonly ThreadMessage[],\n options: { unstable_includeId?: T | undefined } = {},\n): CoreMessageWithConditionalId<T>[] => {\n return messages.map((message) => toCoreMessage(message, options));\n};\n\nexport const toCoreMessage = <T extends boolean = false>(\n message: ThreadMessage,\n options: { unstable_includeId?: T | undefined } = {},\n): CoreMessageWithConditionalId<T> => {\n const includeId = options.unstable_includeId ?? false;\n const role = message.role;\n switch (role) {\n case \"assistant\":\n return {\n role,\n content: message.content\n .map((part) => {\n if (\n part.type === \"reasoning\" ||\n part.type === \"source\" ||\n part.type === \"file\"\n )\n return null; // reasoning, source, and file parts are omitted\n if (part.type === \"tool-call\") {\n const { argsText, ...rest } = part;\n return rest;\n }\n return part;\n })\n .filter((c) => !!c),\n ...(includeId ? { unstable_id: message.id } : {}),\n };\n\n case \"user\":\n return {\n role,\n content: [\n ...message.content,\n ...message.attachments.map((a) => a.content).flat(),\n ],\n ...(includeId ? { unstable_id: message.id } : {}),\n };\n\n case \"system\":\n return {\n role,\n content: message.content,\n ...(includeId ? { unstable_id: message.id } : {}),\n };\n\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,IAAM,iBAAiB,CAC5B,UACA,UAAkD,CAAC,MACb;AACtC,SAAO,SAAS,IAAI,CAAC,YAAY,cAAc,SAAS,OAAO,CAAC;AAClE;AAEO,IAAM,gBAAgB,CAC3B,SACA,UAAkD,CAAC,MACf;AACpC,QAAM,YAAY,QAAQ,sBAAsB;AAChD,QAAM,OAAO,QAAQ;AACrB,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,SAAS,QAAQ,QACd,IAAI,CAAC,SAAS;AACb,cACE,KAAK,SAAS,eACd,KAAK,SAAS,YACd,KAAK,SAAS;AAEd,mBAAO;AACT,cAAI,KAAK,SAAS,aAAa;AAC7B,kBAAM,EAAE,UAAU,GAAG,KAAK,IAAI;AAC9B,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT,CAAC,EACA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,QACpB,GAAI,YAAY,EAAE,aAAa,QAAQ,GAAG,IAAI,CAAC;AAAA,MACjD;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,SAAS;AAAA,UACP,GAAG,QAAQ;AAAA,UACX,GAAG,QAAQ,YAAY,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK;AAAA,QACpD;AAAA,QACA,GAAI,YAAY,EAAE,aAAa,QAAQ,GAAG,IAAI,CAAC;AAAA,MACjD;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,SAAS,QAAQ;AAAA,QACjB,GAAI,YAAY,EAAE,aAAa,QAAQ,GAAG,IAAI,CAAC;AAAA,MACjD;AAAA,IAEF,SAAS;AACP,YAAM,kBAAyB;AAC/B,YAAM,IAAI,MAAM,yBAAyB,eAAe,EAAE;AAAA,IAC5D;AAAA,EACF;AACF;","names":[]}
@@ -10,7 +10,7 @@ var toCoreMessage = (message, options = {}) => {
10
10
  return {
11
11
  role,
12
12
  content: message.content.map((part) => {
13
- if (part.type === "reasoning" || part.type === "source")
13
+ if (part.type === "reasoning" || part.type === "source" || part.type === "file")
14
14
  return null;
15
15
  if (part.type === "tool-call") {
16
16
  const { argsText, ...rest } = part;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/runtimes/edge/converters/toCoreMessages.ts"],"sourcesContent":["import { ThreadMessage, CoreMessage } from \"../../../types\";\n\ntype CoreMessageWithConditionalId<T extends boolean> = T extends false\n ? CoreMessage\n : CoreMessage & { unstable_id?: string };\n\nexport const toCoreMessages = <T extends boolean = false>(\n messages: readonly ThreadMessage[],\n options: { unstable_includeId?: T | undefined } = {},\n): CoreMessageWithConditionalId<T>[] => {\n return messages.map((message) => toCoreMessage(message, options));\n};\n\nexport const toCoreMessage = <T extends boolean = false>(\n message: ThreadMessage,\n options: { unstable_includeId?: T | undefined } = {},\n): CoreMessageWithConditionalId<T> => {\n const includeId = options.unstable_includeId ?? false;\n const role = message.role;\n switch (role) {\n case \"assistant\":\n return {\n role,\n content: message.content\n .map((part) => {\n if (part.type === \"reasoning\" || part.type === \"source\")\n return null; // reasoning and source parts are omitted\n if (part.type === \"tool-call\") {\n const { argsText, ...rest } = part;\n return rest;\n }\n return part;\n })\n .filter((c) => !!c),\n ...(includeId ? { unstable_id: message.id } : {}),\n };\n\n case \"user\":\n return {\n role,\n content: [\n ...message.content,\n ...message.attachments.map((a) => a.content).flat(),\n ],\n ...(includeId ? { unstable_id: message.id } : {}),\n };\n\n case \"system\":\n return {\n role,\n content: message.content,\n ...(includeId ? { unstable_id: message.id } : {}),\n };\n\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n};\n"],"mappings":";AAMO,IAAM,iBAAiB,CAC5B,UACA,UAAkD,CAAC,MACb;AACtC,SAAO,SAAS,IAAI,CAAC,YAAY,cAAc,SAAS,OAAO,CAAC;AAClE;AAEO,IAAM,gBAAgB,CAC3B,SACA,UAAkD,CAAC,MACf;AACpC,QAAM,YAAY,QAAQ,sBAAsB;AAChD,QAAM,OAAO,QAAQ;AACrB,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,SAAS,QAAQ,QACd,IAAI,CAAC,SAAS;AACb,cAAI,KAAK,SAAS,eAAe,KAAK,SAAS;AAC7C,mBAAO;AACT,cAAI,KAAK,SAAS,aAAa;AAC7B,kBAAM,EAAE,UAAU,GAAG,KAAK,IAAI;AAC9B,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT,CAAC,EACA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,QACpB,GAAI,YAAY,EAAE,aAAa,QAAQ,GAAG,IAAI,CAAC;AAAA,MACjD;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,SAAS;AAAA,UACP,GAAG,QAAQ;AAAA,UACX,GAAG,QAAQ,YAAY,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK;AAAA,QACpD;AAAA,QACA,GAAI,YAAY,EAAE,aAAa,QAAQ,GAAG,IAAI,CAAC;AAAA,MACjD;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,SAAS,QAAQ;AAAA,QACjB,GAAI,YAAY,EAAE,aAAa,QAAQ,GAAG,IAAI,CAAC;AAAA,MACjD;AAAA,IAEF,SAAS;AACP,YAAM,kBAAyB;AAC/B,YAAM,IAAI,MAAM,yBAAyB,eAAe,EAAE;AAAA,IAC5D;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/runtimes/edge/converters/toCoreMessages.ts"],"sourcesContent":["import { ThreadMessage, CoreMessage } from \"../../../types\";\n\ntype CoreMessageWithConditionalId<T extends boolean> = T extends false\n ? CoreMessage\n : CoreMessage & { unstable_id?: string };\n\nexport const toCoreMessages = <T extends boolean = false>(\n messages: readonly ThreadMessage[],\n options: { unstable_includeId?: T | undefined } = {},\n): CoreMessageWithConditionalId<T>[] => {\n return messages.map((message) => toCoreMessage(message, options));\n};\n\nexport const toCoreMessage = <T extends boolean = false>(\n message: ThreadMessage,\n options: { unstable_includeId?: T | undefined } = {},\n): CoreMessageWithConditionalId<T> => {\n const includeId = options.unstable_includeId ?? false;\n const role = message.role;\n switch (role) {\n case \"assistant\":\n return {\n role,\n content: message.content\n .map((part) => {\n if (\n part.type === \"reasoning\" ||\n part.type === \"source\" ||\n part.type === \"file\"\n )\n return null; // reasoning, source, and file parts are omitted\n if (part.type === \"tool-call\") {\n const { argsText, ...rest } = part;\n return rest;\n }\n return part;\n })\n .filter((c) => !!c),\n ...(includeId ? { unstable_id: message.id } : {}),\n };\n\n case \"user\":\n return {\n role,\n content: [\n ...message.content,\n ...message.attachments.map((a) => a.content).flat(),\n ],\n ...(includeId ? { unstable_id: message.id } : {}),\n };\n\n case \"system\":\n return {\n role,\n content: message.content,\n ...(includeId ? { unstable_id: message.id } : {}),\n };\n\n default: {\n const unsupportedRole: never = role;\n throw new Error(`Unknown message role: ${unsupportedRole}`);\n }\n }\n};\n"],"mappings":";AAMO,IAAM,iBAAiB,CAC5B,UACA,UAAkD,CAAC,MACb;AACtC,SAAO,SAAS,IAAI,CAAC,YAAY,cAAc,SAAS,OAAO,CAAC;AAClE;AAEO,IAAM,gBAAgB,CAC3B,SACA,UAAkD,CAAC,MACf;AACpC,QAAM,YAAY,QAAQ,sBAAsB;AAChD,QAAM,OAAO,QAAQ;AACrB,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,SAAS,QAAQ,QACd,IAAI,CAAC,SAAS;AACb,cACE,KAAK,SAAS,eACd,KAAK,SAAS,YACd,KAAK,SAAS;AAEd,mBAAO;AACT,cAAI,KAAK,SAAS,aAAa;AAC7B,kBAAM,EAAE,UAAU,GAAG,KAAK,IAAI;AAC9B,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT,CAAC,EACA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,QACpB,GAAI,YAAY,EAAE,aAAa,QAAQ,GAAG,IAAI,CAAC;AAAA,MACjD;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,SAAS;AAAA,UACP,GAAG,QAAQ;AAAA,UACX,GAAG,QAAQ,YAAY,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK;AAAA,QACpD;AAAA,QACA,GAAI,YAAY,EAAE,aAAa,QAAQ,GAAG,IAAI,CAAC;AAAA,MACjD;AAAA,IAEF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA,SAAS,QAAQ;AAAA,QACjB,GAAI,YAAY,EAAE,aAAa,QAAQ,GAAG,IAAI,CAAC;AAAA,MACjD;AAAA,IAEF,SAAS;AACP,YAAM,kBAAyB;AAC/B,YAAM,IAAI,MAAM,yBAAyB,eAAe,EAAE;AAAA,IAC5D;AAAA,EACF;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"toLanguageModelMessages.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/converters/toLanguageModelMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,sBAAsB,EAIvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,WAAW,EACX,aAAa,EAGd,MAAM,+BAA+B,CAAC;AAgEvC,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,aAAa,EAAE,EAC1D,OAAO,GAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAO,GACzD,sBAAsB,EAAE,CAoG1B"}
1
+ {"version":3,"file":"toLanguageModelMessages.d.ts","sourceRoot":"","sources":["../../../../src/runtimes/edge/converters/toLanguageModelMessages.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,sBAAsB,EAIvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,WAAW,EACX,aAAa,EAGd,MAAM,+BAA+B,CAAC;AAgEvC,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,aAAa,EAAE,EAC1D,OAAO,GAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAO,GACzD,sBAAsB,EAAE,CAqG1B"}
@@ -133,7 +133,8 @@ function toLanguageModelMessages(message, options = {}) {
133
133
  const type = part.type;
134
134
  switch (type) {
135
135
  case "reasoning":
136
- case "source": {
136
+ case "source":
137
+ case "file": {
137
138
  break;
138
139
  }
139
140
  case "text": {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/runtimes/edge/converters/toLanguageModelMessages.ts"],"sourcesContent":["import {\n LanguageModelV1FilePart,\n LanguageModelV1ImagePart,\n LanguageModelV1Message,\n LanguageModelV1TextPart,\n LanguageModelV1ToolCallPart,\n LanguageModelV1ToolResultPart,\n} from \"@ai-sdk/provider\";\nimport {\n CoreMessage,\n ThreadMessage,\n TextContentPart,\n CoreToolCallContentPart,\n} from \"../../../types/AssistantTypes\";\n\nconst assistantMessageSplitter = () => {\n const stash: LanguageModelV1Message[] = [];\n let assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (LanguageModelV1TextPart | LanguageModelV1ToolCallPart)[],\n };\n let toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n\n return {\n addTextContentPart: (part: TextContentPart) => {\n if (toolMessage.content.length > 0) {\n stash.push(assistantMessage);\n stash.push(toolMessage);\n\n assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (\n | LanguageModelV1TextPart\n | LanguageModelV1ToolCallPart\n )[],\n };\n\n toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n }\n\n assistantMessage.content.push(part);\n },\n addToolCallPart: (part: CoreToolCallContentPart) => {\n assistantMessage.content.push({\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n });\n\n toolMessage.content.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n result:\n part.result === undefined\n ? \"Error: tool is has no configured code to run\"\n : part.result,\n isError: part.isError ?? part.result === undefined,\n });\n },\n getMessages: () => {\n if (toolMessage.content.length > 0) {\n return [...stash, assistantMessage, toolMessage];\n }\n\n return [...stash, assistantMessage];\n },\n };\n};\n\nexport function toLanguageModelMessages(\n message: readonly CoreMessage[] | readonly ThreadMessage[],\n options: { unstable_includeId?: boolean | undefined } = {},\n): LanguageModelV1Message[] {\n const includeId = options.unstable_includeId ?? false;\n return message.flatMap((message) => {\n const role = message.role;\n switch (role) {\n case \"system\": {\n return [\n {\n ...(includeId\n ? { unstable_id: (message as ThreadMessage).id }\n : {}),\n role: \"system\",\n content: message.content[0].text,\n },\n ];\n }\n\n case \"user\": {\n const attachments = \"attachments\" in message ? message.attachments : [];\n const content = [\n ...message.content,\n ...attachments.map((a) => a.content).flat(),\n ];\n const msg: LanguageModelV1Message = {\n ...(includeId ? { unstable_id: (message as ThreadMessage).id } : {}),\n role: \"user\",\n content: content.map(\n (\n part,\n ):\n | LanguageModelV1TextPart\n | LanguageModelV1ImagePart\n | LanguageModelV1FilePart => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return part;\n }\n\n case \"image\": {\n return {\n type: \"image\",\n image: new URL(part.image),\n };\n }\n\n case \"file\": {\n return {\n type: \"file\",\n data: new URL(part.data),\n mimeType: part.mimeType,\n };\n }\n\n default: {\n const unhandledType: \"audio\" = type;\n throw new Error(\n `Unspported content part type: ${unhandledType}`,\n );\n }\n }\n },\n ),\n };\n return [msg];\n }\n\n case \"assistant\": {\n const splitter = assistantMessageSplitter();\n for (const part of message.content) {\n const type = part.type;\n switch (type) {\n case \"reasoning\":\n case \"source\": {\n break; // reasoning and source parts are omitted\n }\n\n case \"text\": {\n splitter.addTextContentPart(part);\n break;\n }\n case \"tool-call\": {\n splitter.addToolCallPart(part);\n break;\n }\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled content part type: ${unhandledType}`);\n }\n }\n }\n return splitter.getMessages();\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n });\n}\n"],"mappings":"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","names":["message"]}
1
+ {"version":3,"sources":["../../../../src/runtimes/edge/converters/toLanguageModelMessages.ts"],"sourcesContent":["import {\n LanguageModelV1FilePart,\n LanguageModelV1ImagePart,\n LanguageModelV1Message,\n LanguageModelV1TextPart,\n LanguageModelV1ToolCallPart,\n LanguageModelV1ToolResultPart,\n} from \"@ai-sdk/provider\";\nimport {\n CoreMessage,\n ThreadMessage,\n TextContentPart,\n CoreToolCallContentPart,\n} from \"../../../types/AssistantTypes\";\n\nconst assistantMessageSplitter = () => {\n const stash: LanguageModelV1Message[] = [];\n let assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (LanguageModelV1TextPart | LanguageModelV1ToolCallPart)[],\n };\n let toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n\n return {\n addTextContentPart: (part: TextContentPart) => {\n if (toolMessage.content.length > 0) {\n stash.push(assistantMessage);\n stash.push(toolMessage);\n\n assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (\n | LanguageModelV1TextPart\n | LanguageModelV1ToolCallPart\n )[],\n };\n\n toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n }\n\n assistantMessage.content.push(part);\n },\n addToolCallPart: (part: CoreToolCallContentPart) => {\n assistantMessage.content.push({\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n });\n\n toolMessage.content.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n result:\n part.result === undefined\n ? \"Error: tool is has no configured code to run\"\n : part.result,\n isError: part.isError ?? part.result === undefined,\n });\n },\n getMessages: () => {\n if (toolMessage.content.length > 0) {\n return [...stash, assistantMessage, toolMessage];\n }\n\n return [...stash, assistantMessage];\n },\n };\n};\n\nexport function toLanguageModelMessages(\n message: readonly CoreMessage[] | readonly ThreadMessage[],\n options: { unstable_includeId?: boolean | undefined } = {},\n): LanguageModelV1Message[] {\n const includeId = options.unstable_includeId ?? false;\n return message.flatMap((message) => {\n const role = message.role;\n switch (role) {\n case \"system\": {\n return [\n {\n ...(includeId\n ? { unstable_id: (message as ThreadMessage).id }\n : {}),\n role: \"system\",\n content: message.content[0].text,\n },\n ];\n }\n\n case \"user\": {\n const attachments = \"attachments\" in message ? message.attachments : [];\n const content = [\n ...message.content,\n ...attachments.map((a) => a.content).flat(),\n ];\n const msg: LanguageModelV1Message = {\n ...(includeId ? { unstable_id: (message as ThreadMessage).id } : {}),\n role: \"user\",\n content: content.map(\n (\n part,\n ):\n | LanguageModelV1TextPart\n | LanguageModelV1ImagePart\n | LanguageModelV1FilePart => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return part;\n }\n\n case \"image\": {\n return {\n type: \"image\",\n image: new URL(part.image),\n };\n }\n\n case \"file\": {\n return {\n type: \"file\",\n data: new URL(part.data),\n mimeType: part.mimeType,\n };\n }\n\n default: {\n const unhandledType: \"audio\" = type;\n throw new Error(\n `Unspported content part type: ${unhandledType}`,\n );\n }\n }\n },\n ),\n };\n return [msg];\n }\n\n case \"assistant\": {\n const splitter = assistantMessageSplitter();\n for (const part of message.content) {\n const type = part.type;\n switch (type) {\n case \"reasoning\":\n case \"source\":\n case \"file\": {\n break; // reasoning, source, and file parts are omitted\n }\n\n case \"text\": {\n splitter.addTextContentPart(part);\n break;\n }\n case \"tool-call\": {\n splitter.addToolCallPart(part);\n break;\n }\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled content part type: ${unhandledType}`);\n }\n }\n }\n return splitter.getMessages();\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA,IAAM,2BAA2B,MAAM;AACrC,QAAM,QAAkC,CAAC;AACzC,MAAI,mBAAmB;AAAA,IACrB,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,EACZ;AACA,MAAI,cAAc;AAAA,IAChB,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,EACZ;AAEA,SAAO;AAAA,IACL,oBAAoB,CAAC,SAA0B;AAC7C,UAAI,YAAY,QAAQ,SAAS,GAAG;AAClC,cAAM,KAAK,gBAAgB;AAC3B,cAAM,KAAK,WAAW;AAEtB,2BAAmB;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,CAAC;AAAA,QAIZ;AAEA,sBAAc;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,CAAC;AAAA,QACZ;AAAA,MACF;AAEA,uBAAiB,QAAQ,KAAK,IAAI;AAAA,IACpC;AAAA,IACA,iBAAiB,CAAC,SAAkC;AAClD,uBAAiB,QAAQ,KAAK;AAAA,QAC5B,MAAM;AAAA,QACN,YAAY,KAAK;AAAA,QACjB,UAAU,KAAK;AAAA,QACf,MAAM,KAAK;AAAA,MACb,CAAC;AAED,kBAAY,QAAQ,KAAK;AAAA,QACvB,MAAM;AAAA,QACN,YAAY,KAAK;AAAA,QACjB,UAAU,KAAK;AAAA,QACf,QACE,KAAK,WAAW,SACZ,iDACA,KAAK;AAAA,QACX,SAAS,KAAK,WAAW,KAAK,WAAW;AAAA,MAC3C,CAAC;AAAA,IACH;AAAA,IACA,aAAa,MAAM;AACjB,UAAI,YAAY,QAAQ,SAAS,GAAG;AAClC,eAAO,CAAC,GAAG,OAAO,kBAAkB,WAAW;AAAA,MACjD;AAEA,aAAO,CAAC,GAAG,OAAO,gBAAgB;AAAA,IACpC;AAAA,EACF;AACF;AAEO,SAAS,wBACd,SACA,UAAwD,CAAC,GAC/B;AAC1B,QAAM,YAAY,QAAQ,sBAAsB;AAChD,SAAO,QAAQ,QAAQ,CAACA,aAAY;AAClC,UAAM,OAAOA,SAAQ;AACrB,YAAQ,MAAM;AAAA,MACZ,KAAK,UAAU;AACb,eAAO;AAAA,UACL;AAAA,YACE,GAAI,YACA,EAAE,aAAcA,SAA0B,GAAG,IAC7C,CAAC;AAAA,YACL,MAAM;AAAA,YACN,SAASA,SAAQ,QAAQ,CAAC,EAAE;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,cAAM,cAAc,iBAAiBA,WAAUA,SAAQ,cAAc,CAAC;AACtE,cAAM,UAAU;AAAA,UACd,GAAGA,SAAQ;AAAA,UACX,GAAG,YAAY,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK;AAAA,QAC5C;AACA,cAAM,MAA8B;AAAA,UAClC,GAAI,YAAY,EAAE,aAAcA,SAA0B,GAAG,IAAI,CAAC;AAAA,UAClE,MAAM;AAAA,UACN,SAAS,QAAQ;AAAA,YACf,CACE,SAI6B;AAC7B,oBAAM,OAAO,KAAK;AAClB,sBAAQ,MAAM;AAAA,gBACZ,KAAK,QAAQ;AACX,yBAAO;AAAA,gBACT;AAAA,gBAEA,KAAK,SAAS;AACZ,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,OAAO,IAAI,IAAI,KAAK,KAAK;AAAA,kBAC3B;AAAA,gBACF;AAAA,gBAEA,KAAK,QAAQ;AACX,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,MAAM,IAAI,IAAI,KAAK,IAAI;AAAA,oBACvB,UAAU,KAAK;AAAA,kBACjB;AAAA,gBACF;AAAA,gBAEA,SAAS;AACP,wBAAM,gBAAyB;AAC/B,wBAAM,IAAI;AAAA,oBACR,iCAAiC,aAAa;AAAA,kBAChD;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,eAAO,CAAC,GAAG;AAAA,MACb;AAAA,MAEA,KAAK,aAAa;AAChB,cAAM,WAAW,yBAAyB;AAC1C,mBAAW,QAAQA,SAAQ,SAAS;AAClC,gBAAM,OAAO,KAAK;AAClB,kBAAQ,MAAM;AAAA,YACZ,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK,QAAQ;AACX;AAAA,YACF;AAAA,YAEA,KAAK,QAAQ;AACX,uBAAS,mBAAmB,IAAI;AAChC;AAAA,YACF;AAAA,YACA,KAAK,aAAa;AAChB,uBAAS,gBAAgB,IAAI;AAC7B;AAAA,YACF;AAAA,YACA,SAAS;AACP,oBAAM,gBAAuB;AAC7B,oBAAM,IAAI,MAAM,gCAAgC,aAAa,EAAE;AAAA,YACjE;AAAA,UACF;AAAA,QACF;AACA,eAAO,SAAS,YAAY;AAAA,MAC9B;AAAA,MAEA,SAAS;AACP,cAAM,gBAAuB;AAC7B,cAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,MAC1D;AAAA,IACF;AAAA,EACF,CAAC;AACH;","names":["message"]}
@@ -109,7 +109,8 @@ function toLanguageModelMessages(message, options = {}) {
109
109
  const type = part.type;
110
110
  switch (type) {
111
111
  case "reasoning":
112
- case "source": {
112
+ case "source":
113
+ case "file": {
113
114
  break;
114
115
  }
115
116
  case "text": {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/runtimes/edge/converters/toLanguageModelMessages.ts"],"sourcesContent":["import {\n LanguageModelV1FilePart,\n LanguageModelV1ImagePart,\n LanguageModelV1Message,\n LanguageModelV1TextPart,\n LanguageModelV1ToolCallPart,\n LanguageModelV1ToolResultPart,\n} from \"@ai-sdk/provider\";\nimport {\n CoreMessage,\n ThreadMessage,\n TextContentPart,\n CoreToolCallContentPart,\n} from \"../../../types/AssistantTypes\";\n\nconst assistantMessageSplitter = () => {\n const stash: LanguageModelV1Message[] = [];\n let assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (LanguageModelV1TextPart | LanguageModelV1ToolCallPart)[],\n };\n let toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n\n return {\n addTextContentPart: (part: TextContentPart) => {\n if (toolMessage.content.length > 0) {\n stash.push(assistantMessage);\n stash.push(toolMessage);\n\n assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (\n | LanguageModelV1TextPart\n | LanguageModelV1ToolCallPart\n )[],\n };\n\n toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n }\n\n assistantMessage.content.push(part);\n },\n addToolCallPart: (part: CoreToolCallContentPart) => {\n assistantMessage.content.push({\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n });\n\n toolMessage.content.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n result:\n part.result === undefined\n ? \"Error: tool is has no configured code to run\"\n : part.result,\n isError: part.isError ?? part.result === undefined,\n });\n },\n getMessages: () => {\n if (toolMessage.content.length > 0) {\n return [...stash, assistantMessage, toolMessage];\n }\n\n return [...stash, assistantMessage];\n },\n };\n};\n\nexport function toLanguageModelMessages(\n message: readonly CoreMessage[] | readonly ThreadMessage[],\n options: { unstable_includeId?: boolean | undefined } = {},\n): LanguageModelV1Message[] {\n const includeId = options.unstable_includeId ?? false;\n return message.flatMap((message) => {\n const role = message.role;\n switch (role) {\n case \"system\": {\n return [\n {\n ...(includeId\n ? { unstable_id: (message as ThreadMessage).id }\n : {}),\n role: \"system\",\n content: message.content[0].text,\n },\n ];\n }\n\n case \"user\": {\n const attachments = \"attachments\" in message ? message.attachments : [];\n const content = [\n ...message.content,\n ...attachments.map((a) => a.content).flat(),\n ];\n const msg: LanguageModelV1Message = {\n ...(includeId ? { unstable_id: (message as ThreadMessage).id } : {}),\n role: \"user\",\n content: content.map(\n (\n part,\n ):\n | LanguageModelV1TextPart\n | LanguageModelV1ImagePart\n | LanguageModelV1FilePart => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return part;\n }\n\n case \"image\": {\n return {\n type: \"image\",\n image: new URL(part.image),\n };\n }\n\n case \"file\": {\n return {\n type: \"file\",\n data: new URL(part.data),\n mimeType: part.mimeType,\n };\n }\n\n default: {\n const unhandledType: \"audio\" = type;\n throw new Error(\n `Unspported content part type: ${unhandledType}`,\n );\n }\n }\n },\n ),\n };\n return [msg];\n }\n\n case \"assistant\": {\n const splitter = assistantMessageSplitter();\n for (const part of message.content) {\n const type = part.type;\n switch (type) {\n case \"reasoning\":\n case \"source\": {\n break; // reasoning and source parts are omitted\n }\n\n case \"text\": {\n splitter.addTextContentPart(part);\n break;\n }\n case \"tool-call\": {\n splitter.addToolCallPart(part);\n break;\n }\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled content part type: ${unhandledType}`);\n }\n }\n }\n return splitter.getMessages();\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n });\n}\n"],"mappings":"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","names":["message"]}
1
+ {"version":3,"sources":["../../../../src/runtimes/edge/converters/toLanguageModelMessages.ts"],"sourcesContent":["import {\n LanguageModelV1FilePart,\n LanguageModelV1ImagePart,\n LanguageModelV1Message,\n LanguageModelV1TextPart,\n LanguageModelV1ToolCallPart,\n LanguageModelV1ToolResultPart,\n} from \"@ai-sdk/provider\";\nimport {\n CoreMessage,\n ThreadMessage,\n TextContentPart,\n CoreToolCallContentPart,\n} from \"../../../types/AssistantTypes\";\n\nconst assistantMessageSplitter = () => {\n const stash: LanguageModelV1Message[] = [];\n let assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (LanguageModelV1TextPart | LanguageModelV1ToolCallPart)[],\n };\n let toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n\n return {\n addTextContentPart: (part: TextContentPart) => {\n if (toolMessage.content.length > 0) {\n stash.push(assistantMessage);\n stash.push(toolMessage);\n\n assistantMessage = {\n role: \"assistant\" as const,\n content: [] as (\n | LanguageModelV1TextPart\n | LanguageModelV1ToolCallPart\n )[],\n };\n\n toolMessage = {\n role: \"tool\" as const,\n content: [] as LanguageModelV1ToolResultPart[],\n };\n }\n\n assistantMessage.content.push(part);\n },\n addToolCallPart: (part: CoreToolCallContentPart) => {\n assistantMessage.content.push({\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n });\n\n toolMessage.content.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n result:\n part.result === undefined\n ? \"Error: tool is has no configured code to run\"\n : part.result,\n isError: part.isError ?? part.result === undefined,\n });\n },\n getMessages: () => {\n if (toolMessage.content.length > 0) {\n return [...stash, assistantMessage, toolMessage];\n }\n\n return [...stash, assistantMessage];\n },\n };\n};\n\nexport function toLanguageModelMessages(\n message: readonly CoreMessage[] | readonly ThreadMessage[],\n options: { unstable_includeId?: boolean | undefined } = {},\n): LanguageModelV1Message[] {\n const includeId = options.unstable_includeId ?? false;\n return message.flatMap((message) => {\n const role = message.role;\n switch (role) {\n case \"system\": {\n return [\n {\n ...(includeId\n ? { unstable_id: (message as ThreadMessage).id }\n : {}),\n role: \"system\",\n content: message.content[0].text,\n },\n ];\n }\n\n case \"user\": {\n const attachments = \"attachments\" in message ? message.attachments : [];\n const content = [\n ...message.content,\n ...attachments.map((a) => a.content).flat(),\n ];\n const msg: LanguageModelV1Message = {\n ...(includeId ? { unstable_id: (message as ThreadMessage).id } : {}),\n role: \"user\",\n content: content.map(\n (\n part,\n ):\n | LanguageModelV1TextPart\n | LanguageModelV1ImagePart\n | LanguageModelV1FilePart => {\n const type = part.type;\n switch (type) {\n case \"text\": {\n return part;\n }\n\n case \"image\": {\n return {\n type: \"image\",\n image: new URL(part.image),\n };\n }\n\n case \"file\": {\n return {\n type: \"file\",\n data: new URL(part.data),\n mimeType: part.mimeType,\n };\n }\n\n default: {\n const unhandledType: \"audio\" = type;\n throw new Error(\n `Unspported content part type: ${unhandledType}`,\n );\n }\n }\n },\n ),\n };\n return [msg];\n }\n\n case \"assistant\": {\n const splitter = assistantMessageSplitter();\n for (const part of message.content) {\n const type = part.type;\n switch (type) {\n case \"reasoning\":\n case \"source\":\n case \"file\": {\n break; // reasoning, source, and file parts are omitted\n }\n\n case \"text\": {\n splitter.addTextContentPart(part);\n break;\n }\n case \"tool-call\": {\n splitter.addToolCallPart(part);\n break;\n }\n default: {\n const unhandledType: never = type;\n throw new Error(`Unhandled content part type: ${unhandledType}`);\n }\n }\n }\n return splitter.getMessages();\n }\n\n default: {\n const unhandledRole: never = role;\n throw new Error(`Unknown message role: ${unhandledRole}`);\n }\n }\n });\n}\n"],"mappings":"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","names":["message"]}
@@ -1,9 +1,9 @@
1
1
  import { LanguageModelV1, LanguageModelV1ToolChoice, LanguageModelV1Prompt } from "@ai-sdk/provider";
2
2
  import { CoreMessage, ThreadMessage, ThreadStep } from "../../types/AssistantTypes";
3
3
  import { EdgeRuntimeRequestOptionsSchema } from "./EdgeRuntimeRequestOptions";
4
- import { ToolResultStreamPart } from "./streams/toolResultStream";
5
4
  import { LanguageModelConfig, LanguageModelV1CallSettings, Tool } from "../../model-context/ModelContextTypes";
6
5
  import { z } from "zod";
6
+ import { AssistantStreamChunk } from "assistant-stream";
7
7
  type FinishResult = {
8
8
  messages: readonly (CoreMessage | ThreadMessage)[];
9
9
  metadata: {
@@ -23,7 +23,7 @@ type GetEdgeRuntimeStreamOptions = {
23
23
  requestData: z.infer<typeof EdgeRuntimeRequestOptionsSchema>;
24
24
  options: CreateEdgeRuntimeAPIOptions;
25
25
  };
26
- export declare const getEdgeRuntimeStream: ({ abortSignal, requestData: unsafeRequest, options: { model: modelOrCreator, system: serverSystem, tools: serverTools, toolChoice, onFinish, ...unsafeSettings }, }: GetEdgeRuntimeStreamOptions) => Promise<ReadableStream<ToolResultStreamPart>>;
26
+ export declare const getEdgeRuntimeStream: ({ abortSignal, requestData: unsafeRequest, options: { model: modelOrCreator, system: serverSystem, tools: serverTools, toolChoice, onFinish, ...unsafeSettings }, }: GetEdgeRuntimeStreamOptions) => Promise<ReadableStream<AssistantStreamChunk>>;
27
27
  export declare namespace getEdgeRuntimeResponse {
28
28
  export type { GetEdgeRuntimeStreamOptions as Options };
29
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createEdgeRuntimeAPI.d.ts","sourceRoot":"","sources":["../../../src/runtimes/edge/createEdgeRuntimeAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,yBAAyB,EAEzB,qBAAqB,EAEtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAG9E,OAAO,EAEL,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAE3B,IAAI,EACL,MAAM,uCAAuC,CAAC;AAG/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,SAAS,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC;IACnD,QAAQ,EAAE;QACR,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;KAC9B,CAAC;CACH,CAAC;AAEF,KAAK,oBAAoB,GAAG,CAC1B,MAAM,EAAE,mBAAmB,KACxB,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC;AAEhD,MAAM,MAAM,2BAA2B,GAAG,2BAA2B,GAAG;IACtE,KAAK,EAAE,eAAe,GAAG,oBAAoB,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CAC3C,CAAC;AAUF,KAAK,2BAA2B,GAAG;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;IAC7D,OAAO,EAAE,2BAA2B,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,qKAWxC,2BAA2B,kDA2G7B,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,sBAAsB,CAAC;IAC9C,YAAY,EAAE,2BAA2B,IAAI,OAAO,EAAE,CAAC;CACxD;AAED,eAAO,MAAM,sBAAsB,GACjC,SAAS,sBAAsB,CAAC,OAAO,sBAaxC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,SAAS,2BAA2B;oBACjD,OAAO;CAM7B,CAAC;AA+BH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,SAAS,WAAW,EAAE,GAC/B,qBAAqB,CASvB"}
1
+ {"version":3,"file":"createEdgeRuntimeAPI.d.ts","sourceRoot":"","sources":["../../../src/runtimes/edge/createEdgeRuntimeAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,yBAAyB,EAEzB,qBAAqB,EAEtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,WAAW,EACX,aAAa,EACb,UAAU,EACX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAI9E,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAE3B,IAAI,EACL,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAGL,oBAAoB,EAErB,MAAM,kBAAkB,CAAC;AAG1B,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,SAAS,CAAC,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC;IACnD,QAAQ,EAAE;QACR,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;KAC9B,CAAC;CACH,CAAC;AAEF,KAAK,oBAAoB,GAAG,CAC1B,MAAM,EAAE,mBAAmB,KACxB,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC;AAEhD,MAAM,MAAM,2BAA2B,GAAG,2BAA2B,GAAG;IACtE,KAAK,EAAE,eAAe,GAAG,oBAAoB,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACvC,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CAC3C,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;IAC7D,OAAO,EAAE,2BAA2B,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,qKAWxC,2BAA2B,kDAkG7B,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,sBAAsB,CAAC;IAC9C,YAAY,EAAE,2BAA2B,IAAI,OAAO,EAAE,CAAC;CACxD;AAED,eAAO,MAAM,sBAAsB,GACjC,SAAS,sBAAsB,CAAC,OAAO,sBASxC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,SAAS,2BAA2B;oBACjD,OAAO;CAM7B,CAAC;AA+BH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,SAAS,WAAW,EAAE,GAC/B,qBAAqB,CASvB"}
@@ -26,21 +26,13 @@ __export(createEdgeRuntimeAPI_exports, {
26
26
  getEdgeRuntimeStream: () => getEdgeRuntimeStream
27
27
  });
28
28
  module.exports = __toCommonJS(createEdgeRuntimeAPI_exports);
29
- var import_assistantEncoderStream = require("./streams/assistantEncoderStream.js");
30
29
  var import_EdgeRuntimeRequestOptions = require("./EdgeRuntimeRequestOptions.js");
31
30
  var import_toLanguageModelMessages = require("./converters/toLanguageModelMessages.js");
32
31
  var import_toLanguageModelTools = require("./converters/toLanguageModelTools.js");
33
32
  var import_toolResultStream = require("./streams/toolResultStream.js");
34
- var import_runResultStream = require("./streams/runResultStream.js");
35
33
  var import_ModelContextTypes = require("../../model-context/ModelContextTypes.js");
36
- var import_streamPartEncoderStream = require("./streams/utils/streamPartEncoderStream.js");
37
- var voidStream = () => {
38
- return new WritableStream({
39
- abort(reason) {
40
- console.error("Server stream processing aborted:", reason);
41
- }
42
- });
43
- };
34
+ var import_assistant_stream = require("assistant-stream");
35
+ var import_ai_sdk = require("assistant-stream/ai-sdk");
44
36
  var getEdgeRuntimeStream = async ({
45
37
  abortSignal,
46
38
  requestData: unsafeRequest,
@@ -88,7 +80,7 @@ var getEdgeRuntimeStream = async ({
88
80
  tools: lmServerTools.concat(clientTools),
89
81
  ...toolChoice ? { toolChoice } : void 0
90
82
  });
91
- stream = streamResult.stream;
83
+ stream = streamResult.stream.pipeThrough(new import_ai_sdk.LanguageModelV1StreamDecoder());
92
84
  const canExecuteTools = hasServerTools && toolChoice?.type !== "none";
93
85
  if (canExecuteTools) {
94
86
  stream = stream.pipeThrough((0, import_toolResultStream.toolResultStream)(serverTools, abortSignal));
@@ -99,12 +91,12 @@ var getEdgeRuntimeStream = async ({
99
91
  let serverStream = tees[1];
100
92
  if (onFinish) {
101
93
  let lastChunk;
102
- serverStream = serverStream.pipeThrough((0, import_runResultStream.runResultStream)()).pipeThrough(
103
- new TransformStream({
104
- transform(chunk) {
94
+ serverStream.pipeThrough(new import_assistant_stream.AssistantMessageAccumulator()).pipeTo(
95
+ new WritableStream({
96
+ write(chunk) {
105
97
  lastChunk = chunk;
106
98
  },
107
- flush() {
99
+ close() {
108
100
  if (!lastChunk?.status || lastChunk.status.type === "running")
109
101
  return;
110
102
  const resultingMessages = [
@@ -115,42 +107,33 @@ var getEdgeRuntimeStream = async ({
115
107
  role: "assistant",
116
108
  content: lastChunk.content,
117
109
  status: lastChunk.status,
118
- metadata: {
119
- unstable_data: lastChunk.metadata?.unstable_data ?? [],
120
- unstable_annotations: lastChunk.metadata?.unstable_annotations ?? [],
121
- steps: lastChunk.metadata?.steps ?? [],
122
- custom: lastChunk.metadata?.custom ?? {}
123
- }
110
+ metadata: lastChunk.metadata
124
111
  }
125
112
  ];
126
113
  onFinish({
127
114
  messages: resultingMessages,
128
115
  metadata: {
129
- // TODO
130
- // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain
131
- steps: lastChunk.metadata?.steps
116
+ steps: lastChunk.metadata.steps
132
117
  }
133
118
  });
119
+ },
120
+ abort(e) {
121
+ console.error("Server stream processing error:", e);
134
122
  }
135
123
  })
136
124
  );
137
125
  }
138
- serverStream.pipeTo(voidStream()).catch((e) => {
139
- console.error("Server stream processing error:", e);
140
- });
141
126
  }
142
127
  return stream;
143
128
  };
144
129
  var getEdgeRuntimeResponse = async (options) => {
145
130
  const stream = await getEdgeRuntimeStream(options);
146
- return new Response(
147
- stream.pipeThrough((0, import_assistantEncoderStream.assistantEncoderStream)()).pipeThrough((0, import_streamPartEncoderStream.streamPartEncoderStream)()),
148
- {
149
- headers: {
150
- "Content-Type": "text/plain; charset=utf-8"
151
- }
131
+ return new Response(stream.pipeThrough(new import_assistant_stream.DataStreamEncoder()), {
132
+ headers: {
133
+ "Content-Type": "text/plain; charset=utf-8",
134
+ "x-vercel-ai-data-stream": "v1"
152
135
  }
153
- );
136
+ });
154
137
  };
155
138
  var createEdgeRuntimeAPI = (options) => ({
156
139
  POST: async (request) => getEdgeRuntimeResponse({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/runtimes/edge/createEdgeRuntimeAPI.ts"],"sourcesContent":["import {\n LanguageModelV1,\n LanguageModelV1ToolChoice,\n LanguageModelV1FunctionTool,\n LanguageModelV1Prompt,\n LanguageModelV1CallOptions,\n} from \"@ai-sdk/provider\";\nimport { CoreMessage, ThreadMessage, ThreadStep } from \"../../types/AssistantTypes\";\nimport { assistantEncoderStream } from \"./streams/assistantEncoderStream\";\nimport { EdgeRuntimeRequestOptionsSchema } from \"./EdgeRuntimeRequestOptions\";\nimport { toLanguageModelMessages } from \"./converters/toLanguageModelMessages\";\nimport { toLanguageModelTools } from \"./converters/toLanguageModelTools\";\nimport {\n toolResultStream,\n ToolResultStreamPart,\n} from \"./streams/toolResultStream\";\nimport { runResultStream } from \"./streams/runResultStream\";\nimport {\n LanguageModelConfig,\n LanguageModelV1CallSettings,\n LanguageModelV1CallSettingsSchema,\n Tool,\n} from \"../../model-context/ModelContextTypes\";\nimport { CoreChatModelRunResult } from \"../local/ChatModelAdapter\";\nimport { streamPartEncoderStream } from \"./streams/utils/streamPartEncoderStream\";\nimport { z } from \"zod\";\n\ntype FinishResult = {\n messages: readonly (CoreMessage | ThreadMessage)[];\n metadata: {\n steps: readonly ThreadStep[];\n };\n};\n\ntype LanguageModelCreator = (\n config: LanguageModelConfig,\n) => Promise<LanguageModelV1> | LanguageModelV1;\n\nexport type CreateEdgeRuntimeAPIOptions = LanguageModelV1CallSettings & {\n model: LanguageModelV1 | LanguageModelCreator;\n system?: string;\n tools?: Record<string, Tool<any, any>>;\n toolChoice?: LanguageModelV1ToolChoice;\n onFinish?: (result: FinishResult) => void;\n};\n\nconst voidStream = () => {\n return new WritableStream({\n abort(reason) {\n console.error(\"Server stream processing aborted:\", reason);\n },\n });\n};\n\ntype GetEdgeRuntimeStreamOptions = {\n abortSignal: AbortSignal;\n requestData: z.infer<typeof EdgeRuntimeRequestOptionsSchema>;\n options: CreateEdgeRuntimeAPIOptions;\n};\n\nexport const getEdgeRuntimeStream = async ({\n abortSignal,\n requestData: unsafeRequest,\n options: {\n model: modelOrCreator,\n system: serverSystem,\n tools: serverTools = {},\n toolChoice,\n onFinish,\n ...unsafeSettings\n },\n}: GetEdgeRuntimeStreamOptions) => {\n const settings = LanguageModelV1CallSettingsSchema.parse(unsafeSettings);\n const lmServerTools = toLanguageModelTools(serverTools);\n const hasServerTools = Object.values(serverTools).some((v) => !!v.execute);\n\n const {\n system: clientSystem,\n tools: clientTools = [],\n messages,\n apiKey,\n baseUrl,\n modelName,\n ...callSettings\n } = EdgeRuntimeRequestOptionsSchema.parse(unsafeRequest);\n\n const systemMessages = [];\n if (serverSystem) systemMessages.push(serverSystem);\n if (clientSystem) systemMessages.push(clientSystem);\n const system = systemMessages.join(\"\\n\\n\");\n\n for (const clientTool of clientTools) {\n if (serverTools?.[clientTool.name]) {\n throw new Error(\n `Tool ${clientTool.name} was defined in both the client and server tools. This is not allowed.`,\n );\n }\n }\n\n const model =\n typeof modelOrCreator === \"function\"\n ? await modelOrCreator({ apiKey, baseUrl, modelName })\n : modelOrCreator;\n\n let stream: ReadableStream<ToolResultStreamPart>;\n const streamResult = await streamMessage({\n ...(settings as Partial<StreamMessageOptions>),\n ...callSettings,\n\n model,\n abortSignal,\n\n ...(!!system ? { system } : undefined),\n messages,\n tools: lmServerTools.concat(clientTools as LanguageModelV1FunctionTool[]),\n ...(toolChoice ? { toolChoice } : undefined),\n });\n stream = streamResult.stream;\n\n // add tool results if we have server tools\n const canExecuteTools = hasServerTools && toolChoice?.type !== \"none\";\n if (canExecuteTools) {\n stream = stream.pipeThrough(toolResultStream(serverTools, abortSignal));\n }\n\n if (canExecuteTools || onFinish) {\n // tee the stream to process server tools and onFinish asap\n const tees = stream.tee();\n stream = tees[0];\n let serverStream = tees[1];\n\n if (onFinish) {\n let lastChunk: CoreChatModelRunResult | undefined;\n serverStream = serverStream.pipeThrough(runResultStream()).pipeThrough(\n new TransformStream({\n transform(chunk) {\n lastChunk = chunk;\n },\n flush() {\n if (!lastChunk?.status || lastChunk.status.type === \"running\")\n return;\n\n const resultingMessages = [\n ...messages,\n {\n id: \"DEFAULT\",\n createdAt: new Date(),\n role: \"assistant\",\n content: lastChunk.content,\n status: lastChunk.status,\n metadata: {\n unstable_data: lastChunk.metadata?.unstable_data ?? [],\n unstable_annotations: lastChunk.metadata?.unstable_annotations ?? [],\n steps: lastChunk.metadata?.steps ?? [],\n custom: lastChunk.metadata?.custom ?? {},\n }\n } satisfies ThreadMessage,\n ];\n onFinish({\n messages: resultingMessages,\n metadata: {\n // TODO\n // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n steps: lastChunk.metadata?.steps!,\n },\n });\n },\n }),\n );\n }\n\n // drain the server stream\n serverStream.pipeTo(voidStream()).catch((e) => {\n console.error(\"Server stream processing error:\", e);\n });\n }\n\n return stream;\n};\n\nexport declare namespace getEdgeRuntimeResponse {\n export type { GetEdgeRuntimeStreamOptions as Options };\n}\n\nexport const getEdgeRuntimeResponse = async (\n options: getEdgeRuntimeResponse.Options,\n) => {\n const stream = await getEdgeRuntimeStream(options);\n return new Response(\n stream\n .pipeThrough(assistantEncoderStream())\n .pipeThrough(streamPartEncoderStream()),\n {\n headers: {\n \"Content-Type\": \"text/plain; charset=utf-8\",\n },\n },\n );\n};\n\nexport const createEdgeRuntimeAPI = (options: CreateEdgeRuntimeAPIOptions) => ({\n POST: async (request: Request) =>\n getEdgeRuntimeResponse({\n abortSignal: request.signal,\n requestData: await request.json(),\n options,\n }),\n});\n\ntype StreamMessageOptions = LanguageModelV1CallSettings & {\n model: LanguageModelV1;\n system?: string;\n messages: readonly CoreMessage[];\n tools?: LanguageModelV1FunctionTool[];\n toolChoice?: LanguageModelV1ToolChoice;\n abortSignal: AbortSignal;\n};\n\nasync function streamMessage({\n model,\n system,\n messages,\n tools,\n toolChoice,\n ...options\n}: StreamMessageOptions) {\n return model.doStream({\n inputFormat: \"messages\",\n mode: {\n type: \"regular\",\n ...(tools ? { tools } : undefined),\n ...(toolChoice ? { toolChoice } : undefined),\n },\n prompt: convertToLanguageModelPrompt(system, messages),\n ...(options as Partial<LanguageModelV1CallOptions>),\n });\n}\n\nexport function convertToLanguageModelPrompt(\n system: string | undefined,\n messages: readonly CoreMessage[],\n): LanguageModelV1Prompt {\n const languageModelMessages: LanguageModelV1Prompt = [];\n\n if (system != null) {\n languageModelMessages.push({ role: \"system\", content: system });\n }\n languageModelMessages.push(...toLanguageModelMessages(messages));\n\n return languageModelMessages;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/runtimes/edge/createEdgeRuntimeAPI.ts"],"sourcesContent":["import {\n LanguageModelV1,\n LanguageModelV1ToolChoice,\n LanguageModelV1FunctionTool,\n LanguageModelV1Prompt,\n LanguageModelV1CallOptions,\n} from \"@ai-sdk/provider\";\nimport {\n CoreMessage,\n ThreadMessage,\n ThreadStep,\n} from \"../../types/AssistantTypes\";\nimport { EdgeRuntimeRequestOptionsSchema } from \"./EdgeRuntimeRequestOptions\";\nimport { toLanguageModelMessages } from \"./converters/toLanguageModelMessages\";\nimport { toLanguageModelTools } from \"./converters/toLanguageModelTools\";\nimport { toolResultStream } from \"./streams/toolResultStream\";\nimport {\n LanguageModelConfig,\n LanguageModelV1CallSettings,\n LanguageModelV1CallSettingsSchema,\n Tool,\n} from \"../../model-context/ModelContextTypes\";\nimport { z } from \"zod\";\nimport {\n AssistantMessage,\n AssistantMessageAccumulator,\n AssistantStreamChunk,\n DataStreamEncoder,\n} from \"assistant-stream\";\nimport { LanguageModelV1StreamDecoder } from \"assistant-stream/ai-sdk\";\n\ntype FinishResult = {\n messages: readonly (CoreMessage | ThreadMessage)[];\n metadata: {\n steps: readonly ThreadStep[];\n };\n};\n\ntype LanguageModelCreator = (\n config: LanguageModelConfig,\n) => Promise<LanguageModelV1> | LanguageModelV1;\n\nexport type CreateEdgeRuntimeAPIOptions = LanguageModelV1CallSettings & {\n model: LanguageModelV1 | LanguageModelCreator;\n system?: string;\n tools?: Record<string, Tool<any, any>>;\n toolChoice?: LanguageModelV1ToolChoice;\n onFinish?: (result: FinishResult) => void;\n};\n\ntype GetEdgeRuntimeStreamOptions = {\n abortSignal: AbortSignal;\n requestData: z.infer<typeof EdgeRuntimeRequestOptionsSchema>;\n options: CreateEdgeRuntimeAPIOptions;\n};\n\nexport const getEdgeRuntimeStream = async ({\n abortSignal,\n requestData: unsafeRequest,\n options: {\n model: modelOrCreator,\n system: serverSystem,\n tools: serverTools = {},\n toolChoice,\n onFinish,\n ...unsafeSettings\n },\n}: GetEdgeRuntimeStreamOptions) => {\n const settings = LanguageModelV1CallSettingsSchema.parse(unsafeSettings);\n const lmServerTools = toLanguageModelTools(serverTools);\n const hasServerTools = Object.values(serverTools).some((v) => !!v.execute);\n\n const {\n system: clientSystem,\n tools: clientTools = [],\n messages,\n apiKey,\n baseUrl,\n modelName,\n ...callSettings\n } = EdgeRuntimeRequestOptionsSchema.parse(unsafeRequest);\n\n const systemMessages = [];\n if (serverSystem) systemMessages.push(serverSystem);\n if (clientSystem) systemMessages.push(clientSystem);\n const system = systemMessages.join(\"\\n\\n\");\n\n for (const clientTool of clientTools) {\n if (serverTools?.[clientTool.name]) {\n throw new Error(\n `Tool ${clientTool.name} was defined in both the client and server tools. This is not allowed.`,\n );\n }\n }\n\n const model =\n typeof modelOrCreator === \"function\"\n ? await modelOrCreator({ apiKey, baseUrl, modelName })\n : modelOrCreator;\n\n let stream: ReadableStream<AssistantStreamChunk>;\n const streamResult = await streamMessage({\n ...(settings as Partial<StreamMessageOptions>),\n ...callSettings,\n\n model,\n abortSignal,\n\n ...(!!system ? { system } : undefined),\n messages,\n tools: lmServerTools.concat(clientTools as LanguageModelV1FunctionTool[]),\n ...(toolChoice ? { toolChoice } : undefined),\n });\n stream = streamResult.stream.pipeThrough(new LanguageModelV1StreamDecoder());\n\n // add tool results if we have server tools\n const canExecuteTools = hasServerTools && toolChoice?.type !== \"none\";\n if (canExecuteTools) {\n stream = stream.pipeThrough(toolResultStream(serverTools, abortSignal));\n }\n\n if (canExecuteTools || onFinish) {\n // tee the stream to process server tools and onFinish asap\n const tees = stream.tee();\n stream = tees[0];\n let serverStream = tees[1];\n\n if (onFinish) {\n let lastChunk: AssistantMessage | undefined;\n serverStream.pipeThrough(new AssistantMessageAccumulator()).pipeTo(\n new WritableStream({\n write(chunk) {\n lastChunk = chunk;\n },\n close() {\n if (!lastChunk?.status || lastChunk.status.type === \"running\")\n return;\n\n const resultingMessages = [\n ...messages,\n {\n id: \"DEFAULT\",\n createdAt: new Date(),\n role: \"assistant\",\n content: lastChunk.content,\n status: lastChunk.status,\n metadata: lastChunk.metadata,\n } satisfies ThreadMessage,\n ];\n onFinish({\n messages: resultingMessages,\n metadata: {\n steps: lastChunk.metadata.steps,\n },\n });\n },\n abort(e) {\n console.error(\"Server stream processing error:\", e);\n },\n }),\n );\n }\n }\n\n return stream;\n};\n\nexport declare namespace getEdgeRuntimeResponse {\n export type { GetEdgeRuntimeStreamOptions as Options };\n}\n\nexport const getEdgeRuntimeResponse = async (\n options: getEdgeRuntimeResponse.Options,\n) => {\n const stream = await getEdgeRuntimeStream(options);\n return new Response(stream.pipeThrough(new DataStreamEncoder()), {\n headers: {\n \"Content-Type\": \"text/plain; charset=utf-8\",\n \"x-vercel-ai-data-stream\": \"v1\",\n },\n });\n};\n\nexport const createEdgeRuntimeAPI = (options: CreateEdgeRuntimeAPIOptions) => ({\n POST: async (request: Request) =>\n getEdgeRuntimeResponse({\n abortSignal: request.signal,\n requestData: await request.json(),\n options,\n }),\n});\n\ntype StreamMessageOptions = LanguageModelV1CallSettings & {\n model: LanguageModelV1;\n system?: string;\n messages: readonly CoreMessage[];\n tools?: LanguageModelV1FunctionTool[];\n toolChoice?: LanguageModelV1ToolChoice;\n abortSignal: AbortSignal;\n};\n\nasync function streamMessage({\n model,\n system,\n messages,\n tools,\n toolChoice,\n ...options\n}: StreamMessageOptions) {\n return model.doStream({\n inputFormat: \"messages\",\n mode: {\n type: \"regular\",\n ...(tools ? { tools } : undefined),\n ...(toolChoice ? { toolChoice } : undefined),\n },\n prompt: convertToLanguageModelPrompt(system, messages),\n ...(options as Partial<LanguageModelV1CallOptions>),\n });\n}\n\nexport function convertToLanguageModelPrompt(\n system: string | undefined,\n messages: readonly CoreMessage[],\n): LanguageModelV1Prompt {\n const languageModelMessages: LanguageModelV1Prompt = [];\n\n if (system != null) {\n languageModelMessages.push({ role: \"system\", content: system });\n }\n languageModelMessages.push(...toLanguageModelMessages(messages));\n\n return languageModelMessages;\n}\n"],"mappings":"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","names":[]}
@@ -1,23 +1,16 @@
1
1
  // src/runtimes/edge/createEdgeRuntimeAPI.ts
2
- import { assistantEncoderStream } from "./streams/assistantEncoderStream.mjs";
3
2
  import { EdgeRuntimeRequestOptionsSchema } from "./EdgeRuntimeRequestOptions.mjs";
4
3
  import { toLanguageModelMessages } from "./converters/toLanguageModelMessages.mjs";
5
4
  import { toLanguageModelTools } from "./converters/toLanguageModelTools.mjs";
6
- import {
7
- toolResultStream
8
- } from "./streams/toolResultStream.mjs";
9
- import { runResultStream } from "./streams/runResultStream.mjs";
5
+ import { toolResultStream } from "./streams/toolResultStream.mjs";
10
6
  import {
11
7
  LanguageModelV1CallSettingsSchema
12
8
  } from "../../model-context/ModelContextTypes.mjs";
13
- import { streamPartEncoderStream } from "./streams/utils/streamPartEncoderStream.mjs";
14
- var voidStream = () => {
15
- return new WritableStream({
16
- abort(reason) {
17
- console.error("Server stream processing aborted:", reason);
18
- }
19
- });
20
- };
9
+ import {
10
+ AssistantMessageAccumulator,
11
+ DataStreamEncoder
12
+ } from "assistant-stream";
13
+ import { LanguageModelV1StreamDecoder } from "assistant-stream/ai-sdk";
21
14
  var getEdgeRuntimeStream = async ({
22
15
  abortSignal,
23
16
  requestData: unsafeRequest,
@@ -65,7 +58,7 @@ var getEdgeRuntimeStream = async ({
65
58
  tools: lmServerTools.concat(clientTools),
66
59
  ...toolChoice ? { toolChoice } : void 0
67
60
  });
68
- stream = streamResult.stream;
61
+ stream = streamResult.stream.pipeThrough(new LanguageModelV1StreamDecoder());
69
62
  const canExecuteTools = hasServerTools && toolChoice?.type !== "none";
70
63
  if (canExecuteTools) {
71
64
  stream = stream.pipeThrough(toolResultStream(serverTools, abortSignal));
@@ -76,12 +69,12 @@ var getEdgeRuntimeStream = async ({
76
69
  let serverStream = tees[1];
77
70
  if (onFinish) {
78
71
  let lastChunk;
79
- serverStream = serverStream.pipeThrough(runResultStream()).pipeThrough(
80
- new TransformStream({
81
- transform(chunk) {
72
+ serverStream.pipeThrough(new AssistantMessageAccumulator()).pipeTo(
73
+ new WritableStream({
74
+ write(chunk) {
82
75
  lastChunk = chunk;
83
76
  },
84
- flush() {
77
+ close() {
85
78
  if (!lastChunk?.status || lastChunk.status.type === "running")
86
79
  return;
87
80
  const resultingMessages = [
@@ -92,42 +85,33 @@ var getEdgeRuntimeStream = async ({
92
85
  role: "assistant",
93
86
  content: lastChunk.content,
94
87
  status: lastChunk.status,
95
- metadata: {
96
- unstable_data: lastChunk.metadata?.unstable_data ?? [],
97
- unstable_annotations: lastChunk.metadata?.unstable_annotations ?? [],
98
- steps: lastChunk.metadata?.steps ?? [],
99
- custom: lastChunk.metadata?.custom ?? {}
100
- }
88
+ metadata: lastChunk.metadata
101
89
  }
102
90
  ];
103
91
  onFinish({
104
92
  messages: resultingMessages,
105
93
  metadata: {
106
- // TODO
107
- // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain
108
- steps: lastChunk.metadata?.steps
94
+ steps: lastChunk.metadata.steps
109
95
  }
110
96
  });
97
+ },
98
+ abort(e) {
99
+ console.error("Server stream processing error:", e);
111
100
  }
112
101
  })
113
102
  );
114
103
  }
115
- serverStream.pipeTo(voidStream()).catch((e) => {
116
- console.error("Server stream processing error:", e);
117
- });
118
104
  }
119
105
  return stream;
120
106
  };
121
107
  var getEdgeRuntimeResponse = async (options) => {
122
108
  const stream = await getEdgeRuntimeStream(options);
123
- return new Response(
124
- stream.pipeThrough(assistantEncoderStream()).pipeThrough(streamPartEncoderStream()),
125
- {
126
- headers: {
127
- "Content-Type": "text/plain; charset=utf-8"
128
- }
109
+ return new Response(stream.pipeThrough(new DataStreamEncoder()), {
110
+ headers: {
111
+ "Content-Type": "text/plain; charset=utf-8",
112
+ "x-vercel-ai-data-stream": "v1"
129
113
  }
130
- );
114
+ });
131
115
  };
132
116
  var createEdgeRuntimeAPI = (options) => ({
133
117
  POST: async (request) => getEdgeRuntimeResponse({