@copilotkit/react-ui 1.10.0-next.9 → 1.10.0

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 (60) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/dist/{chunk-U5ATIGWH.mjs → chunk-BJHJBS5M.mjs} +45 -5
  3. package/dist/chunk-BJHJBS5M.mjs.map +1 -0
  4. package/dist/{chunk-TW4LLLTE.mjs → chunk-GBP47ONN.mjs} +2 -2
  5. package/dist/{chunk-2KG77MAY.mjs → chunk-GJ4SX4JE.mjs} +38 -29
  6. package/dist/chunk-GJ4SX4JE.mjs.map +1 -0
  7. package/dist/{chunk-6C3YVF5W.mjs → chunk-J5ZZR6YB.mjs} +2 -2
  8. package/dist/chunk-MIVUCSGO.mjs +126 -0
  9. package/dist/chunk-MIVUCSGO.mjs.map +1 -0
  10. package/dist/{chunk-JHUTTP5C.mjs → chunk-T5QU6KSB.mjs} +5 -1
  11. package/dist/chunk-T5QU6KSB.mjs.map +1 -0
  12. package/dist/{chunk-7K2X77PW.mjs → chunk-Y44VLEUH.mjs} +8 -8
  13. package/dist/components/chat/Chat.d.ts +21 -2
  14. package/dist/components/chat/Chat.js +1022 -856
  15. package/dist/components/chat/Chat.js.map +1 -1
  16. package/dist/components/chat/Chat.mjs +7 -6
  17. package/dist/components/chat/Messages.d.ts +1 -1
  18. package/dist/components/chat/Messages.js +984 -23
  19. package/dist/components/chat/Messages.js.map +1 -1
  20. package/dist/components/chat/Messages.mjs +9 -1
  21. package/dist/components/chat/Modal.js +1030 -864
  22. package/dist/components/chat/Modal.js.map +1 -1
  23. package/dist/components/chat/Modal.mjs +8 -7
  24. package/dist/components/chat/Popup.js +1032 -866
  25. package/dist/components/chat/Popup.js.map +1 -1
  26. package/dist/components/chat/Popup.mjs +9 -8
  27. package/dist/components/chat/Sidebar.js +1032 -866
  28. package/dist/components/chat/Sidebar.js.map +1 -1
  29. package/dist/components/chat/Sidebar.mjs +9 -8
  30. package/dist/components/chat/index.js +1034 -868
  31. package/dist/components/chat/index.js.map +1 -1
  32. package/dist/components/chat/index.mjs +16 -15
  33. package/dist/components/chat/messages/LegacyRenderMessage.d.ts +28 -0
  34. package/dist/components/chat/messages/LegacyRenderMessage.js +980 -0
  35. package/dist/components/chat/messages/LegacyRenderMessage.js.map +1 -0
  36. package/dist/components/chat/messages/LegacyRenderMessage.mjs +17 -0
  37. package/dist/components/chat/messages/LegacyRenderMessage.mjs.map +1 -0
  38. package/dist/components/chat/messages/RenderMessage.js +4 -0
  39. package/dist/components/chat/messages/RenderMessage.js.map +1 -1
  40. package/dist/components/chat/messages/RenderMessage.mjs +1 -1
  41. package/dist/components/chat/props.d.ts +49 -0
  42. package/dist/components/chat/props.js.map +1 -1
  43. package/dist/components/index.js +1034 -868
  44. package/dist/components/index.js.map +1 -1
  45. package/dist/components/index.mjs +16 -15
  46. package/dist/index.js +1034 -868
  47. package/dist/index.js.map +1 -1
  48. package/dist/index.mjs +16 -15
  49. package/package.json +4 -4
  50. package/src/components/chat/Chat.tsx +50 -14
  51. package/src/components/chat/Messages.tsx +56 -3
  52. package/src/components/chat/messages/LegacyRenderMessage.tsx +143 -0
  53. package/src/components/chat/messages/RenderMessage.tsx +3 -0
  54. package/src/components/chat/props.ts +57 -0
  55. package/dist/chunk-2KG77MAY.mjs.map +0 -1
  56. package/dist/chunk-JHUTTP5C.mjs.map +0 -1
  57. package/dist/chunk-U5ATIGWH.mjs.map +0 -1
  58. /package/dist/{chunk-TW4LLLTE.mjs.map → chunk-GBP47ONN.mjs.map} +0 -0
  59. /package/dist/{chunk-6C3YVF5W.mjs.map → chunk-J5ZZR6YB.mjs.map} +0 -0
  60. /package/dist/{chunk-7K2X77PW.mjs.map → chunk-Y44VLEUH.mjs.map} +0 -0
package/dist/index.mjs CHANGED
@@ -4,12 +4,12 @@ import "./chunk-MMVDU6DF.mjs";
4
4
  import "./chunk-SC6JRFAJ.mjs";
5
5
  import {
6
6
  CopilotSidebar
7
- } from "./chunk-TW4LLLTE.mjs";
7
+ } from "./chunk-GBP47ONN.mjs";
8
8
  import "./chunk-WB3YULQ4.mjs";
9
9
  import {
10
10
  CopilotPopup
11
- } from "./chunk-6C3YVF5W.mjs";
12
- import "./chunk-7K2X77PW.mjs";
11
+ } from "./chunk-J5ZZR6YB.mjs";
12
+ import "./chunk-Y44VLEUH.mjs";
13
13
  import "./chunk-C3GSYRC3.mjs";
14
14
  import "./chunk-GDSZGYCE.mjs";
15
15
  import "./chunk-V7W6IM2V.mjs";
@@ -26,17 +26,7 @@ import "./chunk-BH6PCAAL.mjs";
26
26
  import "./chunk-UFN2VWSR.mjs";
27
27
  import {
28
28
  CopilotChat
29
- } from "./chunk-2KG77MAY.mjs";
30
- import "./chunk-JHUTTP5C.mjs";
31
- import {
32
- AssistantMessage
33
- } from "./chunk-GCKKSSBU.mjs";
34
- import {
35
- ImageRenderer
36
- } from "./chunk-DBKRAOH7.mjs";
37
- import {
38
- UserMessage
39
- } from "./chunk-VVL6JFCJ.mjs";
29
+ } from "./chunk-GJ4SX4JE.mjs";
40
30
  import {
41
31
  Suggestions
42
32
  } from "./chunk-226ZMOE3.mjs";
@@ -47,10 +37,21 @@ import "./chunk-PLHTVHUW.mjs";
47
37
  import "./chunk-DTRPPNSA.mjs";
48
38
  import "./chunk-CGEAG65D.mjs";
49
39
  import "./chunk-QIOJXTIQ.mjs";
40
+ import "./chunk-BJHJBS5M.mjs";
41
+ import "./chunk-MIVUCSGO.mjs";
42
+ import "./chunk-T5QU6KSB.mjs";
43
+ import {
44
+ AssistantMessage
45
+ } from "./chunk-GCKKSSBU.mjs";
46
+ import {
47
+ ImageRenderer
48
+ } from "./chunk-DBKRAOH7.mjs";
49
+ import {
50
+ UserMessage
51
+ } from "./chunk-VVL6JFCJ.mjs";
50
52
  import {
51
53
  Markdown
52
54
  } from "./chunk-E6MQUIZW.mjs";
53
- import "./chunk-U5ATIGWH.mjs";
54
55
  import {
55
56
  useChatContext
56
57
  } from "./chunk-IEMQ2SQW.mjs";
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "publishConfig": {
10
10
  "access": "public"
11
11
  },
12
- "version": "1.10.0-next.9",
12
+ "version": "1.10.0",
13
13
  "sideEffects": [
14
14
  "**/*.css"
15
15
  ],
@@ -51,9 +51,9 @@
51
51
  "rehype-raw": "^7.0.0",
52
52
  "remark-gfm": "^4.0.1",
53
53
  "remark-math": "^6.0.0",
54
- "@copilotkit/react-core": "1.10.0-next.9",
55
- "@copilotkit/runtime-client-gql": "1.10.0-next.9",
56
- "@copilotkit/shared": "1.10.0-next.9"
54
+ "@copilotkit/react-core": "1.10.0",
55
+ "@copilotkit/runtime-client-gql": "1.10.0",
56
+ "@copilotkit/shared": "1.10.0"
57
57
  },
58
58
  "keywords": [
59
59
  "copilotkit",
@@ -240,6 +240,31 @@ export interface CopilotChatProps {
240
240
  */
241
241
  Messages?: React.ComponentType<MessagesProps>;
242
242
 
243
+ /**
244
+ * @deprecated - use RenderMessage instead
245
+ */
246
+ RenderTextMessage?: React.ComponentType<RenderMessageProps>;
247
+
248
+ /**
249
+ * @deprecated - use RenderMessage instead
250
+ */
251
+ RenderActionExecutionMessage?: React.ComponentType<RenderMessageProps>;
252
+
253
+ /**
254
+ * @deprecated - use RenderMessage instead
255
+ */
256
+ RenderAgentStateMessage?: React.ComponentType<RenderMessageProps>;
257
+
258
+ /**
259
+ * @deprecated - use RenderMessage instead
260
+ */
261
+ RenderResultMessage?: React.ComponentType<RenderMessageProps>;
262
+
263
+ /**
264
+ * @deprecated - use RenderMessage instead
265
+ */
266
+ RenderImageMessage?: React.ComponentType<RenderMessageProps>;
267
+
243
268
  /**
244
269
  * A custom RenderMessage component to use instead of the default.
245
270
  *
@@ -382,6 +407,13 @@ export function CopilotChat({
382
407
  hideStopButton,
383
408
  observabilityHooks,
384
409
  renderError,
410
+
411
+ // Legacy props - deprecated
412
+ RenderTextMessage,
413
+ RenderActionExecutionMessage,
414
+ RenderAgentStateMessage,
415
+ RenderResultMessage,
416
+ RenderImageMessage,
385
417
  }: CopilotChatProps) {
386
418
  const { additionalInstructions, setChatInstructions, copilotApiConfig, setBannerError } =
387
419
  useCopilotContext();
@@ -543,7 +575,7 @@ export function CopilotChat({
543
575
  }, [instructions, additionalInstructions]);
544
576
 
545
577
  const {
546
- visibleMessages,
578
+ messages,
547
579
  isLoading,
548
580
  sendMessage,
549
581
  stopGeneration,
@@ -684,7 +716,7 @@ export function CopilotChat({
684
716
  AssistantMessage={AssistantMessage}
685
717
  UserMessage={UserMessage}
686
718
  RenderMessage={RenderMessage}
687
- messages={visibleMessages}
719
+ messages={messages}
688
720
  inProgress={isLoading}
689
721
  onRegenerate={handleRegenerate}
690
722
  onCopy={handleCopy}
@@ -692,6 +724,12 @@ export function CopilotChat({
692
724
  onThumbsDown={handleThumbsDown}
693
725
  markdownTagRenderers={markdownTagRenderers}
694
726
  ImageRenderer={ImageRenderer}
727
+ // Legacy props - passed through to Messages component
728
+ RenderTextMessage={RenderTextMessage}
729
+ RenderActionExecutionMessage={RenderActionExecutionMessage}
730
+ RenderAgentStateMessage={RenderAgentStateMessage}
731
+ RenderResultMessage={RenderResultMessage}
732
+ RenderImageMessage={RenderImageMessage}
695
733
  >
696
734
  {currentSuggestions.length > 0 && (
697
735
  <RenderSuggestionsList
@@ -757,8 +795,8 @@ export const useCopilotChatLogic = (
757
795
  onReloadMessages?: OnReloadMessages,
758
796
  ) => {
759
797
  const {
760
- visibleMessages,
761
- appendMessage,
798
+ messages,
799
+ sendMessage,
762
800
  setMessages,
763
801
  reloadMessages: defaultReloadMessages,
764
802
  stopGeneration: defaultStopGeneration,
@@ -822,14 +860,14 @@ export const useCopilotChatLogic = (
822
860
  }
823
861
 
824
862
  // Generate initial suggestions when chat is empty
825
- if (visibleMessages.length === 0 && !hasGeneratedInitialSuggestions.current) {
863
+ if (messages.length === 0 && !hasGeneratedInitialSuggestions.current) {
826
864
  hasGeneratedInitialSuggestions.current = true;
827
865
  generateSuggestionsWithErrorHandling("initial");
828
866
  return;
829
867
  }
830
868
 
831
869
  // Generate post-message suggestions after assistant responds
832
- if (visibleMessages.length > 0 && suggestions.length === 0) {
870
+ if (messages.length > 0 && suggestions.length === 0) {
833
871
  generateSuggestionsWithErrorHandling("post-message");
834
872
  return;
835
873
  }
@@ -837,7 +875,7 @@ export const useCopilotChatLogic = (
837
875
  chatSuggestions,
838
876
  isLoadingSuggestions,
839
877
  suggestionsFailed,
840
- visibleMessages.length,
878
+ messages.length,
841
879
  isLoading,
842
880
  suggestions.length,
843
881
  Object.keys(generalContext.chatSuggestionConfiguration).join(","), // Use stable string instead of object reference
@@ -877,7 +915,7 @@ export const useCopilotChatLogic = (
877
915
  onInProgress?.(isLoading);
878
916
  }, [onInProgress, isLoading]);
879
917
 
880
- const sendMessage = async (
918
+ const safelySendMessage = async (
881
919
  messageContent: string,
882
920
  imagesToUse?: Array<{ contentType: string; bytes: string }>,
883
921
  ) => {
@@ -909,7 +947,7 @@ export const useCopilotChatLogic = (
909
947
  }
910
948
 
911
949
  // Send the message and clear suggestions for auto/manual modes
912
- await appendMessage(textMessage, {
950
+ await sendMessage(textMessage, {
913
951
  followUp: images.length === 0,
914
952
  clearSuggestions: chatSuggestions === "auto" || chatSuggestions === "manual",
915
953
  });
@@ -930,7 +968,7 @@ export const useCopilotChatLogic = (
930
968
  bytes: images[i].bytes,
931
969
  },
932
970
  } as unknown as Message;
933
- await appendMessage(imageMessage, { followUp: i === images.length - 1 });
971
+ await sendMessage(imageMessage, { followUp: i === images.length - 1 });
934
972
  if (!firstMessage) {
935
973
  firstMessage = imageMessage;
936
974
  }
@@ -947,7 +985,6 @@ export const useCopilotChatLogic = (
947
985
  return firstMessage;
948
986
  };
949
987
 
950
- const messages = visibleMessages;
951
988
  const currentAgentName = generalContext.agentSession?.agentName;
952
989
  const restartCurrentAgent = async (hint?: HintFunction) => {
953
990
  if (generalContext.agentSession) {
@@ -975,7 +1012,7 @@ export const useCopilotChatLogic = (
975
1012
  generalContext.agentSession.agentName,
976
1013
  stableContext,
977
1014
  messagesContext.messages,
978
- appendMessage,
1015
+ sendMessage,
979
1016
  runChatCompletion,
980
1017
  );
981
1018
  }
@@ -1037,10 +1074,9 @@ export const useCopilotChatLogic = (
1037
1074
 
1038
1075
  return {
1039
1076
  messages,
1040
- visibleMessages,
1041
1077
  isLoading,
1042
1078
  suggestions,
1043
- sendMessage,
1079
+ sendMessage: safelySendMessage,
1044
1080
  stopGeneration,
1045
1081
  reloadMessages,
1046
1082
  resetSuggestions,
@@ -3,6 +3,7 @@ import { MessagesProps } from "./props";
3
3
  import { useChatContext } from "./ChatContext";
4
4
  import { Message } from "@copilotkit/shared";
5
5
  import { useCopilotChatInternal as useCopilotChat } from "@copilotkit/react-core";
6
+ import { LegacyRenderMessage, LegacyRenderProps } from "./messages/LegacyRenderMessage";
6
7
 
7
8
  export const Messages = ({
8
9
  inProgress,
@@ -10,25 +11,76 @@ export const Messages = ({
10
11
  RenderMessage,
11
12
  AssistantMessage,
12
13
  UserMessage,
14
+ ImageRenderer,
13
15
  onRegenerate,
14
16
  onCopy,
15
17
  onThumbsUp,
16
18
  onThumbsDown,
17
19
  markdownTagRenderers,
20
+
21
+ // Legacy props
22
+ RenderTextMessage,
23
+ RenderActionExecutionMessage,
24
+ RenderAgentStateMessage,
25
+ RenderResultMessage,
26
+ RenderImageMessage,
18
27
  }: MessagesProps) => {
19
28
  const { labels } = useChatContext();
20
- const { visibleMessages, interrupt } = useCopilotChat();
29
+ const { messages: visibleMessages, interrupt } = useCopilotChat();
21
30
  const initialMessages = useMemo(() => makeInitialMessages(labels.initial), [labels.initial]);
22
31
  const messages = [...initialMessages, ...visibleMessages];
23
32
  const { messagesContainerRef, messagesEndRef } = useScrollToBottom(messages);
24
33
 
34
+ // Check if any legacy props are provided
35
+ const hasLegacyProps = !!(
36
+ RenderTextMessage ||
37
+ RenderActionExecutionMessage ||
38
+ RenderAgentStateMessage ||
39
+ RenderResultMessage ||
40
+ RenderImageMessage
41
+ );
42
+
43
+ // Show deprecation warning if legacy props are used
44
+ useEffect(() => {
45
+ if (hasLegacyProps) {
46
+ console.warn(
47
+ "[CopilotKit] Legacy message render props (RenderTextMessage, RenderActionExecutionMessage, etc.) are deprecated. " +
48
+ "Please use the unified 'RenderMessage' prop instead. " +
49
+ "See migration guide: https://docs.copilotkit.ai/migration/render-message",
50
+ );
51
+ }
52
+ }, [hasLegacyProps]);
53
+
54
+ // Create legacy props object for the adapter
55
+ const legacyProps: LegacyRenderProps = useMemo(
56
+ () => ({
57
+ RenderTextMessage,
58
+ RenderActionExecutionMessage,
59
+ RenderAgentStateMessage,
60
+ RenderResultMessage,
61
+ RenderImageMessage,
62
+ }),
63
+ [
64
+ RenderTextMessage,
65
+ RenderActionExecutionMessage,
66
+ RenderAgentStateMessage,
67
+ RenderResultMessage,
68
+ RenderImageMessage,
69
+ ],
70
+ );
71
+
72
+ // Determine which render component to use
73
+ const MessageRenderer = hasLegacyProps
74
+ ? (props: any) => <LegacyRenderMessage {...props} legacyProps={legacyProps} />
75
+ : RenderMessage;
76
+
25
77
  return (
26
78
  <div className="copilotKitMessages" ref={messagesContainerRef}>
27
79
  <div className="copilotKitMessagesContainer">
28
80
  {messages.map((message, index) => {
29
81
  const isCurrentMessage = index === messages.length - 1;
30
82
  return (
31
- <RenderMessage
83
+ <MessageRenderer
32
84
  key={index}
33
85
  message={message}
34
86
  inProgress={inProgress}
@@ -36,6 +88,7 @@ export const Messages = ({
36
88
  isCurrentMessage={isCurrentMessage}
37
89
  AssistantMessage={AssistantMessage}
38
90
  UserMessage={UserMessage}
91
+ ImageRenderer={ImageRenderer}
39
92
  onRegenerate={onRegenerate}
40
93
  onCopy={onCopy}
41
94
  onThumbsUp={onThumbsUp}
@@ -69,7 +122,7 @@ function makeInitialMessages(initial: string | string[] | undefined): Message[]
69
122
  return [
70
123
  {
71
124
  id: initial,
72
- role: "system",
125
+ role: "assistant",
73
126
  content: initial,
74
127
  },
75
128
  ];
@@ -0,0 +1,143 @@
1
+ import React from "react";
2
+ import { RenderMessageProps } from "../props";
3
+ import { RenderMessage as DefaultRenderMessage } from "./RenderMessage";
4
+ import { aguiToGQL } from "@copilotkit/runtime-client-gql";
5
+
6
+ /**
7
+ * Legacy message render props interface for backwards compatibility
8
+ */
9
+ export interface LegacyRenderProps {
10
+ RenderTextMessage?: React.ComponentType<RenderMessageProps>;
11
+ RenderActionExecutionMessage?: React.ComponentType<RenderMessageProps>;
12
+ RenderAgentStateMessage?: React.ComponentType<RenderMessageProps>;
13
+ RenderResultMessage?: React.ComponentType<RenderMessageProps>;
14
+ RenderImageMessage?: React.ComponentType<RenderMessageProps>;
15
+ }
16
+
17
+ /**
18
+ * Props for the LegacyRenderMessage component
19
+ */
20
+ export interface LegacyRenderMessageProps extends RenderMessageProps {
21
+ legacyProps: LegacyRenderProps;
22
+ }
23
+
24
+ /**
25
+ * Legacy message adapter component that maps old render props to new message types.
26
+ * This component provides backwards compatibility for the deprecated render props.
27
+ */
28
+ export const LegacyRenderMessage: React.FC<LegacyRenderMessageProps> = ({
29
+ message,
30
+ inProgress,
31
+ index,
32
+ isCurrentMessage,
33
+ actionResult,
34
+ AssistantMessage,
35
+ UserMessage,
36
+ ImageRenderer,
37
+ onRegenerate,
38
+ onCopy,
39
+ onThumbsUp,
40
+ onThumbsDown,
41
+ markdownTagRenderers,
42
+ legacyProps,
43
+ }) => {
44
+ const {
45
+ RenderTextMessage,
46
+ RenderActionExecutionMessage,
47
+ RenderAgentStateMessage,
48
+ RenderResultMessage,
49
+ RenderImageMessage,
50
+ } = legacyProps;
51
+
52
+ const deprecatedMessage = aguiToGQL(message)[0] ?? undefined;
53
+
54
+ // Route to appropriate legacy renderer based on message type
55
+ if (deprecatedMessage.isTextMessage() && RenderTextMessage) {
56
+ return (
57
+ <RenderTextMessage
58
+ message={message}
59
+ inProgress={inProgress}
60
+ index={index}
61
+ isCurrentMessage={isCurrentMessage}
62
+ AssistantMessage={AssistantMessage}
63
+ UserMessage={UserMessage}
64
+ onRegenerate={onRegenerate}
65
+ onCopy={onCopy}
66
+ onThumbsUp={onThumbsUp}
67
+ onThumbsDown={onThumbsDown}
68
+ markdownTagRenderers={markdownTagRenderers}
69
+ />
70
+ );
71
+ }
72
+
73
+ if (deprecatedMessage.isActionExecutionMessage() && RenderActionExecutionMessage) {
74
+ return (
75
+ <RenderActionExecutionMessage
76
+ message={message}
77
+ inProgress={inProgress}
78
+ index={index}
79
+ isCurrentMessage={isCurrentMessage}
80
+ actionResult={actionResult}
81
+ AssistantMessage={AssistantMessage}
82
+ UserMessage={UserMessage}
83
+ />
84
+ );
85
+ }
86
+
87
+ if (deprecatedMessage.isAgentStateMessage() && RenderAgentStateMessage) {
88
+ return (
89
+ <RenderAgentStateMessage
90
+ message={message}
91
+ inProgress={inProgress}
92
+ index={index}
93
+ isCurrentMessage={isCurrentMessage}
94
+ AssistantMessage={AssistantMessage}
95
+ UserMessage={UserMessage}
96
+ />
97
+ );
98
+ }
99
+
100
+ if (deprecatedMessage.isResultMessage() && RenderResultMessage) {
101
+ return (
102
+ <RenderResultMessage
103
+ message={message}
104
+ inProgress={inProgress}
105
+ index={index}
106
+ isCurrentMessage={isCurrentMessage}
107
+ AssistantMessage={AssistantMessage}
108
+ UserMessage={UserMessage}
109
+ />
110
+ );
111
+ }
112
+
113
+ if (deprecatedMessage.isImageMessage() && RenderImageMessage) {
114
+ return (
115
+ <RenderImageMessage
116
+ message={message}
117
+ inProgress={inProgress}
118
+ index={index}
119
+ isCurrentMessage={isCurrentMessage}
120
+ AssistantMessage={AssistantMessage}
121
+ UserMessage={UserMessage}
122
+ />
123
+ );
124
+ }
125
+
126
+ // Fallback to default RenderMessage for any unhandled cases
127
+ return (
128
+ <DefaultRenderMessage
129
+ message={message}
130
+ inProgress={inProgress}
131
+ index={index}
132
+ isCurrentMessage={isCurrentMessage}
133
+ AssistantMessage={AssistantMessage}
134
+ UserMessage={UserMessage}
135
+ ImageRenderer={ImageRenderer}
136
+ onRegenerate={onRegenerate}
137
+ onCopy={onCopy}
138
+ onThumbsUp={onThumbsUp}
139
+ onThumbsDown={onThumbsDown}
140
+ markdownTagRenderers={markdownTagRenderers}
141
+ />
142
+ );
143
+ };
@@ -26,6 +26,7 @@ export function RenderMessage({
26
26
  return (
27
27
  <UserMessage
28
28
  key={index}
29
+ rawData={message}
29
30
  data-message-role="user"
30
31
  message={message}
31
32
  ImageRenderer={ImageRenderer}
@@ -36,6 +37,8 @@ export function RenderMessage({
36
37
  <AssistantMessage
37
38
  key={index}
38
39
  data-message-role="assistant"
40
+ subComponent={message.generativeUI?.()}
41
+ rawData={message}
39
42
  message={message}
40
43
  isLoading={inProgress && isCurrentMessage && !message.content}
41
44
  isGenerating={inProgress && isCurrentMessage && !!message.content}
@@ -112,6 +112,31 @@ export interface MessagesProps {
112
112
  * Useful when you want to render custom elements in the message (e.g a reference tag element)
113
113
  */
114
114
  markdownTagRenderers?: ComponentsMap;
115
+
116
+ /**
117
+ * @deprecated Use RenderMessage instead
118
+ */
119
+ RenderTextMessage?: React.ComponentType<RenderMessageProps>;
120
+
121
+ /**
122
+ * @deprecated Use RenderMessage instead
123
+ */
124
+ RenderActionExecutionMessage?: React.ComponentType<RenderMessageProps>;
125
+
126
+ /**
127
+ * @deprecated Use RenderMessage instead
128
+ */
129
+ RenderAgentStateMessage?: React.ComponentType<RenderMessageProps>;
130
+
131
+ /**
132
+ * @deprecated Use RenderMessage instead
133
+ */
134
+ RenderResultMessage?: React.ComponentType<RenderMessageProps>;
135
+
136
+ /**
137
+ * @deprecated Use RenderMessage instead
138
+ */
139
+ RenderImageMessage?: React.ComponentType<RenderMessageProps>;
115
140
  }
116
141
 
117
142
  export interface Renderer {
@@ -121,6 +146,13 @@ export interface Renderer {
121
146
  export interface UserMessageProps {
122
147
  message?: UserMessage;
123
148
  ImageRenderer: React.ComponentType<ImageRendererProps>;
149
+
150
+ /**
151
+ * @deprecated use message instead
152
+ *
153
+ * The raw data from the assistant's response
154
+ */
155
+ rawData: any;
124
156
  }
125
157
 
126
158
  export interface AssistantMessageProps {
@@ -175,6 +207,31 @@ export interface AssistantMessageProps {
175
207
  * A custom image rendering component to use instead of the default.
176
208
  */
177
209
  ImageRenderer?: React.ComponentType<ImageRendererProps>;
210
+
211
+ /**
212
+ * @deprecated use message instead
213
+ *
214
+ * The raw data from the assistant's response
215
+ */
216
+ rawData: any;
217
+
218
+ /**
219
+ *
220
+ * @deprecated
221
+ *
222
+ * use `message.generativeUI()` instead.
223
+ *
224
+ * For example:
225
+ *
226
+ * ```tsx
227
+ * const CustomAssistantMessage = ({ message }: AssistantMessageProps) => {
228
+ * const subComponent = message?.generativeUI?.();
229
+ * return <div>{subComponent}</div>;
230
+ * };
231
+ *
232
+ * ```
233
+ */
234
+ subComponent?: React.JSX.Element;
178
235
  }
179
236
 
180
237
  export interface RenderMessageProps {