@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.
- package/CHANGELOG.md +118 -0
- package/dist/{chunk-U5ATIGWH.mjs → chunk-BJHJBS5M.mjs} +45 -5
- package/dist/chunk-BJHJBS5M.mjs.map +1 -0
- package/dist/{chunk-TW4LLLTE.mjs → chunk-GBP47ONN.mjs} +2 -2
- package/dist/{chunk-2KG77MAY.mjs → chunk-GJ4SX4JE.mjs} +38 -29
- package/dist/chunk-GJ4SX4JE.mjs.map +1 -0
- package/dist/{chunk-6C3YVF5W.mjs → chunk-J5ZZR6YB.mjs} +2 -2
- package/dist/chunk-MIVUCSGO.mjs +126 -0
- package/dist/chunk-MIVUCSGO.mjs.map +1 -0
- package/dist/{chunk-JHUTTP5C.mjs → chunk-T5QU6KSB.mjs} +5 -1
- package/dist/chunk-T5QU6KSB.mjs.map +1 -0
- package/dist/{chunk-7K2X77PW.mjs → chunk-Y44VLEUH.mjs} +8 -8
- package/dist/components/chat/Chat.d.ts +21 -2
- package/dist/components/chat/Chat.js +1022 -856
- package/dist/components/chat/Chat.js.map +1 -1
- package/dist/components/chat/Chat.mjs +7 -6
- package/dist/components/chat/Messages.d.ts +1 -1
- package/dist/components/chat/Messages.js +984 -23
- package/dist/components/chat/Messages.js.map +1 -1
- package/dist/components/chat/Messages.mjs +9 -1
- package/dist/components/chat/Modal.js +1030 -864
- package/dist/components/chat/Modal.js.map +1 -1
- package/dist/components/chat/Modal.mjs +8 -7
- package/dist/components/chat/Popup.js +1032 -866
- package/dist/components/chat/Popup.js.map +1 -1
- package/dist/components/chat/Popup.mjs +9 -8
- package/dist/components/chat/Sidebar.js +1032 -866
- package/dist/components/chat/Sidebar.js.map +1 -1
- package/dist/components/chat/Sidebar.mjs +9 -8
- package/dist/components/chat/index.js +1034 -868
- package/dist/components/chat/index.js.map +1 -1
- package/dist/components/chat/index.mjs +16 -15
- package/dist/components/chat/messages/LegacyRenderMessage.d.ts +28 -0
- package/dist/components/chat/messages/LegacyRenderMessage.js +980 -0
- package/dist/components/chat/messages/LegacyRenderMessage.js.map +1 -0
- package/dist/components/chat/messages/LegacyRenderMessage.mjs +17 -0
- package/dist/components/chat/messages/LegacyRenderMessage.mjs.map +1 -0
- package/dist/components/chat/messages/RenderMessage.js +4 -0
- package/dist/components/chat/messages/RenderMessage.js.map +1 -1
- package/dist/components/chat/messages/RenderMessage.mjs +1 -1
- package/dist/components/chat/props.d.ts +49 -0
- package/dist/components/chat/props.js.map +1 -1
- package/dist/components/index.js +1034 -868
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +16 -15
- package/dist/index.js +1034 -868
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +16 -15
- package/package.json +4 -4
- package/src/components/chat/Chat.tsx +50 -14
- package/src/components/chat/Messages.tsx +56 -3
- package/src/components/chat/messages/LegacyRenderMessage.tsx +143 -0
- package/src/components/chat/messages/RenderMessage.tsx +3 -0
- package/src/components/chat/props.ts +57 -0
- package/dist/chunk-2KG77MAY.mjs.map +0 -1
- package/dist/chunk-JHUTTP5C.mjs.map +0 -1
- package/dist/chunk-U5ATIGWH.mjs.map +0 -1
- /package/dist/{chunk-TW4LLLTE.mjs.map → chunk-GBP47ONN.mjs.map} +0 -0
- /package/dist/{chunk-6C3YVF5W.mjs.map → chunk-J5ZZR6YB.mjs.map} +0 -0
- /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-
|
|
7
|
+
} from "./chunk-GBP47ONN.mjs";
|
|
8
8
|
import "./chunk-WB3YULQ4.mjs";
|
|
9
9
|
import {
|
|
10
10
|
CopilotPopup
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
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-
|
|
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
|
|
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
|
|
55
|
-
"@copilotkit/runtime-client-gql": "1.10.0
|
|
56
|
-
"@copilotkit/shared": "1.10.0
|
|
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
|
-
|
|
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={
|
|
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
|
-
|
|
761
|
-
|
|
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 (
|
|
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 (
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
<
|
|
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: "
|
|
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 {
|