@copilotkit/react-core 1.4.8 → 1.5.0-coagents-v0-3.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 +14 -0
- package/dist/{chunk-X6ZF5WAX.mjs → chunk-35EN6BG4.mjs} +2 -2
- package/dist/{chunk-FSC4A3JN.mjs → chunk-42N5VKIX.mjs} +23 -5
- package/dist/{chunk-FSC4A3JN.mjs.map → chunk-42N5VKIX.mjs.map} +1 -1
- package/dist/{chunk-AG7FH7OD.mjs → chunk-5FYKUKG3.mjs} +2 -2
- package/dist/{chunk-YUY5ZAST.mjs → chunk-ALR5W5JK.mjs} +17 -8
- package/dist/chunk-ALR5W5JK.mjs.map +1 -0
- package/dist/{chunk-6EMLM6WX.mjs → chunk-BT6WK2JZ.mjs} +43 -6
- package/dist/chunk-BT6WK2JZ.mjs.map +1 -0
- package/dist/{chunk-NTLCOVE5.mjs → chunk-QTDCEDOC.mjs} +141 -70
- package/dist/chunk-QTDCEDOC.mjs.map +1 -0
- package/dist/{chunk-IFTHM7LF.mjs → chunk-QX6V774L.mjs} +6 -8
- package/dist/chunk-QX6V774L.mjs.map +1 -0
- package/dist/{chunk-XQFVXX6R.mjs → chunk-TQN3EZWQ.mjs} +10 -2
- package/dist/chunk-TQN3EZWQ.mjs.map +1 -0
- package/dist/{chunk-UOVONDR6.mjs → chunk-V3PFWGIY.mjs} +2 -2
- package/dist/{chunk-IVYL7JRC.mjs → chunk-VMP6JWBB.mjs} +12 -3
- package/dist/{chunk-IVYL7JRC.mjs.map → chunk-VMP6JWBB.mjs.map} +1 -1
- package/dist/chunk-XERJQUHA.mjs +31 -0
- package/dist/chunk-XERJQUHA.mjs.map +1 -0
- package/dist/components/copilot-provider/copilotkit.js +19 -2
- package/dist/components/copilot-provider/copilotkit.js.map +1 -1
- package/dist/components/copilot-provider/copilotkit.mjs +2 -2
- package/dist/components/copilot-provider/index.js +19 -2
- package/dist/components/copilot-provider/index.js.map +1 -1
- package/dist/components/copilot-provider/index.mjs +2 -2
- package/dist/components/index.js +19 -2
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +2 -2
- package/dist/context/copilot-context.d.ts +8 -2
- package/dist/context/copilot-context.js +9 -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 +9 -1
- package/dist/context/index.js.map +1 -1
- package/dist/context/index.mjs +1 -1
- package/dist/hooks/index.d.ts +2 -1
- package/dist/hooks/index.js +264 -95
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +16 -9
- package/dist/hooks/use-chat.d.ts +20 -0
- package/dist/hooks/use-chat.js +171 -77
- package/dist/hooks/use-chat.js.map +1 -1
- package/dist/hooks/use-chat.mjs +2 -1
- package/dist/hooks/use-coagent-state-render.js +9 -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 +14 -1
- package/dist/hooks/use-coagent.js +245 -85
- package/dist/hooks/use-coagent.js.map +1 -1
- package/dist/hooks/use-coagent.mjs +12 -5
- package/dist/hooks/use-copilot-action.d.ts +12 -2
- package/dist/hooks/use-copilot-action.js +24 -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-chat.d.ts +1 -0
- package/dist/hooks/use-copilot-chat.js +223 -84
- package/dist/hooks/use-copilot-chat.js.map +1 -1
- package/dist/hooks/use-copilot-chat.mjs +5 -4
- package/dist/hooks/use-copilot-readable.js +9 -1
- package/dist/hooks/use-copilot-readable.js.map +1 -1
- package/dist/hooks/use-copilot-readable.mjs +2 -2
- package/dist/hooks/use-make-copilot-document-readable.js +9 -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 +2 -2
- package/dist/index.js +281 -106
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -10
- package/dist/lib/copilot-task.d.ts +1 -1
- package/dist/lib/copilot-task.js +33 -13
- package/dist/lib/copilot-task.js.map +1 -1
- package/dist/lib/copilot-task.mjs +4 -3
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +33 -13
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/index.mjs +4 -3
- package/dist/types/frontend-action.d.ts +21 -2
- package/dist/types/frontend-action.js +34 -0
- package/dist/types/frontend-action.js.map +1 -1
- package/dist/types/frontend-action.mjs +7 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/extract.js.map +1 -1
- package/dist/utils/extract.mjs +2 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +2 -2
- package/package.json +3 -3
- package/src/components/copilot-provider/copilotkit.tsx +10 -0
- package/src/context/copilot-context.tsx +30 -2
- package/src/hooks/index.ts +1 -1
- package/src/hooks/use-chat.ts +196 -88
- package/src/hooks/use-coagent.ts +21 -4
- package/src/hooks/use-copilot-action.ts +38 -10
- package/src/hooks/use-copilot-chat.ts +43 -3
- package/src/lib/copilot-task.ts +2 -8
- package/src/types/frontend-action.ts +55 -2
- package/src/types/index.ts +5 -1
- package/dist/chunk-6EMLM6WX.mjs.map +0 -1
- package/dist/chunk-IFTHM7LF.mjs.map +0 -1
- package/dist/chunk-NTLCOVE5.mjs.map +0 -1
- package/dist/chunk-XQFVXX6R.mjs.map +0 -1
- package/dist/chunk-YUY5ZAST.mjs.map +0 -1
- /package/dist/{chunk-X6ZF5WAX.mjs.map → chunk-35EN6BG4.mjs.map} +0 -0
- /package/dist/{chunk-AG7FH7OD.mjs.map → chunk-5FYKUKG3.mjs.map} +0 -0
- /package/dist/{chunk-UOVONDR6.mjs.map → chunk-V3PFWGIY.mjs.map} +0 -0
package/dist/hooks/index.mjs
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
import "../chunk-L34MHAXR.mjs";
|
|
2
2
|
import {
|
|
3
|
+
runAgent,
|
|
4
|
+
startAgent,
|
|
5
|
+
stopAgent,
|
|
3
6
|
useCoAgent
|
|
4
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-42N5VKIX.mjs";
|
|
5
8
|
import {
|
|
6
9
|
useCopilotAction
|
|
7
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-ALR5W5JK.mjs";
|
|
8
11
|
import {
|
|
9
12
|
useCopilotChat
|
|
10
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-BT6WK2JZ.mjs";
|
|
11
14
|
import {
|
|
12
15
|
useCopilotReadable
|
|
13
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-5FYKUKG3.mjs";
|
|
14
17
|
import {
|
|
15
18
|
useMakeCopilotDocumentReadable
|
|
16
|
-
} from "../chunk-
|
|
17
|
-
import "../chunk-
|
|
19
|
+
} from "../chunk-V3PFWGIY.mjs";
|
|
20
|
+
import "../chunk-VMP6JWBB.mjs";
|
|
18
21
|
import "../chunk-QCUP6HLK.mjs";
|
|
19
22
|
import "../chunk-MLAS4QUR.mjs";
|
|
20
23
|
import "../chunk-XXR4QFAQ.mjs";
|
|
@@ -22,7 +25,8 @@ import "../chunk-5FHSUKQL.mjs";
|
|
|
22
25
|
import "../chunk-6U3UH3KO.mjs";
|
|
23
26
|
import "../chunk-YPSGKPDA.mjs";
|
|
24
27
|
import "../chunk-DCTJZ742.mjs";
|
|
25
|
-
import "../chunk-
|
|
28
|
+
import "../chunk-QTDCEDOC.mjs";
|
|
29
|
+
import "../chunk-XERJQUHA.mjs";
|
|
26
30
|
import {
|
|
27
31
|
useCopilotRuntimeClient
|
|
28
32
|
} from "../chunk-7LRDVJH5.mjs";
|
|
@@ -30,10 +34,13 @@ import "../chunk-SFPANIOY.mjs";
|
|
|
30
34
|
import "../chunk-O7ARI5CV.mjs";
|
|
31
35
|
import {
|
|
32
36
|
useCoAgentStateRender
|
|
33
|
-
} from "../chunk-
|
|
34
|
-
import "../chunk-
|
|
37
|
+
} from "../chunk-35EN6BG4.mjs";
|
|
38
|
+
import "../chunk-TQN3EZWQ.mjs";
|
|
35
39
|
import "../chunk-SKC7AJIV.mjs";
|
|
36
40
|
export {
|
|
41
|
+
runAgent,
|
|
42
|
+
startAgent,
|
|
43
|
+
stopAgent,
|
|
37
44
|
useCoAgent,
|
|
38
45
|
useCoAgentStateRender,
|
|
39
46
|
useCopilotAction,
|
package/dist/hooks/use-chat.d.ts
CHANGED
|
@@ -68,6 +68,26 @@ type UseChatOptions = {
|
|
|
68
68
|
* setState-powered method to update the agent session
|
|
69
69
|
*/
|
|
70
70
|
setAgentSession: React.Dispatch<React.SetStateAction<AgentSession | null>>;
|
|
71
|
+
/**
|
|
72
|
+
* The current thread ID.
|
|
73
|
+
*/
|
|
74
|
+
threadId: string | null;
|
|
75
|
+
/**
|
|
76
|
+
* set the current thread ID
|
|
77
|
+
*/
|
|
78
|
+
setThreadId: (threadId: string | null) => void;
|
|
79
|
+
/**
|
|
80
|
+
* The current run ID.
|
|
81
|
+
*/
|
|
82
|
+
runId: string | null;
|
|
83
|
+
/**
|
|
84
|
+
* set the current run ID
|
|
85
|
+
*/
|
|
86
|
+
setRunId: (runId: string | null) => void;
|
|
87
|
+
/**
|
|
88
|
+
* The global chat abort controller.
|
|
89
|
+
*/
|
|
90
|
+
chatAbortControllerRef: React.MutableRefObject<AbortController | null>;
|
|
71
91
|
};
|
|
72
92
|
type UseChatHelpers = {
|
|
73
93
|
/**
|
package/dist/hooks/use-chat.js
CHANGED
|
@@ -61,8 +61,33 @@ __export(use_chat_exports, {
|
|
|
61
61
|
});
|
|
62
62
|
module.exports = __toCommonJS(use_chat_exports);
|
|
63
63
|
var import_react4 = require("react");
|
|
64
|
+
var import_shared2 = require("@copilotkit/shared");
|
|
65
|
+
var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
|
|
66
|
+
|
|
67
|
+
// src/types/frontend-action.ts
|
|
68
|
+
var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
64
69
|
var import_shared = require("@copilotkit/shared");
|
|
65
|
-
|
|
70
|
+
function processActionsForRuntimeRequest(actions) {
|
|
71
|
+
const filteredActions = actions.filter(
|
|
72
|
+
(action) => action.available !== import_runtime_client_gql.ActionInputAvailability.Disabled && action.disabled !== true && action.name !== "*"
|
|
73
|
+
).map((action) => {
|
|
74
|
+
let available = import_runtime_client_gql.ActionInputAvailability.Enabled;
|
|
75
|
+
if (action.disabled) {
|
|
76
|
+
available = import_runtime_client_gql.ActionInputAvailability.Disabled;
|
|
77
|
+
} else if (action.available === "disabled") {
|
|
78
|
+
available = import_runtime_client_gql.ActionInputAvailability.Disabled;
|
|
79
|
+
} else if (action.available === "remote") {
|
|
80
|
+
available = import_runtime_client_gql.ActionInputAvailability.Remote;
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
name: action.name,
|
|
84
|
+
description: action.description || "",
|
|
85
|
+
jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || [])),
|
|
86
|
+
available
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
return filteredActions;
|
|
90
|
+
}
|
|
66
91
|
|
|
67
92
|
// src/components/toast/toast-provider.tsx
|
|
68
93
|
var import_react2 = require("react");
|
|
@@ -192,13 +217,13 @@ function useToast() {
|
|
|
192
217
|
}
|
|
193
218
|
|
|
194
219
|
// src/hooks/use-copilot-runtime-client.ts
|
|
195
|
-
var
|
|
220
|
+
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
196
221
|
var import_react3 = require("react");
|
|
197
222
|
var useCopilotRuntimeClient = (options) => {
|
|
198
223
|
const { addGraphQLErrorsToast } = useToast();
|
|
199
224
|
const addErrorToast = useErrorToast();
|
|
200
225
|
const runtimeClient = (0, import_react3.useMemo)(() => {
|
|
201
|
-
return new
|
|
226
|
+
return new import_runtime_client_gql2.CopilotRuntimeClient(__spreadProps(__spreadValues({}, options), {
|
|
202
227
|
handleGQLErrors: (error) => {
|
|
203
228
|
if (error.graphQLErrors.length) {
|
|
204
229
|
addGraphQLErrorsToast(error.graphQLErrors);
|
|
@@ -227,17 +252,23 @@ function useChat(options) {
|
|
|
227
252
|
setCoagentStatesWithRef,
|
|
228
253
|
coagentStatesRef,
|
|
229
254
|
agentSession,
|
|
230
|
-
setAgentSession
|
|
255
|
+
setAgentSession,
|
|
256
|
+
threadId,
|
|
257
|
+
setThreadId,
|
|
258
|
+
runId,
|
|
259
|
+
setRunId,
|
|
260
|
+
chatAbortControllerRef
|
|
231
261
|
} = options;
|
|
232
|
-
const abortControllerRef = (0, import_react4.useRef)();
|
|
233
|
-
const threadIdRef = (0, import_react4.useRef)(null);
|
|
234
|
-
const runIdRef = (0, import_react4.useRef)(null);
|
|
235
262
|
const { addGraphQLErrorsToast } = useToast();
|
|
236
263
|
const runChatCompletionRef = (0, import_react4.useRef)();
|
|
237
264
|
const agentSessionRef = (0, import_react4.useRef)(agentSession);
|
|
238
265
|
agentSessionRef.current = agentSession;
|
|
266
|
+
const threadIdRef = (0, import_react4.useRef)(threadId);
|
|
267
|
+
threadIdRef.current = threadId;
|
|
268
|
+
const runIdRef = (0, import_react4.useRef)(runId);
|
|
269
|
+
runIdRef.current = runId;
|
|
239
270
|
const publicApiKey = copilotConfig.publicApiKey;
|
|
240
|
-
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [
|
|
271
|
+
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared2.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
|
|
241
272
|
const runtimeClient = useCopilotRuntimeClient({
|
|
242
273
|
url: copilotConfig.chatApiEndpoint,
|
|
243
274
|
publicApiKey: copilotConfig.publicApiKey,
|
|
@@ -246,48 +277,29 @@ function useChat(options) {
|
|
|
246
277
|
});
|
|
247
278
|
const runChatCompletion = useAsyncCallback(
|
|
248
279
|
(previousMessages) => __async(this, null, function* () {
|
|
249
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
280
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
250
281
|
setIsLoading(true);
|
|
251
282
|
let newMessages = [
|
|
252
|
-
new
|
|
283
|
+
new import_runtime_client_gql3.TextMessage({
|
|
253
284
|
content: "",
|
|
254
|
-
role:
|
|
285
|
+
role: import_runtime_client_gql3.Role.Assistant
|
|
255
286
|
})
|
|
256
287
|
];
|
|
257
|
-
|
|
258
|
-
abortControllerRef.current = abortController;
|
|
288
|
+
chatAbortControllerRef.current = new AbortController();
|
|
259
289
|
setMessages([...previousMessages, ...newMessages]);
|
|
260
290
|
const systemMessage = makeSystemMessageCallback();
|
|
261
291
|
const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
|
|
292
|
+
const isAgentRun = agentSessionRef.current !== null;
|
|
262
293
|
const stream = runtimeClient.asStream(
|
|
263
294
|
runtimeClient.generateCopilotResponse({
|
|
264
295
|
data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
|
|
265
296
|
frontend: {
|
|
266
|
-
actions: actions
|
|
267
|
-
(action) => action.available !== import_runtime_client_gql2.ActionInputAvailability.Disabled || !action.disabled
|
|
268
|
-
).map((action) => {
|
|
269
|
-
let available = import_runtime_client_gql2.ActionInputAvailability.Enabled;
|
|
270
|
-
if (action.disabled) {
|
|
271
|
-
available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
|
|
272
|
-
} else if (action.available === "disabled") {
|
|
273
|
-
available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
|
|
274
|
-
} else if (action.available === "remote") {
|
|
275
|
-
available = import_runtime_client_gql2.ActionInputAvailability.Remote;
|
|
276
|
-
}
|
|
277
|
-
return {
|
|
278
|
-
name: action.name,
|
|
279
|
-
description: action.description || "",
|
|
280
|
-
jsonSchema: JSON.stringify(
|
|
281
|
-
(0, import_shared.actionParametersToJsonSchema)(action.parameters || [])
|
|
282
|
-
),
|
|
283
|
-
available
|
|
284
|
-
};
|
|
285
|
-
}),
|
|
297
|
+
actions: processActionsForRuntimeRequest(actions),
|
|
286
298
|
url: window.location.href
|
|
287
299
|
},
|
|
288
300
|
threadId: threadIdRef.current,
|
|
289
301
|
runId: runIdRef.current,
|
|
290
|
-
messages: (0,
|
|
302
|
+
messages: (0, import_runtime_client_gql3.convertMessagesToGqlInput)((0, import_runtime_client_gql3.filterAgentStateMessages)(messagesWithContext))
|
|
291
303
|
}, copilotConfig.cloud ? {
|
|
292
304
|
cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
|
|
293
305
|
guardrails: {
|
|
@@ -299,7 +311,7 @@ function useChat(options) {
|
|
|
299
311
|
} : {})
|
|
300
312
|
} : {}), {
|
|
301
313
|
metadata: {
|
|
302
|
-
requestType:
|
|
314
|
+
requestType: import_runtime_client_gql3.CopilotRequestType.Chat
|
|
303
315
|
}
|
|
304
316
|
}), agentSessionRef.current ? {
|
|
305
317
|
agentSession: agentSessionRef.current
|
|
@@ -310,14 +322,15 @@ function useChat(options) {
|
|
|
310
322
|
}))
|
|
311
323
|
}),
|
|
312
324
|
properties: copilotConfig.properties,
|
|
313
|
-
signal: (_d =
|
|
325
|
+
signal: (_d = chatAbortControllerRef.current) == null ? void 0 : _d.signal
|
|
314
326
|
})
|
|
315
327
|
);
|
|
316
328
|
const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
|
|
317
329
|
const reader = stream.getReader();
|
|
318
|
-
let actionResults = {};
|
|
319
330
|
let executedCoAgentStateRenders = [];
|
|
320
331
|
let followUp = void 0;
|
|
332
|
+
let messages2 = [];
|
|
333
|
+
let syncedMessages = [];
|
|
321
334
|
try {
|
|
322
335
|
while (true) {
|
|
323
336
|
let done, value;
|
|
@@ -329,6 +342,9 @@ function useChat(options) {
|
|
|
329
342
|
break;
|
|
330
343
|
}
|
|
331
344
|
if (done) {
|
|
345
|
+
if (chatAbortControllerRef.current.signal.aborted) {
|
|
346
|
+
return [];
|
|
347
|
+
}
|
|
332
348
|
break;
|
|
333
349
|
}
|
|
334
350
|
if (!(value == null ? void 0 : value.generateCopilotResponse)) {
|
|
@@ -336,8 +352,10 @@ function useChat(options) {
|
|
|
336
352
|
}
|
|
337
353
|
threadIdRef.current = value.generateCopilotResponse.threadId || null;
|
|
338
354
|
runIdRef.current = value.generateCopilotResponse.runId || null;
|
|
339
|
-
|
|
340
|
-
|
|
355
|
+
setThreadId(threadIdRef.current);
|
|
356
|
+
setRunId(runIdRef.current);
|
|
357
|
+
messages2 = (0, import_runtime_client_gql3.convertGqlOutputToMessages)(
|
|
358
|
+
(0, import_runtime_client_gql3.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
|
|
341
359
|
);
|
|
342
360
|
if (messages2.length === 0) {
|
|
343
361
|
continue;
|
|
@@ -345,44 +363,16 @@ function useChat(options) {
|
|
|
345
363
|
newMessages = [];
|
|
346
364
|
if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
|
|
347
365
|
newMessages = [
|
|
348
|
-
new
|
|
349
|
-
role:
|
|
366
|
+
new import_runtime_client_gql3.TextMessage({
|
|
367
|
+
role: import_runtime_client_gql3.MessageRole.Assistant,
|
|
350
368
|
content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
|
|
351
369
|
})
|
|
352
370
|
];
|
|
371
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
372
|
+
break;
|
|
353
373
|
} else {
|
|
374
|
+
newMessages = [...messages2];
|
|
354
375
|
for (const message of messages2) {
|
|
355
|
-
newMessages.push(message);
|
|
356
|
-
if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
|
|
357
|
-
if (!(message.id in actionResults)) {
|
|
358
|
-
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
359
|
-
break;
|
|
360
|
-
}
|
|
361
|
-
try {
|
|
362
|
-
setMessages([...previousMessages, ...newMessages]);
|
|
363
|
-
const action = actions.find((action2) => action2.name === message.name);
|
|
364
|
-
if (action) {
|
|
365
|
-
followUp = action.followUp;
|
|
366
|
-
}
|
|
367
|
-
const result = yield onFunctionCall({
|
|
368
|
-
messages: previousMessages,
|
|
369
|
-
name: message.name,
|
|
370
|
-
args: message.arguments
|
|
371
|
-
});
|
|
372
|
-
actionResults[message.id] = result;
|
|
373
|
-
} catch (e) {
|
|
374
|
-
actionResults[message.id] = `Failed to execute action ${message.name}`;
|
|
375
|
-
console.error(`Failed to execute action ${message.name}: ${e}`);
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
newMessages.push(
|
|
379
|
-
new import_runtime_client_gql2.ResultMessage({
|
|
380
|
-
result: import_runtime_client_gql2.ResultMessage.encodeResult(actionResults[message.id]),
|
|
381
|
-
actionExecutionId: message.id,
|
|
382
|
-
actionName: message.name
|
|
383
|
-
})
|
|
384
|
-
);
|
|
385
|
-
}
|
|
386
376
|
if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
|
|
387
377
|
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
388
378
|
break;
|
|
@@ -397,6 +387,11 @@ function useChat(options) {
|
|
|
397
387
|
}
|
|
398
388
|
const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
|
|
399
389
|
if (lastAgentStateMessage) {
|
|
390
|
+
if (lastAgentStateMessage.state.messages && lastAgentStateMessage.state.messages.length > 0) {
|
|
391
|
+
syncedMessages = (0, import_runtime_client_gql3.loadMessagesFromJsonRepresentation)(
|
|
392
|
+
lastAgentStateMessage.state.messages
|
|
393
|
+
);
|
|
394
|
+
}
|
|
400
395
|
setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
401
396
|
[lastAgentStateMessage.agentName]: {
|
|
402
397
|
name: lastAgentStateMessage.agentName,
|
|
@@ -423,14 +418,96 @@ function useChat(options) {
|
|
|
423
418
|
setMessages([...previousMessages, ...newMessages]);
|
|
424
419
|
}
|
|
425
420
|
}
|
|
421
|
+
const finalMessages = constructFinalMessages(syncedMessages, previousMessages, newMessages);
|
|
422
|
+
let didExecuteAction = false;
|
|
423
|
+
if (onFunctionCall) {
|
|
424
|
+
const lastMessages = [];
|
|
425
|
+
for (let i = finalMessages.length - 1; i >= 0; i--) {
|
|
426
|
+
const message = finalMessages[i];
|
|
427
|
+
if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql3.MessageStatusCode.Pending) {
|
|
428
|
+
lastMessages.unshift(message);
|
|
429
|
+
} else {
|
|
430
|
+
break;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
for (const message of lastMessages) {
|
|
434
|
+
setMessages(finalMessages);
|
|
435
|
+
const action = actions.find((action2) => action2.name === message.name);
|
|
436
|
+
if (action) {
|
|
437
|
+
followUp = action.followUp;
|
|
438
|
+
let result;
|
|
439
|
+
try {
|
|
440
|
+
result = yield Promise.race([
|
|
441
|
+
onFunctionCall({
|
|
442
|
+
messages: previousMessages,
|
|
443
|
+
name: message.name,
|
|
444
|
+
args: message.arguments
|
|
445
|
+
}),
|
|
446
|
+
new Promise(
|
|
447
|
+
(resolve) => {
|
|
448
|
+
var _a2;
|
|
449
|
+
return (_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.addEventListener(
|
|
450
|
+
"abort",
|
|
451
|
+
() => resolve("Operation was aborted by the user")
|
|
452
|
+
);
|
|
453
|
+
}
|
|
454
|
+
),
|
|
455
|
+
// if the user stopped generation, we also abort consecutive actions
|
|
456
|
+
new Promise((resolve) => {
|
|
457
|
+
var _a2;
|
|
458
|
+
if ((_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.aborted) {
|
|
459
|
+
resolve("Operation was aborted by the user");
|
|
460
|
+
}
|
|
461
|
+
})
|
|
462
|
+
]);
|
|
463
|
+
} catch (e) {
|
|
464
|
+
result = `Failed to execute action ${message.name}`;
|
|
465
|
+
console.error(`Failed to execute action ${message.name}: ${e}`);
|
|
466
|
+
}
|
|
467
|
+
didExecuteAction = true;
|
|
468
|
+
const messageIndex = finalMessages.findIndex((msg) => msg.id === message.id);
|
|
469
|
+
finalMessages.splice(
|
|
470
|
+
messageIndex + 1,
|
|
471
|
+
0,
|
|
472
|
+
new import_runtime_client_gql3.ResultMessage({
|
|
473
|
+
id: "result-" + message.id,
|
|
474
|
+
result: import_runtime_client_gql3.ResultMessage.encodeResult(result),
|
|
475
|
+
actionExecutionId: message.id,
|
|
476
|
+
actionName: message.name
|
|
477
|
+
})
|
|
478
|
+
);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
setMessages(finalMessages);
|
|
482
|
+
}
|
|
426
483
|
if (
|
|
427
484
|
// if followUp is not explicitly false
|
|
428
|
-
followUp !== false && //
|
|
429
|
-
(
|
|
430
|
-
|
|
485
|
+
followUp !== false && // and we executed an action
|
|
486
|
+
(didExecuteAction || // the last message is a server side result
|
|
487
|
+
!isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
|
|
488
|
+
!((_j = chatAbortControllerRef.current) == null ? void 0 : _j.signal.aborted)
|
|
431
489
|
) {
|
|
432
490
|
yield new Promise((resolve) => setTimeout(resolve, 10));
|
|
433
|
-
return yield runChatCompletionRef.current(
|
|
491
|
+
return yield runChatCompletionRef.current(finalMessages);
|
|
492
|
+
} else if ((_k = chatAbortControllerRef.current) == null ? void 0 : _k.signal.aborted) {
|
|
493
|
+
const repairedMessages = finalMessages.filter((message, actionExecutionIndex) => {
|
|
494
|
+
if (message.isActionExecutionMessage()) {
|
|
495
|
+
return finalMessages.find(
|
|
496
|
+
(msg, resultIndex) => msg.isResultMessage() && msg.actionExecutionId === message.id && resultIndex === actionExecutionIndex + 1
|
|
497
|
+
);
|
|
498
|
+
}
|
|
499
|
+
return true;
|
|
500
|
+
});
|
|
501
|
+
const repairedMessageIds = repairedMessages.map((message) => message.id);
|
|
502
|
+
setMessages(repairedMessages);
|
|
503
|
+
if ((_l = agentSessionRef.current) == null ? void 0 : _l.nodeName) {
|
|
504
|
+
setAgentSession({
|
|
505
|
+
threadId: agentSessionRef.current.threadId,
|
|
506
|
+
agentName: agentSessionRef.current.agentName,
|
|
507
|
+
nodeName: "__end__"
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
return newMessages.filter((message) => repairedMessageIds.includes(message.id));
|
|
434
511
|
} else {
|
|
435
512
|
return newMessages.slice();
|
|
436
513
|
}
|
|
@@ -487,7 +564,7 @@ function useChat(options) {
|
|
|
487
564
|
}), [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]);
|
|
488
565
|
const stop = () => {
|
|
489
566
|
var _a;
|
|
490
|
-
(_a =
|
|
567
|
+
(_a = chatAbortControllerRef.current) == null ? void 0 : _a.abort("Stop was called");
|
|
491
568
|
};
|
|
492
569
|
return {
|
|
493
570
|
append,
|
|
@@ -496,6 +573,23 @@ function useChat(options) {
|
|
|
496
573
|
runChatCompletion: () => runChatCompletionRef.current(messages)
|
|
497
574
|
};
|
|
498
575
|
}
|
|
576
|
+
function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
|
|
577
|
+
const finalMessages = syncedMessages.length > 0 ? [...syncedMessages] : [...previousMessages, ...newMessages];
|
|
578
|
+
if (syncedMessages.length > 0) {
|
|
579
|
+
const messagesWithAgentState = [...previousMessages, ...newMessages];
|
|
580
|
+
let previousMessageId = void 0;
|
|
581
|
+
for (const message of messagesWithAgentState) {
|
|
582
|
+
if (message.isAgentStateMessage()) {
|
|
583
|
+
const index = finalMessages.findIndex((msg) => msg.id === previousMessageId);
|
|
584
|
+
if (index !== -1) {
|
|
585
|
+
finalMessages.splice(index + 1, 0, message);
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
previousMessageId = message.id;
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
return finalMessages;
|
|
592
|
+
}
|
|
499
593
|
// Annotate the CommonJS export names for ESM import in node:
|
|
500
594
|
0 && (module.exports = {
|
|
501
595
|
useChat
|