@copilotkit/react-ui 1.10.6 → 1.50.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/dist/{chunk-H5Y4W7DM.mjs → chunk-3JYVJHL5.mjs} +6 -6
- package/dist/chunk-3YWFGNSM.mjs +32 -0
- package/dist/chunk-3YWFGNSM.mjs.map +1 -0
- package/dist/{chunk-BAD2NFZ7.mjs → chunk-CQ2WALZ7.mjs} +2 -2
- package/dist/{chunk-W7ONZTSW.mjs → chunk-E6WVAOQA.mjs} +11 -5
- package/dist/chunk-E6WVAOQA.mjs.map +1 -0
- package/dist/{chunk-ME2WM7IP.mjs → chunk-G35HUUDA.mjs} +36 -260
- package/dist/chunk-G35HUUDA.mjs.map +1 -0
- package/dist/{chunk-EZQA3UPQ.mjs → chunk-HBZW7E5Z.mjs} +16 -13
- package/dist/chunk-HBZW7E5Z.mjs.map +1 -0
- package/dist/{chunk-3QYTKBWC.mjs → chunk-IHFR6PYG.mjs} +8 -5
- package/dist/chunk-IHFR6PYG.mjs.map +1 -0
- package/dist/{chunk-5XLGXUQI.mjs → chunk-MPF6BJUF.mjs} +7 -3
- package/dist/chunk-MPF6BJUF.mjs.map +1 -0
- package/dist/{chunk-W26XFBEG.mjs → chunk-NGJ32FAP.mjs} +3 -3
- package/dist/chunk-NGJ32FAP.mjs.map +1 -0
- package/dist/{chunk-2LIO4Z3E.mjs → chunk-ODEHR7KI.mjs} +9 -2
- package/dist/chunk-ODEHR7KI.mjs.map +1 -0
- package/dist/chunk-OYRZ4VLU.mjs +12 -0
- package/dist/chunk-OYRZ4VLU.mjs.map +1 -0
- package/dist/chunk-QB3GUN2N.mjs +31 -0
- package/dist/chunk-QB3GUN2N.mjs.map +1 -0
- package/dist/{chunk-7RDGZ5JL.mjs → chunk-SOB5EIL7.mjs} +2 -2
- package/dist/components/chat/Chat.d.ts +3 -98
- package/dist/components/chat/Chat.js +100 -279
- package/dist/components/chat/Chat.js.map +1 -1
- package/dist/components/chat/Chat.mjs +12 -14
- package/dist/components/chat/Input.d.ts +1 -1
- package/dist/components/chat/Input.js +11 -8
- package/dist/components/chat/Input.js.map +1 -1
- package/dist/components/chat/Input.mjs +2 -2
- package/dist/components/chat/Messages.d.ts +4 -4
- package/dist/components/chat/Messages.js +44 -8
- package/dist/components/chat/Messages.js.map +1 -1
- package/dist/components/chat/Messages.mjs +5 -5
- package/dist/components/chat/Modal.d.ts +1 -6
- package/dist/components/chat/Modal.js +106 -283
- package/dist/components/chat/Modal.js.map +1 -1
- package/dist/components/chat/Modal.mjs +11 -11
- package/dist/components/chat/Popup.d.ts +1 -6
- package/dist/components/chat/Popup.js +106 -283
- package/dist/components/chat/Popup.js.map +1 -1
- package/dist/components/chat/Popup.mjs +12 -12
- package/dist/components/chat/Sidebar.d.ts +1 -6
- package/dist/components/chat/Sidebar.js +106 -283
- package/dist/components/chat/Sidebar.js.map +1 -1
- package/dist/components/chat/Sidebar.mjs +12 -12
- package/dist/components/chat/Suggestion.js.map +1 -1
- package/dist/components/chat/Suggestion.mjs +1 -1
- package/dist/components/chat/Suggestions.d.ts +1 -1
- package/dist/components/chat/Suggestions.js +19 -12
- package/dist/components/chat/Suggestions.js.map +1 -1
- package/dist/components/chat/Suggestions.mjs +2 -2
- package/dist/components/chat/index.d.ts +0 -5
- package/dist/components/chat/index.js +106 -283
- package/dist/components/chat/index.js.map +1 -1
- package/dist/components/chat/index.mjs +13 -13
- package/dist/components/chat/messages/AssistantMessage.js +7 -4
- package/dist/components/chat/messages/AssistantMessage.js.map +1 -1
- package/dist/components/chat/messages/AssistantMessage.mjs +1 -1
- package/dist/components/chat/messages/LegacyRenderMessage.js +37 -7
- package/dist/components/chat/messages/LegacyRenderMessage.js.map +1 -1
- package/dist/components/chat/messages/LegacyRenderMessage.mjs +4 -4
- package/dist/components/chat/messages/RenderMessage.js +30 -7
- package/dist/components/chat/messages/RenderMessage.js.map +1 -1
- package/dist/components/chat/messages/RenderMessage.mjs +3 -3
- package/dist/components/chat/messages/UserMessage.js +19 -3
- package/dist/components/chat/messages/UserMessage.js.map +1 -1
- package/dist/components/chat/messages/UserMessage.mjs +1 -1
- package/dist/components/chat/props.d.ts +16 -0
- package/dist/components/chat/props.js.map +1 -1
- package/dist/components/index.d.ts +0 -5
- package/dist/components/index.js +106 -283
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +13 -13
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +2 -24
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +1 -1
- package/dist/hooks/use-copilot-chat-suggestions.d.ts +4 -26
- package/dist/hooks/use-copilot-chat-suggestions.js +2 -24
- package/dist/hooks/use-copilot-chat-suggestions.js.map +1 -1
- package/dist/hooks/use-copilot-chat-suggestions.mjs +1 -1
- package/dist/index.css +8 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +0 -5
- package/dist/index.js +109 -308
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +14 -14
- package/dist/types/suggestions.d.ts +1 -0
- package/dist/types/suggestions.js.map +1 -1
- package/package.json +23 -22
- package/src/components/chat/Chat.tsx +40 -325
- package/src/components/chat/Input.tsx +13 -12
- package/src/components/chat/Messages.tsx +10 -4
- package/src/components/chat/Suggestion.tsx +2 -2
- package/src/components/chat/Suggestions.tsx +6 -2
- package/src/components/chat/messages/AssistantMessage.tsx +14 -4
- package/src/components/chat/messages/LegacyRenderMessage.tsx +7 -0
- package/src/components/chat/messages/RenderMessage.tsx +4 -0
- package/src/components/chat/messages/UserMessage.tsx +30 -6
- package/src/components/chat/props.ts +19 -0
- package/src/css/messages.css +10 -1
- package/src/hooks/use-copilot-chat-suggestions.tsx +6 -57
- package/src/types/suggestions.ts +1 -0
- package/tsup.config.ts +1 -1
- package/dist/chunk-226ZMOE3.mjs +0 -24
- package/dist/chunk-226ZMOE3.mjs.map +0 -1
- package/dist/chunk-2LIO4Z3E.mjs.map +0 -1
- package/dist/chunk-3QYTKBWC.mjs.map +0 -1
- package/dist/chunk-5XLGXUQI.mjs.map +0 -1
- package/dist/chunk-EYRKZDP5.mjs +0 -32
- package/dist/chunk-EYRKZDP5.mjs.map +0 -1
- package/dist/chunk-EZQA3UPQ.mjs.map +0 -1
- package/dist/chunk-ME2WM7IP.mjs.map +0 -1
- package/dist/chunk-VVL6JFCJ.mjs +0 -16
- package/dist/chunk-VVL6JFCJ.mjs.map +0 -1
- package/dist/chunk-W26XFBEG.mjs.map +0 -1
- package/dist/chunk-W7ONZTSW.mjs.map +0 -1
- /package/dist/{chunk-H5Y4W7DM.mjs.map → chunk-3JYVJHL5.mjs.map} +0 -0
- /package/dist/{chunk-BAD2NFZ7.mjs.map → chunk-CQ2WALZ7.mjs.map} +0 -0
- /package/dist/{chunk-7RDGZ5JL.mjs.map → chunk-SOB5EIL7.mjs.map} +0 -0
|
@@ -1039,14 +1039,30 @@ var import_react_core5 = require("@copilotkit/react-core");
|
|
|
1039
1039
|
|
|
1040
1040
|
// src/components/chat/messages/UserMessage.tsx
|
|
1041
1041
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
1042
|
+
var getTextContent = (content) => {
|
|
1043
|
+
if (typeof content === "undefined") {
|
|
1044
|
+
return void 0;
|
|
1045
|
+
}
|
|
1046
|
+
if (typeof content === "string") {
|
|
1047
|
+
return content;
|
|
1048
|
+
}
|
|
1049
|
+
return content.map((part) => {
|
|
1050
|
+
if (part.type === "text") {
|
|
1051
|
+
return part.text;
|
|
1052
|
+
}
|
|
1053
|
+
return void 0;
|
|
1054
|
+
}).filter((value) => typeof value === "string" && value.length > 0).join(" ").trim() || void 0;
|
|
1055
|
+
};
|
|
1042
1056
|
var UserMessage = (props) => {
|
|
1043
1057
|
const { message, ImageRenderer: ImageRenderer2 } = props;
|
|
1044
|
-
const isImageMessage = message && "image" in message && message.image;
|
|
1058
|
+
const isImageMessage = message && "image" in message && Boolean(message.image);
|
|
1045
1059
|
if (isImageMessage) {
|
|
1046
1060
|
const imageMessage = message;
|
|
1047
|
-
|
|
1061
|
+
const content2 = getTextContent(imageMessage == null ? void 0 : imageMessage.content);
|
|
1062
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ImageRenderer2, { image: imageMessage.image, content: content2 }) });
|
|
1048
1063
|
}
|
|
1049
|
-
|
|
1064
|
+
const content = getTextContent(message == null ? void 0 : message.content);
|
|
1065
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: content });
|
|
1050
1066
|
};
|
|
1051
1067
|
|
|
1052
1068
|
// src/components/chat/Markdown.tsx
|
|
@@ -1589,6 +1605,7 @@ var AssistantMessage = (props) => {
|
|
|
1589
1605
|
onThumbsUp,
|
|
1590
1606
|
onThumbsDown,
|
|
1591
1607
|
isCurrentMessage,
|
|
1608
|
+
feedback,
|
|
1592
1609
|
markdownTagRenderers
|
|
1593
1610
|
} = props;
|
|
1594
1611
|
const [copied, setCopied] = (0, import_react8.useState)(false);
|
|
@@ -1610,12 +1627,14 @@ var AssistantMessage = (props) => {
|
|
|
1610
1627
|
onRegenerate();
|
|
1611
1628
|
};
|
|
1612
1629
|
const handleThumbsUp = () => {
|
|
1613
|
-
if (onThumbsUp && message)
|
|
1630
|
+
if (onThumbsUp && message) {
|
|
1614
1631
|
onThumbsUp(message);
|
|
1632
|
+
}
|
|
1615
1633
|
};
|
|
1616
1634
|
const handleThumbsDown = () => {
|
|
1617
|
-
if (onThumbsDown && message)
|
|
1635
|
+
if (onThumbsDown && message) {
|
|
1618
1636
|
onThumbsDown(message);
|
|
1637
|
+
}
|
|
1619
1638
|
};
|
|
1620
1639
|
const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: icons.activityIcon });
|
|
1621
1640
|
const content = (message == null ? void 0 : message.content) || "";
|
|
@@ -1651,7 +1670,7 @@ var AssistantMessage = (props) => {
|
|
|
1651
1670
|
onThumbsUp && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1652
1671
|
"button",
|
|
1653
1672
|
{
|
|
1654
|
-
className:
|
|
1673
|
+
className: `copilotKitMessageControlButton ${feedback === "thumbsUp" ? "active" : ""}`,
|
|
1655
1674
|
onClick: handleThumbsUp,
|
|
1656
1675
|
"aria-label": labels.thumbsUp,
|
|
1657
1676
|
title: labels.thumbsUp,
|
|
@@ -1661,7 +1680,7 @@ var AssistantMessage = (props) => {
|
|
|
1661
1680
|
onThumbsDown && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1662
1681
|
"button",
|
|
1663
1682
|
{
|
|
1664
|
-
className:
|
|
1683
|
+
className: `copilotKitMessageControlButton ${feedback === "thumbsDown" ? "active" : ""}`,
|
|
1665
1684
|
onClick: handleThumbsDown,
|
|
1666
1685
|
"aria-label": labels.thumbsDown,
|
|
1667
1686
|
title: labels.thumbsDown,
|
|
@@ -1722,6 +1741,7 @@ function RenderMessage(_a) {
|
|
|
1722
1741
|
var _a2;
|
|
1723
1742
|
const {
|
|
1724
1743
|
message,
|
|
1744
|
+
messages,
|
|
1725
1745
|
inProgress,
|
|
1726
1746
|
index,
|
|
1727
1747
|
isCurrentMessage,
|
|
@@ -1729,6 +1749,7 @@ function RenderMessage(_a) {
|
|
|
1729
1749
|
onCopy,
|
|
1730
1750
|
onThumbsUp,
|
|
1731
1751
|
onThumbsDown,
|
|
1752
|
+
messageFeedback,
|
|
1732
1753
|
markdownTagRenderers
|
|
1733
1754
|
} = props;
|
|
1734
1755
|
switch (message.role) {
|
|
@@ -1751,6 +1772,7 @@ function RenderMessage(_a) {
|
|
|
1751
1772
|
subComponent: (_a2 = message.generativeUI) == null ? void 0 : _a2.call(message),
|
|
1752
1773
|
rawData: message,
|
|
1753
1774
|
message,
|
|
1775
|
+
messages,
|
|
1754
1776
|
isLoading: inProgress && isCurrentMessage && !message.content,
|
|
1755
1777
|
isGenerating: inProgress && isCurrentMessage && !!message.content,
|
|
1756
1778
|
isCurrentMessage,
|
|
@@ -1758,6 +1780,7 @@ function RenderMessage(_a) {
|
|
|
1758
1780
|
onCopy,
|
|
1759
1781
|
onThumbsUp,
|
|
1760
1782
|
onThumbsDown,
|
|
1783
|
+
feedback: (messageFeedback == null ? void 0 : messageFeedback[message.id]) || null,
|
|
1761
1784
|
markdownTagRenderers,
|
|
1762
1785
|
ImageRenderer: ImageRenderer2
|
|
1763
1786
|
},
|
|
@@ -1771,6 +1794,7 @@ var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
|
1771
1794
|
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
1772
1795
|
var LegacyRenderMessage = ({
|
|
1773
1796
|
message,
|
|
1797
|
+
messages,
|
|
1774
1798
|
inProgress,
|
|
1775
1799
|
index,
|
|
1776
1800
|
isCurrentMessage,
|
|
@@ -1799,6 +1823,7 @@ var LegacyRenderMessage = ({
|
|
|
1799
1823
|
RenderTextMessage,
|
|
1800
1824
|
{
|
|
1801
1825
|
message,
|
|
1826
|
+
messages,
|
|
1802
1827
|
inProgress,
|
|
1803
1828
|
index,
|
|
1804
1829
|
isCurrentMessage,
|
|
@@ -1816,6 +1841,7 @@ var LegacyRenderMessage = ({
|
|
|
1816
1841
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1817
1842
|
RenderActionExecutionMessage,
|
|
1818
1843
|
{
|
|
1844
|
+
messages,
|
|
1819
1845
|
message,
|
|
1820
1846
|
inProgress,
|
|
1821
1847
|
index,
|
|
@@ -1830,6 +1856,7 @@ var LegacyRenderMessage = ({
|
|
|
1830
1856
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1831
1857
|
RenderAgentStateMessage,
|
|
1832
1858
|
{
|
|
1859
|
+
messages,
|
|
1833
1860
|
message,
|
|
1834
1861
|
inProgress,
|
|
1835
1862
|
index,
|
|
@@ -1843,6 +1870,7 @@ var LegacyRenderMessage = ({
|
|
|
1843
1870
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1844
1871
|
RenderResultMessage,
|
|
1845
1872
|
{
|
|
1873
|
+
messages,
|
|
1846
1874
|
message,
|
|
1847
1875
|
inProgress,
|
|
1848
1876
|
index,
|
|
@@ -1856,6 +1884,7 @@ var LegacyRenderMessage = ({
|
|
|
1856
1884
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1857
1885
|
RenderImageMessage,
|
|
1858
1886
|
{
|
|
1887
|
+
messages,
|
|
1859
1888
|
message,
|
|
1860
1889
|
inProgress,
|
|
1861
1890
|
index,
|
|
@@ -1868,6 +1897,7 @@ var LegacyRenderMessage = ({
|
|
|
1868
1897
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1869
1898
|
RenderMessage,
|
|
1870
1899
|
{
|
|
1900
|
+
messages,
|
|
1871
1901
|
message,
|
|
1872
1902
|
inProgress,
|
|
1873
1903
|
index,
|
|
@@ -1898,6 +1928,7 @@ var Messages = ({
|
|
|
1898
1928
|
onCopy,
|
|
1899
1929
|
onThumbsUp,
|
|
1900
1930
|
onThumbsDown,
|
|
1931
|
+
messageFeedback,
|
|
1901
1932
|
markdownTagRenderers,
|
|
1902
1933
|
chatError,
|
|
1903
1934
|
// Legacy props
|
|
@@ -1907,7 +1938,8 @@ var Messages = ({
|
|
|
1907
1938
|
RenderResultMessage,
|
|
1908
1939
|
RenderImageMessage
|
|
1909
1940
|
}) => {
|
|
1910
|
-
|
|
1941
|
+
var _a;
|
|
1942
|
+
const { labels, icons } = useChatContext();
|
|
1911
1943
|
const { messages: visibleMessages, interrupt } = (0, import_react_core5.useCopilotChatInternal)();
|
|
1912
1944
|
const initialMessages = (0, import_react10.useMemo)(() => makeInitialMessages(labels.initial), [labels.initial]);
|
|
1913
1945
|
const messages = [...initialMessages, ...visibleMessages];
|
|
@@ -1937,6 +1969,7 @@ var Messages = ({
|
|
|
1937
1969
|
]
|
|
1938
1970
|
);
|
|
1939
1971
|
const MessageRenderer = hasLegacyProps ? (props) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LegacyRenderMessage, __spreadProps(__spreadValues({}, props), { legacyProps })) : RenderMessage2;
|
|
1972
|
+
const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: icons.activityIcon });
|
|
1940
1973
|
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
|
|
1941
1974
|
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessagesContainer", children: [
|
|
1942
1975
|
messages.map((message, index) => {
|
|
@@ -1945,6 +1978,7 @@ var Messages = ({
|
|
|
1945
1978
|
MessageRenderer,
|
|
1946
1979
|
{
|
|
1947
1980
|
message,
|
|
1981
|
+
messages,
|
|
1948
1982
|
inProgress,
|
|
1949
1983
|
index,
|
|
1950
1984
|
isCurrentMessage,
|
|
@@ -1955,11 +1989,13 @@ var Messages = ({
|
|
|
1955
1989
|
onCopy,
|
|
1956
1990
|
onThumbsUp,
|
|
1957
1991
|
onThumbsDown,
|
|
1992
|
+
messageFeedback,
|
|
1958
1993
|
markdownTagRenderers
|
|
1959
1994
|
},
|
|
1960
1995
|
index
|
|
1961
1996
|
);
|
|
1962
1997
|
}),
|
|
1998
|
+
((_a = messages[messages.length - 1]) == null ? void 0 : _a.role) === "user" && inProgress && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LoadingIcon, {}),
|
|
1963
1999
|
interrupt,
|
|
1964
2000
|
chatError && ErrorMessage && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ErrorMessage, { error: chatError, isCurrentMessage: true })
|
|
1965
2001
|
] }),
|
|
@@ -2253,12 +2289,12 @@ var MAX_NEWLINES = 6;
|
|
|
2253
2289
|
var Input = ({
|
|
2254
2290
|
inProgress,
|
|
2255
2291
|
onSend,
|
|
2256
|
-
|
|
2292
|
+
chatReady = true,
|
|
2257
2293
|
onStop,
|
|
2258
2294
|
onUpload,
|
|
2259
2295
|
hideStopButton = false
|
|
2260
2296
|
}) => {
|
|
2261
|
-
var _a
|
|
2297
|
+
var _a;
|
|
2262
2298
|
const context = useChatContext();
|
|
2263
2299
|
const copilotContext = (0, import_react_core7.useCopilotContext)();
|
|
2264
2300
|
const showPoweredBy = !((_a = copilotContext.copilotApiConfig) == null ? void 0 : _a.publicApiKey);
|
|
@@ -2288,14 +2324,16 @@ var Input = ({
|
|
|
2288
2324
|
inProgress
|
|
2289
2325
|
});
|
|
2290
2326
|
const isInProgress = inProgress || pushToTalkState === "transcribing";
|
|
2291
|
-
const buttonIcon
|
|
2327
|
+
const { buttonIcon, buttonAlt } = (0, import_react14.useMemo)(() => {
|
|
2328
|
+
if (!chatReady)
|
|
2329
|
+
return { buttonIcon: context.icons.spinnerIcon, buttonAlt: "Loading" };
|
|
2330
|
+
return isInProgress && !hideStopButton ? { buttonIcon: context.icons.stopIcon, buttonAlt: "Stop" } : { buttonIcon: context.icons.sendIcon, buttonAlt: "Send" };
|
|
2331
|
+
}, [isInProgress, chatReady, hideStopButton, context.icons.stopIcon, context.icons.sendIcon]);
|
|
2292
2332
|
const showPushToTalk = pushToTalkConfigured && (pushToTalkState === "idle" || pushToTalkState === "recording") && !inProgress;
|
|
2333
|
+
const { interrupt } = (0, import_react_core7.useCopilotChatInternal)();
|
|
2293
2334
|
const canSend = (0, import_react14.useMemo)(() => {
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
const interruptInProgress = (interruptEvent == null ? void 0 : interruptEvent.name) === "LangGraphInterruptEvent" && !(interruptEvent == null ? void 0 : interruptEvent.response);
|
|
2297
|
-
return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interruptInProgress;
|
|
2298
|
-
}, [(_b = copilotContext.langGraphInterruptAction) == null ? void 0 : _b.event, isInProgress, text, pushToTalkState]);
|
|
2335
|
+
return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interrupt;
|
|
2336
|
+
}, [interrupt, isInProgress, text, pushToTalkState]);
|
|
2299
2337
|
const canStop = (0, import_react14.useMemo)(() => {
|
|
2300
2338
|
return isInProgress && !hideStopButton;
|
|
2301
2339
|
}, [isInProgress, hideStopButton]);
|
|
@@ -2342,6 +2380,7 @@ var Input = ({
|
|
|
2342
2380
|
"data-copilotkit-in-progress": inProgress,
|
|
2343
2381
|
"data-test-id": inProgress ? "copilot-chat-request-in-progress" : "copilot-chat-ready",
|
|
2344
2382
|
className: "copilotKitInputControlButton",
|
|
2383
|
+
"aria-label": buttonAlt,
|
|
2345
2384
|
children: buttonIcon
|
|
2346
2385
|
}
|
|
2347
2386
|
)
|
|
@@ -2355,8 +2394,6 @@ var Input = ({
|
|
|
2355
2394
|
var import_react15 = __toESM(require("react"));
|
|
2356
2395
|
var import_react_core9 = require("@copilotkit/react-core");
|
|
2357
2396
|
var import_shared3 = require("@copilotkit/shared");
|
|
2358
|
-
var import_shared4 = require("@copilotkit/shared");
|
|
2359
|
-
var import_react_core10 = require("@copilotkit/react-core");
|
|
2360
2397
|
|
|
2361
2398
|
// src/components/chat/ImageUploadQueue.tsx
|
|
2362
2399
|
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
@@ -2460,18 +2497,25 @@ function Suggestion({ title, onClick, partial, className }) {
|
|
|
2460
2497
|
|
|
2461
2498
|
// src/components/chat/Suggestions.tsx
|
|
2462
2499
|
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
2463
|
-
function Suggestions({
|
|
2464
|
-
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2500
|
+
function Suggestions({
|
|
2501
|
+
suggestions,
|
|
2502
|
+
onSuggestionClick,
|
|
2503
|
+
isLoading
|
|
2504
|
+
}) {
|
|
2505
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => {
|
|
2506
|
+
var _a, _b;
|
|
2507
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2508
|
+
Suggestion,
|
|
2509
|
+
{
|
|
2510
|
+
title: suggestion.title,
|
|
2511
|
+
message: suggestion.message,
|
|
2512
|
+
partial: (_b = (_a = suggestion.isLoading) != null ? _a : suggestion.partial) != null ? _b : isLoading,
|
|
2513
|
+
className: suggestion.className,
|
|
2514
|
+
onClick: () => onSuggestionClick(suggestion.message)
|
|
2515
|
+
},
|
|
2516
|
+
index
|
|
2517
|
+
);
|
|
2518
|
+
}) });
|
|
2475
2519
|
}
|
|
2476
2520
|
|
|
2477
2521
|
// src/components/chat/Chat.tsx
|
|
@@ -2525,6 +2569,9 @@ function CopilotChat({
|
|
|
2525
2569
|
const { publicApiKey, chatApiEndpoint } = copilotApiConfig;
|
|
2526
2570
|
const [selectedImages, setSelectedImages] = (0, import_react15.useState)([]);
|
|
2527
2571
|
const [chatError, setChatError] = (0, import_react15.useState)(null);
|
|
2572
|
+
const [messageFeedback, setMessageFeedback] = (0, import_react15.useState)(
|
|
2573
|
+
{}
|
|
2574
|
+
);
|
|
2528
2575
|
const fileInputRef = (0, import_react15.useRef)(null);
|
|
2529
2576
|
const triggerObservabilityHook = (0, import_react15.useCallback)(
|
|
2530
2577
|
(hookName, ...args) => {
|
|
@@ -2668,16 +2715,12 @@ function CopilotChat({
|
|
|
2668
2715
|
sendMessage,
|
|
2669
2716
|
stopGeneration,
|
|
2670
2717
|
reloadMessages,
|
|
2671
|
-
suggestions: currentSuggestions
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
|
|
2677
|
-
onSubmitMessage,
|
|
2678
|
-
onStopGeneration,
|
|
2679
|
-
onReloadMessages
|
|
2680
|
-
);
|
|
2718
|
+
suggestions: currentSuggestions,
|
|
2719
|
+
isLoadingSuggestions,
|
|
2720
|
+
agent
|
|
2721
|
+
} = (0, import_react_core9.useCopilotChatInternal)({
|
|
2722
|
+
suggestions
|
|
2723
|
+
});
|
|
2681
2724
|
const prevIsLoading = (0, import_react15.useRef)(isLoading);
|
|
2682
2725
|
(0, import_react15.useEffect)(() => {
|
|
2683
2726
|
if (prevIsLoading.current !== isLoading) {
|
|
@@ -2696,7 +2739,11 @@ function CopilotChat({
|
|
|
2696
2739
|
fileInputRef.current.value = "";
|
|
2697
2740
|
}
|
|
2698
2741
|
triggerObservabilityHook("onMessageSent", text);
|
|
2699
|
-
return sendMessage(
|
|
2742
|
+
return sendMessage({
|
|
2743
|
+
id: (0, import_shared3.randomUUID)(),
|
|
2744
|
+
content: text,
|
|
2745
|
+
role: "user"
|
|
2746
|
+
});
|
|
2700
2747
|
};
|
|
2701
2748
|
const chatContext = import_react15.default.useContext(ChatContext);
|
|
2702
2749
|
const isVisible = chatContext ? chatContext.open : true;
|
|
@@ -2752,12 +2799,18 @@ function CopilotChat({
|
|
|
2752
2799
|
if (onThumbsUp) {
|
|
2753
2800
|
onThumbsUp(message);
|
|
2754
2801
|
}
|
|
2802
|
+
setMessageFeedback((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
2803
|
+
[message.id]: "thumbsUp"
|
|
2804
|
+
}));
|
|
2755
2805
|
triggerObservabilityHook("onFeedbackGiven", message.id, "thumbsUp");
|
|
2756
2806
|
};
|
|
2757
2807
|
const handleThumbsDown = (message) => {
|
|
2758
2808
|
if (onThumbsDown) {
|
|
2759
2809
|
onThumbsDown(message);
|
|
2760
2810
|
}
|
|
2811
|
+
setMessageFeedback((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
2812
|
+
[message.id]: "thumbsDown"
|
|
2813
|
+
}));
|
|
2761
2814
|
triggerObservabilityHook("onFeedbackGiven", message.id, "thumbsDown");
|
|
2762
2815
|
};
|
|
2763
2816
|
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
|
|
@@ -2779,6 +2832,7 @@ function CopilotChat({
|
|
|
2779
2832
|
onCopy: handleCopy,
|
|
2780
2833
|
onThumbsUp: handleThumbsUp,
|
|
2781
2834
|
onThumbsDown: handleThumbsDown,
|
|
2835
|
+
messageFeedback,
|
|
2782
2836
|
markdownTagRenderers,
|
|
2783
2837
|
ImageRenderer: ImageRenderer2,
|
|
2784
2838
|
ErrorMessage,
|
|
@@ -2792,7 +2846,8 @@ function CopilotChat({
|
|
|
2792
2846
|
RenderSuggestionsList,
|
|
2793
2847
|
{
|
|
2794
2848
|
onSuggestionClick: handleSendMessage,
|
|
2795
|
-
suggestions: currentSuggestions
|
|
2849
|
+
suggestions: currentSuggestions,
|
|
2850
|
+
isLoading: isLoadingSuggestions
|
|
2796
2851
|
}
|
|
2797
2852
|
)
|
|
2798
2853
|
}
|
|
@@ -2815,6 +2870,7 @@ function CopilotChat({
|
|
|
2815
2870
|
Input2,
|
|
2816
2871
|
{
|
|
2817
2872
|
inProgress: isLoading,
|
|
2873
|
+
chatReady: Boolean(agent),
|
|
2818
2874
|
onSend: handleSendMessage,
|
|
2819
2875
|
isVisible,
|
|
2820
2876
|
onStop: stopGeneration,
|
|
@@ -2840,243 +2896,10 @@ function WrappedCopilotChat({
|
|
|
2840
2896
|
}
|
|
2841
2897
|
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_jsx_runtime24.Fragment, { children });
|
|
2842
2898
|
}
|
|
2843
|
-
var useCopilotChatLogic = (chatSuggestions, makeSystemMessage, disableSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
|
|
2844
|
-
var _a;
|
|
2845
|
-
const {
|
|
2846
|
-
messages,
|
|
2847
|
-
sendMessage,
|
|
2848
|
-
setMessages,
|
|
2849
|
-
reloadMessages: defaultReloadMessages,
|
|
2850
|
-
stopGeneration: defaultStopGeneration,
|
|
2851
|
-
runChatCompletion,
|
|
2852
|
-
isLoading,
|
|
2853
|
-
suggestions,
|
|
2854
|
-
setSuggestions,
|
|
2855
|
-
generateSuggestions,
|
|
2856
|
-
resetSuggestions: resetSuggestionsFromHook,
|
|
2857
|
-
isLoadingSuggestions
|
|
2858
|
-
} = (0, import_react_core9.useCopilotChatInternal)({
|
|
2859
|
-
makeSystemMessage,
|
|
2860
|
-
disableSystemMessage
|
|
2861
|
-
});
|
|
2862
|
-
const generalContext = (0, import_react_core9.useCopilotContext)();
|
|
2863
|
-
const messagesContext = (0, import_react_core9.useCopilotMessagesContext)();
|
|
2864
|
-
const { actions } = generalContext;
|
|
2865
|
-
const [suggestionsFailed, setSuggestionsFailed] = (0, import_react15.useState)(false);
|
|
2866
|
-
const hasGeneratedInitialSuggestions = (0, import_react15.useRef)(false);
|
|
2867
|
-
(0, import_react15.useEffect)(() => {
|
|
2868
|
-
if (Array.isArray(chatSuggestions)) {
|
|
2869
|
-
setSuggestions(chatSuggestions);
|
|
2870
|
-
hasGeneratedInitialSuggestions.current = true;
|
|
2871
|
-
}
|
|
2872
|
-
}, [JSON.stringify(chatSuggestions), setSuggestions]);
|
|
2873
|
-
const generateSuggestionsWithErrorHandling = (0, import_react15.useCallback)(
|
|
2874
|
-
(context) => __async(void 0, null, function* () {
|
|
2875
|
-
try {
|
|
2876
|
-
yield generateSuggestions();
|
|
2877
|
-
} catch (error) {
|
|
2878
|
-
console.error("Failed to generate suggestions:", error);
|
|
2879
|
-
setSuggestionsFailed(true);
|
|
2880
|
-
}
|
|
2881
|
-
}),
|
|
2882
|
-
[generateSuggestions]
|
|
2883
|
-
);
|
|
2884
|
-
(0, import_react15.useEffect)(() => {
|
|
2885
|
-
if (chatSuggestions !== "auto" || isLoadingSuggestions || suggestionsFailed) {
|
|
2886
|
-
return;
|
|
2887
|
-
}
|
|
2888
|
-
if (isLoading) {
|
|
2889
|
-
return;
|
|
2890
|
-
}
|
|
2891
|
-
if (Object.keys(generalContext.chatSuggestionConfiguration).length === 0) {
|
|
2892
|
-
return;
|
|
2893
|
-
}
|
|
2894
|
-
if (messages.length === 0 && !hasGeneratedInitialSuggestions.current) {
|
|
2895
|
-
hasGeneratedInitialSuggestions.current = true;
|
|
2896
|
-
generateSuggestionsWithErrorHandling("initial");
|
|
2897
|
-
return;
|
|
2898
|
-
}
|
|
2899
|
-
if (messages.length > 0 && suggestions.length === 0) {
|
|
2900
|
-
generateSuggestionsWithErrorHandling("post-message");
|
|
2901
|
-
return;
|
|
2902
|
-
}
|
|
2903
|
-
}, [
|
|
2904
|
-
chatSuggestions,
|
|
2905
|
-
isLoadingSuggestions,
|
|
2906
|
-
suggestionsFailed,
|
|
2907
|
-
messages.length,
|
|
2908
|
-
isLoading,
|
|
2909
|
-
suggestions.length,
|
|
2910
|
-
Object.keys(generalContext.chatSuggestionConfiguration).join(","),
|
|
2911
|
-
// Use stable string instead of object reference
|
|
2912
|
-
generateSuggestionsWithErrorHandling
|
|
2913
|
-
]);
|
|
2914
|
-
(0, import_react15.useEffect)(() => {
|
|
2915
|
-
if (chatSuggestions !== "auto") {
|
|
2916
|
-
hasGeneratedInitialSuggestions.current = false;
|
|
2917
|
-
setSuggestionsFailed(false);
|
|
2918
|
-
}
|
|
2919
|
-
}, [chatSuggestions]);
|
|
2920
|
-
const stableContext = (0, import_react15.useMemo)(
|
|
2921
|
-
() => __spreadValues(__spreadValues({}, generalContext), messagesContext),
|
|
2922
|
-
[
|
|
2923
|
-
// Only include stable dependencies
|
|
2924
|
-
generalContext.actions,
|
|
2925
|
-
messagesContext.messages.length,
|
|
2926
|
-
generalContext.isLoading
|
|
2927
|
-
]
|
|
2928
|
-
);
|
|
2929
|
-
const resetSuggestions = (0, import_react15.useCallback)(() => {
|
|
2930
|
-
resetSuggestionsFromHook();
|
|
2931
|
-
setSuggestionsFailed(false);
|
|
2932
|
-
hasGeneratedInitialSuggestions.current = false;
|
|
2933
|
-
}, [resetSuggestionsFromHook]);
|
|
2934
|
-
(0, import_react15.useEffect)(() => {
|
|
2935
|
-
onInProgress == null ? void 0 : onInProgress(isLoading);
|
|
2936
|
-
}, [onInProgress, isLoading]);
|
|
2937
|
-
const safelySendMessage = (messageContent, imagesToUse) => __async(void 0, null, function* () {
|
|
2938
|
-
const images = imagesToUse || [];
|
|
2939
|
-
if (chatSuggestions === "auto" || chatSuggestions === "manual") {
|
|
2940
|
-
setSuggestions([]);
|
|
2941
|
-
}
|
|
2942
|
-
let firstMessage = null;
|
|
2943
|
-
if (messageContent.trim().length > 0) {
|
|
2944
|
-
const textMessage = {
|
|
2945
|
-
id: (0, import_shared4.randomId)(),
|
|
2946
|
-
role: "user",
|
|
2947
|
-
content: messageContent
|
|
2948
|
-
};
|
|
2949
|
-
if (onSubmitMessage) {
|
|
2950
|
-
try {
|
|
2951
|
-
yield onSubmitMessage(messageContent);
|
|
2952
|
-
} catch (error) {
|
|
2953
|
-
console.error("Error in onSubmitMessage:", error);
|
|
2954
|
-
}
|
|
2955
|
-
}
|
|
2956
|
-
yield sendMessage(textMessage, {
|
|
2957
|
-
followUp: images.length === 0,
|
|
2958
|
-
clearSuggestions: chatSuggestions === "auto" || chatSuggestions === "manual"
|
|
2959
|
-
});
|
|
2960
|
-
if (!firstMessage) {
|
|
2961
|
-
firstMessage = textMessage;
|
|
2962
|
-
}
|
|
2963
|
-
}
|
|
2964
|
-
if (images.length > 0) {
|
|
2965
|
-
for (let i = 0; i < images.length; i++) {
|
|
2966
|
-
const imageMessage = {
|
|
2967
|
-
id: (0, import_shared4.randomId)(),
|
|
2968
|
-
role: "user",
|
|
2969
|
-
image: {
|
|
2970
|
-
format: images[i].contentType.replace("image/", ""),
|
|
2971
|
-
bytes: images[i].bytes
|
|
2972
|
-
}
|
|
2973
|
-
};
|
|
2974
|
-
yield sendMessage(imageMessage, { followUp: i === images.length - 1 });
|
|
2975
|
-
if (!firstMessage) {
|
|
2976
|
-
firstMessage = imageMessage;
|
|
2977
|
-
}
|
|
2978
|
-
}
|
|
2979
|
-
}
|
|
2980
|
-
if (!firstMessage) {
|
|
2981
|
-
return { role: "user", content: "", id: (0, import_shared4.randomId)() };
|
|
2982
|
-
}
|
|
2983
|
-
return firstMessage;
|
|
2984
|
-
});
|
|
2985
|
-
const currentAgentName = (_a = generalContext.agentSession) == null ? void 0 : _a.agentName;
|
|
2986
|
-
const restartCurrentAgent = (hint) => __async(void 0, null, function* () {
|
|
2987
|
-
if (generalContext.agentSession) {
|
|
2988
|
-
generalContext.setAgentSession(__spreadProps(__spreadValues({}, generalContext.agentSession), {
|
|
2989
|
-
nodeName: void 0,
|
|
2990
|
-
threadId: void 0
|
|
2991
|
-
}));
|
|
2992
|
-
generalContext.setCoagentStates((prevAgentStates) => {
|
|
2993
|
-
return __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
2994
|
-
[generalContext.agentSession.agentName]: __spreadProps(__spreadValues({}, prevAgentStates[generalContext.agentSession.agentName]), {
|
|
2995
|
-
threadId: void 0,
|
|
2996
|
-
nodeName: void 0,
|
|
2997
|
-
runId: void 0
|
|
2998
|
-
})
|
|
2999
|
-
});
|
|
3000
|
-
});
|
|
3001
|
-
}
|
|
3002
|
-
});
|
|
3003
|
-
const runCurrentAgent = (hint) => __async(void 0, null, function* () {
|
|
3004
|
-
if (generalContext.agentSession) {
|
|
3005
|
-
yield (0, import_react_core10.runAgent)(
|
|
3006
|
-
generalContext.agentSession.agentName,
|
|
3007
|
-
stableContext,
|
|
3008
|
-
messagesContext.messages,
|
|
3009
|
-
sendMessage,
|
|
3010
|
-
runChatCompletion
|
|
3011
|
-
);
|
|
3012
|
-
}
|
|
3013
|
-
});
|
|
3014
|
-
const stopCurrentAgent = () => {
|
|
3015
|
-
if (generalContext.agentSession) {
|
|
3016
|
-
(0, import_react_core10.stopAgent)(generalContext.agentSession.agentName, stableContext);
|
|
3017
|
-
}
|
|
3018
|
-
};
|
|
3019
|
-
const setCurrentAgentState = (state) => {
|
|
3020
|
-
if (generalContext.agentSession) {
|
|
3021
|
-
generalContext.setCoagentStates((prevAgentStates) => {
|
|
3022
|
-
return __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
3023
|
-
[generalContext.agentSession.agentName]: {
|
|
3024
|
-
state
|
|
3025
|
-
}
|
|
3026
|
-
});
|
|
3027
|
-
});
|
|
3028
|
-
}
|
|
3029
|
-
};
|
|
3030
|
-
function stopGeneration() {
|
|
3031
|
-
setSuggestions([]);
|
|
3032
|
-
if (onStopGeneration) {
|
|
3033
|
-
onStopGeneration({
|
|
3034
|
-
messages,
|
|
3035
|
-
setMessages,
|
|
3036
|
-
stopGeneration: defaultStopGeneration,
|
|
3037
|
-
currentAgentName,
|
|
3038
|
-
restartCurrentAgent,
|
|
3039
|
-
stopCurrentAgent,
|
|
3040
|
-
runCurrentAgent,
|
|
3041
|
-
setCurrentAgentState
|
|
3042
|
-
});
|
|
3043
|
-
} else {
|
|
3044
|
-
defaultStopGeneration();
|
|
3045
|
-
}
|
|
3046
|
-
}
|
|
3047
|
-
function reloadMessages(messageId) {
|
|
3048
|
-
if (onReloadMessages) {
|
|
3049
|
-
onReloadMessages({
|
|
3050
|
-
messages,
|
|
3051
|
-
setMessages,
|
|
3052
|
-
stopGeneration: defaultStopGeneration,
|
|
3053
|
-
currentAgentName,
|
|
3054
|
-
restartCurrentAgent,
|
|
3055
|
-
stopCurrentAgent,
|
|
3056
|
-
runCurrentAgent,
|
|
3057
|
-
setCurrentAgentState,
|
|
3058
|
-
messageId
|
|
3059
|
-
});
|
|
3060
|
-
} else {
|
|
3061
|
-
defaultReloadMessages(messageId);
|
|
3062
|
-
}
|
|
3063
|
-
}
|
|
3064
|
-
return {
|
|
3065
|
-
messages,
|
|
3066
|
-
isLoading,
|
|
3067
|
-
suggestions,
|
|
3068
|
-
sendMessage: safelySendMessage,
|
|
3069
|
-
stopGeneration,
|
|
3070
|
-
reloadMessages,
|
|
3071
|
-
resetSuggestions,
|
|
3072
|
-
context: stableContext,
|
|
3073
|
-
actions
|
|
3074
|
-
};
|
|
3075
|
-
};
|
|
3076
2899
|
|
|
3077
2900
|
// src/components/chat/Modal.tsx
|
|
3078
|
-
var
|
|
3079
|
-
var
|
|
2901
|
+
var import_react_core10 = require("@copilotkit/react-core");
|
|
2902
|
+
var import_shared4 = require("@copilotkit/shared");
|
|
3080
2903
|
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
3081
2904
|
var CopilotModalInner = (_a) => {
|
|
3082
2905
|
var _b = _a, {
|
|
@@ -3102,7 +2925,7 @@ var CopilotModalInner = (_a) => {
|
|
|
3102
2925
|
"Button",
|
|
3103
2926
|
"Header"
|
|
3104
2927
|
]);
|
|
3105
|
-
const { copilotApiConfig, setBannerError } = (0,
|
|
2928
|
+
const { copilotApiConfig, setBannerError } = (0, import_react_core10.useCopilotContext)();
|
|
3106
2929
|
const { publicApiKey } = copilotApiConfig;
|
|
3107
2930
|
const triggerObservabilityHook = (0, import_react16.useCallback)(
|
|
3108
2931
|
(hookName, ...args) => {
|
|
@@ -3111,14 +2934,14 @@ var CopilotModalInner = (_a) => {
|
|
|
3111
2934
|
}
|
|
3112
2935
|
if ((observabilityHooks == null ? void 0 : observabilityHooks[hookName]) && !publicApiKey) {
|
|
3113
2936
|
setBannerError(
|
|
3114
|
-
new
|
|
2937
|
+
new import_shared4.CopilotKitError({
|
|
3115
2938
|
message: "observabilityHooks requires a publicApiKey to function.",
|
|
3116
|
-
code:
|
|
3117
|
-
severity:
|
|
3118
|
-
visibility:
|
|
2939
|
+
code: import_shared4.CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR,
|
|
2940
|
+
severity: import_shared4.Severity.CRITICAL,
|
|
2941
|
+
visibility: import_shared4.ErrorVisibility.BANNER
|
|
3119
2942
|
})
|
|
3120
2943
|
);
|
|
3121
|
-
|
|
2944
|
+
import_shared4.styledConsole.publicApiKeyRequired("observabilityHooks");
|
|
3122
2945
|
}
|
|
3123
2946
|
},
|
|
3124
2947
|
[publicApiKey, observabilityHooks, setBannerError]
|