@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
|
@@ -1031,14 +1031,30 @@ var import_react_core5 = require("@copilotkit/react-core");
|
|
|
1031
1031
|
|
|
1032
1032
|
// src/components/chat/messages/UserMessage.tsx
|
|
1033
1033
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
1034
|
+
var getTextContent = (content) => {
|
|
1035
|
+
if (typeof content === "undefined") {
|
|
1036
|
+
return void 0;
|
|
1037
|
+
}
|
|
1038
|
+
if (typeof content === "string") {
|
|
1039
|
+
return content;
|
|
1040
|
+
}
|
|
1041
|
+
return content.map((part) => {
|
|
1042
|
+
if (part.type === "text") {
|
|
1043
|
+
return part.text;
|
|
1044
|
+
}
|
|
1045
|
+
return void 0;
|
|
1046
|
+
}).filter((value) => typeof value === "string" && value.length > 0).join(" ").trim() || void 0;
|
|
1047
|
+
};
|
|
1034
1048
|
var UserMessage = (props) => {
|
|
1035
1049
|
const { message, ImageRenderer: ImageRenderer2 } = props;
|
|
1036
|
-
const isImageMessage = message && "image" in message && message.image;
|
|
1050
|
+
const isImageMessage = message && "image" in message && Boolean(message.image);
|
|
1037
1051
|
if (isImageMessage) {
|
|
1038
1052
|
const imageMessage = message;
|
|
1039
|
-
|
|
1053
|
+
const content2 = getTextContent(imageMessage == null ? void 0 : imageMessage.content);
|
|
1054
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ImageRenderer2, { image: imageMessage.image, content: content2 }) });
|
|
1040
1055
|
}
|
|
1041
|
-
|
|
1056
|
+
const content = getTextContent(message == null ? void 0 : message.content);
|
|
1057
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "copilotKitMessage copilotKitUserMessage", children: content });
|
|
1042
1058
|
};
|
|
1043
1059
|
|
|
1044
1060
|
// src/components/chat/Markdown.tsx
|
|
@@ -1581,6 +1597,7 @@ var AssistantMessage = (props) => {
|
|
|
1581
1597
|
onThumbsUp,
|
|
1582
1598
|
onThumbsDown,
|
|
1583
1599
|
isCurrentMessage,
|
|
1600
|
+
feedback,
|
|
1584
1601
|
markdownTagRenderers
|
|
1585
1602
|
} = props;
|
|
1586
1603
|
const [copied, setCopied] = (0, import_react8.useState)(false);
|
|
@@ -1602,12 +1619,14 @@ var AssistantMessage = (props) => {
|
|
|
1602
1619
|
onRegenerate();
|
|
1603
1620
|
};
|
|
1604
1621
|
const handleThumbsUp = () => {
|
|
1605
|
-
if (onThumbsUp && message)
|
|
1622
|
+
if (onThumbsUp && message) {
|
|
1606
1623
|
onThumbsUp(message);
|
|
1624
|
+
}
|
|
1607
1625
|
};
|
|
1608
1626
|
const handleThumbsDown = () => {
|
|
1609
|
-
if (onThumbsDown && message)
|
|
1627
|
+
if (onThumbsDown && message) {
|
|
1610
1628
|
onThumbsDown(message);
|
|
1629
|
+
}
|
|
1611
1630
|
};
|
|
1612
1631
|
const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: icons.activityIcon });
|
|
1613
1632
|
const content = (message == null ? void 0 : message.content) || "";
|
|
@@ -1643,7 +1662,7 @@ var AssistantMessage = (props) => {
|
|
|
1643
1662
|
onThumbsUp && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1644
1663
|
"button",
|
|
1645
1664
|
{
|
|
1646
|
-
className:
|
|
1665
|
+
className: `copilotKitMessageControlButton ${feedback === "thumbsUp" ? "active" : ""}`,
|
|
1647
1666
|
onClick: handleThumbsUp,
|
|
1648
1667
|
"aria-label": labels.thumbsUp,
|
|
1649
1668
|
title: labels.thumbsUp,
|
|
@@ -1653,7 +1672,7 @@ var AssistantMessage = (props) => {
|
|
|
1653
1672
|
onThumbsDown && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1654
1673
|
"button",
|
|
1655
1674
|
{
|
|
1656
|
-
className:
|
|
1675
|
+
className: `copilotKitMessageControlButton ${feedback === "thumbsDown" ? "active" : ""}`,
|
|
1657
1676
|
onClick: handleThumbsDown,
|
|
1658
1677
|
"aria-label": labels.thumbsDown,
|
|
1659
1678
|
title: labels.thumbsDown,
|
|
@@ -1714,6 +1733,7 @@ function RenderMessage(_a) {
|
|
|
1714
1733
|
var _a2;
|
|
1715
1734
|
const {
|
|
1716
1735
|
message,
|
|
1736
|
+
messages,
|
|
1717
1737
|
inProgress,
|
|
1718
1738
|
index,
|
|
1719
1739
|
isCurrentMessage,
|
|
@@ -1721,6 +1741,7 @@ function RenderMessage(_a) {
|
|
|
1721
1741
|
onCopy,
|
|
1722
1742
|
onThumbsUp,
|
|
1723
1743
|
onThumbsDown,
|
|
1744
|
+
messageFeedback,
|
|
1724
1745
|
markdownTagRenderers
|
|
1725
1746
|
} = props;
|
|
1726
1747
|
switch (message.role) {
|
|
@@ -1743,6 +1764,7 @@ function RenderMessage(_a) {
|
|
|
1743
1764
|
subComponent: (_a2 = message.generativeUI) == null ? void 0 : _a2.call(message),
|
|
1744
1765
|
rawData: message,
|
|
1745
1766
|
message,
|
|
1767
|
+
messages,
|
|
1746
1768
|
isLoading: inProgress && isCurrentMessage && !message.content,
|
|
1747
1769
|
isGenerating: inProgress && isCurrentMessage && !!message.content,
|
|
1748
1770
|
isCurrentMessage,
|
|
@@ -1750,6 +1772,7 @@ function RenderMessage(_a) {
|
|
|
1750
1772
|
onCopy,
|
|
1751
1773
|
onThumbsUp,
|
|
1752
1774
|
onThumbsDown,
|
|
1775
|
+
feedback: (messageFeedback == null ? void 0 : messageFeedback[message.id]) || null,
|
|
1753
1776
|
markdownTagRenderers,
|
|
1754
1777
|
ImageRenderer: ImageRenderer2
|
|
1755
1778
|
},
|
|
@@ -1763,6 +1786,7 @@ var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
|
1763
1786
|
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
1764
1787
|
var LegacyRenderMessage = ({
|
|
1765
1788
|
message,
|
|
1789
|
+
messages,
|
|
1766
1790
|
inProgress,
|
|
1767
1791
|
index,
|
|
1768
1792
|
isCurrentMessage,
|
|
@@ -1791,6 +1815,7 @@ var LegacyRenderMessage = ({
|
|
|
1791
1815
|
RenderTextMessage,
|
|
1792
1816
|
{
|
|
1793
1817
|
message,
|
|
1818
|
+
messages,
|
|
1794
1819
|
inProgress,
|
|
1795
1820
|
index,
|
|
1796
1821
|
isCurrentMessage,
|
|
@@ -1808,6 +1833,7 @@ var LegacyRenderMessage = ({
|
|
|
1808
1833
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1809
1834
|
RenderActionExecutionMessage,
|
|
1810
1835
|
{
|
|
1836
|
+
messages,
|
|
1811
1837
|
message,
|
|
1812
1838
|
inProgress,
|
|
1813
1839
|
index,
|
|
@@ -1822,6 +1848,7 @@ var LegacyRenderMessage = ({
|
|
|
1822
1848
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1823
1849
|
RenderAgentStateMessage,
|
|
1824
1850
|
{
|
|
1851
|
+
messages,
|
|
1825
1852
|
message,
|
|
1826
1853
|
inProgress,
|
|
1827
1854
|
index,
|
|
@@ -1835,6 +1862,7 @@ var LegacyRenderMessage = ({
|
|
|
1835
1862
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1836
1863
|
RenderResultMessage,
|
|
1837
1864
|
{
|
|
1865
|
+
messages,
|
|
1838
1866
|
message,
|
|
1839
1867
|
inProgress,
|
|
1840
1868
|
index,
|
|
@@ -1848,6 +1876,7 @@ var LegacyRenderMessage = ({
|
|
|
1848
1876
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1849
1877
|
RenderImageMessage,
|
|
1850
1878
|
{
|
|
1879
|
+
messages,
|
|
1851
1880
|
message,
|
|
1852
1881
|
inProgress,
|
|
1853
1882
|
index,
|
|
@@ -1860,6 +1889,7 @@ var LegacyRenderMessage = ({
|
|
|
1860
1889
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1861
1890
|
RenderMessage,
|
|
1862
1891
|
{
|
|
1892
|
+
messages,
|
|
1863
1893
|
message,
|
|
1864
1894
|
inProgress,
|
|
1865
1895
|
index,
|
|
@@ -1890,6 +1920,7 @@ var Messages = ({
|
|
|
1890
1920
|
onCopy,
|
|
1891
1921
|
onThumbsUp,
|
|
1892
1922
|
onThumbsDown,
|
|
1923
|
+
messageFeedback,
|
|
1893
1924
|
markdownTagRenderers,
|
|
1894
1925
|
chatError,
|
|
1895
1926
|
// Legacy props
|
|
@@ -1899,7 +1930,8 @@ var Messages = ({
|
|
|
1899
1930
|
RenderResultMessage,
|
|
1900
1931
|
RenderImageMessage
|
|
1901
1932
|
}) => {
|
|
1902
|
-
|
|
1933
|
+
var _a;
|
|
1934
|
+
const { labels, icons } = useChatContext();
|
|
1903
1935
|
const { messages: visibleMessages, interrupt } = (0, import_react_core5.useCopilotChatInternal)();
|
|
1904
1936
|
const initialMessages = (0, import_react10.useMemo)(() => makeInitialMessages(labels.initial), [labels.initial]);
|
|
1905
1937
|
const messages = [...initialMessages, ...visibleMessages];
|
|
@@ -1929,6 +1961,7 @@ var Messages = ({
|
|
|
1929
1961
|
]
|
|
1930
1962
|
);
|
|
1931
1963
|
const MessageRenderer = hasLegacyProps ? (props) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LegacyRenderMessage, __spreadProps(__spreadValues({}, props), { legacyProps })) : RenderMessage2;
|
|
1964
|
+
const LoadingIcon = () => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: icons.activityIcon });
|
|
1932
1965
|
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessages", ref: messagesContainerRef, children: [
|
|
1933
1966
|
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "copilotKitMessagesContainer", children: [
|
|
1934
1967
|
messages.map((message, index) => {
|
|
@@ -1937,6 +1970,7 @@ var Messages = ({
|
|
|
1937
1970
|
MessageRenderer,
|
|
1938
1971
|
{
|
|
1939
1972
|
message,
|
|
1973
|
+
messages,
|
|
1940
1974
|
inProgress,
|
|
1941
1975
|
index,
|
|
1942
1976
|
isCurrentMessage,
|
|
@@ -1947,11 +1981,13 @@ var Messages = ({
|
|
|
1947
1981
|
onCopy,
|
|
1948
1982
|
onThumbsUp,
|
|
1949
1983
|
onThumbsDown,
|
|
1984
|
+
messageFeedback,
|
|
1950
1985
|
markdownTagRenderers
|
|
1951
1986
|
},
|
|
1952
1987
|
index
|
|
1953
1988
|
);
|
|
1954
1989
|
}),
|
|
1990
|
+
((_a = messages[messages.length - 1]) == null ? void 0 : _a.role) === "user" && inProgress && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LoadingIcon, {}),
|
|
1955
1991
|
interrupt,
|
|
1956
1992
|
chatError && ErrorMessage && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ErrorMessage, { error: chatError, isCurrentMessage: true })
|
|
1957
1993
|
] }),
|
|
@@ -2245,12 +2281,12 @@ var MAX_NEWLINES = 6;
|
|
|
2245
2281
|
var Input = ({
|
|
2246
2282
|
inProgress,
|
|
2247
2283
|
onSend,
|
|
2248
|
-
|
|
2284
|
+
chatReady = true,
|
|
2249
2285
|
onStop,
|
|
2250
2286
|
onUpload,
|
|
2251
2287
|
hideStopButton = false
|
|
2252
2288
|
}) => {
|
|
2253
|
-
var _a
|
|
2289
|
+
var _a;
|
|
2254
2290
|
const context = useChatContext();
|
|
2255
2291
|
const copilotContext = (0, import_react_core7.useCopilotContext)();
|
|
2256
2292
|
const showPoweredBy = !((_a = copilotContext.copilotApiConfig) == null ? void 0 : _a.publicApiKey);
|
|
@@ -2280,14 +2316,16 @@ var Input = ({
|
|
|
2280
2316
|
inProgress
|
|
2281
2317
|
});
|
|
2282
2318
|
const isInProgress = inProgress || pushToTalkState === "transcribing";
|
|
2283
|
-
const buttonIcon
|
|
2319
|
+
const { buttonIcon, buttonAlt } = (0, import_react14.useMemo)(() => {
|
|
2320
|
+
if (!chatReady)
|
|
2321
|
+
return { buttonIcon: context.icons.spinnerIcon, buttonAlt: "Loading" };
|
|
2322
|
+
return isInProgress && !hideStopButton ? { buttonIcon: context.icons.stopIcon, buttonAlt: "Stop" } : { buttonIcon: context.icons.sendIcon, buttonAlt: "Send" };
|
|
2323
|
+
}, [isInProgress, chatReady, hideStopButton, context.icons.stopIcon, context.icons.sendIcon]);
|
|
2284
2324
|
const showPushToTalk = pushToTalkConfigured && (pushToTalkState === "idle" || pushToTalkState === "recording") && !inProgress;
|
|
2325
|
+
const { interrupt } = (0, import_react_core7.useCopilotChatInternal)();
|
|
2285
2326
|
const canSend = (0, import_react14.useMemo)(() => {
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
const interruptInProgress = (interruptEvent == null ? void 0 : interruptEvent.name) === "LangGraphInterruptEvent" && !(interruptEvent == null ? void 0 : interruptEvent.response);
|
|
2289
|
-
return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interruptInProgress;
|
|
2290
|
-
}, [(_b = copilotContext.langGraphInterruptAction) == null ? void 0 : _b.event, isInProgress, text, pushToTalkState]);
|
|
2327
|
+
return !isInProgress && text.trim().length > 0 && pushToTalkState === "idle" && !interrupt;
|
|
2328
|
+
}, [interrupt, isInProgress, text, pushToTalkState]);
|
|
2291
2329
|
const canStop = (0, import_react14.useMemo)(() => {
|
|
2292
2330
|
return isInProgress && !hideStopButton;
|
|
2293
2331
|
}, [isInProgress, hideStopButton]);
|
|
@@ -2334,6 +2372,7 @@ var Input = ({
|
|
|
2334
2372
|
"data-copilotkit-in-progress": inProgress,
|
|
2335
2373
|
"data-test-id": inProgress ? "copilot-chat-request-in-progress" : "copilot-chat-ready",
|
|
2336
2374
|
className: "copilotKitInputControlButton",
|
|
2375
|
+
"aria-label": buttonAlt,
|
|
2337
2376
|
children: buttonIcon
|
|
2338
2377
|
}
|
|
2339
2378
|
)
|
|
@@ -2347,8 +2386,6 @@ var Input = ({
|
|
|
2347
2386
|
var import_react15 = __toESM(require("react"));
|
|
2348
2387
|
var import_react_core9 = require("@copilotkit/react-core");
|
|
2349
2388
|
var import_shared3 = require("@copilotkit/shared");
|
|
2350
|
-
var import_shared4 = require("@copilotkit/shared");
|
|
2351
|
-
var import_react_core10 = require("@copilotkit/react-core");
|
|
2352
2389
|
|
|
2353
2390
|
// src/components/chat/ImageUploadQueue.tsx
|
|
2354
2391
|
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
@@ -2452,18 +2489,25 @@ function Suggestion({ title, onClick, partial, className }) {
|
|
|
2452
2489
|
|
|
2453
2490
|
// src/components/chat/Suggestions.tsx
|
|
2454
2491
|
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
2455
|
-
function Suggestions({
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
|
|
2464
|
-
|
|
2465
|
-
|
|
2466
|
-
|
|
2492
|
+
function Suggestions({
|
|
2493
|
+
suggestions,
|
|
2494
|
+
onSuggestionClick,
|
|
2495
|
+
isLoading
|
|
2496
|
+
}) {
|
|
2497
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "suggestions", children: suggestions.map((suggestion, index) => {
|
|
2498
|
+
var _a, _b;
|
|
2499
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2500
|
+
Suggestion,
|
|
2501
|
+
{
|
|
2502
|
+
title: suggestion.title,
|
|
2503
|
+
message: suggestion.message,
|
|
2504
|
+
partial: (_b = (_a = suggestion.isLoading) != null ? _a : suggestion.partial) != null ? _b : isLoading,
|
|
2505
|
+
className: suggestion.className,
|
|
2506
|
+
onClick: () => onSuggestionClick(suggestion.message)
|
|
2507
|
+
},
|
|
2508
|
+
index
|
|
2509
|
+
);
|
|
2510
|
+
}) });
|
|
2467
2511
|
}
|
|
2468
2512
|
|
|
2469
2513
|
// src/components/chat/Chat.tsx
|
|
@@ -2517,6 +2561,9 @@ function CopilotChat({
|
|
|
2517
2561
|
const { publicApiKey, chatApiEndpoint } = copilotApiConfig;
|
|
2518
2562
|
const [selectedImages, setSelectedImages] = (0, import_react15.useState)([]);
|
|
2519
2563
|
const [chatError, setChatError] = (0, import_react15.useState)(null);
|
|
2564
|
+
const [messageFeedback, setMessageFeedback] = (0, import_react15.useState)(
|
|
2565
|
+
{}
|
|
2566
|
+
);
|
|
2520
2567
|
const fileInputRef = (0, import_react15.useRef)(null);
|
|
2521
2568
|
const triggerObservabilityHook = (0, import_react15.useCallback)(
|
|
2522
2569
|
(hookName, ...args) => {
|
|
@@ -2660,16 +2707,12 @@ function CopilotChat({
|
|
|
2660
2707
|
sendMessage,
|
|
2661
2708
|
stopGeneration,
|
|
2662
2709
|
reloadMessages,
|
|
2663
|
-
suggestions: currentSuggestions
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
onSubmitMessage,
|
|
2670
|
-
onStopGeneration,
|
|
2671
|
-
onReloadMessages
|
|
2672
|
-
);
|
|
2710
|
+
suggestions: currentSuggestions,
|
|
2711
|
+
isLoadingSuggestions,
|
|
2712
|
+
agent
|
|
2713
|
+
} = (0, import_react_core9.useCopilotChatInternal)({
|
|
2714
|
+
suggestions
|
|
2715
|
+
});
|
|
2673
2716
|
const prevIsLoading = (0, import_react15.useRef)(isLoading);
|
|
2674
2717
|
(0, import_react15.useEffect)(() => {
|
|
2675
2718
|
if (prevIsLoading.current !== isLoading) {
|
|
@@ -2688,7 +2731,11 @@ function CopilotChat({
|
|
|
2688
2731
|
fileInputRef.current.value = "";
|
|
2689
2732
|
}
|
|
2690
2733
|
triggerObservabilityHook("onMessageSent", text);
|
|
2691
|
-
return sendMessage(
|
|
2734
|
+
return sendMessage({
|
|
2735
|
+
id: (0, import_shared3.randomUUID)(),
|
|
2736
|
+
content: text,
|
|
2737
|
+
role: "user"
|
|
2738
|
+
});
|
|
2692
2739
|
};
|
|
2693
2740
|
const chatContext = import_react15.default.useContext(ChatContext);
|
|
2694
2741
|
const isVisible = chatContext ? chatContext.open : true;
|
|
@@ -2744,12 +2791,18 @@ function CopilotChat({
|
|
|
2744
2791
|
if (onThumbsUp) {
|
|
2745
2792
|
onThumbsUp(message);
|
|
2746
2793
|
}
|
|
2794
|
+
setMessageFeedback((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
2795
|
+
[message.id]: "thumbsUp"
|
|
2796
|
+
}));
|
|
2747
2797
|
triggerObservabilityHook("onFeedbackGiven", message.id, "thumbsUp");
|
|
2748
2798
|
};
|
|
2749
2799
|
const handleThumbsDown = (message) => {
|
|
2750
2800
|
if (onThumbsDown) {
|
|
2751
2801
|
onThumbsDown(message);
|
|
2752
2802
|
}
|
|
2803
|
+
setMessageFeedback((prev) => __spreadProps(__spreadValues({}, prev), {
|
|
2804
|
+
[message.id]: "thumbsDown"
|
|
2805
|
+
}));
|
|
2753
2806
|
triggerObservabilityHook("onFeedbackGiven", message.id, "thumbsDown");
|
|
2754
2807
|
};
|
|
2755
2808
|
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(WrappedCopilotChat, { icons, labels, className, children: [
|
|
@@ -2771,6 +2824,7 @@ function CopilotChat({
|
|
|
2771
2824
|
onCopy: handleCopy,
|
|
2772
2825
|
onThumbsUp: handleThumbsUp,
|
|
2773
2826
|
onThumbsDown: handleThumbsDown,
|
|
2827
|
+
messageFeedback,
|
|
2774
2828
|
markdownTagRenderers,
|
|
2775
2829
|
ImageRenderer: ImageRenderer2,
|
|
2776
2830
|
ErrorMessage,
|
|
@@ -2784,7 +2838,8 @@ function CopilotChat({
|
|
|
2784
2838
|
RenderSuggestionsList,
|
|
2785
2839
|
{
|
|
2786
2840
|
onSuggestionClick: handleSendMessage,
|
|
2787
|
-
suggestions: currentSuggestions
|
|
2841
|
+
suggestions: currentSuggestions,
|
|
2842
|
+
isLoading: isLoadingSuggestions
|
|
2788
2843
|
}
|
|
2789
2844
|
)
|
|
2790
2845
|
}
|
|
@@ -2807,6 +2862,7 @@ function CopilotChat({
|
|
|
2807
2862
|
Input2,
|
|
2808
2863
|
{
|
|
2809
2864
|
inProgress: isLoading,
|
|
2865
|
+
chatReady: Boolean(agent),
|
|
2810
2866
|
onSend: handleSendMessage,
|
|
2811
2867
|
isVisible,
|
|
2812
2868
|
onStop: stopGeneration,
|
|
@@ -2832,243 +2888,10 @@ function WrappedCopilotChat({
|
|
|
2832
2888
|
}
|
|
2833
2889
|
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_jsx_runtime24.Fragment, { children });
|
|
2834
2890
|
}
|
|
2835
|
-
var useCopilotChatLogic = (chatSuggestions, makeSystemMessage, disableSystemMessage, onInProgress, onSubmitMessage, onStopGeneration, onReloadMessages) => {
|
|
2836
|
-
var _a;
|
|
2837
|
-
const {
|
|
2838
|
-
messages,
|
|
2839
|
-
sendMessage,
|
|
2840
|
-
setMessages,
|
|
2841
|
-
reloadMessages: defaultReloadMessages,
|
|
2842
|
-
stopGeneration: defaultStopGeneration,
|
|
2843
|
-
runChatCompletion,
|
|
2844
|
-
isLoading,
|
|
2845
|
-
suggestions,
|
|
2846
|
-
setSuggestions,
|
|
2847
|
-
generateSuggestions,
|
|
2848
|
-
resetSuggestions: resetSuggestionsFromHook,
|
|
2849
|
-
isLoadingSuggestions
|
|
2850
|
-
} = (0, import_react_core9.useCopilotChatInternal)({
|
|
2851
|
-
makeSystemMessage,
|
|
2852
|
-
disableSystemMessage
|
|
2853
|
-
});
|
|
2854
|
-
const generalContext = (0, import_react_core9.useCopilotContext)();
|
|
2855
|
-
const messagesContext = (0, import_react_core9.useCopilotMessagesContext)();
|
|
2856
|
-
const { actions } = generalContext;
|
|
2857
|
-
const [suggestionsFailed, setSuggestionsFailed] = (0, import_react15.useState)(false);
|
|
2858
|
-
const hasGeneratedInitialSuggestions = (0, import_react15.useRef)(false);
|
|
2859
|
-
(0, import_react15.useEffect)(() => {
|
|
2860
|
-
if (Array.isArray(chatSuggestions)) {
|
|
2861
|
-
setSuggestions(chatSuggestions);
|
|
2862
|
-
hasGeneratedInitialSuggestions.current = true;
|
|
2863
|
-
}
|
|
2864
|
-
}, [JSON.stringify(chatSuggestions), setSuggestions]);
|
|
2865
|
-
const generateSuggestionsWithErrorHandling = (0, import_react15.useCallback)(
|
|
2866
|
-
(context) => __async(void 0, null, function* () {
|
|
2867
|
-
try {
|
|
2868
|
-
yield generateSuggestions();
|
|
2869
|
-
} catch (error) {
|
|
2870
|
-
console.error("Failed to generate suggestions:", error);
|
|
2871
|
-
setSuggestionsFailed(true);
|
|
2872
|
-
}
|
|
2873
|
-
}),
|
|
2874
|
-
[generateSuggestions]
|
|
2875
|
-
);
|
|
2876
|
-
(0, import_react15.useEffect)(() => {
|
|
2877
|
-
if (chatSuggestions !== "auto" || isLoadingSuggestions || suggestionsFailed) {
|
|
2878
|
-
return;
|
|
2879
|
-
}
|
|
2880
|
-
if (isLoading) {
|
|
2881
|
-
return;
|
|
2882
|
-
}
|
|
2883
|
-
if (Object.keys(generalContext.chatSuggestionConfiguration).length === 0) {
|
|
2884
|
-
return;
|
|
2885
|
-
}
|
|
2886
|
-
if (messages.length === 0 && !hasGeneratedInitialSuggestions.current) {
|
|
2887
|
-
hasGeneratedInitialSuggestions.current = true;
|
|
2888
|
-
generateSuggestionsWithErrorHandling("initial");
|
|
2889
|
-
return;
|
|
2890
|
-
}
|
|
2891
|
-
if (messages.length > 0 && suggestions.length === 0) {
|
|
2892
|
-
generateSuggestionsWithErrorHandling("post-message");
|
|
2893
|
-
return;
|
|
2894
|
-
}
|
|
2895
|
-
}, [
|
|
2896
|
-
chatSuggestions,
|
|
2897
|
-
isLoadingSuggestions,
|
|
2898
|
-
suggestionsFailed,
|
|
2899
|
-
messages.length,
|
|
2900
|
-
isLoading,
|
|
2901
|
-
suggestions.length,
|
|
2902
|
-
Object.keys(generalContext.chatSuggestionConfiguration).join(","),
|
|
2903
|
-
// Use stable string instead of object reference
|
|
2904
|
-
generateSuggestionsWithErrorHandling
|
|
2905
|
-
]);
|
|
2906
|
-
(0, import_react15.useEffect)(() => {
|
|
2907
|
-
if (chatSuggestions !== "auto") {
|
|
2908
|
-
hasGeneratedInitialSuggestions.current = false;
|
|
2909
|
-
setSuggestionsFailed(false);
|
|
2910
|
-
}
|
|
2911
|
-
}, [chatSuggestions]);
|
|
2912
|
-
const stableContext = (0, import_react15.useMemo)(
|
|
2913
|
-
() => __spreadValues(__spreadValues({}, generalContext), messagesContext),
|
|
2914
|
-
[
|
|
2915
|
-
// Only include stable dependencies
|
|
2916
|
-
generalContext.actions,
|
|
2917
|
-
messagesContext.messages.length,
|
|
2918
|
-
generalContext.isLoading
|
|
2919
|
-
]
|
|
2920
|
-
);
|
|
2921
|
-
const resetSuggestions = (0, import_react15.useCallback)(() => {
|
|
2922
|
-
resetSuggestionsFromHook();
|
|
2923
|
-
setSuggestionsFailed(false);
|
|
2924
|
-
hasGeneratedInitialSuggestions.current = false;
|
|
2925
|
-
}, [resetSuggestionsFromHook]);
|
|
2926
|
-
(0, import_react15.useEffect)(() => {
|
|
2927
|
-
onInProgress == null ? void 0 : onInProgress(isLoading);
|
|
2928
|
-
}, [onInProgress, isLoading]);
|
|
2929
|
-
const safelySendMessage = (messageContent, imagesToUse) => __async(void 0, null, function* () {
|
|
2930
|
-
const images = imagesToUse || [];
|
|
2931
|
-
if (chatSuggestions === "auto" || chatSuggestions === "manual") {
|
|
2932
|
-
setSuggestions([]);
|
|
2933
|
-
}
|
|
2934
|
-
let firstMessage = null;
|
|
2935
|
-
if (messageContent.trim().length > 0) {
|
|
2936
|
-
const textMessage = {
|
|
2937
|
-
id: (0, import_shared4.randomId)(),
|
|
2938
|
-
role: "user",
|
|
2939
|
-
content: messageContent
|
|
2940
|
-
};
|
|
2941
|
-
if (onSubmitMessage) {
|
|
2942
|
-
try {
|
|
2943
|
-
yield onSubmitMessage(messageContent);
|
|
2944
|
-
} catch (error) {
|
|
2945
|
-
console.error("Error in onSubmitMessage:", error);
|
|
2946
|
-
}
|
|
2947
|
-
}
|
|
2948
|
-
yield sendMessage(textMessage, {
|
|
2949
|
-
followUp: images.length === 0,
|
|
2950
|
-
clearSuggestions: chatSuggestions === "auto" || chatSuggestions === "manual"
|
|
2951
|
-
});
|
|
2952
|
-
if (!firstMessage) {
|
|
2953
|
-
firstMessage = textMessage;
|
|
2954
|
-
}
|
|
2955
|
-
}
|
|
2956
|
-
if (images.length > 0) {
|
|
2957
|
-
for (let i = 0; i < images.length; i++) {
|
|
2958
|
-
const imageMessage = {
|
|
2959
|
-
id: (0, import_shared4.randomId)(),
|
|
2960
|
-
role: "user",
|
|
2961
|
-
image: {
|
|
2962
|
-
format: images[i].contentType.replace("image/", ""),
|
|
2963
|
-
bytes: images[i].bytes
|
|
2964
|
-
}
|
|
2965
|
-
};
|
|
2966
|
-
yield sendMessage(imageMessage, { followUp: i === images.length - 1 });
|
|
2967
|
-
if (!firstMessage) {
|
|
2968
|
-
firstMessage = imageMessage;
|
|
2969
|
-
}
|
|
2970
|
-
}
|
|
2971
|
-
}
|
|
2972
|
-
if (!firstMessage) {
|
|
2973
|
-
return { role: "user", content: "", id: (0, import_shared4.randomId)() };
|
|
2974
|
-
}
|
|
2975
|
-
return firstMessage;
|
|
2976
|
-
});
|
|
2977
|
-
const currentAgentName = (_a = generalContext.agentSession) == null ? void 0 : _a.agentName;
|
|
2978
|
-
const restartCurrentAgent = (hint) => __async(void 0, null, function* () {
|
|
2979
|
-
if (generalContext.agentSession) {
|
|
2980
|
-
generalContext.setAgentSession(__spreadProps(__spreadValues({}, generalContext.agentSession), {
|
|
2981
|
-
nodeName: void 0,
|
|
2982
|
-
threadId: void 0
|
|
2983
|
-
}));
|
|
2984
|
-
generalContext.setCoagentStates((prevAgentStates) => {
|
|
2985
|
-
return __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
2986
|
-
[generalContext.agentSession.agentName]: __spreadProps(__spreadValues({}, prevAgentStates[generalContext.agentSession.agentName]), {
|
|
2987
|
-
threadId: void 0,
|
|
2988
|
-
nodeName: void 0,
|
|
2989
|
-
runId: void 0
|
|
2990
|
-
})
|
|
2991
|
-
});
|
|
2992
|
-
});
|
|
2993
|
-
}
|
|
2994
|
-
});
|
|
2995
|
-
const runCurrentAgent = (hint) => __async(void 0, null, function* () {
|
|
2996
|
-
if (generalContext.agentSession) {
|
|
2997
|
-
yield (0, import_react_core10.runAgent)(
|
|
2998
|
-
generalContext.agentSession.agentName,
|
|
2999
|
-
stableContext,
|
|
3000
|
-
messagesContext.messages,
|
|
3001
|
-
sendMessage,
|
|
3002
|
-
runChatCompletion
|
|
3003
|
-
);
|
|
3004
|
-
}
|
|
3005
|
-
});
|
|
3006
|
-
const stopCurrentAgent = () => {
|
|
3007
|
-
if (generalContext.agentSession) {
|
|
3008
|
-
(0, import_react_core10.stopAgent)(generalContext.agentSession.agentName, stableContext);
|
|
3009
|
-
}
|
|
3010
|
-
};
|
|
3011
|
-
const setCurrentAgentState = (state) => {
|
|
3012
|
-
if (generalContext.agentSession) {
|
|
3013
|
-
generalContext.setCoagentStates((prevAgentStates) => {
|
|
3014
|
-
return __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
3015
|
-
[generalContext.agentSession.agentName]: {
|
|
3016
|
-
state
|
|
3017
|
-
}
|
|
3018
|
-
});
|
|
3019
|
-
});
|
|
3020
|
-
}
|
|
3021
|
-
};
|
|
3022
|
-
function stopGeneration() {
|
|
3023
|
-
setSuggestions([]);
|
|
3024
|
-
if (onStopGeneration) {
|
|
3025
|
-
onStopGeneration({
|
|
3026
|
-
messages,
|
|
3027
|
-
setMessages,
|
|
3028
|
-
stopGeneration: defaultStopGeneration,
|
|
3029
|
-
currentAgentName,
|
|
3030
|
-
restartCurrentAgent,
|
|
3031
|
-
stopCurrentAgent,
|
|
3032
|
-
runCurrentAgent,
|
|
3033
|
-
setCurrentAgentState
|
|
3034
|
-
});
|
|
3035
|
-
} else {
|
|
3036
|
-
defaultStopGeneration();
|
|
3037
|
-
}
|
|
3038
|
-
}
|
|
3039
|
-
function reloadMessages(messageId) {
|
|
3040
|
-
if (onReloadMessages) {
|
|
3041
|
-
onReloadMessages({
|
|
3042
|
-
messages,
|
|
3043
|
-
setMessages,
|
|
3044
|
-
stopGeneration: defaultStopGeneration,
|
|
3045
|
-
currentAgentName,
|
|
3046
|
-
restartCurrentAgent,
|
|
3047
|
-
stopCurrentAgent,
|
|
3048
|
-
runCurrentAgent,
|
|
3049
|
-
setCurrentAgentState,
|
|
3050
|
-
messageId
|
|
3051
|
-
});
|
|
3052
|
-
} else {
|
|
3053
|
-
defaultReloadMessages(messageId);
|
|
3054
|
-
}
|
|
3055
|
-
}
|
|
3056
|
-
return {
|
|
3057
|
-
messages,
|
|
3058
|
-
isLoading,
|
|
3059
|
-
suggestions,
|
|
3060
|
-
sendMessage: safelySendMessage,
|
|
3061
|
-
stopGeneration,
|
|
3062
|
-
reloadMessages,
|
|
3063
|
-
resetSuggestions,
|
|
3064
|
-
context: stableContext,
|
|
3065
|
-
actions
|
|
3066
|
-
};
|
|
3067
|
-
};
|
|
3068
2891
|
|
|
3069
2892
|
// src/components/chat/Modal.tsx
|
|
3070
|
-
var
|
|
3071
|
-
var
|
|
2893
|
+
var import_react_core10 = require("@copilotkit/react-core");
|
|
2894
|
+
var import_shared4 = require("@copilotkit/shared");
|
|
3072
2895
|
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
3073
2896
|
var CopilotModalInner = (_a) => {
|
|
3074
2897
|
var _b = _a, {
|
|
@@ -3094,7 +2917,7 @@ var CopilotModalInner = (_a) => {
|
|
|
3094
2917
|
"Button",
|
|
3095
2918
|
"Header"
|
|
3096
2919
|
]);
|
|
3097
|
-
const { copilotApiConfig, setBannerError } = (0,
|
|
2920
|
+
const { copilotApiConfig, setBannerError } = (0, import_react_core10.useCopilotContext)();
|
|
3098
2921
|
const { publicApiKey } = copilotApiConfig;
|
|
3099
2922
|
const triggerObservabilityHook = (0, import_react16.useCallback)(
|
|
3100
2923
|
(hookName, ...args) => {
|
|
@@ -3103,14 +2926,14 @@ var CopilotModalInner = (_a) => {
|
|
|
3103
2926
|
}
|
|
3104
2927
|
if ((observabilityHooks == null ? void 0 : observabilityHooks[hookName]) && !publicApiKey) {
|
|
3105
2928
|
setBannerError(
|
|
3106
|
-
new
|
|
2929
|
+
new import_shared4.CopilotKitError({
|
|
3107
2930
|
message: "observabilityHooks requires a publicApiKey to function.",
|
|
3108
|
-
code:
|
|
3109
|
-
severity:
|
|
3110
|
-
visibility:
|
|
2931
|
+
code: import_shared4.CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR,
|
|
2932
|
+
severity: import_shared4.Severity.CRITICAL,
|
|
2933
|
+
visibility: import_shared4.ErrorVisibility.BANNER
|
|
3111
2934
|
})
|
|
3112
2935
|
);
|
|
3113
|
-
|
|
2936
|
+
import_shared4.styledConsole.publicApiKeyRequired("observabilityHooks");
|
|
3114
2937
|
}
|
|
3115
2938
|
},
|
|
3116
2939
|
[publicApiKey, observabilityHooks, setBannerError]
|