@assistant-ui/react-ai-sdk 0.10.16 → 0.11.0-alpha.0-alpha

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 (134) hide show
  1. package/dist/frontendTools.js +1 -1
  2. package/dist/frontendTools.js.map +1 -1
  3. package/dist/index.d.ts +0 -5
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +0 -5
  6. package/dist/index.js.map +1 -1
  7. package/dist/ui/getVercelAIMessages.d.ts +2 -2
  8. package/dist/ui/getVercelAIMessages.d.ts.map +1 -1
  9. package/dist/ui/getVercelAIMessages.js.map +1 -1
  10. package/dist/ui/index.d.ts +1 -4
  11. package/dist/ui/index.d.ts.map +1 -1
  12. package/dist/ui/index.js +2 -8
  13. package/dist/ui/index.js.map +1 -1
  14. package/dist/ui/use-chat/useAISDKRuntime.d.ts +7 -0
  15. package/dist/ui/use-chat/useAISDKRuntime.d.ts.map +1 -0
  16. package/dist/ui/use-chat/useAISDKRuntime.js +53 -0
  17. package/dist/ui/use-chat/useAISDKRuntime.js.map +1 -0
  18. package/dist/ui/utils/convertMessage.d.ts +5 -5
  19. package/dist/ui/utils/convertMessage.d.ts.map +1 -1
  20. package/dist/ui/utils/convertMessage.js +115 -86
  21. package/dist/ui/utils/convertMessage.js.map +1 -1
  22. package/dist/ui/utils/sliceMessagesUntil.d.ts +2 -2
  23. package/dist/ui/utils/sliceMessagesUntil.d.ts.map +1 -1
  24. package/dist/ui/utils/sliceMessagesUntil.js.map +1 -1
  25. package/dist/ui/utils/toCreateMessage.d.ts +2 -2
  26. package/dist/ui/utils/toCreateMessage.d.ts.map +1 -1
  27. package/dist/ui/utils/toCreateMessage.js +29 -17
  28. package/dist/ui/utils/toCreateMessage.js.map +1 -1
  29. package/dist/ui/utils/vercelAttachmentAdapter.js +1 -1
  30. package/dist/ui/utils/vercelAttachmentAdapter.js.map +1 -1
  31. package/package.json +14 -14
  32. package/src/frontendTools.ts +1 -1
  33. package/src/index.ts +0 -5
  34. package/src/ui/getVercelAIMessages.tsx +2 -2
  35. package/src/ui/index.ts +1 -4
  36. package/src/ui/use-chat/{useVercelUseChatRuntime.tsx → useAISDKRuntime.tsx} +13 -39
  37. package/src/ui/utils/convertMessage.ts +162 -117
  38. package/src/ui/utils/sliceMessagesUntil.tsx +2 -2
  39. package/src/ui/utils/toCreateMessage.ts +45 -20
  40. package/src/ui/utils/vercelAttachmentAdapter.ts +1 -1
  41. package/dist/converters/fromLanguageModelTools.d.ts +0 -7
  42. package/dist/converters/fromLanguageModelTools.d.ts.map +0 -1
  43. package/dist/converters/fromLanguageModelTools.js +0 -16
  44. package/dist/converters/fromLanguageModelTools.js.map +0 -1
  45. package/dist/converters/index.d.ts +0 -4
  46. package/dist/converters/index.d.ts.map +0 -1
  47. package/dist/converters/index.js +0 -10
  48. package/dist/converters/index.js.map +0 -1
  49. package/dist/converters/toLanguageModelMessages.d.ts +0 -9
  50. package/dist/converters/toLanguageModelMessages.d.ts.map +0 -1
  51. package/dist/converters/toLanguageModelMessages.js +0 -143
  52. package/dist/converters/toLanguageModelMessages.js.map +0 -1
  53. package/dist/converters/toLanguageModelTools.d.ts +0 -7
  54. package/dist/converters/toLanguageModelTools.d.ts.map +0 -1
  55. package/dist/converters/toLanguageModelTools.js +0 -15
  56. package/dist/converters/toLanguageModelTools.js.map +0 -1
  57. package/dist/dangerous-in-browser/DangerousInBrowserAdapter.d.ts +0 -9
  58. package/dist/dangerous-in-browser/DangerousInBrowserAdapter.d.ts.map +0 -1
  59. package/dist/dangerous-in-browser/DangerousInBrowserAdapter.js +0 -38
  60. package/dist/dangerous-in-browser/DangerousInBrowserAdapter.js.map +0 -1
  61. package/dist/dangerous-in-browser/createEdgeRuntimeAPI.d.ts +0 -56
  62. package/dist/dangerous-in-browser/createEdgeRuntimeAPI.d.ts.map +0 -1
  63. package/dist/dangerous-in-browser/createEdgeRuntimeAPI.js +0 -65
  64. package/dist/dangerous-in-browser/createEdgeRuntimeAPI.js.map +0 -1
  65. package/dist/dangerous-in-browser/index.d.ts +0 -2
  66. package/dist/dangerous-in-browser/index.d.ts.map +0 -1
  67. package/dist/dangerous-in-browser/index.js +0 -8
  68. package/dist/dangerous-in-browser/index.js.map +0 -1
  69. package/dist/dangerous-in-browser/useDangerousInBrowserRuntime.d.ts +0 -5
  70. package/dist/dangerous-in-browser/useDangerousInBrowserRuntime.d.ts.map +0 -1
  71. package/dist/dangerous-in-browser/useDangerousInBrowserRuntime.js +0 -21
  72. package/dist/dangerous-in-browser/useDangerousInBrowserRuntime.js.map +0 -1
  73. package/dist/rsc/RSCDisplay.d.ts +0 -3
  74. package/dist/rsc/RSCDisplay.d.ts.map +0 -1
  75. package/dist/rsc/RSCDisplay.js +0 -26
  76. package/dist/rsc/RSCDisplay.js.map +0 -1
  77. package/dist/rsc/VercelRSCAdapter.d.ts +0 -17
  78. package/dist/rsc/VercelRSCAdapter.d.ts.map +0 -1
  79. package/dist/rsc/VercelRSCAdapter.js +0 -1
  80. package/dist/rsc/VercelRSCAdapter.js.map +0 -1
  81. package/dist/rsc/VercelRSCMessage.d.ts +0 -8
  82. package/dist/rsc/VercelRSCMessage.d.ts.map +0 -1
  83. package/dist/rsc/VercelRSCMessage.js +0 -2
  84. package/dist/rsc/VercelRSCMessage.js.map +0 -1
  85. package/dist/rsc/index.d.ts +0 -5
  86. package/dist/rsc/index.d.ts.map +0 -1
  87. package/dist/rsc/index.js +0 -8
  88. package/dist/rsc/index.js.map +0 -1
  89. package/dist/rsc/useVercelRSCRuntime.d.ts +0 -3
  90. package/dist/rsc/useVercelRSCRuntime.d.ts.map +0 -1
  91. package/dist/rsc/useVercelRSCRuntime.js +0 -57
  92. package/dist/rsc/useVercelRSCRuntime.js.map +0 -1
  93. package/dist/rsc/utils/RSCThreadExtras.d.ts +0 -8
  94. package/dist/rsc/utils/RSCThreadExtras.d.ts.map +0 -1
  95. package/dist/rsc/utils/RSCThreadExtras.js +0 -8
  96. package/dist/rsc/utils/RSCThreadExtras.js.map +0 -1
  97. package/dist/ui/use-assistant/useVercelUseAssistantRuntime.d.ts +0 -7
  98. package/dist/ui/use-assistant/useVercelUseAssistantRuntime.d.ts.map +0 -1
  99. package/dist/ui/use-assistant/useVercelUseAssistantRuntime.js +0 -48
  100. package/dist/ui/use-assistant/useVercelUseAssistantRuntime.js.map +0 -1
  101. package/dist/ui/use-chat/useVercelUseChatRuntime.d.ts +0 -8
  102. package/dist/ui/use-chat/useVercelUseChatRuntime.d.ts.map +0 -1
  103. package/dist/ui/use-chat/useVercelUseChatRuntime.js +0 -75
  104. package/dist/ui/use-chat/useVercelUseChatRuntime.js.map +0 -1
  105. package/dist/ui/utils/useInputSync.d.ts +0 -6
  106. package/dist/ui/utils/useInputSync.d.ts.map +0 -1
  107. package/dist/ui/utils/useInputSync.js +0 -18
  108. package/dist/ui/utils/useInputSync.js.map +0 -1
  109. package/dist/useChatRuntime.d.ts +0 -16
  110. package/dist/useChatRuntime.d.ts.map +0 -1
  111. package/dist/useChatRuntime.js +0 -106
  112. package/dist/useChatRuntime.js.map +0 -1
  113. package/dist/useCloudRuntime.d.ts +0 -12
  114. package/dist/useCloudRuntime.d.ts.map +0 -1
  115. package/dist/useCloudRuntime.js +0 -15
  116. package/dist/useCloudRuntime.js.map +0 -1
  117. package/src/converters/fromLanguageModelTools.ts +0 -19
  118. package/src/converters/index.ts +0 -3
  119. package/src/converters/toLanguageModelMessages.ts +0 -185
  120. package/src/converters/toLanguageModelTools.ts +0 -21
  121. package/src/dangerous-in-browser/DangerousInBrowserAdapter.ts +0 -41
  122. package/src/dangerous-in-browser/createEdgeRuntimeAPI.ts +0 -145
  123. package/src/dangerous-in-browser/index.ts +0 -4
  124. package/src/dangerous-in-browser/useDangerousInBrowserRuntime.ts +0 -26
  125. package/src/rsc/RSCDisplay.tsx +0 -23
  126. package/src/rsc/VercelRSCAdapter.tsx +0 -21
  127. package/src/rsc/VercelRSCMessage.tsx +0 -9
  128. package/src/rsc/index.ts +0 -4
  129. package/src/rsc/useVercelRSCRuntime.tsx +0 -70
  130. package/src/rsc/utils/RSCThreadExtras.tsx +0 -11
  131. package/src/ui/use-assistant/useVercelUseAssistantRuntime.tsx +0 -60
  132. package/src/ui/utils/useInputSync.tsx +0 -26
  133. package/src/useChatRuntime.ts +0 -157
  134. package/src/useCloudRuntime.ts +0 -21
@@ -1,5 +1,5 @@
1
1
  // src/frontendTools.ts
2
- import { jsonSchema } from "@ai-sdk/ui-utils";
2
+ import { jsonSchema } from "ai";
3
3
  var frontendTools = (tools) => Object.fromEntries(
4
4
  Object.entries(tools).map(([name, tool]) => [
5
5
  name,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/frontendTools.ts"],"sourcesContent":["import { jsonSchema } from \"@ai-sdk/ui-utils\";\nimport type { JSONSchema7 } from \"json-schema\";\n\nexport const frontendTools = (\n tools: Record<string, { description?: string; parameters: JSONSchema7 }>,\n) =>\n Object.fromEntries(\n Object.entries(tools).map(([name, tool]) => [\n name,\n {\n ...(tool.description ? { description: tool.description } : undefined),\n parameters: jsonSchema(tool.parameters),\n },\n ]),\n );\n"],"mappings":";AAAA,SAAS,kBAAkB;AAGpB,IAAM,gBAAgB,CAC3B,UAEA,OAAO;AAAA,EACL,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM;AAAA,IAC1C;AAAA,IACA;AAAA,MACE,GAAI,KAAK,cAAc,EAAE,aAAa,KAAK,YAAY,IAAI;AAAA,MAC3D,YAAY,WAAW,KAAK,UAAU;AAAA,IACxC;AAAA,EACF,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../src/frontendTools.ts"],"sourcesContent":["import { jsonSchema } from \"ai\";\nimport type { JSONSchema7 } from \"json-schema\";\n\nexport const frontendTools = (\n tools: Record<string, { description?: string; parameters: JSONSchema7 }>,\n) =>\n Object.fromEntries(\n Object.entries(tools).map(([name, tool]) => [\n name,\n {\n ...(tool.description ? { description: tool.description } : undefined),\n parameters: jsonSchema(tool.parameters),\n },\n ]),\n );\n"],"mappings":";AAAA,SAAS,kBAAkB;AAGpB,IAAM,gBAAgB,CAC3B,UAEA,OAAO;AAAA,EACL,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM;AAAA,IAC1C;AAAA,IACA;AAAA,MACE,GAAI,KAAK,cAAc,EAAE,aAAa,KAAK,YAAY,IAAI;AAAA,MAC3D,YAAY,WAAW,KAAK,UAAU;AAAA,IACxC;AAAA,EACF,CAAC;AACH;","names":[]}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,3 @@
1
- export * from "./rsc";
2
1
  export * from "./ui";
3
- export * from "./useChatRuntime";
4
- export * from "./useCloudRuntime";
5
- export * from "./converters";
6
- export * from "./dangerous-in-browser";
7
2
  export { frontendTools } from "./frontendTools";
8
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,MAAM,CAAC;AACrB,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,MAAM,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -1,10 +1,5 @@
1
1
  // src/index.ts
2
- export * from "./rsc/index.js";
3
2
  export * from "./ui/index.js";
4
- export * from "./useChatRuntime.js";
5
- export * from "./useCloudRuntime.js";
6
- export * from "./converters/index.js";
7
- export * from "./dangerous-in-browser/index.js";
8
3
  import { frontendTools } from "./frontendTools.js";
9
4
  export {
10
5
  frontendTools
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"./rsc\";\nexport * from \"./ui\";\nexport * from \"./useChatRuntime\";\nexport * from \"./useCloudRuntime\";\nexport * from \"./converters\";\nexport * from \"./dangerous-in-browser\";\nexport { frontendTools } from \"./frontendTools\";\n"],"mappings":";AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,SAAS,qBAAqB;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from \"./ui\";\nexport { frontendTools } from \"./frontendTools\";\n"],"mappings":";AAAA,cAAc;AACd,SAAS,qBAAqB;","names":[]}
@@ -1,4 +1,4 @@
1
1
  import { type ThreadMessage } from "@assistant-ui/react";
2
- import type { Message } from "@ai-sdk/ui-utils";
3
- export declare const getVercelAIMessages: (message: ThreadMessage) => Message[];
2
+ import type { UIMessage } from "ai";
3
+ export declare const getVercelAIMessages: (message: ThreadMessage) => UIMessage[];
4
4
  //# sourceMappingURL=getVercelAIMessages.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getVercelAIMessages.d.ts","sourceRoot":"","sources":["../../src/ui/getVercelAIMessages.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,eAAO,MAAM,mBAAmB,GAAI,SAAS,aAAa,KACZ,OAAO,EACpD,CAAC"}
1
+ {"version":3,"file":"getVercelAIMessages.d.ts","sourceRoot":"","sources":["../../src/ui/getVercelAIMessages.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEpC,eAAO,MAAM,mBAAmB,GAAI,SAAS,aAAa,KACZ,SAAS,EACtD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/getVercelAIMessages.tsx"],"sourcesContent":["import {\n getExternalStoreMessages,\n type ThreadMessage,\n} from \"@assistant-ui/react\";\nimport type { Message } from \"@ai-sdk/ui-utils\";\n\nexport const getVercelAIMessages = (message: ThreadMessage) => {\n return getExternalStoreMessages(message) as Message[];\n};\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAEK;AAGA,IAAM,sBAAsB,CAAC,YAA2B;AAC7D,SAAO,yBAAyB,OAAO;AACzC;","names":[]}
1
+ {"version":3,"sources":["../../src/ui/getVercelAIMessages.tsx"],"sourcesContent":["import {\n getExternalStoreMessages,\n type ThreadMessage,\n} from \"@assistant-ui/react\";\nimport type { UIMessage } from \"ai\";\n\nexport const getVercelAIMessages = (message: ThreadMessage) => {\n return getExternalStoreMessages(message) as UIMessage[];\n};\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAEK;AAGA,IAAM,sBAAsB,CAAC,YAA2B;AAC7D,SAAO,yBAAyB,OAAO;AACzC;","names":[]}
@@ -1,5 +1,2 @@
1
- export { useVercelUseChatRuntime } from "./use-chat/useVercelUseChatRuntime";
2
- export { useVercelUseAssistantRuntime } from "./use-assistant/useVercelUseAssistantRuntime";
3
- export { getVercelAIMessages } from "./getVercelAIMessages";
4
- export { AISDKMessageConverter } from "./utils/convertMessage";
1
+ export { useAISDKRuntime } from "./use-chat/useAISDKRuntime";
5
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC"}
package/dist/ui/index.js CHANGED
@@ -1,12 +1,6 @@
1
1
  // src/ui/index.ts
2
- import { useVercelUseChatRuntime } from "./use-chat/useVercelUseChatRuntime.js";
3
- import { useVercelUseAssistantRuntime } from "./use-assistant/useVercelUseAssistantRuntime.js";
4
- import { getVercelAIMessages } from "./getVercelAIMessages.js";
5
- import { AISDKMessageConverter } from "./utils/convertMessage.js";
2
+ import { useAISDKRuntime } from "./use-chat/useAISDKRuntime.js";
6
3
  export {
7
- AISDKMessageConverter,
8
- getVercelAIMessages,
9
- useVercelUseAssistantRuntime,
10
- useVercelUseChatRuntime
4
+ useAISDKRuntime
11
5
  };
12
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/index.ts"],"sourcesContent":["export { useVercelUseChatRuntime } from \"./use-chat/useVercelUseChatRuntime\";\nexport { useVercelUseAssistantRuntime } from \"./use-assistant/useVercelUseAssistantRuntime\";\nexport { getVercelAIMessages } from \"./getVercelAIMessages\";\nexport { AISDKMessageConverter } from \"./utils/convertMessage\";\n"],"mappings":";AAAA,SAAS,+BAA+B;AACxC,SAAS,oCAAoC;AAC7C,SAAS,2BAA2B;AACpC,SAAS,6BAA6B;","names":[]}
1
+ {"version":3,"sources":["../../src/ui/index.ts"],"sourcesContent":["export { useAISDKRuntime } from \"./use-chat/useAISDKRuntime\";\n"],"mappings":";AAAA,SAAS,uBAAuB;","names":[]}
@@ -0,0 +1,7 @@
1
+ import type { useChat } from "@ai-sdk/react";
2
+ import { ExternalStoreAdapter } from "@assistant-ui/react";
3
+ export type AISDKRuntimeAdapter = {
4
+ adapters?: Omit<NonNullable<ExternalStoreAdapter["adapters"]>, "attachments"> | undefined;
5
+ };
6
+ export declare const useAISDKRuntime: (chatHelpers: ReturnType<typeof useChat>, adapter?: AISDKRuntimeAdapter) => import("@assistant-ui/react").AssistantRuntime;
7
+ //# sourceMappingURL=useAISDKRuntime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAISDKRuntime.d.ts","sourceRoot":"","sources":["../../../src/ui/use-chat/useAISDKRuntime.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAM7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EACL,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,GAClE,SAAS,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,aAAa,UAAU,CAAC,OAAO,OAAO,CAAC,EACvC,UAAS,mBAAwB,mDA+ClC,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use client";
2
+
3
+ // src/ui/use-chat/useAISDKRuntime.tsx
4
+ import { useExternalStoreRuntime } from "@assistant-ui/react";
5
+ import { sliceMessagesUntil } from "../utils/sliceMessagesUntil.js";
6
+ import { toCreateMessage } from "../utils/toCreateMessage.js";
7
+ import { vercelAttachmentAdapter } from "../utils/vercelAttachmentAdapter.js";
8
+ import { getVercelAIMessages } from "../getVercelAIMessages.js";
9
+ import { AISDKMessageConverter } from "../utils/convertMessage.js";
10
+ var useAISDKRuntime = (chatHelpers, adapter = {}) => {
11
+ const messages = AISDKMessageConverter.useThreadMessages({
12
+ isRunning: chatHelpers.status === "submitted" || chatHelpers.status == "streaming",
13
+ messages: chatHelpers.messages
14
+ });
15
+ const runtime = useExternalStoreRuntime({
16
+ isRunning: chatHelpers.status === "submitted" || chatHelpers.status === "streaming",
17
+ messages,
18
+ setMessages: (messages2) => chatHelpers.setMessages(messages2.map(getVercelAIMessages).flat()),
19
+ onCancel: async () => chatHelpers.stop(),
20
+ onNew: async (message) => {
21
+ await chatHelpers.sendMessage(await toCreateMessage(message));
22
+ },
23
+ onEdit: async (message) => {
24
+ const newMessages = sliceMessagesUntil(
25
+ chatHelpers.messages,
26
+ message.parentId
27
+ );
28
+ chatHelpers.setMessages(newMessages);
29
+ await chatHelpers.sendMessage(await toCreateMessage(message));
30
+ },
31
+ onReload: async (parentId) => {
32
+ const newMessages = sliceMessagesUntil(chatHelpers.messages, parentId);
33
+ chatHelpers.setMessages(newMessages);
34
+ await chatHelpers.regenerate();
35
+ },
36
+ onAddToolResult: ({ toolCallId, result }) => {
37
+ chatHelpers.addToolResult({
38
+ tool: toolCallId,
39
+ toolCallId,
40
+ output: result
41
+ });
42
+ },
43
+ adapters: {
44
+ attachments: vercelAttachmentAdapter,
45
+ ...adapter.adapters
46
+ }
47
+ });
48
+ return runtime;
49
+ };
50
+ export {
51
+ useAISDKRuntime
52
+ };
53
+ //# sourceMappingURL=useAISDKRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/ui/use-chat/useAISDKRuntime.tsx"],"sourcesContent":["\"use client\";\n\nimport type { useChat } from \"@ai-sdk/react\";\nimport { useExternalStoreRuntime } from \"@assistant-ui/react\";\nimport { sliceMessagesUntil } from \"../utils/sliceMessagesUntil\";\nimport { toCreateMessage } from \"../utils/toCreateMessage\";\nimport { vercelAttachmentAdapter } from \"../utils/vercelAttachmentAdapter\";\nimport { getVercelAIMessages } from \"../getVercelAIMessages\";\nimport { ExternalStoreAdapter } from \"@assistant-ui/react\";\nimport { AISDKMessageConverter } from \"../utils/convertMessage\";\n\nexport type AISDKRuntimeAdapter = {\n adapters?:\n | Omit<NonNullable<ExternalStoreAdapter[\"adapters\"]>, \"attachments\">\n | undefined;\n};\n\nexport const useAISDKRuntime = (\n chatHelpers: ReturnType<typeof useChat>,\n adapter: AISDKRuntimeAdapter = {},\n) => {\n const messages = AISDKMessageConverter.useThreadMessages({\n isRunning:\n chatHelpers.status === \"submitted\" || chatHelpers.status == \"streaming\",\n messages: chatHelpers.messages,\n });\n\n const runtime = useExternalStoreRuntime({\n isRunning:\n chatHelpers.status === \"submitted\" || chatHelpers.status === \"streaming\",\n messages,\n setMessages: (messages) =>\n chatHelpers.setMessages(messages.map(getVercelAIMessages).flat()),\n onCancel: async () => chatHelpers.stop(),\n onNew: async (message) => {\n await chatHelpers.sendMessage(await toCreateMessage(message));\n },\n onEdit: async (message) => {\n const newMessages = sliceMessagesUntil(\n chatHelpers.messages,\n message.parentId,\n );\n chatHelpers.setMessages(newMessages);\n\n await chatHelpers.sendMessage(await toCreateMessage(message));\n },\n onReload: async (parentId: string | null) => {\n const newMessages = sliceMessagesUntil(chatHelpers.messages, parentId);\n chatHelpers.setMessages(newMessages);\n\n await chatHelpers.regenerate();\n },\n onAddToolResult: ({ toolCallId, result }) => {\n chatHelpers.addToolResult({\n tool: toolCallId,\n toolCallId,\n output: result,\n });\n },\n adapters: {\n attachments: vercelAttachmentAdapter,\n ...adapter.adapters,\n },\n });\n\n return runtime;\n};\n"],"mappings":";;;AAGA,SAAS,+BAA+B;AACxC,SAAS,0BAA0B;AACnC,SAAS,uBAAuB;AAChC,SAAS,+BAA+B;AACxC,SAAS,2BAA2B;AAEpC,SAAS,6BAA6B;AAQ/B,IAAM,kBAAkB,CAC7B,aACA,UAA+B,CAAC,MAC7B;AACH,QAAM,WAAW,sBAAsB,kBAAkB;AAAA,IACvD,WACE,YAAY,WAAW,eAAe,YAAY,UAAU;AAAA,IAC9D,UAAU,YAAY;AAAA,EACxB,CAAC;AAED,QAAM,UAAU,wBAAwB;AAAA,IACtC,WACE,YAAY,WAAW,eAAe,YAAY,WAAW;AAAA,IAC/D;AAAA,IACA,aAAa,CAACA,cACZ,YAAY,YAAYA,UAAS,IAAI,mBAAmB,EAAE,KAAK,CAAC;AAAA,IAClE,UAAU,YAAY,YAAY,KAAK;AAAA,IACvC,OAAO,OAAO,YAAY;AACxB,YAAM,YAAY,YAAY,MAAM,gBAAgB,OAAO,CAAC;AAAA,IAC9D;AAAA,IACA,QAAQ,OAAO,YAAY;AACzB,YAAM,cAAc;AAAA,QAClB,YAAY;AAAA,QACZ,QAAQ;AAAA,MACV;AACA,kBAAY,YAAY,WAAW;AAEnC,YAAM,YAAY,YAAY,MAAM,gBAAgB,OAAO,CAAC;AAAA,IAC9D;AAAA,IACA,UAAU,OAAO,aAA4B;AAC3C,YAAM,cAAc,mBAAmB,YAAY,UAAU,QAAQ;AACrE,kBAAY,YAAY,WAAW;AAEnC,YAAM,YAAY,WAAW;AAAA,IAC/B;AAAA,IACA,iBAAiB,CAAC,EAAE,YAAY,OAAO,MAAM;AAC3C,kBAAY,cAAc;AAAA,QACxB,MAAM;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,IACA,UAAU;AAAA,MACR,aAAa;AAAA,MACb,GAAG,QAAQ;AAAA,IACb;AAAA,EACF,CAAC;AAED,SAAO;AACT;","names":["messages"]}
@@ -1,14 +1,14 @@
1
- import { Message } from "@ai-sdk/ui-utils";
1
+ import { UIMessage } from "ai";
2
2
  export declare const AISDKMessageConverter: {
3
3
  useThreadMessages: ({ messages, isRunning, joinStrategy, }: {
4
- messages: Message[];
4
+ messages: UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>[];
5
5
  isRunning: boolean;
6
6
  joinStrategy?: "concat-content" | "none" | undefined;
7
7
  }) => import("@assistant-ui/react").ThreadMessage[];
8
- toThreadMessages: (messages: Message[]) => import("@assistant-ui/react").ThreadMessage[];
8
+ toThreadMessages: (messages: UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>[]) => import("@assistant-ui/react").ThreadMessage[];
9
9
  toOriginalMessages: (input: import("@assistant-ui/react").ThreadState | import("@assistant-ui/react").ThreadMessage | import("@assistant-ui/react").ThreadMessage["content"][number]) => unknown[];
10
10
  toOriginalMessage: (input: import("@assistant-ui/react").ThreadState | import("@assistant-ui/react").ThreadMessage | import("@assistant-ui/react").ThreadMessage["content"][number]) => {};
11
- useOriginalMessage: () => Message;
12
- useOriginalMessages: () => Message[];
11
+ useOriginalMessage: () => UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>;
12
+ useOriginalMessages: () => UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>[];
13
13
  };
14
14
  //# sourceMappingURL=convertMessage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"convertMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAsE3C,eAAO,MAAM,qBAAqB;;;;;;;0HAjDpB,sDACR;yHAES,sDACI;;;CAuIlB,CAAC"}
1
+ {"version":3,"file":"convertMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAE,MAAM,IAAI,CAAC;AAwJ7C,eAAO,MAAM,qBAAqB;;;;;;;0HAhIhB,sDACF;yHAIM,sDACT;;;CA+KZ,CAAC"}
@@ -1,122 +1,151 @@
1
1
  // src/ui/utils/convertMessage.ts
2
+ import { isToolUIPart } from "ai";
2
3
  import {
3
4
  unstable_createMessageConverter
4
5
  } from "@assistant-ui/react";
5
6
  var convertParts = (message) => {
6
- if (message.parts && message.parts.length > 0) {
7
- return message.parts.filter((p) => p.type !== "step-start").map((part) => {
8
- const type = part.type;
9
- switch (type) {
10
- case "text":
11
- return {
12
- type: "text",
13
- text: part.text
14
- };
15
- case "tool-invocation":
16
- return {
17
- type: "tool-call",
18
- toolName: part.toolInvocation.toolName,
19
- toolCallId: part.toolInvocation.toolCallId,
20
- argsText: JSON.stringify(part.toolInvocation.args),
21
- args: part.toolInvocation.args,
22
- result: part.toolInvocation.state === "result" && part.toolInvocation.result
23
- };
24
- case "reasoning":
25
- return {
26
- type: "reasoning",
27
- text: part.reasoning
28
- };
29
- case "source":
30
- return {
31
- type: "source",
32
- ...part.source
33
- };
34
- case "file":
35
- return {
36
- type: "file",
37
- data: part.data,
38
- mimeType: part.mimeType
39
- };
40
- default: {
41
- const _unsupported = type;
42
- throw new Error(
43
- `You have a message with an unsupported part type. The type ${_unsupported} is not supported.`
44
- );
45
- }
46
- }
47
- });
7
+ if (!message.parts || message.parts.length === 0) {
8
+ return [];
48
9
  }
49
- return message.content ? [
50
- {
51
- type: "text",
52
- text: message.content
10
+ return message.parts.filter((p) => p.type !== "step-start").map((part) => {
11
+ const type = part.type;
12
+ if (type === "text") {
13
+ return {
14
+ type: "text",
15
+ text: part.text
16
+ };
17
+ }
18
+ if (type === "reasoning") {
19
+ return {
20
+ type: "reasoning",
21
+ text: part.text
22
+ };
23
+ }
24
+ if (isToolUIPart(part)) {
25
+ const toolName = type.replace("tool-", "");
26
+ const toolCallId = part.toolCallId;
27
+ let args = {};
28
+ let result = void 0;
29
+ let isError = false;
30
+ if (part.state === "input-streaming" || part.state === "input-available") {
31
+ args = part.input || {};
32
+ } else if (part.state === "output-available") {
33
+ args = part.input || {};
34
+ result = part.output;
35
+ } else if (part.state === "output-error") {
36
+ args = part.input || {};
37
+ isError = true;
38
+ result = { error: part.errorText };
39
+ }
40
+ return {
41
+ type: "tool-call",
42
+ toolName,
43
+ toolCallId,
44
+ argsText: JSON.stringify(args),
45
+ args,
46
+ result,
47
+ isError
48
+ };
49
+ }
50
+ if (type === "dynamic-tool") {
51
+ const toolName = part.toolName;
52
+ const toolCallId = part.toolCallId;
53
+ let args = {};
54
+ let result = void 0;
55
+ let isError = false;
56
+ if (part.state === "input-streaming" || part.state === "input-available") {
57
+ args = part.input || {};
58
+ } else if (part.state === "output-available") {
59
+ args = part.input || {};
60
+ result = part.output;
61
+ } else if (part.state === "output-error") {
62
+ args = part.input || {};
63
+ isError = true;
64
+ result = { error: part.errorText };
65
+ }
66
+ return {
67
+ type: "tool-call",
68
+ toolName,
69
+ toolCallId,
70
+ argsText: JSON.stringify(args),
71
+ args,
72
+ result,
73
+ isError
74
+ };
75
+ }
76
+ if (type === "source-url") {
77
+ return {
78
+ type: "source",
79
+ sourceType: "url",
80
+ id: part.sourceId,
81
+ url: part.url,
82
+ title: part.title || ""
83
+ };
53
84
  }
54
- ] : [];
85
+ if (type === "source-document") {
86
+ console.warn(
87
+ `Source document part type ${type} is not yet supported in conversion`
88
+ );
89
+ return null;
90
+ }
91
+ if (type === "file") {
92
+ return {
93
+ type: "file",
94
+ data: part.url,
95
+ mimeType: part.mediaType
96
+ };
97
+ }
98
+ if (type.startsWith("data-")) {
99
+ console.warn(
100
+ `Data part type ${type} is not yet supported in conversion`
101
+ );
102
+ return null;
103
+ }
104
+ console.warn(`Unsupported message part type: ${type}`);
105
+ return null;
106
+ }).filter(Boolean);
55
107
  };
56
108
  var AISDKMessageConverter = unstable_createMessageConverter(
57
109
  (message) => {
110
+ const createdAt = /* @__PURE__ */ new Date();
58
111
  switch (message.role) {
59
112
  case "user":
60
113
  return {
61
114
  role: "user",
62
115
  id: message.id,
63
- createdAt: message.createdAt,
116
+ createdAt,
64
117
  content: convertParts(message),
65
- attachments: message.experimental_attachments?.map(
66
- (attachment, idx) => ({
67
- id: idx.toString(),
68
- type: "file",
69
- name: attachment.name ?? attachment.url,
70
- content: [],
71
- contentType: attachment.contentType ?? "unknown/unknown",
72
- status: { type: "complete" }
73
- })
74
- )
118
+ attachments: message.parts?.filter((p) => p.type === "file").map((part, idx) => ({
119
+ id: idx.toString(),
120
+ type: "file",
121
+ name: part.name ?? part.url ?? "file",
122
+ content: [],
123
+ contentType: part.mediaType ?? part.mimeType ?? "unknown/unknown",
124
+ status: { type: "complete" }
125
+ }))
75
126
  };
76
127
  case "system":
77
128
  return {
78
129
  role: "system",
79
130
  id: message.id,
80
- createdAt: message.createdAt,
131
+ createdAt,
81
132
  content: convertParts(message)
82
133
  };
83
134
  case "assistant":
84
135
  return {
85
136
  role: "assistant",
86
137
  id: message.id,
87
- createdAt: message.createdAt,
138
+ createdAt,
88
139
  content: convertParts(message),
89
140
  metadata: {
90
141
  unstable_annotations: message.annotations,
91
- unstable_data: Array.isArray(message.data) ? message.data : message.data ? [message.data] : void 0
142
+ unstable_data: Array.isArray(message.data) ? message.data : message.data ? [message.data] : void 0,
143
+ custom: {}
92
144
  }
93
145
  };
94
- case "data": {
95
- if (!message.data || !(typeof message.data === "object") || Array.isArray(message.data))
96
- return [];
97
- const data = message.data;
98
- if (data.type === "tool-call") {
99
- return {
100
- role: "assistant",
101
- id: message.id,
102
- createdAt: message.createdAt,
103
- content: [data]
104
- };
105
- } else if (data.type === "tool-result") {
106
- return {
107
- role: "tool",
108
- id: message.id,
109
- toolCallId: data.toolCallId,
110
- result: data.result
111
- };
112
- }
113
- return [];
114
- }
115
146
  default:
116
- const _unsupported = message.role;
117
- throw new Error(
118
- `You have a message with an unsupported role. The role ${_unsupported} is not supported.`
119
- );
147
+ console.warn(`Unsupported message role: ${message.role}`);
148
+ return [];
120
149
  }
121
150
  }
122
151
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ui/utils/convertMessage.ts"],"sourcesContent":["import { Message } from \"@ai-sdk/ui-utils\";\nimport {\n unstable_createMessageConverter,\n type ReasoningMessagePart,\n type ToolCallMessagePart,\n type TextMessagePart,\n type CompleteAttachment,\n type SourceMessagePart,\n type FileMessagePart,\n} from \"@assistant-ui/react\";\n\nconst convertParts = (message: Message) => {\n if (message.parts && message.parts.length > 0) {\n return message.parts\n .filter((p) => p.type !== \"step-start\")\n .map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\":\n return {\n type: \"text\",\n text: part.text,\n } satisfies TextMessagePart;\n case \"tool-invocation\":\n return {\n type: \"tool-call\",\n toolName: part.toolInvocation.toolName,\n toolCallId: part.toolInvocation.toolCallId,\n argsText: JSON.stringify(part.toolInvocation.args),\n args: part.toolInvocation.args,\n result:\n part.toolInvocation.state === \"result\" &&\n part.toolInvocation.result,\n } satisfies ToolCallMessagePart;\n case \"reasoning\":\n return {\n type: \"reasoning\",\n text: part.reasoning,\n } satisfies ReasoningMessagePart;\n case \"source\":\n return {\n type: \"source\",\n ...part.source,\n } satisfies SourceMessagePart;\n case \"file\":\n return {\n type: \"file\",\n data: part.data,\n mimeType: part.mimeType,\n } satisfies FileMessagePart;\n default: {\n const _unsupported: never = type;\n throw new Error(\n `You have a message with an unsupported part type. The type ${_unsupported} is not supported.`,\n );\n }\n }\n });\n }\n\n return message.content\n ? [\n {\n type: \"text\",\n text: message.content,\n } satisfies TextMessagePart,\n ]\n : [];\n};\n\nexport const AISDKMessageConverter = unstable_createMessageConverter(\n (message: Message) => {\n switch (message.role) {\n case \"user\":\n return {\n role: \"user\",\n id: message.id,\n createdAt: message.createdAt,\n content: convertParts(message),\n attachments: message.experimental_attachments?.map(\n (attachment, idx) =>\n ({\n id: idx.toString(),\n type: \"file\",\n name: attachment.name ?? attachment.url,\n content: [],\n contentType: attachment.contentType ?? \"unknown/unknown\",\n status: { type: \"complete\" },\n }) satisfies CompleteAttachment,\n ),\n };\n\n case \"system\":\n return {\n role: \"system\",\n id: message.id,\n createdAt: message.createdAt,\n content: convertParts(message),\n };\n\n case \"assistant\":\n return {\n role: \"assistant\",\n id: message.id,\n createdAt: message.createdAt,\n content: convertParts(message),\n metadata: {\n unstable_annotations: message.annotations,\n unstable_data: Array.isArray(message.data)\n ? message.data\n : message.data\n ? [message.data]\n : undefined,\n },\n };\n\n case \"data\": {\n type MaybeSupportedDataMessage =\n | { type?: \"unsafe_other\" }\n | ToolCallMessagePart\n | {\n type: \"tool-result\";\n toolCallId: string;\n result: any;\n };\n\n if (\n !message.data ||\n !(typeof message.data === \"object\") ||\n Array.isArray(message.data)\n )\n return [];\n\n const data = message.data as MaybeSupportedDataMessage;\n\n if (data.type === \"tool-call\") {\n return {\n role: \"assistant\",\n id: message.id,\n createdAt: message.createdAt,\n content: [data],\n };\n } else if (data.type === \"tool-result\") {\n return {\n role: \"tool\",\n id: message.id,\n toolCallId: data.toolCallId,\n result: data.result,\n };\n }\n return [];\n }\n\n default:\n const _unsupported: \"function\" | \"tool\" = message.role;\n throw new Error(\n `You have a message with an unsupported role. The role ${_unsupported} is not supported.`,\n );\n }\n },\n);\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/ui/utils/convertMessage.ts"],"sourcesContent":["import { isToolUIPart, UIMessage } from \"ai\";\nimport {\n unstable_createMessageConverter,\n type ReasoningMessagePart,\n type ToolCallMessagePart,\n type TextMessagePart,\n type SourceMessagePart,\n type FileMessagePart,\n} from \"@assistant-ui/react\";\n\nconst convertParts = (message: UIMessage) => {\n if (!message.parts || message.parts.length === 0) {\n return [];\n }\n\n return message.parts\n .filter((p) => p.type !== \"step-start\")\n .map((part) => {\n const type = part.type;\n\n // Handle text parts\n if (type === \"text\") {\n return {\n type: \"text\",\n text: part.text,\n } satisfies TextMessagePart;\n }\n\n // Handle reasoning parts\n if (type === \"reasoning\") {\n return {\n type: \"reasoning\",\n text: part.text,\n } satisfies ReasoningMessagePart;\n }\n\n // Handle tool-* parts (AI SDK v5 tool calls)\n if (isToolUIPart(part)) {\n const toolName = type.replace(\"tool-\", \"\");\n const toolCallId = part.toolCallId;\n\n // Extract args and result based on state\n let args: any = {};\n let result: any = undefined;\n let isError = false;\n\n if (\n part.state === \"input-streaming\" ||\n part.state === \"input-available\"\n ) {\n args = part.input || {};\n } else if (part.state === \"output-available\") {\n args = part.input || {};\n result = part.output;\n } else if (part.state === \"output-error\") {\n args = part.input || {};\n isError = true;\n result = { error: part.errorText };\n }\n\n return {\n type: \"tool-call\",\n toolName,\n toolCallId,\n argsText: JSON.stringify(args),\n args,\n result,\n isError,\n } satisfies ToolCallMessagePart;\n }\n\n // Handle dynamic-tool parts\n if (type === \"dynamic-tool\") {\n const toolName = part.toolName;\n const toolCallId = part.toolCallId;\n\n // Extract args and result based on state\n let args: any = {};\n let result: any = undefined;\n let isError = false;\n\n if (\n part.state === \"input-streaming\" ||\n part.state === \"input-available\"\n ) {\n args = part.input || {};\n } else if (part.state === \"output-available\") {\n args = part.input || {};\n result = part.output;\n } else if (part.state === \"output-error\") {\n args = part.input || {};\n isError = true;\n result = { error: part.errorText };\n }\n\n return {\n type: \"tool-call\",\n toolName,\n toolCallId,\n argsText: JSON.stringify(args),\n args,\n result,\n isError,\n } satisfies ToolCallMessagePart;\n }\n\n // Handle source-url parts\n if (type === \"source-url\") {\n return {\n type: \"source\",\n sourceType: \"url\",\n id: part.sourceId,\n url: part.url,\n title: part.title || \"\",\n } satisfies SourceMessagePart;\n }\n\n // Handle source-document parts\n if (type === \"source-document\") {\n console.warn(\n `Source document part type ${type} is not yet supported in conversion`,\n );\n return null;\n }\n\n // Handle file parts\n if (type === \"file\") {\n return {\n type: \"file\",\n data: part.url,\n mimeType: part.mediaType,\n } satisfies FileMessagePart;\n }\n\n // Handle data-* parts (AI SDK v5 data parts)\n if (type.startsWith(\"data-\")) {\n // For now, we'll skip data parts as they don't have a direct equivalent\n // in the assistant-ui types. They could be converted to a custom message part\n // or handled differently based on the specific use case.\n console.warn(\n `Data part type ${type} is not yet supported in conversion`,\n );\n return null;\n }\n\n // For unsupported types, we'll skip them instead of throwing\n console.warn(`Unsupported message part type: ${type}`);\n return null;\n })\n .filter(Boolean) as any[];\n};\n\nexport const AISDKMessageConverter = unstable_createMessageConverter(\n (message: UIMessage) => {\n // UIMessage doesn't have createdAt, so we'll use current date or undefined\n const createdAt = new Date();\n switch (message.role) {\n case \"user\":\n return {\n role: \"user\",\n id: message.id,\n createdAt,\n content: convertParts(message),\n attachments: message.parts\n ?.filter((p: any) => p.type === \"file\")\n .map((part: any, idx) => ({\n id: idx.toString(),\n type: \"file\" as const,\n name: part.name ?? part.url ?? \"file\",\n content: [],\n contentType: part.mediaType ?? part.mimeType ?? \"unknown/unknown\",\n status: { type: \"complete\" as const },\n })),\n };\n\n case \"system\":\n return {\n role: \"system\",\n id: message.id,\n createdAt,\n content: convertParts(message),\n };\n\n case \"assistant\":\n return {\n role: \"assistant\",\n id: message.id,\n createdAt,\n content: convertParts(message),\n metadata: {\n unstable_annotations: (message as any).annotations,\n unstable_data: Array.isArray((message as any).data)\n ? (message as any).data\n : (message as any).data\n ? [(message as any).data]\n : undefined,\n custom: {},\n },\n };\n\n default:\n console.warn(`Unsupported message role: ${message.role}`);\n return [];\n }\n },\n);\n"],"mappings":"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","names":[]}
@@ -1,3 +1,3 @@
1
- import type { Message } from "@ai-sdk/ui-utils";
2
- export declare const sliceMessagesUntil: (messages: Message[], messageId: string | null) => Message[];
1
+ import type { UIMessage } from "ai";
2
+ export declare const sliceMessagesUntil: (messages: UIMessage[], messageId: string | null) => UIMessage<unknown, import("ai").UIDataTypes, import("ai").UITools>[];
3
3
  //# sourceMappingURL=sliceMessagesUntil.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sliceMessagesUntil.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/sliceMessagesUntil.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,eAAO,MAAM,kBAAkB,GAC7B,UAAU,OAAO,EAAE,EACnB,WAAW,MAAM,GAAG,IAAI,cAezB,CAAC"}
1
+ {"version":3,"file":"sliceMessagesUntil.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/sliceMessagesUntil.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEpC,eAAO,MAAM,kBAAkB,GAC7B,UAAU,SAAS,EAAE,EACrB,WAAW,MAAM,GAAG,IAAI,yEAezB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ui/utils/sliceMessagesUntil.tsx"],"sourcesContent":["import type { Message } from \"@ai-sdk/ui-utils\";\n\nexport const sliceMessagesUntil = (\n messages: Message[],\n messageId: string | null,\n) => {\n if (messageId == null) return [];\n\n let messageIdx = messages.findIndex((m) => m.id === messageId);\n if (messageIdx === -1)\n throw new Error(\n \"useVercelAIThreadState: Message not found. This is likely an internal bug in assistant-ui.\",\n );\n\n while (messages[messageIdx + 1]?.role === \"assistant\") {\n messageIdx++;\n }\n\n return messages.slice(0, messageIdx + 1);\n};\n"],"mappings":";AAEO,IAAM,qBAAqB,CAChC,UACA,cACG;AACH,MAAI,aAAa,KAAM,QAAO,CAAC;AAE/B,MAAI,aAAa,SAAS,UAAU,CAAC,MAAM,EAAE,OAAO,SAAS;AAC7D,MAAI,eAAe;AACjB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAEF,SAAO,SAAS,aAAa,CAAC,GAAG,SAAS,aAAa;AACrD;AAAA,EACF;AAEA,SAAO,SAAS,MAAM,GAAG,aAAa,CAAC;AACzC;","names":[]}
1
+ {"version":3,"sources":["../../../src/ui/utils/sliceMessagesUntil.tsx"],"sourcesContent":["import type { UIMessage } from \"ai\";\n\nexport const sliceMessagesUntil = (\n messages: UIMessage[],\n messageId: string | null,\n) => {\n if (messageId == null) return [];\n\n let messageIdx = messages.findIndex((m) => m.id === messageId);\n if (messageIdx === -1)\n throw new Error(\n \"useVercelAIThreadState: Message not found. This is likely an internal bug in assistant-ui.\",\n );\n\n while (messages[messageIdx + 1]?.role === \"assistant\") {\n messageIdx++;\n }\n\n return messages.slice(0, messageIdx + 1);\n};\n"],"mappings":";AAEO,IAAM,qBAAqB,CAChC,UACA,cACG;AACH,MAAI,aAAa,KAAM,QAAO,CAAC;AAE/B,MAAI,aAAa,SAAS,UAAU,CAAC,MAAM,EAAE,OAAO,SAAS;AAC7D,MAAI,eAAe;AACjB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAEF,SAAO,SAAS,aAAa,CAAC,GAAG,SAAS,aAAa;AACrD;AAAA,EACF;AAEA,SAAO,SAAS,MAAM,GAAG,aAAa,CAAC;AACzC;","names":[]}
@@ -1,4 +1,4 @@
1
1
  import { AppendMessage } from "@assistant-ui/react";
2
- import { CreateMessage } from "@ai-sdk/ui-utils";
3
- export declare const toCreateMessage: (message: AppendMessage) => Promise<CreateMessage>;
2
+ import { CreateUIMessage, UIMessage } from "ai";
3
+ export declare const toCreateMessage: (message: AppendMessage) => Promise<CreateUIMessage<UIMessage>>;
4
4
  //# sourceMappingURL=toCreateMessage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toCreateMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/toCreateMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,eAAO,MAAM,eAAe,GAC1B,SAAS,aAAa,KACrB,OAAO,CAAC,aAAa,CA4BvB,CAAC"}
1
+ {"version":3,"file":"toCreateMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/toCreateMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EACL,eAAe,EAGf,SAAS,EAGV,MAAM,IAAI,CAAC;AAEZ,eAAO,MAAM,eAAe,GAC1B,SAAS,aAAa,KACrB,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CA8CpC,CAAC"}
@@ -1,24 +1,36 @@
1
1
  // src/ui/utils/toCreateMessage.ts
2
2
  var toCreateMessage = async (message) => {
3
- const content = message.content.filter((part) => part.type === "text").map((t) => t.text).join("\n\n");
4
- const images = message.content.filter((part) => part.type === "image").map((part) => ({ url: part.image }));
3
+ const textParts = message.content.filter((part) => part.type === "text").map((t) => t.text).join("\n\n");
4
+ const parts = [
5
+ {
6
+ type: "text",
7
+ text: textParts
8
+ }
9
+ ];
10
+ const imageParts = message.content.filter((part) => part.type === "image").map(
11
+ (part) => ({
12
+ type: "file",
13
+ mediaType: "image/png",
14
+ // Default to PNG, could be made more dynamic
15
+ url: part.image
16
+ })
17
+ );
18
+ parts.push(...imageParts);
19
+ const attachmentParts = await Promise.all(
20
+ (message.attachments ?? []).map(async (m) => {
21
+ if (m.file == null) throw new Error("Attachment did not contain a file");
22
+ return {
23
+ type: "file",
24
+ mediaType: m.file.type,
25
+ filename: m.file.name,
26
+ url: await getFileDataURL(m.file)
27
+ };
28
+ })
29
+ );
30
+ parts.push(...attachmentParts);
5
31
  return {
6
32
  role: message.role,
7
- content,
8
- experimental_attachments: [
9
- ...images,
10
- ...await Promise.all(
11
- (message.attachments ?? []).map(async (m) => {
12
- if (m.file == null)
13
- throw new Error("Attachment did not contain a file");
14
- return {
15
- contentType: m.file.type,
16
- name: m.file.name,
17
- url: await getFileDataURL(m.file)
18
- };
19
- })
20
- )
21
- ]
33
+ parts
22
34
  };
23
35
  };
24
36
  var getFileDataURL = (file) => new Promise((resolve, reject) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/ui/utils/toCreateMessage.ts"],"sourcesContent":["import { AppendMessage } from \"@assistant-ui/react\";\nimport { CreateMessage } from \"@ai-sdk/ui-utils\";\n\nexport const toCreateMessage = async (\n message: AppendMessage,\n): Promise<CreateMessage> => {\n const content = message.content\n .filter((part) => part.type === \"text\")\n .map((t) => t.text)\n .join(\"\\n\\n\");\n\n const images = message.content\n .filter((part) => part.type === \"image\")\n .map((part) => ({ url: part.image }));\n\n return {\n role: message.role,\n content,\n experimental_attachments: [\n ...images,\n ...(await Promise.all(\n (message.attachments ?? []).map(async (m) => {\n if (m.file == null)\n throw new Error(\"Attachment did not contain a file\");\n return {\n contentType: m.file.type,\n name: m.file.name,\n url: await getFileDataURL(m.file),\n };\n }),\n )),\n ],\n };\n};\n\nconst getFileDataURL = (file: File) =>\n new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = (error) => reject(error);\n\n reader.readAsDataURL(file);\n });\n"],"mappings":";AAGO,IAAM,kBAAkB,OAC7B,YAC2B;AAC3B,QAAM,UAAU,QAAQ,QACrB,OAAO,CAAC,SAAS,KAAK,SAAS,MAAM,EACrC,IAAI,CAAC,MAAM,EAAE,IAAI,EACjB,KAAK,MAAM;AAEd,QAAM,SAAS,QAAQ,QACpB,OAAO,CAAC,SAAS,KAAK,SAAS,OAAO,EACtC,IAAI,CAAC,UAAU,EAAE,KAAK,KAAK,MAAM,EAAE;AAEtC,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd;AAAA,IACA,0BAA0B;AAAA,MACxB,GAAG;AAAA,MACH,GAAI,MAAM,QAAQ;AAAA,SACf,QAAQ,eAAe,CAAC,GAAG,IAAI,OAAO,MAAM;AAC3C,cAAI,EAAE,QAAQ;AACZ,kBAAM,IAAI,MAAM,mCAAmC;AACrD,iBAAO;AAAA,YACL,aAAa,EAAE,KAAK;AAAA,YACpB,MAAM,EAAE,KAAK;AAAA,YACb,KAAK,MAAM,eAAe,EAAE,IAAI;AAAA,UAClC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAM,iBAAiB,CAAC,SACtB,IAAI,QAAgB,CAAC,SAAS,WAAW;AACvC,QAAM,SAAS,IAAI,WAAW;AAE9B,SAAO,SAAS,MAAM,QAAQ,OAAO,MAAgB;AACrD,SAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AAExC,SAAO,cAAc,IAAI;AAC3B,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../src/ui/utils/toCreateMessage.ts"],"sourcesContent":["import { AppendMessage } from \"@assistant-ui/react\";\nimport {\n CreateUIMessage,\n FileUIPart,\n UIDataTypes,\n UIMessage,\n UIMessagePart,\n UITools,\n} from \"ai\";\n\nexport const toCreateMessage = async (\n message: AppendMessage,\n): Promise<CreateUIMessage<UIMessage>> => {\n const textParts = message.content\n .filter((part) => part.type === \"text\")\n .map((t) => t.text)\n .join(\"\\n\\n\");\n\n const parts: UIMessagePart<UIDataTypes, UITools>[] = [\n {\n type: \"text\",\n text: textParts,\n },\n ];\n\n // Add image parts\n const imageParts = message.content\n .filter((part) => part.type === \"image\")\n .map(\n (part) =>\n ({\n type: \"file\",\n mediaType: \"image/png\", // Default to PNG, could be made more dynamic\n url: part.image,\n }) satisfies FileUIPart,\n );\n\n parts.push(...imageParts);\n\n // Add attachment parts\n const attachmentParts = await Promise.all(\n (message.attachments ?? []).map(async (m) => {\n if (m.file == null) throw new Error(\"Attachment did not contain a file\");\n return {\n type: \"file\",\n mediaType: m.file.type,\n filename: m.file.name,\n url: await getFileDataURL(m.file),\n } satisfies FileUIPart;\n }),\n );\n\n parts.push(...attachmentParts);\n\n return {\n role: message.role,\n parts,\n };\n};\n\nconst getFileDataURL = (file: File) =>\n new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = (error) => reject(error);\n\n reader.readAsDataURL(file);\n });\n"],"mappings":";AAUO,IAAM,kBAAkB,OAC7B,YACwC;AACxC,QAAM,YAAY,QAAQ,QACvB,OAAO,CAAC,SAAS,KAAK,SAAS,MAAM,EACrC,IAAI,CAAC,MAAM,EAAE,IAAI,EACjB,KAAK,MAAM;AAEd,QAAM,QAA+C;AAAA,IACnD;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AAGA,QAAM,aAAa,QAAQ,QACxB,OAAO,CAAC,SAAS,KAAK,SAAS,OAAO,EACtC;AAAA,IACC,CAAC,UACE;AAAA,MACC,MAAM;AAAA,MACN,WAAW;AAAA;AAAA,MACX,KAAK,KAAK;AAAA,IACZ;AAAA,EACJ;AAEF,QAAM,KAAK,GAAG,UAAU;AAGxB,QAAM,kBAAkB,MAAM,QAAQ;AAAA,KACnC,QAAQ,eAAe,CAAC,GAAG,IAAI,OAAO,MAAM;AAC3C,UAAI,EAAE,QAAQ,KAAM,OAAM,IAAI,MAAM,mCAAmC;AACvE,aAAO;AAAA,QACL,MAAM;AAAA,QACN,WAAW,EAAE,KAAK;AAAA,QAClB,UAAU,EAAE,KAAK;AAAA,QACjB,KAAK,MAAM,eAAe,EAAE,IAAI;AAAA,MAClC;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,KAAK,GAAG,eAAe;AAE7B,SAAO;AAAA,IACL,MAAM,QAAQ;AAAA,IACd;AAAA,EACF;AACF;AAEA,IAAM,iBAAiB,CAAC,SACtB,IAAI,QAAgB,CAAC,SAAS,WAAW;AACvC,QAAM,SAAS,IAAI,WAAW;AAE9B,SAAO,SAAS,MAAM,QAAQ,OAAO,MAAgB;AACrD,SAAO,UAAU,CAAC,UAAU,OAAO,KAAK;AAExC,SAAO,cAAc,IAAI;AAC3B,CAAC;","names":[]}
@@ -1,5 +1,5 @@
1
1
  // src/ui/utils/vercelAttachmentAdapter.ts
2
- import { generateId } from "@ai-sdk/ui-utils";
2
+ import { generateId } from "ai";
3
3
  var vercelAttachmentAdapter = {
4
4
  accept: "image/*, text/plain, text/html, text/markdown, text/csv, text/xml, text/json, text/css",
5
5
  async add({ file }) {