@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
|
@@ -139,7 +139,15 @@ var emptyCopilotContext = {
|
|
|
139
139
|
},
|
|
140
140
|
agentSession: null,
|
|
141
141
|
setAgentSession: () => {
|
|
142
|
-
}
|
|
142
|
+
},
|
|
143
|
+
agentLock: null,
|
|
144
|
+
threadId: null,
|
|
145
|
+
setThreadId: () => {
|
|
146
|
+
},
|
|
147
|
+
runId: null,
|
|
148
|
+
setRunId: () => {
|
|
149
|
+
},
|
|
150
|
+
chatAbortControllerRef: { current: null }
|
|
143
151
|
};
|
|
144
152
|
var CopilotContext = import_react.default.createContext(emptyCopilotContext);
|
|
145
153
|
function useCopilotContext() {
|
|
@@ -155,12 +163,37 @@ function returnAndThrowInDebug(value) {
|
|
|
155
163
|
}
|
|
156
164
|
|
|
157
165
|
// src/hooks/use-copilot-chat.ts
|
|
158
|
-
var
|
|
166
|
+
var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
|
|
159
167
|
|
|
160
168
|
// src/hooks/use-chat.ts
|
|
161
169
|
var import_react5 = require("react");
|
|
170
|
+
var import_shared2 = require("@copilotkit/shared");
|
|
171
|
+
var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
|
|
172
|
+
|
|
173
|
+
// src/types/frontend-action.ts
|
|
174
|
+
var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
162
175
|
var import_shared = require("@copilotkit/shared");
|
|
163
|
-
|
|
176
|
+
function processActionsForRuntimeRequest(actions) {
|
|
177
|
+
const filteredActions = actions.filter(
|
|
178
|
+
(action) => action.available !== import_runtime_client_gql.ActionInputAvailability.Disabled && action.disabled !== true && action.name !== "*"
|
|
179
|
+
).map((action) => {
|
|
180
|
+
let available = import_runtime_client_gql.ActionInputAvailability.Enabled;
|
|
181
|
+
if (action.disabled) {
|
|
182
|
+
available = import_runtime_client_gql.ActionInputAvailability.Disabled;
|
|
183
|
+
} else if (action.available === "disabled") {
|
|
184
|
+
available = import_runtime_client_gql.ActionInputAvailability.Disabled;
|
|
185
|
+
} else if (action.available === "remote") {
|
|
186
|
+
available = import_runtime_client_gql.ActionInputAvailability.Remote;
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
name: action.name,
|
|
190
|
+
description: action.description || "",
|
|
191
|
+
jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || [])),
|
|
192
|
+
available
|
|
193
|
+
};
|
|
194
|
+
});
|
|
195
|
+
return filteredActions;
|
|
196
|
+
}
|
|
164
197
|
|
|
165
198
|
// src/components/toast/toast-provider.tsx
|
|
166
199
|
var import_react3 = require("react");
|
|
@@ -290,13 +323,13 @@ function useToast() {
|
|
|
290
323
|
}
|
|
291
324
|
|
|
292
325
|
// src/hooks/use-copilot-runtime-client.ts
|
|
293
|
-
var
|
|
326
|
+
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
294
327
|
var import_react4 = require("react");
|
|
295
328
|
var useCopilotRuntimeClient = (options) => {
|
|
296
329
|
const { addGraphQLErrorsToast } = useToast();
|
|
297
330
|
const addErrorToast = useErrorToast();
|
|
298
331
|
const runtimeClient = (0, import_react4.useMemo)(() => {
|
|
299
|
-
return new
|
|
332
|
+
return new import_runtime_client_gql2.CopilotRuntimeClient(__spreadProps(__spreadValues({}, options), {
|
|
300
333
|
handleGQLErrors: (error) => {
|
|
301
334
|
if (error.graphQLErrors.length) {
|
|
302
335
|
addGraphQLErrorsToast(error.graphQLErrors);
|
|
@@ -325,17 +358,23 @@ function useChat(options) {
|
|
|
325
358
|
setCoagentStatesWithRef,
|
|
326
359
|
coagentStatesRef,
|
|
327
360
|
agentSession,
|
|
328
|
-
setAgentSession
|
|
361
|
+
setAgentSession,
|
|
362
|
+
threadId,
|
|
363
|
+
setThreadId,
|
|
364
|
+
runId,
|
|
365
|
+
setRunId,
|
|
366
|
+
chatAbortControllerRef
|
|
329
367
|
} = options;
|
|
330
|
-
const abortControllerRef = (0, import_react5.useRef)();
|
|
331
|
-
const threadIdRef = (0, import_react5.useRef)(null);
|
|
332
|
-
const runIdRef = (0, import_react5.useRef)(null);
|
|
333
368
|
const { addGraphQLErrorsToast } = useToast();
|
|
334
369
|
const runChatCompletionRef = (0, import_react5.useRef)();
|
|
335
370
|
const agentSessionRef = (0, import_react5.useRef)(agentSession);
|
|
336
371
|
agentSessionRef.current = agentSession;
|
|
372
|
+
const threadIdRef = (0, import_react5.useRef)(threadId);
|
|
373
|
+
threadIdRef.current = threadId;
|
|
374
|
+
const runIdRef = (0, import_react5.useRef)(runId);
|
|
375
|
+
runIdRef.current = runId;
|
|
337
376
|
const publicApiKey = copilotConfig.publicApiKey;
|
|
338
|
-
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [
|
|
377
|
+
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared2.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
|
|
339
378
|
const runtimeClient = useCopilotRuntimeClient({
|
|
340
379
|
url: copilotConfig.chatApiEndpoint,
|
|
341
380
|
publicApiKey: copilotConfig.publicApiKey,
|
|
@@ -344,48 +383,29 @@ function useChat(options) {
|
|
|
344
383
|
});
|
|
345
384
|
const runChatCompletion = useAsyncCallback(
|
|
346
385
|
(previousMessages) => __async(this, null, function* () {
|
|
347
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
386
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
348
387
|
setIsLoading(true);
|
|
349
388
|
let newMessages = [
|
|
350
|
-
new
|
|
389
|
+
new import_runtime_client_gql3.TextMessage({
|
|
351
390
|
content: "",
|
|
352
|
-
role:
|
|
391
|
+
role: import_runtime_client_gql3.Role.Assistant
|
|
353
392
|
})
|
|
354
393
|
];
|
|
355
|
-
|
|
356
|
-
abortControllerRef.current = abortController;
|
|
394
|
+
chatAbortControllerRef.current = new AbortController();
|
|
357
395
|
setMessages([...previousMessages, ...newMessages]);
|
|
358
396
|
const systemMessage = makeSystemMessageCallback();
|
|
359
397
|
const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
|
|
398
|
+
const isAgentRun = agentSessionRef.current !== null;
|
|
360
399
|
const stream = runtimeClient.asStream(
|
|
361
400
|
runtimeClient.generateCopilotResponse({
|
|
362
401
|
data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
|
|
363
402
|
frontend: {
|
|
364
|
-
actions: actions
|
|
365
|
-
(action) => action.available !== import_runtime_client_gql2.ActionInputAvailability.Disabled || !action.disabled
|
|
366
|
-
).map((action) => {
|
|
367
|
-
let available = import_runtime_client_gql2.ActionInputAvailability.Enabled;
|
|
368
|
-
if (action.disabled) {
|
|
369
|
-
available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
|
|
370
|
-
} else if (action.available === "disabled") {
|
|
371
|
-
available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
|
|
372
|
-
} else if (action.available === "remote") {
|
|
373
|
-
available = import_runtime_client_gql2.ActionInputAvailability.Remote;
|
|
374
|
-
}
|
|
375
|
-
return {
|
|
376
|
-
name: action.name,
|
|
377
|
-
description: action.description || "",
|
|
378
|
-
jsonSchema: JSON.stringify(
|
|
379
|
-
(0, import_shared.actionParametersToJsonSchema)(action.parameters || [])
|
|
380
|
-
),
|
|
381
|
-
available
|
|
382
|
-
};
|
|
383
|
-
}),
|
|
403
|
+
actions: processActionsForRuntimeRequest(actions),
|
|
384
404
|
url: window.location.href
|
|
385
405
|
},
|
|
386
406
|
threadId: threadIdRef.current,
|
|
387
407
|
runId: runIdRef.current,
|
|
388
|
-
messages: (0,
|
|
408
|
+
messages: (0, import_runtime_client_gql3.convertMessagesToGqlInput)((0, import_runtime_client_gql3.filterAgentStateMessages)(messagesWithContext))
|
|
389
409
|
}, copilotConfig.cloud ? {
|
|
390
410
|
cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
|
|
391
411
|
guardrails: {
|
|
@@ -397,7 +417,7 @@ function useChat(options) {
|
|
|
397
417
|
} : {})
|
|
398
418
|
} : {}), {
|
|
399
419
|
metadata: {
|
|
400
|
-
requestType:
|
|
420
|
+
requestType: import_runtime_client_gql3.CopilotRequestType.Chat
|
|
401
421
|
}
|
|
402
422
|
}), agentSessionRef.current ? {
|
|
403
423
|
agentSession: agentSessionRef.current
|
|
@@ -408,14 +428,15 @@ function useChat(options) {
|
|
|
408
428
|
}))
|
|
409
429
|
}),
|
|
410
430
|
properties: copilotConfig.properties,
|
|
411
|
-
signal: (_d =
|
|
431
|
+
signal: (_d = chatAbortControllerRef.current) == null ? void 0 : _d.signal
|
|
412
432
|
})
|
|
413
433
|
);
|
|
414
434
|
const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
|
|
415
435
|
const reader = stream.getReader();
|
|
416
|
-
let actionResults = {};
|
|
417
436
|
let executedCoAgentStateRenders = [];
|
|
418
437
|
let followUp = void 0;
|
|
438
|
+
let messages2 = [];
|
|
439
|
+
let syncedMessages = [];
|
|
419
440
|
try {
|
|
420
441
|
while (true) {
|
|
421
442
|
let done, value;
|
|
@@ -427,6 +448,9 @@ function useChat(options) {
|
|
|
427
448
|
break;
|
|
428
449
|
}
|
|
429
450
|
if (done) {
|
|
451
|
+
if (chatAbortControllerRef.current.signal.aborted) {
|
|
452
|
+
return [];
|
|
453
|
+
}
|
|
430
454
|
break;
|
|
431
455
|
}
|
|
432
456
|
if (!(value == null ? void 0 : value.generateCopilotResponse)) {
|
|
@@ -434,8 +458,10 @@ function useChat(options) {
|
|
|
434
458
|
}
|
|
435
459
|
threadIdRef.current = value.generateCopilotResponse.threadId || null;
|
|
436
460
|
runIdRef.current = value.generateCopilotResponse.runId || null;
|
|
437
|
-
|
|
438
|
-
|
|
461
|
+
setThreadId(threadIdRef.current);
|
|
462
|
+
setRunId(runIdRef.current);
|
|
463
|
+
messages2 = (0, import_runtime_client_gql3.convertGqlOutputToMessages)(
|
|
464
|
+
(0, import_runtime_client_gql3.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
|
|
439
465
|
);
|
|
440
466
|
if (messages2.length === 0) {
|
|
441
467
|
continue;
|
|
@@ -443,44 +469,16 @@ function useChat(options) {
|
|
|
443
469
|
newMessages = [];
|
|
444
470
|
if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
|
|
445
471
|
newMessages = [
|
|
446
|
-
new
|
|
447
|
-
role:
|
|
472
|
+
new import_runtime_client_gql3.TextMessage({
|
|
473
|
+
role: import_runtime_client_gql3.MessageRole.Assistant,
|
|
448
474
|
content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
|
|
449
475
|
})
|
|
450
476
|
];
|
|
477
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
478
|
+
break;
|
|
451
479
|
} else {
|
|
480
|
+
newMessages = [...messages2];
|
|
452
481
|
for (const message of messages2) {
|
|
453
|
-
newMessages.push(message);
|
|
454
|
-
if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
|
|
455
|
-
if (!(message.id in actionResults)) {
|
|
456
|
-
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
457
|
-
break;
|
|
458
|
-
}
|
|
459
|
-
try {
|
|
460
|
-
setMessages([...previousMessages, ...newMessages]);
|
|
461
|
-
const action = actions.find((action2) => action2.name === message.name);
|
|
462
|
-
if (action) {
|
|
463
|
-
followUp = action.followUp;
|
|
464
|
-
}
|
|
465
|
-
const result = yield onFunctionCall({
|
|
466
|
-
messages: previousMessages,
|
|
467
|
-
name: message.name,
|
|
468
|
-
args: message.arguments
|
|
469
|
-
});
|
|
470
|
-
actionResults[message.id] = result;
|
|
471
|
-
} catch (e) {
|
|
472
|
-
actionResults[message.id] = `Failed to execute action ${message.name}`;
|
|
473
|
-
console.error(`Failed to execute action ${message.name}: ${e}`);
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
newMessages.push(
|
|
477
|
-
new import_runtime_client_gql2.ResultMessage({
|
|
478
|
-
result: import_runtime_client_gql2.ResultMessage.encodeResult(actionResults[message.id]),
|
|
479
|
-
actionExecutionId: message.id,
|
|
480
|
-
actionName: message.name
|
|
481
|
-
})
|
|
482
|
-
);
|
|
483
|
-
}
|
|
484
482
|
if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
|
|
485
483
|
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
486
484
|
break;
|
|
@@ -495,6 +493,11 @@ function useChat(options) {
|
|
|
495
493
|
}
|
|
496
494
|
const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
|
|
497
495
|
if (lastAgentStateMessage) {
|
|
496
|
+
if (lastAgentStateMessage.state.messages && lastAgentStateMessage.state.messages.length > 0) {
|
|
497
|
+
syncedMessages = (0, import_runtime_client_gql3.loadMessagesFromJsonRepresentation)(
|
|
498
|
+
lastAgentStateMessage.state.messages
|
|
499
|
+
);
|
|
500
|
+
}
|
|
498
501
|
setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
499
502
|
[lastAgentStateMessage.agentName]: {
|
|
500
503
|
name: lastAgentStateMessage.agentName,
|
|
@@ -521,14 +524,96 @@ function useChat(options) {
|
|
|
521
524
|
setMessages([...previousMessages, ...newMessages]);
|
|
522
525
|
}
|
|
523
526
|
}
|
|
527
|
+
const finalMessages = constructFinalMessages(syncedMessages, previousMessages, newMessages);
|
|
528
|
+
let didExecuteAction = false;
|
|
529
|
+
if (onFunctionCall) {
|
|
530
|
+
const lastMessages = [];
|
|
531
|
+
for (let i = finalMessages.length - 1; i >= 0; i--) {
|
|
532
|
+
const message = finalMessages[i];
|
|
533
|
+
if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql3.MessageStatusCode.Pending) {
|
|
534
|
+
lastMessages.unshift(message);
|
|
535
|
+
} else {
|
|
536
|
+
break;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
for (const message of lastMessages) {
|
|
540
|
+
setMessages(finalMessages);
|
|
541
|
+
const action = actions.find((action2) => action2.name === message.name);
|
|
542
|
+
if (action) {
|
|
543
|
+
followUp = action.followUp;
|
|
544
|
+
let result;
|
|
545
|
+
try {
|
|
546
|
+
result = yield Promise.race([
|
|
547
|
+
onFunctionCall({
|
|
548
|
+
messages: previousMessages,
|
|
549
|
+
name: message.name,
|
|
550
|
+
args: message.arguments
|
|
551
|
+
}),
|
|
552
|
+
new Promise(
|
|
553
|
+
(resolve) => {
|
|
554
|
+
var _a2;
|
|
555
|
+
return (_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.addEventListener(
|
|
556
|
+
"abort",
|
|
557
|
+
() => resolve("Operation was aborted by the user")
|
|
558
|
+
);
|
|
559
|
+
}
|
|
560
|
+
),
|
|
561
|
+
// if the user stopped generation, we also abort consecutive actions
|
|
562
|
+
new Promise((resolve) => {
|
|
563
|
+
var _a2;
|
|
564
|
+
if ((_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.aborted) {
|
|
565
|
+
resolve("Operation was aborted by the user");
|
|
566
|
+
}
|
|
567
|
+
})
|
|
568
|
+
]);
|
|
569
|
+
} catch (e) {
|
|
570
|
+
result = `Failed to execute action ${message.name}`;
|
|
571
|
+
console.error(`Failed to execute action ${message.name}: ${e}`);
|
|
572
|
+
}
|
|
573
|
+
didExecuteAction = true;
|
|
574
|
+
const messageIndex = finalMessages.findIndex((msg) => msg.id === message.id);
|
|
575
|
+
finalMessages.splice(
|
|
576
|
+
messageIndex + 1,
|
|
577
|
+
0,
|
|
578
|
+
new import_runtime_client_gql3.ResultMessage({
|
|
579
|
+
id: "result-" + message.id,
|
|
580
|
+
result: import_runtime_client_gql3.ResultMessage.encodeResult(result),
|
|
581
|
+
actionExecutionId: message.id,
|
|
582
|
+
actionName: message.name
|
|
583
|
+
})
|
|
584
|
+
);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
setMessages(finalMessages);
|
|
588
|
+
}
|
|
524
589
|
if (
|
|
525
590
|
// if followUp is not explicitly false
|
|
526
|
-
followUp !== false && //
|
|
527
|
-
(
|
|
528
|
-
|
|
591
|
+
followUp !== false && // and we executed an action
|
|
592
|
+
(didExecuteAction || // the last message is a server side result
|
|
593
|
+
!isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
|
|
594
|
+
!((_j = chatAbortControllerRef.current) == null ? void 0 : _j.signal.aborted)
|
|
529
595
|
) {
|
|
530
596
|
yield new Promise((resolve) => setTimeout(resolve, 10));
|
|
531
|
-
return yield runChatCompletionRef.current(
|
|
597
|
+
return yield runChatCompletionRef.current(finalMessages);
|
|
598
|
+
} else if ((_k = chatAbortControllerRef.current) == null ? void 0 : _k.signal.aborted) {
|
|
599
|
+
const repairedMessages = finalMessages.filter((message, actionExecutionIndex) => {
|
|
600
|
+
if (message.isActionExecutionMessage()) {
|
|
601
|
+
return finalMessages.find(
|
|
602
|
+
(msg, resultIndex) => msg.isResultMessage() && msg.actionExecutionId === message.id && resultIndex === actionExecutionIndex + 1
|
|
603
|
+
);
|
|
604
|
+
}
|
|
605
|
+
return true;
|
|
606
|
+
});
|
|
607
|
+
const repairedMessageIds = repairedMessages.map((message) => message.id);
|
|
608
|
+
setMessages(repairedMessages);
|
|
609
|
+
if ((_l = agentSessionRef.current) == null ? void 0 : _l.nodeName) {
|
|
610
|
+
setAgentSession({
|
|
611
|
+
threadId: agentSessionRef.current.threadId,
|
|
612
|
+
agentName: agentSessionRef.current.agentName,
|
|
613
|
+
nodeName: "__end__"
|
|
614
|
+
});
|
|
615
|
+
}
|
|
616
|
+
return newMessages.filter((message) => repairedMessageIds.includes(message.id));
|
|
532
617
|
} else {
|
|
533
618
|
return newMessages.slice();
|
|
534
619
|
}
|
|
@@ -585,7 +670,7 @@ function useChat(options) {
|
|
|
585
670
|
}), [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]);
|
|
586
671
|
const stop = () => {
|
|
587
672
|
var _a;
|
|
588
|
-
(_a =
|
|
673
|
+
(_a = chatAbortControllerRef.current) == null ? void 0 : _a.abort("Stop was called");
|
|
589
674
|
};
|
|
590
675
|
return {
|
|
591
676
|
append,
|
|
@@ -594,11 +679,28 @@ function useChat(options) {
|
|
|
594
679
|
runChatCompletion: () => runChatCompletionRef.current(messages)
|
|
595
680
|
};
|
|
596
681
|
}
|
|
682
|
+
function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
|
|
683
|
+
const finalMessages = syncedMessages.length > 0 ? [...syncedMessages] : [...previousMessages, ...newMessages];
|
|
684
|
+
if (syncedMessages.length > 0) {
|
|
685
|
+
const messagesWithAgentState = [...previousMessages, ...newMessages];
|
|
686
|
+
let previousMessageId = void 0;
|
|
687
|
+
for (const message of messagesWithAgentState) {
|
|
688
|
+
if (message.isAgentStateMessage()) {
|
|
689
|
+
const index = finalMessages.findIndex((msg) => msg.id === previousMessageId);
|
|
690
|
+
if (index !== -1) {
|
|
691
|
+
finalMessages.splice(index + 1, 0, message);
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
previousMessageId = message.id;
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
return finalMessages;
|
|
698
|
+
}
|
|
597
699
|
|
|
598
700
|
// src/components/copilot-provider/copilotkit.tsx
|
|
599
701
|
var import_react7 = require("react");
|
|
600
702
|
var import_react_dom = require("react-dom");
|
|
601
|
-
var
|
|
703
|
+
var import_shared3 = require("@copilotkit/shared");
|
|
602
704
|
|
|
603
705
|
// src/context/copilot-messages-context.tsx
|
|
604
706
|
var import_react6 = __toESM(require("react"));
|
|
@@ -640,7 +742,13 @@ function useCopilotChat(_a = {}) {
|
|
|
640
742
|
setCoagentStatesWithRef,
|
|
641
743
|
coAgentStateRenders,
|
|
642
744
|
agentSession,
|
|
643
|
-
setAgentSession
|
|
745
|
+
setAgentSession,
|
|
746
|
+
agentLock,
|
|
747
|
+
threadId,
|
|
748
|
+
setThreadId,
|
|
749
|
+
runId,
|
|
750
|
+
setRunId,
|
|
751
|
+
chatAbortControllerRef
|
|
644
752
|
} = useCopilotContext();
|
|
645
753
|
const { messages, setMessages } = useCopilotMessagesContext();
|
|
646
754
|
const latestGetContextString = useUpdatedRef(getContextString);
|
|
@@ -653,9 +761,9 @@ function useCopilotChat(_a = {}) {
|
|
|
653
761
|
const makeSystemMessageCallback = (0, import_react8.useCallback)(() => {
|
|
654
762
|
const systemMessageMaker = makeSystemMessage || defaultSystemMessage;
|
|
655
763
|
const contextString = latestGetContextString.current([], defaultCopilotContextCategories);
|
|
656
|
-
return new
|
|
764
|
+
return new import_runtime_client_gql4.TextMessage({
|
|
657
765
|
content: systemMessageMaker(contextString, chatInstructions),
|
|
658
|
-
role:
|
|
766
|
+
role: import_runtime_client_gql4.Role.System
|
|
659
767
|
});
|
|
660
768
|
}, [getContextString, makeSystemMessage, chatInstructions]);
|
|
661
769
|
const onCoAgentStateRender = useAsyncCallback(
|
|
@@ -690,7 +798,12 @@ function useCopilotChat(_a = {}) {
|
|
|
690
798
|
coagentStatesRef,
|
|
691
799
|
setCoagentStatesWithRef,
|
|
692
800
|
agentSession,
|
|
693
|
-
setAgentSession
|
|
801
|
+
setAgentSession,
|
|
802
|
+
threadId,
|
|
803
|
+
setThreadId,
|
|
804
|
+
runId,
|
|
805
|
+
setRunId,
|
|
806
|
+
chatAbortControllerRef
|
|
694
807
|
}));
|
|
695
808
|
const latestAppend = useUpdatedRef(append);
|
|
696
809
|
const latestAppendFunc = useAsyncCallback(
|
|
@@ -725,12 +838,38 @@ function useCopilotChat(_a = {}) {
|
|
|
725
838
|
const latestRunChatCompletionFunc = useAsyncCallback(() => __async(this, null, function* () {
|
|
726
839
|
return yield latestRunChatCompletion.current();
|
|
727
840
|
}), [latestRunChatCompletion]);
|
|
841
|
+
const reset = (0, import_react8.useCallback)(() => {
|
|
842
|
+
latestStopFunc();
|
|
843
|
+
setMessages([]);
|
|
844
|
+
setThreadId(null);
|
|
845
|
+
setRunId(null);
|
|
846
|
+
setCoagentStatesWithRef({});
|
|
847
|
+
let initialAgentSession = null;
|
|
848
|
+
if (agentLock) {
|
|
849
|
+
initialAgentSession = {
|
|
850
|
+
agentName: agentLock
|
|
851
|
+
};
|
|
852
|
+
}
|
|
853
|
+
setAgentSession(initialAgentSession);
|
|
854
|
+
}, [
|
|
855
|
+
latestStopFunc,
|
|
856
|
+
setMessages,
|
|
857
|
+
setThreadId,
|
|
858
|
+
setCoagentStatesWithRef,
|
|
859
|
+
setAgentSession,
|
|
860
|
+
agentLock
|
|
861
|
+
]);
|
|
862
|
+
const latestReset = useUpdatedRef(reset);
|
|
863
|
+
const latestResetFunc = (0, import_react8.useCallback)(() => {
|
|
864
|
+
return latestReset.current();
|
|
865
|
+
}, [latestReset]);
|
|
728
866
|
return {
|
|
729
867
|
visibleMessages: messages,
|
|
730
868
|
appendMessage: latestAppendFunc,
|
|
731
869
|
setMessages: latestSetMessagesFunc,
|
|
732
870
|
reloadMessages: latestReloadFunc,
|
|
733
871
|
stopGeneration: latestStopFunc,
|
|
872
|
+
reset: latestResetFunc,
|
|
734
873
|
deleteMessage: latestDeleteFunc,
|
|
735
874
|
runChatCompletion: latestRunChatCompletionFunc,
|
|
736
875
|
isLoading
|