@copilotkit/react-ui 0.37.0 → 0.38.0-beta.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/.turbo/turbo-build.log +72 -77
- package/CHANGELOG.md +13 -0
- package/dist/{chunk-IEV5SYHX.mjs → chunk-5B6K3N4M.mjs} +7 -7
- package/dist/{chunk-GKZ5DRPT.mjs → chunk-B5UDC4YJ.mjs} +2 -2
- package/dist/chunk-DYXI54LF.mjs +126 -0
- package/dist/chunk-DYXI54LF.mjs.map +1 -0
- package/dist/{chunk-F4KCDLRJ.mjs → chunk-GICTFOCR.mjs} +11 -11
- package/dist/chunk-GICTFOCR.mjs.map +1 -0
- package/dist/{chunk-MSSOYSBR.mjs → chunk-U3TLLYFC.mjs} +2 -2
- package/dist/{chunk-4MKP23AD.mjs → chunk-U566UC72.mjs} +9 -2
- package/dist/chunk-U566UC72.mjs.map +1 -0
- package/dist/{chunk-LZHY5L7A.mjs → chunk-U6J5DGOE.mjs} +2 -2
- package/dist/{chunk-ANO23V2M.mjs → chunk-VOBX4JOA.mjs} +5 -2
- package/dist/chunk-VOBX4JOA.mjs.map +1 -0
- package/dist/components/chat/Button.d.ts +1 -1
- package/dist/components/chat/Chat.d.ts +1 -1
- package/dist/components/chat/Chat.js +73 -65
- package/dist/components/chat/Chat.js.map +1 -1
- package/dist/components/chat/Chat.mjs +7 -7
- package/dist/components/chat/Header.d.ts +1 -1
- package/dist/components/chat/Input.d.ts +1 -1
- package/dist/components/chat/Input.js +4 -1
- package/dist/components/chat/Input.js.map +1 -1
- package/dist/components/chat/Input.mjs +2 -2
- package/dist/components/chat/Messages.d.ts +1 -1
- package/dist/components/chat/Messages.js +55 -59
- package/dist/components/chat/Messages.js.map +1 -1
- package/dist/components/chat/Messages.mjs +2 -2
- package/dist/components/chat/Modal.d.ts +1 -1
- package/dist/components/chat/Modal.js +73 -65
- package/dist/components/chat/Modal.js.map +1 -1
- package/dist/components/chat/Modal.mjs +8 -8
- package/dist/components/chat/Popup.d.ts +1 -1
- package/dist/components/chat/Popup.js +73 -65
- package/dist/components/chat/Popup.js.map +1 -1
- package/dist/components/chat/Popup.mjs +9 -9
- package/dist/components/chat/Response.d.ts +1 -1
- package/dist/components/chat/Sidebar.d.ts +1 -1
- package/dist/components/chat/Sidebar.js +73 -65
- package/dist/components/chat/Sidebar.js.map +1 -1
- package/dist/components/chat/Sidebar.mjs +9 -9
- package/dist/components/chat/Suggestion.d.ts +1 -1
- package/dist/components/chat/Suggestion.js +8 -1
- package/dist/components/chat/Suggestion.js.map +1 -1
- package/dist/components/chat/Suggestion.mjs +1 -1
- package/dist/components/chat/Window.d.ts +1 -1
- package/dist/components/chat/index.d.ts +1 -1
- package/dist/components/chat/index.js +73 -65
- package/dist/components/chat/index.js.map +1 -1
- package/dist/components/chat/index.mjs +10 -10
- package/dist/components/chat/props.d.ts +1 -1
- package/dist/components/chat/props.js.map +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.js +73 -65
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +10 -10
- package/dist/hooks/use-push-to-talk.d.ts +1 -1
- package/dist/hooks/use-push-to-talk.js +4 -1
- package/dist/hooks/use-push-to-talk.js.map +1 -1
- package/dist/hooks/use-push-to-talk.mjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +75 -67
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -10
- package/package.json +7 -6
- package/src/components/chat/Chat.tsx +4 -5
- package/src/components/chat/Messages.tsx +98 -98
- package/src/components/chat/Suggestion.tsx +9 -1
- package/src/components/chat/props.ts +1 -1
- package/src/hooks/use-push-to-talk.tsx +5 -3
- package/dist/chunk-23PTCJ2T.mjs +0 -122
- package/dist/chunk-23PTCJ2T.mjs.map +0 -1
- package/dist/chunk-4MKP23AD.mjs.map +0 -1
- package/dist/chunk-ANO23V2M.mjs.map +0 -1
- package/dist/chunk-F4KCDLRJ.mjs.map +0 -1
- package/dist/types/types.d.ts +0 -16
- package/dist/types/types.js +0 -19
- package/dist/types/types.js.map +0 -1
- package/dist/types/types.mjs +0 -1
- package/dist/types/types.mjs.map +0 -1
- package/src/types/types.ts +0 -18
- /package/dist/{chunk-IEV5SYHX.mjs.map → chunk-5B6K3N4M.mjs.map} +0 -0
- /package/dist/{chunk-GKZ5DRPT.mjs.map → chunk-B5UDC4YJ.mjs.map} +0 -0
- /package/dist/{chunk-MSSOYSBR.mjs.map → chunk-U3TLLYFC.mjs.map} +0 -0
- /package/dist/{chunk-LZHY5L7A.mjs.map → chunk-U6J5DGOE.mjs.map} +0 -0
|
@@ -59,7 +59,7 @@ import { SystemMessageFunction, useCopilotChat, useCopilotContext } from "@copil
|
|
|
59
59
|
import { nanoid } from "nanoid";
|
|
60
60
|
import { reloadSuggestions } from "./Suggestion";
|
|
61
61
|
import { CopilotChatSuggestion } from "../../types/suggestions";
|
|
62
|
-
import { Message } from "@copilotkit/
|
|
62
|
+
import { Message, Role, TextMessage } from "@copilotkit/runtime-client-gql";
|
|
63
63
|
import { InputProps, MessagesProps, ResponseButtonProps } from "./props";
|
|
64
64
|
|
|
65
65
|
/**
|
|
@@ -274,11 +274,10 @@ export const useCopilotChatLogic = (
|
|
|
274
274
|
abortSuggestions();
|
|
275
275
|
setCurrentSuggestions([]);
|
|
276
276
|
onSubmitMessage?.(messageContent);
|
|
277
|
-
const message: Message = {
|
|
278
|
-
id: nanoid(),
|
|
277
|
+
const message: Message = new TextMessage({
|
|
279
278
|
content: messageContent,
|
|
280
|
-
role:
|
|
281
|
-
};
|
|
279
|
+
role: Role.User,
|
|
280
|
+
});
|
|
282
281
|
appendMessage(message);
|
|
283
282
|
return message;
|
|
284
283
|
};
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import React, { useEffect, useMemo } from "react";
|
|
2
|
-
import { MessagesProps
|
|
2
|
+
import { MessagesProps } from "./props";
|
|
3
3
|
import { useChatContext } from "./ChatContext";
|
|
4
4
|
import { nanoid } from "nanoid";
|
|
5
|
-
import { Message, decodeResult } from "@copilotkit/shared";
|
|
6
5
|
import { Markdown } from "./Markdown";
|
|
7
|
-
import {
|
|
6
|
+
import { RenderFunctionStatus, useCopilotContext } from "@copilotkit/react-core";
|
|
7
|
+
import {
|
|
8
|
+
MessageStatusCode,
|
|
9
|
+
ActionExecutionMessage,
|
|
10
|
+
Message,
|
|
11
|
+
ResultMessage,
|
|
12
|
+
TextMessage,
|
|
13
|
+
Role,
|
|
14
|
+
} from "@copilotkit/runtime-client-gql";
|
|
8
15
|
|
|
9
16
|
export const Messages = ({ messages, inProgress, children }: MessagesProps) => {
|
|
10
17
|
const { chatComponentsCache } = useCopilotContext();
|
|
18
|
+
|
|
11
19
|
const context = useChatContext();
|
|
12
20
|
const initialMessages = useMemo(
|
|
13
21
|
() => makeInitialMessages(context.labels.initial),
|
|
@@ -18,10 +26,14 @@ export const Messages = ({ messages, inProgress, children }: MessagesProps) => {
|
|
|
18
26
|
const functionResults: Record<string, string> = {};
|
|
19
27
|
|
|
20
28
|
for (let i = 0; i < messages.length; i++) {
|
|
21
|
-
if (messages[i]
|
|
29
|
+
if (messages[i] instanceof ActionExecutionMessage) {
|
|
22
30
|
const id = messages[i].id;
|
|
23
|
-
|
|
24
|
-
|
|
31
|
+
const resultMessage: ResultMessage | undefined = messages.find(
|
|
32
|
+
(message) => message instanceof ResultMessage && message.actionExecutionId === id,
|
|
33
|
+
) as ResultMessage | undefined;
|
|
34
|
+
|
|
35
|
+
if (resultMessage) {
|
|
36
|
+
functionResults[id] = ResultMessage.decodeResult(resultMessage.result || "");
|
|
25
37
|
}
|
|
26
38
|
}
|
|
27
39
|
}
|
|
@@ -45,104 +57,90 @@ export const Messages = ({ messages, inProgress, children }: MessagesProps) => {
|
|
|
45
57
|
{messages.map((message, index) => {
|
|
46
58
|
const isCurrentMessage = index === messages.length - 1;
|
|
47
59
|
|
|
48
|
-
if (message.role === "user") {
|
|
60
|
+
if (message instanceof TextMessage && message.role === "user") {
|
|
49
61
|
return (
|
|
50
62
|
<div key={index} className="copilotKitMessage copilotKitUserMessage">
|
|
51
63
|
{message.content}
|
|
52
64
|
</div>
|
|
53
65
|
);
|
|
54
|
-
} else if (message.role == "assistant") {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return (
|
|
77
|
-
<div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>
|
|
78
|
-
{context.icons.spinnerIcon} <span className="inProgressLabel">{render}</span>
|
|
79
|
-
</div>
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
// Done - silent by default to avoid a series of "done" messages
|
|
83
|
-
else {
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
66
|
+
} else if (message instanceof TextMessage && message.role == "assistant") {
|
|
67
|
+
return (
|
|
68
|
+
<div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>
|
|
69
|
+
{isCurrentMessage && inProgress && !message.content ? (
|
|
70
|
+
context.icons.spinnerIcon
|
|
71
|
+
) : (
|
|
72
|
+
<Markdown content={message.content} />
|
|
73
|
+
)}
|
|
74
|
+
</div>
|
|
75
|
+
);
|
|
76
|
+
} else if (message instanceof ActionExecutionMessage) {
|
|
77
|
+
if (chatComponentsCache.current !== null && chatComponentsCache.current[message.name]) {
|
|
78
|
+
const render = chatComponentsCache.current[message.name];
|
|
79
|
+
// render a static string
|
|
80
|
+
if (typeof render === "string") {
|
|
81
|
+
// when render is static, we show it only when in progress
|
|
82
|
+
if (isCurrentMessage && inProgress) {
|
|
83
|
+
return (
|
|
84
|
+
<div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>
|
|
85
|
+
{context.icons.spinnerIcon} <span className="inProgressLabel">{render}</span>
|
|
86
|
+
</div>
|
|
87
|
+
);
|
|
86
88
|
}
|
|
87
|
-
//
|
|
89
|
+
// Done - silent by default to avoid a series of "done" messages
|
|
88
90
|
else {
|
|
89
|
-
|
|
90
|
-
? JSON.parse(message.function_call.arguments || "{}")
|
|
91
|
-
: message.partialFunctionCall?.arguments;
|
|
92
|
-
|
|
93
|
-
let status: RenderFunctionStatus = "inProgress";
|
|
94
|
-
|
|
95
|
-
if (functionResults[message.id] !== undefined) {
|
|
96
|
-
status = "complete";
|
|
97
|
-
} else if (message.function_call) {
|
|
98
|
-
status = "executing";
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
const toRender = render({
|
|
102
|
-
status: status as any,
|
|
103
|
-
args,
|
|
104
|
-
result: functionResults[message.id],
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
// No result and complete: stay silent
|
|
108
|
-
if (!toRender && status === "complete") {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
if (typeof toRender === "string") {
|
|
113
|
-
return (
|
|
114
|
-
<div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>
|
|
115
|
-
{isCurrentMessage && inProgress && context.icons.spinnerIcon} {toRender}
|
|
116
|
-
</div>
|
|
117
|
-
);
|
|
118
|
-
} else {
|
|
119
|
-
return (
|
|
120
|
-
<div key={index} className="copilotKitCustomAssistantMessage">
|
|
121
|
-
{toRender}
|
|
122
|
-
</div>
|
|
123
|
-
);
|
|
124
|
-
}
|
|
91
|
+
return null;
|
|
125
92
|
}
|
|
126
93
|
}
|
|
127
|
-
//
|
|
128
|
-
else
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
94
|
+
// render is a function
|
|
95
|
+
else {
|
|
96
|
+
const args = message.arguments;
|
|
97
|
+
|
|
98
|
+
let status: RenderFunctionStatus = "inProgress";
|
|
99
|
+
|
|
100
|
+
if (functionResults[message.id] !== undefined) {
|
|
101
|
+
status = "complete";
|
|
102
|
+
} else if (message.status.code !== MessageStatusCode.Pending) {
|
|
103
|
+
status = "executing";
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const toRender = render({
|
|
107
|
+
status: status as any,
|
|
108
|
+
args,
|
|
109
|
+
result: functionResults[message.id],
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
// No result and complete: stay silent
|
|
113
|
+
if (!toRender && status === "complete") {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (typeof toRender === "string") {
|
|
118
|
+
return (
|
|
119
|
+
<div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>
|
|
120
|
+
{isCurrentMessage && inProgress && context.icons.spinnerIcon} {toRender}
|
|
121
|
+
</div>
|
|
122
|
+
);
|
|
123
|
+
} else {
|
|
124
|
+
return (
|
|
125
|
+
<div key={index} className="copilotKitCustomAssistantMessage">
|
|
126
|
+
{toRender}
|
|
127
|
+
</div>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
138
130
|
}
|
|
139
131
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
132
|
+
// No render function found- show the default message
|
|
133
|
+
else if (!inProgress || !isCurrentMessage) {
|
|
134
|
+
// Done - silent by default to avoid a series of "done" messages
|
|
135
|
+
return null;
|
|
136
|
+
} else {
|
|
137
|
+
// In progress
|
|
138
|
+
return (
|
|
139
|
+
<div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>
|
|
140
|
+
{context.icons.spinnerIcon}
|
|
141
|
+
</div>
|
|
142
|
+
);
|
|
143
|
+
}
|
|
146
144
|
}
|
|
147
145
|
})}
|
|
148
146
|
<footer ref={messagesEndRef}>{children}</footer>
|
|
@@ -160,9 +158,11 @@ function makeInitialMessages(initial?: string | string[]): Message[] {
|
|
|
160
158
|
}
|
|
161
159
|
}
|
|
162
160
|
|
|
163
|
-
return initialArray.map(
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
161
|
+
return initialArray.map(
|
|
162
|
+
(message) =>
|
|
163
|
+
new TextMessage({
|
|
164
|
+
role: Role.Assistant,
|
|
165
|
+
content: message,
|
|
166
|
+
}),
|
|
167
|
+
);
|
|
168
168
|
}
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
import { SuggestionsProps } from "./props";
|
|
7
7
|
import { SmallSpinnerIcon } from "./Icons";
|
|
8
8
|
import { CopilotChatSuggestion } from "../../types/suggestions";
|
|
9
|
+
import { actionParametersToJsonSchema } from "@copilotkit/shared";
|
|
9
10
|
|
|
10
11
|
export function Suggestion({ title, message, onClick, partial, className }: SuggestionsProps) {
|
|
11
12
|
return (
|
|
@@ -30,7 +31,14 @@ export const reloadSuggestions = async (
|
|
|
30
31
|
abortControllerRef: React.MutableRefObject<AbortController | null>,
|
|
31
32
|
) => {
|
|
32
33
|
const abortController = abortControllerRef.current;
|
|
33
|
-
|
|
34
|
+
|
|
35
|
+
const tools = JSON.stringify(
|
|
36
|
+
Object.values(context.actions).map((action) => ({
|
|
37
|
+
name: action.name,
|
|
38
|
+
description: action.description,
|
|
39
|
+
jsonSchema: JSON.stringify(actionParametersToJsonSchema(action.parameters)),
|
|
40
|
+
})),
|
|
41
|
+
);
|
|
34
42
|
|
|
35
43
|
const allSuggestions: CopilotChatSuggestion[] = [];
|
|
36
44
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Message } from "@copilotkit/
|
|
1
|
+
import { useCopilotContext } from "@copilotkit/react-core";
|
|
2
|
+
import { Message, TextMessage } from "@copilotkit/runtime-client-gql";
|
|
3
3
|
import { MutableRefObject, useEffect, useRef, useState } from "react";
|
|
4
4
|
|
|
5
5
|
export const checkMicrophonePermission = async () => {
|
|
@@ -149,7 +149,9 @@ export const usePushToTalk = ({
|
|
|
149
149
|
|
|
150
150
|
const messagesAfterLast = context.messages
|
|
151
151
|
.slice(lastMessageIndex + 1)
|
|
152
|
-
.filter(
|
|
152
|
+
.filter(
|
|
153
|
+
(message) => message instanceof TextMessage && message.role === "assistant",
|
|
154
|
+
) as TextMessage[];
|
|
153
155
|
|
|
154
156
|
const text = messagesAfterLast.map((message) => message.content).join("\n");
|
|
155
157
|
playAudioResponse(text, context.copilotApiConfig.textToSpeechUrl!, audioContextRef.current!);
|
package/dist/chunk-23PTCJ2T.mjs
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Markdown
|
|
3
|
-
} from "./chunk-YQ3D5IQV.mjs";
|
|
4
|
-
import {
|
|
5
|
-
useChatContext
|
|
6
|
-
} from "./chunk-BJPGMY3I.mjs";
|
|
7
|
-
|
|
8
|
-
// src/components/chat/Messages.tsx
|
|
9
|
-
import React, { useEffect, useMemo } from "react";
|
|
10
|
-
import { nanoid } from "nanoid";
|
|
11
|
-
import { decodeResult } from "@copilotkit/shared";
|
|
12
|
-
import { useCopilotContext } from "@copilotkit/react-core";
|
|
13
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
-
var Messages = ({ messages, inProgress, children }) => {
|
|
15
|
-
const { chatComponentsCache } = useCopilotContext();
|
|
16
|
-
const context = useChatContext();
|
|
17
|
-
const initialMessages = useMemo(
|
|
18
|
-
() => makeInitialMessages(context.labels.initial),
|
|
19
|
-
[context.labels.initial]
|
|
20
|
-
);
|
|
21
|
-
messages = [...initialMessages, ...messages];
|
|
22
|
-
const functionResults = {};
|
|
23
|
-
for (let i = 0; i < messages.length; i++) {
|
|
24
|
-
if (messages[i].role === "assistant" && messages[i].function_call) {
|
|
25
|
-
const id = messages[i].id;
|
|
26
|
-
if (i + 1 < messages.length && messages[i + 1].role === "function") {
|
|
27
|
-
functionResults[id] = decodeResult(messages[i + 1].content || "");
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
const messagesEndRef = React.useRef(null);
|
|
32
|
-
const scrollToBottom = () => {
|
|
33
|
-
if (messagesEndRef.current) {
|
|
34
|
-
messagesEndRef.current.scrollIntoView({
|
|
35
|
-
behavior: "auto"
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
useEffect(() => {
|
|
40
|
-
scrollToBottom();
|
|
41
|
-
}, [messages]);
|
|
42
|
-
return /* @__PURE__ */ jsxs("div", { className: "copilotKitMessages", children: [
|
|
43
|
-
messages.map((message, index) => {
|
|
44
|
-
var _a, _b, _c;
|
|
45
|
-
const isCurrentMessage = index === messages.length - 1;
|
|
46
|
-
if (message.role === "user") {
|
|
47
|
-
return /* @__PURE__ */ jsx("div", { className: "copilotKitMessage copilotKitUserMessage", children: message.content }, index);
|
|
48
|
-
} else if (message.role == "assistant") {
|
|
49
|
-
if (isCurrentMessage && inProgress && !message.content && !message.partialFunctionCall) {
|
|
50
|
-
return /* @__PURE__ */ jsx("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: context.icons.spinnerIcon }, index);
|
|
51
|
-
} else if (message.function_call || message.partialFunctionCall) {
|
|
52
|
-
const functionCallName = ((_a = message.function_call) == null ? void 0 : _a.name) || ((_b = message.partialFunctionCall) == null ? void 0 : _b.name);
|
|
53
|
-
if (chatComponentsCache.current !== null && chatComponentsCache.current[functionCallName]) {
|
|
54
|
-
const render = chatComponentsCache.current[functionCallName];
|
|
55
|
-
if (typeof render === "string") {
|
|
56
|
-
if (isCurrentMessage && inProgress) {
|
|
57
|
-
return /* @__PURE__ */ jsxs("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: [
|
|
58
|
-
context.icons.spinnerIcon,
|
|
59
|
-
" ",
|
|
60
|
-
/* @__PURE__ */ jsx("span", { className: "inProgressLabel", children: render })
|
|
61
|
-
] }, index);
|
|
62
|
-
} else {
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
} else {
|
|
66
|
-
const args = message.function_call ? JSON.parse(message.function_call.arguments || "{}") : (_c = message.partialFunctionCall) == null ? void 0 : _c.arguments;
|
|
67
|
-
let status = "inProgress";
|
|
68
|
-
if (functionResults[message.id] !== void 0) {
|
|
69
|
-
status = "complete";
|
|
70
|
-
} else if (message.function_call) {
|
|
71
|
-
status = "executing";
|
|
72
|
-
}
|
|
73
|
-
const toRender = render({
|
|
74
|
-
status,
|
|
75
|
-
args,
|
|
76
|
-
result: functionResults[message.id]
|
|
77
|
-
});
|
|
78
|
-
if (!toRender && status === "complete") {
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
if (typeof toRender === "string") {
|
|
82
|
-
return /* @__PURE__ */ jsxs("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: [
|
|
83
|
-
isCurrentMessage && inProgress && context.icons.spinnerIcon,
|
|
84
|
-
" ",
|
|
85
|
-
toRender
|
|
86
|
-
] }, index);
|
|
87
|
-
} else {
|
|
88
|
-
return /* @__PURE__ */ jsx("div", { className: "copilotKitCustomAssistantMessage", children: toRender }, index);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
} else if ((!inProgress || !isCurrentMessage) && message.function_call) {
|
|
92
|
-
return null;
|
|
93
|
-
} else {
|
|
94
|
-
return /* @__PURE__ */ jsx("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: context.icons.spinnerIcon }, index);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return /* @__PURE__ */ jsx("div", { className: `copilotKitMessage copilotKitAssistantMessage`, children: /* @__PURE__ */ jsx(Markdown, { content: message.content }) }, index);
|
|
98
|
-
}
|
|
99
|
-
}),
|
|
100
|
-
/* @__PURE__ */ jsx("footer", { ref: messagesEndRef, children })
|
|
101
|
-
] });
|
|
102
|
-
};
|
|
103
|
-
function makeInitialMessages(initial) {
|
|
104
|
-
let initialArray = [];
|
|
105
|
-
if (initial) {
|
|
106
|
-
if (Array.isArray(initial)) {
|
|
107
|
-
initialArray.push(...initial);
|
|
108
|
-
} else {
|
|
109
|
-
initialArray.push(initial);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
return initialArray.map((message) => ({
|
|
113
|
-
id: nanoid(),
|
|
114
|
-
role: "assistant",
|
|
115
|
-
content: message
|
|
116
|
-
}));
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export {
|
|
120
|
-
Messages
|
|
121
|
-
};
|
|
122
|
-
//# sourceMappingURL=chunk-23PTCJ2T.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/chat/Messages.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport { MessagesProps, SuggestionsProps } from \"./props\";\nimport { useChatContext } from \"./ChatContext\";\nimport { nanoid } from \"nanoid\";\nimport { Message, decodeResult } from \"@copilotkit/shared\";\nimport { Markdown } from \"./Markdown\";\nimport { ActionRenderProps, RenderFunctionStatus, useCopilotContext } from \"@copilotkit/react-core\";\n\nexport const Messages = ({ messages, inProgress, children }: MessagesProps) => {\n const { chatComponentsCache } = useCopilotContext();\n const context = useChatContext();\n const initialMessages = useMemo(\n () => makeInitialMessages(context.labels.initial),\n [context.labels.initial],\n );\n messages = [...initialMessages, ...messages];\n\n const functionResults: Record<string, string> = {};\n\n for (let i = 0; i < messages.length; i++) {\n if (messages[i].role === \"assistant\" && messages[i].function_call) {\n const id = messages[i].id;\n if (i + 1 < messages.length && messages[i + 1].role === \"function\") {\n functionResults[id] = decodeResult(messages[i + 1].content || \"\");\n }\n }\n }\n\n const messagesEndRef = React.useRef<HTMLDivElement>(null);\n\n const scrollToBottom = () => {\n if (messagesEndRef.current) {\n messagesEndRef.current.scrollIntoView({\n behavior: \"auto\",\n });\n }\n };\n\n useEffect(() => {\n scrollToBottom();\n }, [messages]);\n\n return (\n <div className=\"copilotKitMessages\">\n {messages.map((message, index) => {\n const isCurrentMessage = index === messages.length - 1;\n\n if (message.role === \"user\") {\n return (\n <div key={index} className=\"copilotKitMessage copilotKitUserMessage\">\n {message.content}\n </div>\n );\n } else if (message.role == \"assistant\") {\n if (isCurrentMessage && inProgress && !message.content && !message.partialFunctionCall) {\n // The message is in progress and there is no content- show the spinner\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {context.icons.spinnerIcon}\n </div>\n );\n } else if (message.function_call || message.partialFunctionCall) {\n // Find the action that corresponds to the function call if any\n const functionCallName: string = (message.function_call?.name ||\n message.partialFunctionCall?.name)!;\n if (\n chatComponentsCache.current !== null &&\n chatComponentsCache.current[functionCallName]\n ) {\n const render = chatComponentsCache.current[functionCallName];\n\n // render a static string\n if (typeof render === \"string\") {\n // when render is static, we show it only when in progress\n if (isCurrentMessage && inProgress) {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {context.icons.spinnerIcon} <span className=\"inProgressLabel\">{render}</span>\n </div>\n );\n }\n // Done - silent by default to avoid a series of \"done\" messages\n else {\n return null;\n }\n }\n // render is a function\n else {\n const args = message.function_call\n ? JSON.parse(message.function_call.arguments || \"{}\")\n : message.partialFunctionCall?.arguments;\n\n let status: RenderFunctionStatus = \"inProgress\";\n\n if (functionResults[message.id] !== undefined) {\n status = \"complete\";\n } else if (message.function_call) {\n status = \"executing\";\n }\n\n const toRender = render({\n status: status as any,\n args,\n result: functionResults[message.id],\n });\n\n // No result and complete: stay silent\n if (!toRender && status === \"complete\") {\n return null;\n }\n\n if (typeof toRender === \"string\") {\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {isCurrentMessage && inProgress && context.icons.spinnerIcon} {toRender}\n </div>\n );\n } else {\n return (\n <div key={index} className=\"copilotKitCustomAssistantMessage\">\n {toRender}\n </div>\n );\n }\n }\n }\n // No render function found- show the default message\n else if ((!inProgress || !isCurrentMessage) && message.function_call) {\n // Done - silent by default to avoid a series of \"done\" messages\n return null;\n } else {\n // In progress\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n {context.icons.spinnerIcon}\n </div>\n );\n }\n }\n\n return (\n <div key={index} className={`copilotKitMessage copilotKitAssistantMessage`}>\n <Markdown content={message.content} />\n </div>\n );\n }\n })}\n <footer ref={messagesEndRef}>{children}</footer>\n </div>\n );\n};\n\nfunction makeInitialMessages(initial?: string | string[]): Message[] {\n let initialArray: string[] = [];\n if (initial) {\n if (Array.isArray(initial)) {\n initialArray.push(...initial);\n } else {\n initialArray.push(initial);\n }\n }\n\n return initialArray.map((message) => ({\n id: nanoid(),\n role: \"assistant\",\n content: message,\n }));\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/chat/Suggestion.tsx"],"sourcesContent":["import {\n CopilotContextParams,\n extract,\n CopilotChatSuggestionConfiguration,\n} from \"@copilotkit/react-core\";\nimport { SuggestionsProps } from \"./props\";\nimport { SmallSpinnerIcon } from \"./Icons\";\nimport { CopilotChatSuggestion } from \"../../types/suggestions\";\n\nexport function Suggestion({ title, message, onClick, partial, className }: SuggestionsProps) {\n return (\n <button\n disabled={partial}\n onClick={(e) => {\n e.preventDefault();\n onClick(message);\n }}\n className={className || \"suggestion\"}\n >\n {partial && SmallSpinnerIcon}\n <span>{title}</span>\n </button>\n );\n}\n\nexport const reloadSuggestions = async (\n context: CopilotContextParams,\n chatSuggestionConfiguration: { [key: string]: CopilotChatSuggestionConfiguration },\n setCurrentSuggestions: (suggestions: { title: string; message: string }[]) => void,\n abortControllerRef: React.MutableRefObject<AbortController | null>,\n) => {\n const abortController = abortControllerRef.current;\n const tools = JSON.stringify(context.getChatCompletionFunctionDescriptions(context.entryPoints));\n\n const allSuggestions: CopilotChatSuggestion[] = [];\n\n for (const config of Object.values(chatSuggestionConfiguration)) {\n try {\n const numOfSuggestionsInstructions =\n config.minSuggestions === 0\n ? `Produce up to ${config.maxSuggestions} suggestions. ` +\n `If there are no highly relevant suggestions you can think of, provide an empty array.`\n : `Produce between ${config.minSuggestions} and ${config.maxSuggestions} suggestions.`;\n const result = await extract({\n context,\n instructions:\n \"Suggest what the user could say next. Provide clear, highly relevant suggestions. Do not literally suggest function calls. \" +\n config.instructions +\n \"\\n\\n\" +\n numOfSuggestionsInstructions,\n data: \"Available tools: \" + tools + \"\\n\\n\",\n parameters: [\n {\n name: \"suggestions\",\n type: \"object[]\",\n attributes: [\n {\n name: \"title\",\n description:\n \"The title of the suggestion. This is shown as a button and should be short.\",\n type: \"string\",\n },\n {\n name: \"message\",\n description:\n \"The message to send when the suggestion is clicked. This should be a clear, complete sentence and will be sent as an instruction to the AI.\",\n type: \"string\",\n },\n ],\n },\n ],\n include: {\n messages: true,\n readable: true,\n },\n abortSignal: abortController?.signal,\n stream: ({ status, args }) => {\n const suggestions = args.suggestions || [];\n const newSuggestions: CopilotChatSuggestion[] = [];\n for (let i = 0; i < suggestions.length; i++) {\n // if GPT provides too many suggestions, limit the number of suggestions\n if (config.maxSuggestions !== undefined && i >= config.maxSuggestions) {\n break;\n }\n const { title, message } = suggestions[i];\n\n // If this is the last suggestion and the status is not complete, mark it as partial\n const partial = i == suggestions.length - 1 && status !== \"complete\";\n\n newSuggestions.push({\n title,\n message,\n partial,\n className: config.className,\n });\n }\n setCurrentSuggestions([...allSuggestions, ...newSuggestions]);\n },\n });\n allSuggestions.push(...result.suggestions);\n } catch (error) {\n console.error(\"Error loading suggestions\", error);\n }\n }\n\n if (abortControllerRef.current === abortController) {\n abortControllerRef.current = null;\n }\n};\n"],"mappings":";;;;;;;;AAAA;AAAA,EAEE;AAAA,OAEK;AAOH,SASE,KATF;AAFG,SAAS,WAAW,EAAE,OAAO,SAAS,SAAS,SAAS,UAAU,GAAqB;AAC5F,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU;AAAA,MACV,SAAS,CAAC,MAAM;AACd,UAAE,eAAe;AACjB,gBAAQ,OAAO;AAAA,MACjB;AAAA,MACA,WAAW,aAAa;AAAA,MAEvB;AAAA,mBAAW;AAAA,QACZ,oBAAC,UAAM,iBAAM;AAAA;AAAA;AAAA,EACf;AAEJ;AAEO,IAAM,oBAAoB,CAC/B,SACA,6BACA,uBACA,uBACG;AACH,QAAM,kBAAkB,mBAAmB;AAC3C,QAAM,QAAQ,KAAK,UAAU,QAAQ,sCAAsC,QAAQ,WAAW,CAAC;AAE/F,QAAM,iBAA0C,CAAC;AAEjD,aAAW,UAAU,OAAO,OAAO,2BAA2B,GAAG;AAC/D,QAAI;AACF,YAAM,+BACJ,OAAO,mBAAmB,IACtB,iBAAiB,OAAO,sHAExB,mBAAmB,OAAO,sBAAsB,OAAO;AAC7D,YAAM,SAAS,MAAM,QAAQ;AAAA,QAC3B;AAAA,QACA,cACE,gIACA,OAAO,eACP,SACA;AAAA,QACF,MAAM,sBAAsB,QAAQ;AAAA,QACpC,YAAY;AAAA,UACV;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,YAAY;AAAA,cACV;AAAA,gBACE,MAAM;AAAA,gBACN,aACE;AAAA,gBACF,MAAM;AAAA,cACR;AAAA,cACA;AAAA,gBACE,MAAM;AAAA,gBACN,aACE;AAAA,gBACF,MAAM;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,QACA,SAAS;AAAA,UACP,UAAU;AAAA,UACV,UAAU;AAAA,QACZ;AAAA,QACA,aAAa,mDAAiB;AAAA,QAC9B,QAAQ,CAAC,EAAE,QAAQ,KAAK,MAAM;AAC5B,gBAAM,cAAc,KAAK,eAAe,CAAC;AACzC,gBAAM,iBAA0C,CAAC;AACjD,mBAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAE3C,gBAAI,OAAO,mBAAmB,UAAa,KAAK,OAAO,gBAAgB;AACrE;AAAA,YACF;AACA,kBAAM,EAAE,OAAO,QAAQ,IAAI,YAAY,CAAC;AAGxC,kBAAM,UAAU,KAAK,YAAY,SAAS,KAAK,WAAW;AAE1D,2BAAe,KAAK;AAAA,cAClB;AAAA,cACA;AAAA,cACA;AAAA,cACA,WAAW,OAAO;AAAA,YACpB,CAAC;AAAA,UACH;AACA,gCAAsB,CAAC,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAAA,QAC9D;AAAA,MACF,CAAC;AACD,qBAAe,KAAK,GAAG,OAAO,WAAW;AAAA,IAC3C,SAAS,OAAP;AACA,cAAQ,MAAM,6BAA6B,KAAK;AAAA,IAClD;AAAA,EACF;AAEA,MAAI,mBAAmB,YAAY,iBAAiB;AAClD,uBAAmB,UAAU;AAAA,EAC/B;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/use-push-to-talk.tsx"],"sourcesContent":["import { CopilotContextParams, useCopilotContext } from \"@copilotkit/react-core\";\nimport { Message } from \"@copilotkit/shared\";\nimport { MutableRefObject, useEffect, useRef, useState } from \"react\";\n\nexport const checkMicrophonePermission = async () => {\n try {\n const permissionStatus = await navigator.permissions.query({\n name: \"microphone\" as PermissionName,\n });\n if (permissionStatus.state === \"granted\") {\n return true;\n } else {\n return false;\n }\n } catch (err) {\n console.error(\"Error checking microphone permission\", err);\n }\n};\n\nexport const requestMicAndPlaybackPermission = async () => {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n const audioContext = new window.AudioContext();\n await audioContext.resume();\n return { stream, audioContext };\n } catch (err) {\n console.error(\"Error requesting microphone and playback permissions\", err);\n return null;\n }\n};\n\nconst startRecording = async (\n mediaStreamRef: MutableRefObject<MediaStream | null>,\n mediaRecorderRef: MutableRefObject<MediaRecorder | null>,\n audioContextRef: MutableRefObject<AudioContext | null>,\n recordedChunks: Blob[],\n onStop: () => void,\n) => {\n if (!mediaStreamRef.current || !audioContextRef.current) {\n mediaStreamRef.current = await navigator.mediaDevices.getUserMedia({ audio: true });\n audioContextRef.current = new window.AudioContext();\n await audioContextRef.current.resume();\n }\n\n mediaRecorderRef.current = new MediaRecorder(mediaStreamRef.current!);\n mediaRecorderRef.current.start(1000);\n mediaRecorderRef.current.ondataavailable = (event) => {\n recordedChunks.push(event.data);\n };\n mediaRecorderRef.current.onstop = onStop;\n};\n\nconst stopRecording = (mediaRecorderRef: MutableRefObject<MediaRecorder | null>) => {\n if (mediaRecorderRef.current && mediaRecorderRef.current.state !== \"inactive\") {\n mediaRecorderRef.current.stop();\n }\n};\n\nconst transcribeAudio = async (recordedChunks: Blob[], transcribeAudioUrl: string) => {\n const completeBlob = new Blob(recordedChunks, { type: \"audio/mp4\" });\n const formData = new FormData();\n formData.append(\"file\", completeBlob, \"recording.mp4\");\n\n const response = await fetch(transcribeAudioUrl, {\n method: \"POST\",\n body: formData,\n });\n\n if (!response.ok) {\n throw new Error(`Error: ${response.statusText}`);\n }\n\n const transcription = await response.json();\n return transcription.text;\n};\n\nconst playAudioResponse = (text: string, textToSpeechUrl: string, audioContext: AudioContext) => {\n const encodedText = encodeURIComponent(text);\n const url = `${textToSpeechUrl}?text=${encodedText}`;\n\n fetch(url)\n .then((response) => response.arrayBuffer())\n .then((arrayBuffer) => audioContext.decodeAudioData(arrayBuffer))\n .then((audioBuffer) => {\n const source = audioContext.createBufferSource();\n source.buffer = audioBuffer;\n source.connect(audioContext.destination);\n source.start(0);\n })\n .catch((error) => {\n console.error(\"Error with decoding audio data\", error);\n });\n};\n\nexport type PushToTalkState = \"idle\" | \"recording\" | \"transcribing\";\n\nexport type SendFunction = (text: string) => Promise<Message>;\n\nexport const usePushToTalk = ({\n sendFunction,\n inProgress,\n}: {\n sendFunction: SendFunction;\n inProgress: boolean;\n}) => {\n const [pushToTalkState, setPushToTalkState] = useState<PushToTalkState>(\"idle\");\n const mediaStreamRef = useRef<MediaStream | null>(null);\n const audioContextRef = useRef<AudioContext | null>(null);\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n const recordedChunks = useRef<Blob[]>([]);\n const context = useCopilotContext();\n const [startReadingFromMessageId, setStartReadingFromMessageId] = useState<string | null>(null);\n\n useEffect(() => {\n if (pushToTalkState === \"recording\") {\n startRecording(\n mediaStreamRef,\n mediaRecorderRef,\n audioContextRef,\n recordedChunks.current,\n () => {\n setPushToTalkState(\"transcribing\");\n },\n );\n } else {\n stopRecording(mediaRecorderRef);\n if (pushToTalkState === \"transcribing\") {\n transcribeAudio(recordedChunks.current, context.copilotApiConfig.transcribeAudioUrl!).then(\n async (transcription) => {\n recordedChunks.current = [];\n setPushToTalkState(\"idle\");\n const message = await sendFunction(transcription);\n setStartReadingFromMessageId(message.id);\n },\n );\n }\n }\n\n return () => {\n stopRecording(mediaRecorderRef);\n };\n }, [pushToTalkState]);\n\n useEffect(() => {\n if (inProgress === false && startReadingFromMessageId) {\n const lastMessageIndex = context.messages.findIndex(\n (message) => message.id === startReadingFromMessageId,\n );\n\n const messagesAfterLast = context.messages\n .slice(lastMessageIndex + 1)\n .filter((message) => message.role === \"assistant\" && message.content);\n\n const text = messagesAfterLast.map((message) => message.content).join(\"\\n\");\n playAudioResponse(text, context.copilotApiConfig.textToSpeechUrl!, audioContextRef.current!);\n\n setStartReadingFromMessageId(null);\n }\n }, [startReadingFromMessageId, inProgress]);\n\n return { pushToTalkState, setPushToTalkState };\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/chat/Chat.tsx"],"sourcesContent":["/**\n * An embeddable chat panel for CopilotKit.\n *\n * <img src=\"/images/CopilotChat/CopilotChat.gif\" width=\"500\" />\n *\n * A chatbot panel component for the CopilotKit framework. The component allows for a high degree\n * of customization through various props and custom CSS.\n *\n * <RequestExample>\n * ```jsx CopilotChat Example\n * import { CopilotChat } from \"@copilotkit/react-ui\";\n *\n * <CopilotChat\n * labels={{\n * title: \"Your Assistant\",\n * initial: \"Hi! 👋 How can I assist you today?\",\n * }}\n * />\n * ```\n * </RequestExample>\n *\n * ## Custom CSS\n *\n * You can customize the colors of the panel by overriding the CSS variables\n * defined in the [default styles](https://github.com/CopilotKit/CopilotKit/blob/main/CopilotKit/packages/react-ui/src/css/colors.css).\n *\n * For example, to set the primary color to purple:\n *\n * ```jsx\n * <div style={{ \"--copilot-kit-primary-color\": \"#7D5BA6\" }}>\n * <CopilotPopup />\n * </div>\n * ```\n *\n * To further customize the panel, you can override the CSS classes defined\n * [here](https://github.com/CopilotKit/CopilotKit/blob/main/CopilotKit/packages/react-ui/src/css/).\n *\n * For example:\n *\n * ```css\n * .copilotKitButton {\n * border-radius: 0;\n * }\n * ```\n */\n\nimport {\n ChatContext,\n ChatContextProvider,\n CopilotChatIcons,\n CopilotChatLabels,\n} from \"./ChatContext\";\nimport { Messages as DefaultMessages } from \"./Messages\";\nimport { Input as DefaultInput } from \"./Input\";\nimport { ResponseButton as DefaultResponseButton } from \"./Response\";\nimport { Suggestion } from \"./Suggestion\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { SystemMessageFunction, useCopilotChat, useCopilotContext } from \"@copilotkit/react-core\";\nimport { nanoid } from \"nanoid\";\nimport { reloadSuggestions } from \"./Suggestion\";\nimport { CopilotChatSuggestion } from \"../../types/suggestions\";\nimport { Message } from \"@copilotkit/shared\";\nimport { InputProps, MessagesProps, ResponseButtonProps } from \"./props\";\n\n/**\n * Props for CopilotChat component.\n */\nexport interface CopilotChatProps {\n /**\n * Custom instructions to be added to the system message. Use this property to\n * provide additional context or guidance to the language model, influencing\n * its responses. These instructions can include specific directions,\n * preferences, or criteria that the model should consider when generating\n * its output, thereby tailoring the conversation more precisely to the\n * user's needs or the application's requirements.\n */\n instructions?: string;\n\n /**\n * A callback that gets called when the in progress state changes.\n */\n onInProgress?: (inProgress: boolean) => void;\n\n /**\n * A callback that gets called when a new message it submitted.\n */\n onSubmitMessage?: (message: string) => void;\n\n /**\n * Icons can be used to set custom icons for the chat window.\n */\n icons?: CopilotChatIcons;\n\n /**\n * Labels can be used to set custom labels for the chat window.\n */\n labels?: CopilotChatLabels;\n\n /**\n * A function that takes in context string and instructions and returns\n * the system message to include in the chat request.\n * Use this to completely override the system message, when providing\n * instructions is not enough.\n */\n makeSystemMessage?: SystemMessageFunction;\n\n /**\n * Whether to show the response button.\n * @default true\n */\n showResponseButton?: boolean;\n\n /**\n * A custom Messages component to use instead of the default.\n */\n Messages?: React.ComponentType<MessagesProps>;\n\n /**\n * A custom Input component to use instead of the default.\n */\n Input?: React.ComponentType<InputProps>;\n\n /**\n * A custom ResponseButton component to use instead of the default.\n */\n ResponseButton?: React.ComponentType<ResponseButtonProps>;\n\n /**\n * A class name to apply to the root element.\n */\n className?: string;\n\n /**\n * Children to render.\n */\n children?: React.ReactNode;\n}\n\nexport function CopilotChat({\n instructions,\n onSubmitMessage,\n makeSystemMessage,\n showResponseButton = true,\n onInProgress,\n Messages = DefaultMessages,\n Input = DefaultInput,\n ResponseButton = DefaultResponseButton,\n className,\n icons,\n labels,\n}: CopilotChatProps) {\n const context = useCopilotContext();\n\n useEffect(() => {\n context.setChatInstructions(instructions || \"\");\n }, [instructions]);\n\n const {\n visibleMessages,\n isLoading,\n currentSuggestions,\n sendMessage,\n stopGeneration,\n reloadMessages,\n } = useCopilotChatLogic(makeSystemMessage, onInProgress, onSubmitMessage);\n\n const chatContext = React.useContext(ChatContext);\n const isVisible = chatContext ? chatContext.open : true;\n\n return (\n <WrappedCopilotChat icons={icons} labels={labels} className={className}>\n <Messages messages={visibleMessages} inProgress={isLoading}>\n {currentSuggestions.length > 0 && (\n <div>\n <h6>Suggested:</h6>\n <div className=\"suggestions\">\n {currentSuggestions.map((suggestion, index) => (\n <Suggestion\n key={index}\n title={suggestion.title}\n message={suggestion.message}\n partial={suggestion.partial}\n className={suggestion.className}\n onClick={(message) => sendMessage(message)}\n />\n ))}\n </div>\n </div>\n )}\n {showResponseButton && visibleMessages.length > 0 && (\n <ResponseButton\n onClick={isLoading ? stopGeneration : reloadMessages}\n inProgress={isLoading}\n />\n )}\n </Messages>\n <Input inProgress={isLoading} onSend={sendMessage} isVisible={isVisible} />\n </WrappedCopilotChat>\n );\n}\n\nexport function WrappedCopilotChat({\n children,\n icons,\n labels,\n className,\n}: {\n children: React.ReactNode;\n icons?: CopilotChatIcons;\n labels?: CopilotChatLabels;\n className?: string;\n}) {\n const chatContext = React.useContext(ChatContext);\n if (!chatContext) {\n return (\n <ChatContextProvider icons={icons} labels={labels} open={true} setOpen={() => {}}>\n <div className={`copilotKitChat ${className}`}>{children}</div>\n </ChatContextProvider>\n );\n }\n return <>{children}</>;\n}\n\nconst SUGGESTIONS_DEBOUNCE_TIMEOUT = 1000;\n\nexport const useCopilotChatLogic = (\n makeSystemMessage?: SystemMessageFunction,\n onInProgress?: (isLoading: boolean) => void,\n onSubmitMessage?: (messageContent: string) => void,\n) => {\n const { visibleMessages, appendMessage, reloadMessages, stopGeneration, isLoading } =\n useCopilotChat({\n id: nanoid(),\n makeSystemMessage,\n });\n\n const [currentSuggestions, setCurrentSuggestions] = useState<CopilotChatSuggestion[]>([]);\n const suggestionsAbortControllerRef = useRef<AbortController | null>(null);\n const debounceTimerRef = useRef<any>();\n\n const abortSuggestions = () => {\n suggestionsAbortControllerRef.current?.abort();\n suggestionsAbortControllerRef.current = null;\n };\n\n const context = useCopilotContext();\n\n useEffect(() => {\n onInProgress?.(isLoading);\n\n abortSuggestions();\n\n debounceTimerRef.current = setTimeout(\n () => {\n if (!isLoading && Object.keys(context.chatSuggestionConfiguration).length !== 0) {\n suggestionsAbortControllerRef.current = new AbortController();\n reloadSuggestions(\n context,\n context.chatSuggestionConfiguration,\n setCurrentSuggestions,\n suggestionsAbortControllerRef,\n );\n }\n },\n currentSuggestions.length == 0 ? 0 : SUGGESTIONS_DEBOUNCE_TIMEOUT,\n );\n\n return () => {\n clearTimeout(debounceTimerRef.current);\n };\n }, [isLoading, context.chatSuggestionConfiguration]);\n\n const sendMessage = async (messageContent: string) => {\n abortSuggestions();\n setCurrentSuggestions([]);\n onSubmitMessage?.(messageContent);\n const message: Message = {\n id: nanoid(),\n content: messageContent,\n role: \"user\",\n };\n appendMessage(message);\n return message;\n };\n\n return {\n visibleMessages,\n isLoading,\n currentSuggestions,\n sendMessage,\n stopGeneration,\n reloadMessages,\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAwDA,OAAO,SAAS,WAAW,QAAQ,gBAAgB;AACnD,SAAgC,gBAAgB,yBAAyB;AACzE,SAAS,cAAc;AAmHb,SA+CD,UA9CG,KADF;AAnCH,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB;AAAA,EACA,UAAAA,YAAW;AAAA,EACX,OAAAC,SAAQ;AAAA,EACR,gBAAAC,kBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,UAAU,kBAAkB;AAElC,YAAU,MAAM;AACd,YAAQ,oBAAoB,gBAAgB,EAAE;AAAA,EAChD,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,oBAAoB,mBAAmB,cAAc,eAAe;AAExE,QAAM,cAAc,MAAM,WAAW,WAAW;AAChD,QAAM,YAAY,cAAc,YAAY,OAAO;AAEnD,SACE,qBAAC,sBAAmB,OAAc,QAAgB,WAChD;AAAA,yBAACF,WAAA,EAAS,UAAU,iBAAiB,YAAY,WAC9C;AAAA,yBAAmB,SAAS,KAC3B,qBAAC,SACC;AAAA,4BAAC,QAAG,wBAAU;AAAA,QACd,oBAAC,SAAI,WAAU,eACZ,6BAAmB,IAAI,CAAC,YAAY,UACnC;AAAA,UAAC;AAAA;AAAA,YAEC,OAAO,WAAW;AAAA,YAClB,SAAS,WAAW;AAAA,YACpB,SAAS,WAAW;AAAA,YACpB,WAAW,WAAW;AAAA,YACtB,SAAS,CAAC,YAAY,YAAY,OAAO;AAAA;AAAA,UALpC;AAAA,QAMP,CACD,GACH;AAAA,SACF;AAAA,MAED,sBAAsB,gBAAgB,SAAS,KAC9C;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,SAAS,YAAY,iBAAiB;AAAA,UACtC,YAAY;AAAA;AAAA,MACd;AAAA,OAEJ;AAAA,IACA,oBAACD,QAAA,EAAM,YAAY,WAAW,QAAQ,aAAa,WAAsB;AAAA,KAC3E;AAEJ;AAEO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKG;AACD,QAAM,cAAc,MAAM,WAAW,WAAW;AAChD,MAAI,CAAC,aAAa;AAChB,WACE,oBAAC,uBAAoB,OAAc,QAAgB,MAAM,MAAM,SAAS,MAAM;AAAA,IAAC,GAC7E,8BAAC,SAAI,WAAW,kBAAkB,aAAc,UAAS,GAC3D;AAAA,EAEJ;AACA,SAAO,gCAAG,UAAS;AACrB;AAEA,IAAM,+BAA+B;AAE9B,IAAM,sBAAsB,CACjC,mBACA,cACA,oBACG;AACH,QAAM,EAAE,iBAAiB,eAAe,gBAAgB,gBAAgB,UAAU,IAChF,eAAe;AAAA,IACb,IAAI,OAAO;AAAA,IACX;AAAA,EACF,CAAC;AAEH,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,SAAkC,CAAC,CAAC;AACxF,QAAM,gCAAgC,OAA+B,IAAI;AACzE,QAAM,mBAAmB,OAAY;AAErC,QAAM,mBAAmB,MAAM;AAhPjC;AAiPI,wCAA8B,YAA9B,mBAAuC;AACvC,kCAA8B,UAAU;AAAA,EAC1C;AAEA,QAAM,UAAU,kBAAkB;AAElC,YAAU,MAAM;AACd,iDAAe;AAEf,qBAAiB;AAEjB,qBAAiB,UAAU;AAAA,MACzB,MAAM;AACJ,YAAI,CAAC,aAAa,OAAO,KAAK,QAAQ,2BAA2B,EAAE,WAAW,GAAG;AAC/E,wCAA8B,UAAU,IAAI,gBAAgB;AAC5D;AAAA,YACE;AAAA,YACA,QAAQ;AAAA,YACR;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,mBAAmB,UAAU,IAAI,IAAI;AAAA,IACvC;AAEA,WAAO,MAAM;AACX,mBAAa,iBAAiB,OAAO;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,WAAW,QAAQ,2BAA2B,CAAC;AAEnD,QAAM,cAAc,CAAO,mBAA2B;AACpD,qBAAiB;AACjB,0BAAsB,CAAC,CAAC;AACxB,uDAAkB;AAClB,UAAM,UAAmB;AAAA,MACvB,IAAI,OAAO;AAAA,MACX,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AACA,kBAAc,OAAO;AACrB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":["Messages","Input","ResponseButton"]}
|
package/dist/types/types.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Message } from '@copilotkit/shared';
|
|
2
|
-
|
|
3
|
-
interface Chat extends Record<string, any> {
|
|
4
|
-
id: string;
|
|
5
|
-
title: string;
|
|
6
|
-
createdAt: Date;
|
|
7
|
-
userId: string;
|
|
8
|
-
path: string;
|
|
9
|
-
messages: Message[];
|
|
10
|
-
sharePath?: string;
|
|
11
|
-
}
|
|
12
|
-
type ServerActionResult<Result> = Promise<Result | {
|
|
13
|
-
error: string;
|
|
14
|
-
}>;
|
|
15
|
-
|
|
16
|
-
export { Chat, ServerActionResult };
|
package/dist/types/types.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __copyProps = (to, from, except, desc) => {
|
|
7
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
-
for (let key of __getOwnPropNames(from))
|
|
9
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
-
}
|
|
12
|
-
return to;
|
|
13
|
-
};
|
|
14
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
-
|
|
16
|
-
// src/types/types.ts
|
|
17
|
-
var types_exports = {};
|
|
18
|
-
module.exports = __toCommonJS(types_exports);
|
|
19
|
-
//# sourceMappingURL=types.js.map
|
package/dist/types/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/types/types.ts"],"sourcesContent":["import { type Message } from \"@copilotkit/shared\";\n\nexport interface Chat extends Record<string, any> {\n id: string;\n title: string;\n createdAt: Date;\n userId: string;\n path: string;\n messages: Message[];\n sharePath?: string;\n}\n\nexport type ServerActionResult<Result> = Promise<\n | Result\n | {\n error: string;\n }\n>;\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
package/dist/types/types.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=types.mjs.map
|
package/dist/types/types.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/src/types/types.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { type Message } from "@copilotkit/shared";
|
|
2
|
-
|
|
3
|
-
export interface Chat extends Record<string, any> {
|
|
4
|
-
id: string;
|
|
5
|
-
title: string;
|
|
6
|
-
createdAt: Date;
|
|
7
|
-
userId: string;
|
|
8
|
-
path: string;
|
|
9
|
-
messages: Message[];
|
|
10
|
-
sharePath?: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export type ServerActionResult<Result> = Promise<
|
|
14
|
-
| Result
|
|
15
|
-
| {
|
|
16
|
-
error: string;
|
|
17
|
-
}
|
|
18
|
-
>;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|