@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
|
@@ -79,6 +79,9 @@ var __async = (__this, __arguments, generator) => {
|
|
|
79
79
|
// src/hooks/use-coagent.ts
|
|
80
80
|
var use_coagent_exports = {};
|
|
81
81
|
__export(use_coagent_exports, {
|
|
82
|
+
runAgent: () => runAgent,
|
|
83
|
+
startAgent: () => startAgent,
|
|
84
|
+
stopAgent: () => stopAgent,
|
|
82
85
|
useCoAgent: () => useCoAgent
|
|
83
86
|
});
|
|
84
87
|
module.exports = __toCommonJS(use_coagent_exports);
|
|
@@ -138,7 +141,15 @@ var emptyCopilotContext = {
|
|
|
138
141
|
},
|
|
139
142
|
agentSession: null,
|
|
140
143
|
setAgentSession: () => {
|
|
141
|
-
}
|
|
144
|
+
},
|
|
145
|
+
agentLock: null,
|
|
146
|
+
threadId: null,
|
|
147
|
+
setThreadId: () => {
|
|
148
|
+
},
|
|
149
|
+
runId: null,
|
|
150
|
+
setRunId: () => {
|
|
151
|
+
},
|
|
152
|
+
chatAbortControllerRef: { current: null }
|
|
142
153
|
};
|
|
143
154
|
var CopilotContext = import_react.default.createContext(emptyCopilotContext);
|
|
144
155
|
function useCopilotContext() {
|
|
@@ -172,12 +183,37 @@ function useCopilotMessagesContext() {
|
|
|
172
183
|
|
|
173
184
|
// src/hooks/use-copilot-chat.ts
|
|
174
185
|
var import_react8 = require("react");
|
|
175
|
-
var
|
|
186
|
+
var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
|
|
176
187
|
|
|
177
188
|
// src/hooks/use-chat.ts
|
|
178
189
|
var import_react6 = require("react");
|
|
190
|
+
var import_shared2 = require("@copilotkit/shared");
|
|
191
|
+
var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
|
|
192
|
+
|
|
193
|
+
// src/types/frontend-action.ts
|
|
194
|
+
var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
179
195
|
var import_shared = require("@copilotkit/shared");
|
|
180
|
-
|
|
196
|
+
function processActionsForRuntimeRequest(actions) {
|
|
197
|
+
const filteredActions = actions.filter(
|
|
198
|
+
(action) => action.available !== import_runtime_client_gql.ActionInputAvailability.Disabled && action.disabled !== true && action.name !== "*"
|
|
199
|
+
).map((action) => {
|
|
200
|
+
let available = import_runtime_client_gql.ActionInputAvailability.Enabled;
|
|
201
|
+
if (action.disabled) {
|
|
202
|
+
available = import_runtime_client_gql.ActionInputAvailability.Disabled;
|
|
203
|
+
} else if (action.available === "disabled") {
|
|
204
|
+
available = import_runtime_client_gql.ActionInputAvailability.Disabled;
|
|
205
|
+
} else if (action.available === "remote") {
|
|
206
|
+
available = import_runtime_client_gql.ActionInputAvailability.Remote;
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
name: action.name,
|
|
210
|
+
description: action.description || "",
|
|
211
|
+
jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || [])),
|
|
212
|
+
available
|
|
213
|
+
};
|
|
214
|
+
});
|
|
215
|
+
return filteredActions;
|
|
216
|
+
}
|
|
181
217
|
|
|
182
218
|
// src/components/toast/toast-provider.tsx
|
|
183
219
|
var import_react4 = require("react");
|
|
@@ -307,13 +343,13 @@ function useToast() {
|
|
|
307
343
|
}
|
|
308
344
|
|
|
309
345
|
// src/hooks/use-copilot-runtime-client.ts
|
|
310
|
-
var
|
|
346
|
+
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
311
347
|
var import_react5 = require("react");
|
|
312
348
|
var useCopilotRuntimeClient = (options) => {
|
|
313
349
|
const { addGraphQLErrorsToast } = useToast();
|
|
314
350
|
const addErrorToast = useErrorToast();
|
|
315
351
|
const runtimeClient = (0, import_react5.useMemo)(() => {
|
|
316
|
-
return new
|
|
352
|
+
return new import_runtime_client_gql2.CopilotRuntimeClient(__spreadProps(__spreadValues({}, options), {
|
|
317
353
|
handleGQLErrors: (error) => {
|
|
318
354
|
if (error.graphQLErrors.length) {
|
|
319
355
|
addGraphQLErrorsToast(error.graphQLErrors);
|
|
@@ -342,17 +378,23 @@ function useChat(options) {
|
|
|
342
378
|
setCoagentStatesWithRef,
|
|
343
379
|
coagentStatesRef,
|
|
344
380
|
agentSession,
|
|
345
|
-
setAgentSession
|
|
381
|
+
setAgentSession,
|
|
382
|
+
threadId,
|
|
383
|
+
setThreadId,
|
|
384
|
+
runId,
|
|
385
|
+
setRunId,
|
|
386
|
+
chatAbortControllerRef
|
|
346
387
|
} = options;
|
|
347
|
-
const abortControllerRef = (0, import_react6.useRef)();
|
|
348
|
-
const threadIdRef = (0, import_react6.useRef)(null);
|
|
349
|
-
const runIdRef = (0, import_react6.useRef)(null);
|
|
350
388
|
const { addGraphQLErrorsToast } = useToast();
|
|
351
389
|
const runChatCompletionRef = (0, import_react6.useRef)();
|
|
352
390
|
const agentSessionRef = (0, import_react6.useRef)(agentSession);
|
|
353
391
|
agentSessionRef.current = agentSession;
|
|
392
|
+
const threadIdRef = (0, import_react6.useRef)(threadId);
|
|
393
|
+
threadIdRef.current = threadId;
|
|
394
|
+
const runIdRef = (0, import_react6.useRef)(runId);
|
|
395
|
+
runIdRef.current = runId;
|
|
354
396
|
const publicApiKey = copilotConfig.publicApiKey;
|
|
355
|
-
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [
|
|
397
|
+
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared2.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
|
|
356
398
|
const runtimeClient = useCopilotRuntimeClient({
|
|
357
399
|
url: copilotConfig.chatApiEndpoint,
|
|
358
400
|
publicApiKey: copilotConfig.publicApiKey,
|
|
@@ -361,48 +403,29 @@ function useChat(options) {
|
|
|
361
403
|
});
|
|
362
404
|
const runChatCompletion = useAsyncCallback(
|
|
363
405
|
(previousMessages) => __async(this, null, function* () {
|
|
364
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
406
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
365
407
|
setIsLoading(true);
|
|
366
408
|
let newMessages = [
|
|
367
|
-
new
|
|
409
|
+
new import_runtime_client_gql3.TextMessage({
|
|
368
410
|
content: "",
|
|
369
|
-
role:
|
|
411
|
+
role: import_runtime_client_gql3.Role.Assistant
|
|
370
412
|
})
|
|
371
413
|
];
|
|
372
|
-
|
|
373
|
-
abortControllerRef.current = abortController;
|
|
414
|
+
chatAbortControllerRef.current = new AbortController();
|
|
374
415
|
setMessages([...previousMessages, ...newMessages]);
|
|
375
416
|
const systemMessage = makeSystemMessageCallback();
|
|
376
417
|
const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
|
|
418
|
+
const isAgentRun = agentSessionRef.current !== null;
|
|
377
419
|
const stream = runtimeClient.asStream(
|
|
378
420
|
runtimeClient.generateCopilotResponse({
|
|
379
421
|
data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
|
|
380
422
|
frontend: {
|
|
381
|
-
actions: actions
|
|
382
|
-
(action) => action.available !== import_runtime_client_gql2.ActionInputAvailability.Disabled || !action.disabled
|
|
383
|
-
).map((action) => {
|
|
384
|
-
let available = import_runtime_client_gql2.ActionInputAvailability.Enabled;
|
|
385
|
-
if (action.disabled) {
|
|
386
|
-
available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
|
|
387
|
-
} else if (action.available === "disabled") {
|
|
388
|
-
available = import_runtime_client_gql2.ActionInputAvailability.Disabled;
|
|
389
|
-
} else if (action.available === "remote") {
|
|
390
|
-
available = import_runtime_client_gql2.ActionInputAvailability.Remote;
|
|
391
|
-
}
|
|
392
|
-
return {
|
|
393
|
-
name: action.name,
|
|
394
|
-
description: action.description || "",
|
|
395
|
-
jsonSchema: JSON.stringify(
|
|
396
|
-
(0, import_shared.actionParametersToJsonSchema)(action.parameters || [])
|
|
397
|
-
),
|
|
398
|
-
available
|
|
399
|
-
};
|
|
400
|
-
}),
|
|
423
|
+
actions: processActionsForRuntimeRequest(actions),
|
|
401
424
|
url: window.location.href
|
|
402
425
|
},
|
|
403
426
|
threadId: threadIdRef.current,
|
|
404
427
|
runId: runIdRef.current,
|
|
405
|
-
messages: (0,
|
|
428
|
+
messages: (0, import_runtime_client_gql3.convertMessagesToGqlInput)((0, import_runtime_client_gql3.filterAgentStateMessages)(messagesWithContext))
|
|
406
429
|
}, copilotConfig.cloud ? {
|
|
407
430
|
cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
|
|
408
431
|
guardrails: {
|
|
@@ -414,7 +437,7 @@ function useChat(options) {
|
|
|
414
437
|
} : {})
|
|
415
438
|
} : {}), {
|
|
416
439
|
metadata: {
|
|
417
|
-
requestType:
|
|
440
|
+
requestType: import_runtime_client_gql3.CopilotRequestType.Chat
|
|
418
441
|
}
|
|
419
442
|
}), agentSessionRef.current ? {
|
|
420
443
|
agentSession: agentSessionRef.current
|
|
@@ -425,14 +448,15 @@ function useChat(options) {
|
|
|
425
448
|
}))
|
|
426
449
|
}),
|
|
427
450
|
properties: copilotConfig.properties,
|
|
428
|
-
signal: (_d =
|
|
451
|
+
signal: (_d = chatAbortControllerRef.current) == null ? void 0 : _d.signal
|
|
429
452
|
})
|
|
430
453
|
);
|
|
431
454
|
const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
|
|
432
455
|
const reader = stream.getReader();
|
|
433
|
-
let actionResults = {};
|
|
434
456
|
let executedCoAgentStateRenders = [];
|
|
435
457
|
let followUp = void 0;
|
|
458
|
+
let messages2 = [];
|
|
459
|
+
let syncedMessages = [];
|
|
436
460
|
try {
|
|
437
461
|
while (true) {
|
|
438
462
|
let done, value;
|
|
@@ -444,6 +468,9 @@ function useChat(options) {
|
|
|
444
468
|
break;
|
|
445
469
|
}
|
|
446
470
|
if (done) {
|
|
471
|
+
if (chatAbortControllerRef.current.signal.aborted) {
|
|
472
|
+
return [];
|
|
473
|
+
}
|
|
447
474
|
break;
|
|
448
475
|
}
|
|
449
476
|
if (!(value == null ? void 0 : value.generateCopilotResponse)) {
|
|
@@ -451,8 +478,10 @@ function useChat(options) {
|
|
|
451
478
|
}
|
|
452
479
|
threadIdRef.current = value.generateCopilotResponse.threadId || null;
|
|
453
480
|
runIdRef.current = value.generateCopilotResponse.runId || null;
|
|
454
|
-
|
|
455
|
-
|
|
481
|
+
setThreadId(threadIdRef.current);
|
|
482
|
+
setRunId(runIdRef.current);
|
|
483
|
+
messages2 = (0, import_runtime_client_gql3.convertGqlOutputToMessages)(
|
|
484
|
+
(0, import_runtime_client_gql3.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
|
|
456
485
|
);
|
|
457
486
|
if (messages2.length === 0) {
|
|
458
487
|
continue;
|
|
@@ -460,44 +489,16 @@ function useChat(options) {
|
|
|
460
489
|
newMessages = [];
|
|
461
490
|
if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
|
|
462
491
|
newMessages = [
|
|
463
|
-
new
|
|
464
|
-
role:
|
|
492
|
+
new import_runtime_client_gql3.TextMessage({
|
|
493
|
+
role: import_runtime_client_gql3.MessageRole.Assistant,
|
|
465
494
|
content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
|
|
466
495
|
})
|
|
467
496
|
];
|
|
497
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
498
|
+
break;
|
|
468
499
|
} else {
|
|
500
|
+
newMessages = [...messages2];
|
|
469
501
|
for (const message of messages2) {
|
|
470
|
-
newMessages.push(message);
|
|
471
|
-
if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql2.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
|
|
472
|
-
if (!(message.id in actionResults)) {
|
|
473
|
-
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
474
|
-
break;
|
|
475
|
-
}
|
|
476
|
-
try {
|
|
477
|
-
setMessages([...previousMessages, ...newMessages]);
|
|
478
|
-
const action = actions.find((action2) => action2.name === message.name);
|
|
479
|
-
if (action) {
|
|
480
|
-
followUp = action.followUp;
|
|
481
|
-
}
|
|
482
|
-
const result = yield onFunctionCall({
|
|
483
|
-
messages: previousMessages,
|
|
484
|
-
name: message.name,
|
|
485
|
-
args: message.arguments
|
|
486
|
-
});
|
|
487
|
-
actionResults[message.id] = result;
|
|
488
|
-
} catch (e) {
|
|
489
|
-
actionResults[message.id] = `Failed to execute action ${message.name}`;
|
|
490
|
-
console.error(`Failed to execute action ${message.name}: ${e}`);
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
newMessages.push(
|
|
494
|
-
new import_runtime_client_gql2.ResultMessage({
|
|
495
|
-
result: import_runtime_client_gql2.ResultMessage.encodeResult(actionResults[message.id]),
|
|
496
|
-
actionExecutionId: message.id,
|
|
497
|
-
actionName: message.name
|
|
498
|
-
})
|
|
499
|
-
);
|
|
500
|
-
}
|
|
501
502
|
if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
|
|
502
503
|
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
503
504
|
break;
|
|
@@ -512,6 +513,11 @@ function useChat(options) {
|
|
|
512
513
|
}
|
|
513
514
|
const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
|
|
514
515
|
if (lastAgentStateMessage) {
|
|
516
|
+
if (lastAgentStateMessage.state.messages && lastAgentStateMessage.state.messages.length > 0) {
|
|
517
|
+
syncedMessages = (0, import_runtime_client_gql3.loadMessagesFromJsonRepresentation)(
|
|
518
|
+
lastAgentStateMessage.state.messages
|
|
519
|
+
);
|
|
520
|
+
}
|
|
515
521
|
setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
516
522
|
[lastAgentStateMessage.agentName]: {
|
|
517
523
|
name: lastAgentStateMessage.agentName,
|
|
@@ -538,14 +544,96 @@ function useChat(options) {
|
|
|
538
544
|
setMessages([...previousMessages, ...newMessages]);
|
|
539
545
|
}
|
|
540
546
|
}
|
|
547
|
+
const finalMessages = constructFinalMessages(syncedMessages, previousMessages, newMessages);
|
|
548
|
+
let didExecuteAction = false;
|
|
549
|
+
if (onFunctionCall) {
|
|
550
|
+
const lastMessages = [];
|
|
551
|
+
for (let i = finalMessages.length - 1; i >= 0; i--) {
|
|
552
|
+
const message = finalMessages[i];
|
|
553
|
+
if (message.isActionExecutionMessage() && message.status.code !== import_runtime_client_gql3.MessageStatusCode.Pending) {
|
|
554
|
+
lastMessages.unshift(message);
|
|
555
|
+
} else {
|
|
556
|
+
break;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
for (const message of lastMessages) {
|
|
560
|
+
setMessages(finalMessages);
|
|
561
|
+
const action = actions.find((action2) => action2.name === message.name);
|
|
562
|
+
if (action) {
|
|
563
|
+
followUp = action.followUp;
|
|
564
|
+
let result;
|
|
565
|
+
try {
|
|
566
|
+
result = yield Promise.race([
|
|
567
|
+
onFunctionCall({
|
|
568
|
+
messages: previousMessages,
|
|
569
|
+
name: message.name,
|
|
570
|
+
args: message.arguments
|
|
571
|
+
}),
|
|
572
|
+
new Promise(
|
|
573
|
+
(resolve) => {
|
|
574
|
+
var _a2;
|
|
575
|
+
return (_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.addEventListener(
|
|
576
|
+
"abort",
|
|
577
|
+
() => resolve("Operation was aborted by the user")
|
|
578
|
+
);
|
|
579
|
+
}
|
|
580
|
+
),
|
|
581
|
+
// if the user stopped generation, we also abort consecutive actions
|
|
582
|
+
new Promise((resolve) => {
|
|
583
|
+
var _a2;
|
|
584
|
+
if ((_a2 = chatAbortControllerRef.current) == null ? void 0 : _a2.signal.aborted) {
|
|
585
|
+
resolve("Operation was aborted by the user");
|
|
586
|
+
}
|
|
587
|
+
})
|
|
588
|
+
]);
|
|
589
|
+
} catch (e) {
|
|
590
|
+
result = `Failed to execute action ${message.name}`;
|
|
591
|
+
console.error(`Failed to execute action ${message.name}: ${e}`);
|
|
592
|
+
}
|
|
593
|
+
didExecuteAction = true;
|
|
594
|
+
const messageIndex = finalMessages.findIndex((msg) => msg.id === message.id);
|
|
595
|
+
finalMessages.splice(
|
|
596
|
+
messageIndex + 1,
|
|
597
|
+
0,
|
|
598
|
+
new import_runtime_client_gql3.ResultMessage({
|
|
599
|
+
id: "result-" + message.id,
|
|
600
|
+
result: import_runtime_client_gql3.ResultMessage.encodeResult(result),
|
|
601
|
+
actionExecutionId: message.id,
|
|
602
|
+
actionName: message.name
|
|
603
|
+
})
|
|
604
|
+
);
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
setMessages(finalMessages);
|
|
608
|
+
}
|
|
541
609
|
if (
|
|
542
610
|
// if followUp is not explicitly false
|
|
543
|
-
followUp !== false && //
|
|
544
|
-
(
|
|
545
|
-
|
|
611
|
+
followUp !== false && // and we executed an action
|
|
612
|
+
(didExecuteAction || // the last message is a server side result
|
|
613
|
+
!isAgentRun && finalMessages.length && finalMessages[finalMessages.length - 1].isResultMessage()) && // the user did not stop generation
|
|
614
|
+
!((_j = chatAbortControllerRef.current) == null ? void 0 : _j.signal.aborted)
|
|
546
615
|
) {
|
|
547
616
|
yield new Promise((resolve) => setTimeout(resolve, 10));
|
|
548
|
-
return yield runChatCompletionRef.current(
|
|
617
|
+
return yield runChatCompletionRef.current(finalMessages);
|
|
618
|
+
} else if ((_k = chatAbortControllerRef.current) == null ? void 0 : _k.signal.aborted) {
|
|
619
|
+
const repairedMessages = finalMessages.filter((message, actionExecutionIndex) => {
|
|
620
|
+
if (message.isActionExecutionMessage()) {
|
|
621
|
+
return finalMessages.find(
|
|
622
|
+
(msg, resultIndex) => msg.isResultMessage() && msg.actionExecutionId === message.id && resultIndex === actionExecutionIndex + 1
|
|
623
|
+
);
|
|
624
|
+
}
|
|
625
|
+
return true;
|
|
626
|
+
});
|
|
627
|
+
const repairedMessageIds = repairedMessages.map((message) => message.id);
|
|
628
|
+
setMessages(repairedMessages);
|
|
629
|
+
if ((_l = agentSessionRef.current) == null ? void 0 : _l.nodeName) {
|
|
630
|
+
setAgentSession({
|
|
631
|
+
threadId: agentSessionRef.current.threadId,
|
|
632
|
+
agentName: agentSessionRef.current.agentName,
|
|
633
|
+
nodeName: "__end__"
|
|
634
|
+
});
|
|
635
|
+
}
|
|
636
|
+
return newMessages.filter((message) => repairedMessageIds.includes(message.id));
|
|
549
637
|
} else {
|
|
550
638
|
return newMessages.slice();
|
|
551
639
|
}
|
|
@@ -602,7 +690,7 @@ function useChat(options) {
|
|
|
602
690
|
}), [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]);
|
|
603
691
|
const stop = () => {
|
|
604
692
|
var _a;
|
|
605
|
-
(_a =
|
|
693
|
+
(_a = chatAbortControllerRef.current) == null ? void 0 : _a.abort("Stop was called");
|
|
606
694
|
};
|
|
607
695
|
return {
|
|
608
696
|
append,
|
|
@@ -611,11 +699,28 @@ function useChat(options) {
|
|
|
611
699
|
runChatCompletion: () => runChatCompletionRef.current(messages)
|
|
612
700
|
};
|
|
613
701
|
}
|
|
702
|
+
function constructFinalMessages(syncedMessages, previousMessages, newMessages) {
|
|
703
|
+
const finalMessages = syncedMessages.length > 0 ? [...syncedMessages] : [...previousMessages, ...newMessages];
|
|
704
|
+
if (syncedMessages.length > 0) {
|
|
705
|
+
const messagesWithAgentState = [...previousMessages, ...newMessages];
|
|
706
|
+
let previousMessageId = void 0;
|
|
707
|
+
for (const message of messagesWithAgentState) {
|
|
708
|
+
if (message.isAgentStateMessage()) {
|
|
709
|
+
const index = finalMessages.findIndex((msg) => msg.id === previousMessageId);
|
|
710
|
+
if (index !== -1) {
|
|
711
|
+
finalMessages.splice(index + 1, 0, message);
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
previousMessageId = message.id;
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
return finalMessages;
|
|
718
|
+
}
|
|
614
719
|
|
|
615
720
|
// src/components/copilot-provider/copilotkit.tsx
|
|
616
721
|
var import_react7 = require("react");
|
|
617
722
|
var import_react_dom = require("react-dom");
|
|
618
|
-
var
|
|
723
|
+
var import_shared3 = require("@copilotkit/shared");
|
|
619
724
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
620
725
|
var defaultCopilotContextCategories = ["global"];
|
|
621
726
|
|
|
@@ -638,7 +743,13 @@ function useCopilotChat(_a = {}) {
|
|
|
638
743
|
setCoagentStatesWithRef,
|
|
639
744
|
coAgentStateRenders,
|
|
640
745
|
agentSession,
|
|
641
|
-
setAgentSession
|
|
746
|
+
setAgentSession,
|
|
747
|
+
agentLock,
|
|
748
|
+
threadId,
|
|
749
|
+
setThreadId,
|
|
750
|
+
runId,
|
|
751
|
+
setRunId,
|
|
752
|
+
chatAbortControllerRef
|
|
642
753
|
} = useCopilotContext();
|
|
643
754
|
const { messages, setMessages } = useCopilotMessagesContext();
|
|
644
755
|
const latestGetContextString = useUpdatedRef(getContextString);
|
|
@@ -651,9 +762,9 @@ function useCopilotChat(_a = {}) {
|
|
|
651
762
|
const makeSystemMessageCallback = (0, import_react8.useCallback)(() => {
|
|
652
763
|
const systemMessageMaker = makeSystemMessage || defaultSystemMessage;
|
|
653
764
|
const contextString = latestGetContextString.current([], defaultCopilotContextCategories);
|
|
654
|
-
return new
|
|
765
|
+
return new import_runtime_client_gql4.TextMessage({
|
|
655
766
|
content: systemMessageMaker(contextString, chatInstructions),
|
|
656
|
-
role:
|
|
767
|
+
role: import_runtime_client_gql4.Role.System
|
|
657
768
|
});
|
|
658
769
|
}, [getContextString, makeSystemMessage, chatInstructions]);
|
|
659
770
|
const onCoAgentStateRender = useAsyncCallback(
|
|
@@ -688,7 +799,12 @@ function useCopilotChat(_a = {}) {
|
|
|
688
799
|
coagentStatesRef,
|
|
689
800
|
setCoagentStatesWithRef,
|
|
690
801
|
agentSession,
|
|
691
|
-
setAgentSession
|
|
802
|
+
setAgentSession,
|
|
803
|
+
threadId,
|
|
804
|
+
setThreadId,
|
|
805
|
+
runId,
|
|
806
|
+
setRunId,
|
|
807
|
+
chatAbortControllerRef
|
|
692
808
|
}));
|
|
693
809
|
const latestAppend = useUpdatedRef(append);
|
|
694
810
|
const latestAppendFunc = useAsyncCallback(
|
|
@@ -723,12 +839,38 @@ function useCopilotChat(_a = {}) {
|
|
|
723
839
|
const latestRunChatCompletionFunc = useAsyncCallback(() => __async(this, null, function* () {
|
|
724
840
|
return yield latestRunChatCompletion.current();
|
|
725
841
|
}), [latestRunChatCompletion]);
|
|
842
|
+
const reset = (0, import_react8.useCallback)(() => {
|
|
843
|
+
latestStopFunc();
|
|
844
|
+
setMessages([]);
|
|
845
|
+
setThreadId(null);
|
|
846
|
+
setRunId(null);
|
|
847
|
+
setCoagentStatesWithRef({});
|
|
848
|
+
let initialAgentSession = null;
|
|
849
|
+
if (agentLock) {
|
|
850
|
+
initialAgentSession = {
|
|
851
|
+
agentName: agentLock
|
|
852
|
+
};
|
|
853
|
+
}
|
|
854
|
+
setAgentSession(initialAgentSession);
|
|
855
|
+
}, [
|
|
856
|
+
latestStopFunc,
|
|
857
|
+
setMessages,
|
|
858
|
+
setThreadId,
|
|
859
|
+
setCoagentStatesWithRef,
|
|
860
|
+
setAgentSession,
|
|
861
|
+
agentLock
|
|
862
|
+
]);
|
|
863
|
+
const latestReset = useUpdatedRef(reset);
|
|
864
|
+
const latestResetFunc = (0, import_react8.useCallback)(() => {
|
|
865
|
+
return latestReset.current();
|
|
866
|
+
}, [latestReset]);
|
|
726
867
|
return {
|
|
727
868
|
visibleMessages: messages,
|
|
728
869
|
appendMessage: latestAppendFunc,
|
|
729
870
|
setMessages: latestSetMessagesFunc,
|
|
730
871
|
reloadMessages: latestReloadFunc,
|
|
731
872
|
stopGeneration: latestStopFunc,
|
|
873
|
+
reset: latestResetFunc,
|
|
732
874
|
deleteMessage: latestDeleteFunc,
|
|
733
875
|
runChatCompletion: latestRunChatCompletionFunc,
|
|
734
876
|
isLoading
|
|
@@ -811,7 +953,11 @@ function useCoAgent(options) {
|
|
|
811
953
|
} else if (coagentStates[name] === void 0) {
|
|
812
954
|
setState(options.initialState === void 0 ? {} : options.initialState);
|
|
813
955
|
}
|
|
814
|
-
}, [
|
|
956
|
+
}, [
|
|
957
|
+
isExternalStateManagement(options) ? JSON.stringify(options.state) : void 0,
|
|
958
|
+
// reset initialstate on reset
|
|
959
|
+
coagentStates[name] === void 0
|
|
960
|
+
]);
|
|
815
961
|
const runAgentCallback = useAsyncCallback(
|
|
816
962
|
(hint) => __async(this, null, function* () {
|
|
817
963
|
yield runAgent(name, context, appendMessage, runChatCompletion, hint);
|
|
@@ -840,6 +986,17 @@ function stopAgent(name, context) {
|
|
|
840
986
|
const { agentSession, setAgentSession } = context;
|
|
841
987
|
if (agentSession && agentSession.agentName === name) {
|
|
842
988
|
setAgentSession(null);
|
|
989
|
+
context.setCoagentStates((prevAgentStates) => {
|
|
990
|
+
return __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
991
|
+
[name]: __spreadProps(__spreadValues({}, prevAgentStates[name]), {
|
|
992
|
+
running: false,
|
|
993
|
+
active: false,
|
|
994
|
+
threadId: void 0,
|
|
995
|
+
nodeName: void 0,
|
|
996
|
+
runId: void 0
|
|
997
|
+
})
|
|
998
|
+
});
|
|
999
|
+
});
|
|
843
1000
|
} else {
|
|
844
1001
|
console.warn(`No agent session found for ${name}`);
|
|
845
1002
|
}
|
|
@@ -875,6 +1032,9 @@ function runAgent(name, context, appendMessage, runChatCompletion, hint) {
|
|
|
875
1032
|
}
|
|
876
1033
|
// Annotate the CommonJS export names for ESM import in node:
|
|
877
1034
|
0 && (module.exports = {
|
|
1035
|
+
runAgent,
|
|
1036
|
+
startAgent,
|
|
1037
|
+
stopAgent,
|
|
878
1038
|
useCoAgent
|
|
879
1039
|
});
|
|
880
1040
|
//# sourceMappingURL=use-coagent.js.map
|