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