@copilotkit/react-core 1.9.2-next.9 → 1.9.3-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +191 -0
- package/dist/{chunk-ERXWDCY6.mjs → chunk-36MGCCPZ.mjs} +2 -2
- package/dist/{chunk-UBNRUXEK.mjs → chunk-5BSUSFHM.mjs} +2 -2
- package/dist/{chunk-G7LYGERN.mjs → chunk-6ZLSC4KB.mjs} +124 -73
- package/dist/chunk-6ZLSC4KB.mjs.map +1 -0
- package/dist/{chunk-JDEWNLNP.mjs → chunk-BSAVFYRQ.mjs} +11 -11
- package/dist/{chunk-JDEWNLNP.mjs.map → chunk-BSAVFYRQ.mjs.map} +1 -1
- package/dist/{chunk-JPMIAGI6.mjs → chunk-BVK7PLK6.mjs} +2 -2
- package/dist/{chunk-FXK6RQIN.mjs → chunk-CUAFWKTQ.mjs} +4 -4
- package/dist/{chunk-XFOTNHYA.mjs → chunk-DKZTPL66.mjs} +2 -2
- package/dist/{chunk-XFOTNHYA.mjs.map → chunk-DKZTPL66.mjs.map} +1 -1
- package/dist/{chunk-EF5BNM34.mjs → chunk-FN3UA2ZE.mjs} +3 -3
- package/dist/{chunk-EXU7GWLC.mjs → chunk-GEE5AMYL.mjs} +9 -9
- package/dist/{chunk-WOGURSAL.mjs → chunk-GIMSRCVW.mjs} +64 -23
- package/dist/chunk-GIMSRCVW.mjs.map +1 -0
- package/dist/{chunk-55QZ2SVJ.mjs → chunk-JWAXDYOW.mjs} +8 -8
- package/dist/chunk-JWAXDYOW.mjs.map +1 -0
- package/dist/{chunk-3YHYWAHK.mjs → chunk-KIXKBJUV.mjs} +2 -2
- package/dist/{chunk-ADIITPD2.mjs → chunk-KLENTCQV.mjs} +34 -8
- package/dist/{chunk-ADIITPD2.mjs.map → chunk-KLENTCQV.mjs.map} +1 -1
- package/dist/{chunk-OF4SZTLL.mjs → chunk-NGQN3JRJ.mjs} +3 -3
- package/dist/{chunk-NQVCZQ5T.mjs → chunk-NJA5ZLAZ.mjs} +27 -8
- package/dist/chunk-NJA5ZLAZ.mjs.map +1 -0
- package/dist/{chunk-SJJNFYGQ.mjs → chunk-SGF6C7I6.mjs} +4 -4
- package/dist/{chunk-CMQV4XNY.mjs → chunk-VDADWRS3.mjs} +2 -2
- package/dist/components/copilot-provider/copilot-messages.js +7 -7
- package/dist/components/copilot-provider/copilot-messages.js.map +1 -1
- package/dist/components/copilot-provider/copilot-messages.mjs +3 -3
- package/dist/components/copilot-provider/copilotkit-props.d.ts +14 -9
- package/dist/components/copilot-provider/copilotkit-props.js.map +1 -1
- package/dist/components/copilot-provider/copilotkit.d.ts +1 -1
- package/dist/components/copilot-provider/copilotkit.js +70 -29
- package/dist/components/copilot-provider/copilotkit.js.map +1 -1
- package/dist/components/copilot-provider/copilotkit.mjs +9 -9
- package/dist/components/copilot-provider/index.d.ts +1 -1
- package/dist/components/copilot-provider/index.js +70 -29
- package/dist/components/copilot-provider/index.js.map +1 -1
- package/dist/components/copilot-provider/index.mjs +9 -9
- package/dist/components/error-boundary/error-boundary.mjs +2 -2
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.js +70 -29
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +9 -9
- package/dist/context/copilot-context.d.ts +1 -1
- package/dist/context/copilot-context.js +1 -1
- package/dist/context/copilot-context.js.map +1 -1
- package/dist/context/copilot-context.mjs +1 -1
- package/dist/context/index.d.ts +1 -1
- package/dist/context/index.js +1 -1
- package/dist/context/index.js.map +1 -1
- package/dist/context/index.mjs +4 -4
- package/dist/{copilot-context-3da805ab.d.ts → copilot-context-3ab4fdf5.d.ts} +3 -3
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.js +179 -83
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +23 -23
- package/dist/hooks/use-chat.d.ts +1 -1
- package/dist/hooks/use-chat.js +220 -169
- package/dist/hooks/use-chat.js.map +1 -1
- package/dist/hooks/use-chat.mjs +4 -4
- package/dist/hooks/use-coagent-state-render.js +1 -1
- package/dist/hooks/use-coagent-state-render.js.map +1 -1
- package/dist/hooks/use-coagent-state-render.mjs +2 -2
- package/dist/hooks/use-coagent.d.ts +1 -1
- package/dist/hooks/use-coagent.js +154 -77
- package/dist/hooks/use-coagent.js.map +1 -1
- package/dist/hooks/use-coagent.mjs +14 -14
- package/dist/hooks/use-copilot-action.js +26 -7
- package/dist/hooks/use-copilot-action.js.map +1 -1
- package/dist/hooks/use-copilot-action.mjs +2 -2
- package/dist/hooks/use-copilot-additional-instructions.js +1 -1
- package/dist/hooks/use-copilot-additional-instructions.js.map +1 -1
- package/dist/hooks/use-copilot-additional-instructions.mjs +2 -2
- package/dist/hooks/use-copilot-authenticated-action.js +26 -7
- package/dist/hooks/use-copilot-authenticated-action.js.map +1 -1
- package/dist/hooks/use-copilot-authenticated-action.mjs +3 -3
- package/dist/hooks/use-copilot-chat.d.ts +1 -1
- package/dist/hooks/use-copilot-chat.js +128 -77
- package/dist/hooks/use-copilot-chat.js.map +1 -1
- package/dist/hooks/use-copilot-chat.mjs +13 -13
- package/dist/hooks/use-copilot-readable.js +1 -1
- package/dist/hooks/use-copilot-readable.js.map +1 -1
- package/dist/hooks/use-copilot-readable.mjs +2 -2
- package/dist/hooks/use-copilot-runtime-client.d.ts +2 -2
- package/dist/hooks/use-copilot-runtime-client.js +7 -7
- package/dist/hooks/use-copilot-runtime-client.js.map +1 -1
- package/dist/hooks/use-copilot-runtime-client.mjs +1 -1
- package/dist/hooks/use-langgraph-interrupt-render.js +1 -1
- package/dist/hooks/use-langgraph-interrupt-render.js.map +1 -1
- package/dist/hooks/use-langgraph-interrupt-render.mjs +2 -2
- package/dist/hooks/use-langgraph-interrupt.d.ts +1 -1
- package/dist/hooks/use-langgraph-interrupt.js +128 -77
- package/dist/hooks/use-langgraph-interrupt.js.map +1 -1
- package/dist/hooks/use-langgraph-interrupt.mjs +14 -14
- package/dist/hooks/use-make-copilot-document-readable.js +1 -1
- package/dist/hooks/use-make-copilot-document-readable.js.map +1 -1
- package/dist/hooks/use-make-copilot-document-readable.mjs +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +240 -103
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +27 -27
- package/dist/lib/copilot-task.d.ts +1 -1
- package/dist/lib/copilot-task.js.map +1 -1
- package/dist/lib/copilot-task.mjs +11 -11
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/index.mjs +11 -11
- package/dist/setupTests.d.ts +2 -0
- package/dist/setupTests.js +26 -0
- package/dist/setupTests.js.map +1 -0
- package/dist/setupTests.mjs +24 -0
- package/dist/setupTests.mjs.map +1 -0
- package/dist/types/interrupt-action.d.ts +1 -1
- package/dist/utils/extract.d.ts +1 -1
- package/dist/utils/extract.js.map +1 -1
- package/dist/utils/extract.mjs +9 -9
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +10 -10
- package/jest.config.js +4 -0
- package/package.json +6 -3
- package/src/components/copilot-provider/__tests__/{copilotkit-trace.test.tsx → copilotkit-error.test.tsx} +17 -17
- package/src/components/copilot-provider/copilot-messages.tsx +7 -7
- package/src/components/copilot-provider/copilotkit-props.tsx +13 -8
- package/src/components/copilot-provider/copilotkit.tsx +61 -19
- package/src/context/copilot-context.tsx +4 -4
- package/src/hooks/__tests__/use-coagent-config.test.ts +284 -0
- package/src/hooks/use-chat.ts +149 -61
- package/src/hooks/use-coagent.ts +36 -0
- package/src/hooks/use-copilot-action.ts +51 -9
- package/src/hooks/use-copilot-runtime-client.ts +11 -12
- package/src/setupTests.ts +26 -0
- package/tsconfig.json +5 -2
- package/dist/chunk-55QZ2SVJ.mjs.map +0 -1
- package/dist/chunk-G7LYGERN.mjs.map +0 -1
- package/dist/chunk-NQVCZQ5T.mjs.map +0 -1
- package/dist/chunk-WOGURSAL.mjs.map +0 -1
- /package/dist/{chunk-ERXWDCY6.mjs.map → chunk-36MGCCPZ.mjs.map} +0 -0
- /package/dist/{chunk-UBNRUXEK.mjs.map → chunk-5BSUSFHM.mjs.map} +0 -0
- /package/dist/{chunk-JPMIAGI6.mjs.map → chunk-BVK7PLK6.mjs.map} +0 -0
- /package/dist/{chunk-FXK6RQIN.mjs.map → chunk-CUAFWKTQ.mjs.map} +0 -0
- /package/dist/{chunk-EF5BNM34.mjs.map → chunk-FN3UA2ZE.mjs.map} +0 -0
- /package/dist/{chunk-EXU7GWLC.mjs.map → chunk-GEE5AMYL.mjs.map} +0 -0
- /package/dist/{chunk-3YHYWAHK.mjs.map → chunk-KIXKBJUV.mjs.map} +0 -0
- /package/dist/{chunk-OF4SZTLL.mjs.map → chunk-NGQN3JRJ.mjs.map} +0 -0
- /package/dist/{chunk-SJJNFYGQ.mjs.map → chunk-SGF6C7I6.mjs.map} +0 -0
- /package/dist/{chunk-CMQV4XNY.mjs.map → chunk-VDADWRS3.mjs.map} +0 -0
|
@@ -158,7 +158,7 @@ var emptyCopilotContext = {
|
|
|
158
158
|
langGraphInterruptAction: null,
|
|
159
159
|
setLangGraphInterruptAction: () => null,
|
|
160
160
|
removeLangGraphInterruptAction: () => null,
|
|
161
|
-
|
|
161
|
+
onError: void 0
|
|
162
162
|
};
|
|
163
163
|
var CopilotContext = import_react.default.createContext(emptyCopilotContext);
|
|
164
164
|
function useCopilotContext() {
|
|
@@ -178,6 +178,7 @@ var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
|
|
|
178
178
|
|
|
179
179
|
// src/hooks/use-chat.ts
|
|
180
180
|
var import_react5 = require("react");
|
|
181
|
+
var import_react_dom = require("react-dom");
|
|
181
182
|
var import_shared4 = require("@copilotkit/shared");
|
|
182
183
|
var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
|
|
183
184
|
|
|
@@ -234,13 +235,13 @@ function shouldShowDevConsole(showDevConsole) {
|
|
|
234
235
|
// src/hooks/use-copilot-runtime-client.ts
|
|
235
236
|
var useCopilotRuntimeClient = (options) => {
|
|
236
237
|
const { setBannerError } = useToast();
|
|
237
|
-
const _a = options, { showDevConsole,
|
|
238
|
+
const _a = options, { showDevConsole, onError } = _a, runtimeOptions = __objRest(_a, ["showDevConsole", "onError"]);
|
|
238
239
|
const lastStructuredErrorRef = (0, import_react3.useRef)(null);
|
|
239
240
|
const traceUIError = (error, originalError) => __async(void 0, null, function* () {
|
|
240
|
-
if (!
|
|
241
|
+
if (!onError || !runtimeOptions.publicApiKey)
|
|
241
242
|
return;
|
|
242
243
|
try {
|
|
243
|
-
const
|
|
244
|
+
const errorEvent = {
|
|
244
245
|
type: "error",
|
|
245
246
|
timestamp: Date.now(),
|
|
246
247
|
context: {
|
|
@@ -258,9 +259,9 @@ var useCopilotRuntimeClient = (options) => {
|
|
|
258
259
|
},
|
|
259
260
|
error
|
|
260
261
|
};
|
|
261
|
-
yield
|
|
262
|
-
} catch (
|
|
263
|
-
console.error("Error in
|
|
262
|
+
yield onError(errorEvent);
|
|
263
|
+
} catch (error2) {
|
|
264
|
+
console.error("Error in onError handler:", error2);
|
|
264
265
|
}
|
|
265
266
|
});
|
|
266
267
|
const runtimeClient = (0, import_react3.useMemo)(() => {
|
|
@@ -324,7 +325,7 @@ var useCopilotRuntimeClient = (options) => {
|
|
|
324
325
|
setBannerError(warningError);
|
|
325
326
|
}
|
|
326
327
|
}));
|
|
327
|
-
}, [runtimeOptions, setBannerError, showDevConsole,
|
|
328
|
+
}, [runtimeOptions, setBannerError, showDevConsole, onError]);
|
|
328
329
|
return runtimeClient;
|
|
329
330
|
};
|
|
330
331
|
function createStructuredError(gqlError) {
|
|
@@ -497,9 +498,9 @@ function useChat(options) {
|
|
|
497
498
|
const runChatCompletionRef = (0, import_react5.useRef)();
|
|
498
499
|
const addErrorToast = useErrorToast();
|
|
499
500
|
const { setBannerError } = useToast();
|
|
500
|
-
const {
|
|
501
|
+
const { onError } = useCopilotContext();
|
|
501
502
|
const traceUIError = (error, originalError) => __async(this, null, function* () {
|
|
502
|
-
if (!
|
|
503
|
+
if (!onError || !(copilotConfig == null ? void 0 : copilotConfig.publicApiKey))
|
|
503
504
|
return;
|
|
504
505
|
try {
|
|
505
506
|
const traceEvent = {
|
|
@@ -520,9 +521,9 @@ function useChat(options) {
|
|
|
520
521
|
},
|
|
521
522
|
error
|
|
522
523
|
};
|
|
523
|
-
yield
|
|
524
|
+
yield onError(traceEvent);
|
|
524
525
|
} catch (traceError) {
|
|
525
|
-
console.error("Error in use-chat
|
|
526
|
+
console.error("Error in use-chat onError handler:", traceError);
|
|
526
527
|
}
|
|
527
528
|
});
|
|
528
529
|
const agentSessionRef = (0, import_react5.useRef)(agentSession);
|
|
@@ -744,17 +745,22 @@ function useChat(options) {
|
|
|
744
745
|
lastAgentStateMessage.state.messages
|
|
745
746
|
);
|
|
746
747
|
}
|
|
747
|
-
setCoagentStatesWithRef((prevAgentStates) =>
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
748
|
+
setCoagentStatesWithRef((prevAgentStates) => {
|
|
749
|
+
var _a2;
|
|
750
|
+
return __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
751
|
+
[lastAgentStateMessage.agentName]: {
|
|
752
|
+
name: lastAgentStateMessage.agentName,
|
|
753
|
+
state: lastAgentStateMessage.state,
|
|
754
|
+
running: lastAgentStateMessage.running,
|
|
755
|
+
active: lastAgentStateMessage.active,
|
|
756
|
+
threadId: lastAgentStateMessage.threadId,
|
|
757
|
+
nodeName: lastAgentStateMessage.nodeName,
|
|
758
|
+
runId: lastAgentStateMessage.runId,
|
|
759
|
+
// Preserve existing config from previous state
|
|
760
|
+
config: (_a2 = prevAgentStates[lastAgentStateMessage.agentName]) == null ? void 0 : _a2.config
|
|
761
|
+
}
|
|
762
|
+
});
|
|
763
|
+
});
|
|
758
764
|
if (lastAgentStateMessage.running) {
|
|
759
765
|
setAgentSession({
|
|
760
766
|
threadId: lastAgentStateMessage.threadId,
|
|
@@ -784,6 +790,39 @@ function useChat(options) {
|
|
|
784
790
|
newMessages
|
|
785
791
|
);
|
|
786
792
|
let didExecuteAction = false;
|
|
793
|
+
const executeActionFromMessage = (currentAction, actionMessage) => __async(this, null, function* () {
|
|
794
|
+
var _a2;
|
|
795
|
+
const isInterruptAction = interruptMessages.find((m) => m.id === actionMessage.id);
|
|
796
|
+
followUp = (_a2 = currentAction == null ? void 0 : currentAction.followUp) != null ? _a2 : !isInterruptAction;
|
|
797
|
+
if (currentAction == null ? void 0 : currentAction._setActivatingMessageId) {
|
|
798
|
+
currentAction._setActivatingMessageId(actionMessage.id);
|
|
799
|
+
}
|
|
800
|
+
const resultMessage = yield executeAction({
|
|
801
|
+
onFunctionCall,
|
|
802
|
+
message: actionMessage,
|
|
803
|
+
chatAbortControllerRef,
|
|
804
|
+
onError: (error) => {
|
|
805
|
+
addErrorToast([error]);
|
|
806
|
+
console.error(`Failed to execute action ${actionMessage.name}: ${error}`);
|
|
807
|
+
},
|
|
808
|
+
setMessages,
|
|
809
|
+
getFinalMessages: () => finalMessages,
|
|
810
|
+
isRenderAndWait: (currentAction == null ? void 0 : currentAction._isRenderAndWait) || false
|
|
811
|
+
});
|
|
812
|
+
didExecuteAction = true;
|
|
813
|
+
const messageIndex = finalMessages.findIndex((msg) => msg.id === actionMessage.id);
|
|
814
|
+
finalMessages.splice(messageIndex + 1, 0, resultMessage);
|
|
815
|
+
if (currentAction == null ? void 0 : currentAction._isRenderAndWait) {
|
|
816
|
+
const messagesForImmediateUpdate = [...finalMessages];
|
|
817
|
+
(0, import_react_dom.flushSync)(() => {
|
|
818
|
+
setMessages(messagesForImmediateUpdate);
|
|
819
|
+
});
|
|
820
|
+
}
|
|
821
|
+
if (currentAction == null ? void 0 : currentAction._setActivatingMessageId) {
|
|
822
|
+
currentAction._setActivatingMessageId(null);
|
|
823
|
+
}
|
|
824
|
+
return resultMessage;
|
|
825
|
+
});
|
|
787
826
|
if (onFunctionCall) {
|
|
788
827
|
const lastMessages = [];
|
|
789
828
|
for (let i = finalMessages.length - 1; i >= 0; i--) {
|
|
@@ -800,37 +839,28 @@ function useChat(options) {
|
|
|
800
839
|
(action2) => action2.name === message.name
|
|
801
840
|
);
|
|
802
841
|
const currentResultMessagePairedFeAction = message.isResultMessage() ? getPairedFeAction(actions, message) : null;
|
|
803
|
-
const executeActionFromMessage = (action2, message2) => __async(this, null, function* () {
|
|
804
|
-
var _a2;
|
|
805
|
-
const isInterruptAction = interruptMessages.find((m) => m.id === message2.id);
|
|
806
|
-
followUp = (_a2 = action2 == null ? void 0 : action2.followUp) != null ? _a2 : !isInterruptAction;
|
|
807
|
-
const resultMessage = yield executeAction({
|
|
808
|
-
onFunctionCall,
|
|
809
|
-
previousMessages,
|
|
810
|
-
message: message2,
|
|
811
|
-
chatAbortControllerRef,
|
|
812
|
-
onError: (error) => {
|
|
813
|
-
addErrorToast([error]);
|
|
814
|
-
console.error(`Failed to execute action ${message2.name}: ${error}`);
|
|
815
|
-
}
|
|
816
|
-
});
|
|
817
|
-
didExecuteAction = true;
|
|
818
|
-
const messageIndex = finalMessages.findIndex((msg) => msg.id === message2.id);
|
|
819
|
-
finalMessages.splice(messageIndex + 1, 0, resultMessage);
|
|
820
|
-
return resultMessage;
|
|
821
|
-
});
|
|
822
842
|
if (action && message.isActionExecutionMessage()) {
|
|
823
|
-
const
|
|
824
|
-
const
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
843
|
+
const isRenderAndWaitAction = (action == null ? void 0 : action._isRenderAndWait) || false;
|
|
844
|
+
const alreadyProcessed = isRenderAndWaitAction && finalMessages.some(
|
|
845
|
+
(fm) => fm.isResultMessage() && fm.actionExecutionId === message.id
|
|
846
|
+
);
|
|
847
|
+
if (alreadyProcessed) {
|
|
848
|
+
} else {
|
|
849
|
+
const resultMessage = yield executeActionFromMessage(
|
|
850
|
+
action,
|
|
851
|
+
message
|
|
852
|
+
);
|
|
853
|
+
const pairedFeAction = getPairedFeAction(actions, resultMessage);
|
|
854
|
+
if (pairedFeAction) {
|
|
855
|
+
const newExecutionMessage = new import_runtime_client_gql3.ActionExecutionMessage({
|
|
856
|
+
name: pairedFeAction.name,
|
|
857
|
+
arguments: (0, import_shared4.parseJson)(resultMessage.result, resultMessage.result),
|
|
858
|
+
status: message.status,
|
|
859
|
+
createdAt: message.createdAt,
|
|
860
|
+
parentMessageId: message.parentMessageId
|
|
861
|
+
});
|
|
862
|
+
yield executeActionFromMessage(pairedFeAction, newExecutionMessage);
|
|
863
|
+
}
|
|
834
864
|
}
|
|
835
865
|
} else if (message.isResultMessage() && currentResultMessagePairedFeAction) {
|
|
836
866
|
const newExecutionMessage = new import_runtime_client_gql3.ActionExecutionMessage({
|
|
@@ -848,13 +878,9 @@ function useChat(options) {
|
|
|
848
878
|
}
|
|
849
879
|
setMessages(finalMessages);
|
|
850
880
|
}
|
|
851
|
-
if (
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
(didExecuteAction || // the last message is a server side result
|
|
855
|
-
!isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
|
|
856
|
-
!((_r = chatAbortControllerRef.current) == null ? void 0 : _r.signal.aborted)
|
|
857
|
-
) {
|
|
881
|
+
if (followUp !== false && (didExecuteAction || // the last message is a server side result
|
|
882
|
+
!isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
|
|
883
|
+
!((_r = chatAbortControllerRef.current) == null ? void 0 : _r.signal.aborted)) {
|
|
858
884
|
yield new Promise((resolve) => setTimeout(resolve, 10));
|
|
859
885
|
return yield runChatCompletionRef.current(finalMessages);
|
|
860
886
|
} else if ((_s = chatAbortControllerRef.current) == null ? void 0 : _s.signal.aborted) {
|
|
@@ -962,21 +988,35 @@ function useChat(options) {
|
|
|
962
988
|
[isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]
|
|
963
989
|
);
|
|
964
990
|
const reload = useAsyncCallback(
|
|
965
|
-
(
|
|
991
|
+
(reloadMessageId) => __async(this, null, function* () {
|
|
966
992
|
if (isLoading || messages.length === 0) {
|
|
967
993
|
return;
|
|
968
994
|
}
|
|
969
|
-
const
|
|
970
|
-
if (
|
|
971
|
-
console.warn(`Message with id ${
|
|
995
|
+
const reloadMessageIndex = messages.findIndex((msg) => msg.id === reloadMessageId);
|
|
996
|
+
if (reloadMessageIndex === -1) {
|
|
997
|
+
console.warn(`Message with id ${reloadMessageId} not found`);
|
|
972
998
|
return;
|
|
973
999
|
}
|
|
974
|
-
|
|
975
|
-
if (
|
|
976
|
-
|
|
1000
|
+
const reloadMessageRole = messages[reloadMessageIndex].role;
|
|
1001
|
+
if (reloadMessageRole !== import_runtime_client_gql3.MessageRole.Assistant) {
|
|
1002
|
+
console.warn(`Regenerate cannot be performed on ${reloadMessageRole} role`);
|
|
1003
|
+
return;
|
|
977
1004
|
}
|
|
978
|
-
|
|
979
|
-
|
|
1005
|
+
let historyCutoff = [];
|
|
1006
|
+
if (messages.length > 2) {
|
|
1007
|
+
const lastUserMessageBeforeRegenerate = messages.slice(0, reloadMessageIndex).reverse().find(
|
|
1008
|
+
(msg) => (
|
|
1009
|
+
// @ts-expect-error -- message has role
|
|
1010
|
+
msg.role === import_runtime_client_gql3.MessageRole.User
|
|
1011
|
+
)
|
|
1012
|
+
);
|
|
1013
|
+
const indexOfLastUserMessageBeforeRegenerate = messages.findIndex(
|
|
1014
|
+
(msg) => msg.id === lastUserMessageBeforeRegenerate.id
|
|
1015
|
+
);
|
|
1016
|
+
historyCutoff = messages.slice(0, indexOfLastUserMessageBeforeRegenerate + 1);
|
|
1017
|
+
}
|
|
1018
|
+
setMessages(historyCutoff);
|
|
1019
|
+
return runChatCompletionAndHandleFunctionCall(historyCutoff);
|
|
980
1020
|
}),
|
|
981
1021
|
[isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]
|
|
982
1022
|
);
|
|
@@ -1011,20 +1051,31 @@ function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
|
|
|
1011
1051
|
function executeAction(_0) {
|
|
1012
1052
|
return __async(this, arguments, function* ({
|
|
1013
1053
|
onFunctionCall,
|
|
1014
|
-
previousMessages,
|
|
1015
1054
|
message,
|
|
1016
1055
|
chatAbortControllerRef,
|
|
1017
|
-
onError
|
|
1056
|
+
onError,
|
|
1057
|
+
setMessages,
|
|
1058
|
+
getFinalMessages,
|
|
1059
|
+
isRenderAndWait
|
|
1018
1060
|
}) {
|
|
1019
1061
|
let result;
|
|
1020
1062
|
let error = null;
|
|
1063
|
+
const currentMessagesForHandler = getFinalMessages();
|
|
1064
|
+
const handlerReturnedPromise = onFunctionCall({
|
|
1065
|
+
messages: currentMessagesForHandler,
|
|
1066
|
+
name: message.name,
|
|
1067
|
+
args: message.arguments
|
|
1068
|
+
});
|
|
1069
|
+
if (isRenderAndWait) {
|
|
1070
|
+
const currentMessagesForRender = getFinalMessages();
|
|
1071
|
+
(0, import_react_dom.flushSync)(() => {
|
|
1072
|
+
setMessages([...currentMessagesForRender]);
|
|
1073
|
+
});
|
|
1074
|
+
}
|
|
1021
1075
|
try {
|
|
1022
1076
|
result = yield Promise.race([
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
name: message.name,
|
|
1026
|
-
args: message.arguments
|
|
1027
|
-
}),
|
|
1077
|
+
handlerReturnedPromise,
|
|
1078
|
+
// Await the promise returned by the handler
|
|
1028
1079
|
new Promise(
|
|
1029
1080
|
(resolve) => {
|
|
1030
1081
|
var _a;
|
|
@@ -1072,7 +1123,7 @@ function getPairedFeAction(actions, message) {
|
|
|
1072
1123
|
|
|
1073
1124
|
// src/components/copilot-provider/copilotkit.tsx
|
|
1074
1125
|
var import_react7 = require("react");
|
|
1075
|
-
var
|
|
1126
|
+
var import_react_dom2 = require("react-dom");
|
|
1076
1127
|
var import_shared5 = require("@copilotkit/shared");
|
|
1077
1128
|
|
|
1078
1129
|
// src/context/copilot-messages-context.tsx
|