@copilotkit/react-core 1.5.0-tyler-reset-chat.0 → 1.5.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 +158 -4
- package/README.md +2 -0
- package/dist/{chunk-3AYELZJS.mjs → chunk-35EN6BG4.mjs} +2 -2
- package/dist/{chunk-3AYELZJS.mjs.map → chunk-35EN6BG4.mjs.map} +1 -1
- package/dist/{chunk-SEPYQHH7.mjs → chunk-42N5VKIX.mjs} +34 -28
- package/dist/chunk-42N5VKIX.mjs.map +1 -0
- package/dist/{chunk-USL3EHJB.mjs → chunk-5FYKUKG3.mjs} +2 -2
- package/dist/{chunk-ODN4H66E.mjs → chunk-7LRDVJH5.mjs} +6 -2
- package/dist/chunk-7LRDVJH5.mjs.map +1 -0
- package/dist/{chunk-CZMEZR6F.mjs → chunk-BT6WK2JZ.mjs} +34 -19
- package/dist/chunk-BT6WK2JZ.mjs.map +1 -0
- package/dist/{chunk-3R4J2TPH.mjs → chunk-EUU6NNYU.mjs} +29 -13
- package/dist/chunk-EUU6NNYU.mjs.map +1 -0
- package/dist/chunk-QCUP6HLK.mjs +37 -0
- package/dist/chunk-QCUP6HLK.mjs.map +1 -0
- package/dist/chunk-QTDCEDOC.mjs +392 -0
- package/dist/chunk-QTDCEDOC.mjs.map +1 -0
- package/dist/{chunk-JR55I3FL.mjs → chunk-QX6V774L.mjs} +6 -8
- package/dist/chunk-QX6V774L.mjs.map +1 -0
- package/dist/{chunk-2KCEHGSI.mjs → chunk-SFPANIOY.mjs} +99 -49
- package/dist/chunk-SFPANIOY.mjs.map +1 -0
- package/dist/{chunk-2JP64U3A.mjs → chunk-TQN3EZWQ.mjs} +4 -1
- package/dist/chunk-TQN3EZWQ.mjs.map +1 -0
- package/dist/{chunk-XUPO37VH.mjs → chunk-V3PFWGIY.mjs} +2 -2
- package/dist/{chunk-6QKA3SNN.mjs → chunk-VMP6JWBB.mjs} +21 -5
- package/dist/chunk-VMP6JWBB.mjs.map +1 -0
- package/dist/chunk-XERJQUHA.mjs +31 -0
- package/dist/chunk-XERJQUHA.mjs.map +1 -0
- package/dist/components/copilot-provider/copilotkit.js +173 -92
- package/dist/components/copilot-provider/copilotkit.js.map +1 -1
- package/dist/components/copilot-provider/copilotkit.mjs +5 -4
- package/dist/components/copilot-provider/index.js +173 -92
- package/dist/components/copilot-provider/index.js.map +1 -1
- package/dist/components/copilot-provider/index.mjs +5 -4
- package/dist/components/error-boundary/error-boundary.d.ts +22 -0
- package/dist/components/error-boundary/error-boundary.js +183 -0
- package/dist/components/error-boundary/error-boundary.js.map +1 -0
- package/dist/components/error-boundary/error-boundary.mjs +12 -0
- package/dist/components/error-boundary/error-boundary.mjs.map +1 -0
- package/dist/components/error-boundary/error-utils.d.ts +11 -0
- package/dist/components/error-boundary/error-utils.js +177 -0
- package/dist/components/error-boundary/error-utils.js.map +1 -0
- package/dist/components/error-boundary/error-utils.mjs +13 -0
- package/dist/components/error-boundary/error-utils.mjs.map +1 -0
- package/dist/components/index.js +173 -92
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +5 -4
- package/dist/components/toast/toast-provider.d.ts +2 -1
- package/dist/components/toast/toast-provider.js +76 -62
- package/dist/components/toast/toast-provider.js.map +1 -1
- package/dist/components/toast/toast-provider.mjs +1 -1
- package/dist/context/copilot-context.d.ts +4 -2
- package/dist/context/copilot-context.js +3 -0
- 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 +3 -0
- package/dist/context/index.js.map +1 -1
- package/dist/context/index.mjs +1 -1
- package/dist/hooks/index.js +554 -308
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +13 -11
- package/dist/hooks/use-chat.d.ts +6 -2
- package/dist/hooks/use-chat.js +434 -219
- package/dist/hooks/use-chat.js.map +1 -1
- package/dist/hooks/use-chat.mjs +4 -3
- package/dist/hooks/use-coagent-state-render.d.ts +2 -2
- package/dist/hooks/use-coagent-state-render.js +3 -0
- 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 +510 -277
- package/dist/hooks/use-coagent.js.map +1 -1
- package/dist/hooks/use-coagent.mjs +9 -7
- package/dist/hooks/use-copilot-action.d.ts +12 -2
- package/dist/hooks/use-copilot-action.js +157 -16
- package/dist/hooks/use-copilot-action.js.map +1 -1
- package/dist/hooks/use-copilot-action.mjs +4 -2
- package/dist/hooks/use-copilot-chat.d.ts +1 -0
- package/dist/hooks/use-copilot-chat.js +483 -253
- package/dist/hooks/use-copilot-chat.js.map +1 -1
- package/dist/hooks/use-copilot-chat.mjs +8 -6
- package/dist/hooks/use-copilot-readable.js +3 -0
- 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.js +110 -4
- package/dist/hooks/use-copilot-runtime-client.js.map +1 -1
- package/dist/hooks/use-copilot-runtime-client.mjs +2 -2
- package/dist/hooks/use-make-copilot-document-readable.js +3 -0
- 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 +616 -401
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +14 -12
- 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 +7 -5
- 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 +7 -5
- 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 +5 -4
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +5 -4
- package/package.json +5 -5
- package/src/components/copilot-provider/copilotkit.tsx +22 -1
- package/src/components/error-boundary/error-boundary.tsx +42 -0
- package/src/components/error-boundary/error-utils.tsx +95 -0
- package/src/components/toast/toast-provider.tsx +10 -49
- package/src/context/copilot-context.tsx +17 -2
- package/src/hooks/use-chat.ts +375 -279
- package/src/hooks/use-coagent-state-render.ts +2 -2
- package/src/hooks/use-coagent.ts +34 -28
- package/src/hooks/use-copilot-action.ts +50 -15
- package/src/hooks/use-copilot-chat.ts +28 -14
- package/src/hooks/use-copilot-runtime-client.ts +4 -0
- 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-2JP64U3A.mjs.map +0 -1
- package/dist/chunk-2KCEHGSI.mjs.map +0 -1
- package/dist/chunk-3R4J2TPH.mjs.map +0 -1
- package/dist/chunk-6EN7J4V2.mjs +0 -317
- package/dist/chunk-6EN7J4V2.mjs.map +0 -1
- package/dist/chunk-6QKA3SNN.mjs.map +0 -1
- package/dist/chunk-CZMEZR6F.mjs.map +0 -1
- package/dist/chunk-JR55I3FL.mjs.map +0 -1
- package/dist/chunk-ODN4H66E.mjs.map +0 -1
- package/dist/chunk-SEPYQHH7.mjs.map +0 -1
- /package/dist/{chunk-USL3EHJB.mjs.map → chunk-5FYKUKG3.mjs.map} +0 -0
- /package/dist/{chunk-XUPO37VH.mjs.map → chunk-V3PFWGIY.mjs.map} +0 -0
|
@@ -85,7 +85,7 @@ __export(use_coagent_exports, {
|
|
|
85
85
|
useCoAgent: () => useCoAgent
|
|
86
86
|
});
|
|
87
87
|
module.exports = __toCommonJS(use_coagent_exports);
|
|
88
|
-
var
|
|
88
|
+
var import_react9 = require("react");
|
|
89
89
|
|
|
90
90
|
// src/context/copilot-context.tsx
|
|
91
91
|
var import_react = __toESM(require("react"));
|
|
@@ -136,6 +136,9 @@ var emptyCopilotContext = {
|
|
|
136
136
|
coagentStates: {},
|
|
137
137
|
setCoagentStates: () => {
|
|
138
138
|
},
|
|
139
|
+
coagentStatesRef: { current: {} },
|
|
140
|
+
setCoagentStatesWithRef: () => {
|
|
141
|
+
},
|
|
139
142
|
agentSession: null,
|
|
140
143
|
setAgentSession: () => {
|
|
141
144
|
},
|
|
@@ -179,20 +182,160 @@ function useCopilotMessagesContext() {
|
|
|
179
182
|
}
|
|
180
183
|
|
|
181
184
|
// src/hooks/use-copilot-chat.ts
|
|
182
|
-
var
|
|
183
|
-
var
|
|
185
|
+
var import_react8 = require("react");
|
|
186
|
+
var import_runtime_client_gql4 = require("@copilotkit/runtime-client-gql");
|
|
184
187
|
|
|
185
188
|
// src/hooks/use-chat.ts
|
|
186
|
-
var
|
|
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");
|
|
187
195
|
var import_shared = require("@copilotkit/shared");
|
|
188
|
-
|
|
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
|
+
}
|
|
189
217
|
|
|
190
218
|
// src/components/toast/toast-provider.tsx
|
|
219
|
+
var import_react4 = require("react");
|
|
220
|
+
|
|
221
|
+
// src/components/error-boundary/error-utils.tsx
|
|
191
222
|
var import_react3 = require("react");
|
|
223
|
+
|
|
224
|
+
// src/components/toast/exclamation-mark-icon.tsx
|
|
192
225
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
193
|
-
var
|
|
226
|
+
var ExclamationMarkIcon = ({
|
|
227
|
+
className,
|
|
228
|
+
style
|
|
229
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
230
|
+
"svg",
|
|
231
|
+
{
|
|
232
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
233
|
+
width: "24",
|
|
234
|
+
height: "24",
|
|
235
|
+
viewBox: "0 0 24 24",
|
|
236
|
+
fill: "none",
|
|
237
|
+
stroke: "currentColor",
|
|
238
|
+
strokeWidth: "2",
|
|
239
|
+
strokeLinecap: "round",
|
|
240
|
+
strokeLinejoin: "round",
|
|
241
|
+
className: `lucide lucide-circle-alert ${className ? className : ""}`,
|
|
242
|
+
style,
|
|
243
|
+
children: [
|
|
244
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
|
|
245
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12", y1: "8", y2: "12" }),
|
|
246
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", x2: "12.01", y1: "16", y2: "16" })
|
|
247
|
+
]
|
|
248
|
+
}
|
|
249
|
+
);
|
|
250
|
+
|
|
251
|
+
// src/components/error-boundary/error-utils.tsx
|
|
252
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
253
|
+
function ErrorToast({ errors }) {
|
|
254
|
+
const errorsToRender = errors.map((error, idx) => {
|
|
255
|
+
var _a, _b, _c;
|
|
256
|
+
const message = "extensions" in error ? (_b = (_a = error.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message : error.message;
|
|
257
|
+
const code = "extensions" in error ? (_c = error.extensions) == null ? void 0 : _c.code : null;
|
|
258
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
259
|
+
"div",
|
|
260
|
+
{
|
|
261
|
+
style: {
|
|
262
|
+
marginTop: idx === 0 ? 0 : 10,
|
|
263
|
+
marginBottom: 14
|
|
264
|
+
},
|
|
265
|
+
children: [
|
|
266
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ExclamationMarkIcon, { style: { marginBottom: 4 } }),
|
|
267
|
+
code && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
268
|
+
"div",
|
|
269
|
+
{
|
|
270
|
+
style: {
|
|
271
|
+
fontWeight: "600",
|
|
272
|
+
marginBottom: 4
|
|
273
|
+
},
|
|
274
|
+
children: [
|
|
275
|
+
"Copilot Cloud Error:",
|
|
276
|
+
" ",
|
|
277
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { style: { fontFamily: "monospace", fontWeight: "normal" }, children: code })
|
|
278
|
+
]
|
|
279
|
+
}
|
|
280
|
+
),
|
|
281
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: message })
|
|
282
|
+
]
|
|
283
|
+
},
|
|
284
|
+
idx
|
|
285
|
+
);
|
|
286
|
+
});
|
|
287
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
288
|
+
"div",
|
|
289
|
+
{
|
|
290
|
+
style: {
|
|
291
|
+
fontSize: "13px",
|
|
292
|
+
maxWidth: "600px"
|
|
293
|
+
},
|
|
294
|
+
children: [
|
|
295
|
+
errorsToRender,
|
|
296
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { fontSize: "11px", opacity: 0.75 }, children: "NOTE: This error only displays during local development." })
|
|
297
|
+
]
|
|
298
|
+
}
|
|
299
|
+
);
|
|
300
|
+
}
|
|
301
|
+
function useErrorToast() {
|
|
302
|
+
const { addToast } = useToast();
|
|
303
|
+
return (0, import_react3.useCallback)(
|
|
304
|
+
(error) => {
|
|
305
|
+
const errorId = error.map((err) => {
|
|
306
|
+
var _a, _b;
|
|
307
|
+
const message = "extensions" in err ? ((_b = (_a = err.extensions) == null ? void 0 : _a.originalError) == null ? void 0 : _b.message) || err.message : err.message;
|
|
308
|
+
const stack = err.stack || "";
|
|
309
|
+
return btoa(message + stack).slice(0, 32);
|
|
310
|
+
}).join("|");
|
|
311
|
+
addToast({
|
|
312
|
+
type: "error",
|
|
313
|
+
id: errorId,
|
|
314
|
+
// Toast libraries typically dedupe by id
|
|
315
|
+
message: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ErrorToast, { errors: error })
|
|
316
|
+
});
|
|
317
|
+
},
|
|
318
|
+
[addToast]
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
function useAsyncCallback(callback, deps) {
|
|
322
|
+
const addErrorToast = useErrorToast();
|
|
323
|
+
return (0, import_react3.useCallback)((...args) => __async(this, null, function* () {
|
|
324
|
+
try {
|
|
325
|
+
return yield callback(...args);
|
|
326
|
+
} catch (error) {
|
|
327
|
+
console.error("Error in async callback:", error);
|
|
328
|
+
addErrorToast([error]);
|
|
329
|
+
throw error;
|
|
330
|
+
}
|
|
331
|
+
}), deps);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// src/components/toast/toast-provider.tsx
|
|
335
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
336
|
+
var ToastContext = (0, import_react4.createContext)(void 0);
|
|
194
337
|
function useToast() {
|
|
195
|
-
const context = (0,
|
|
338
|
+
const context = (0, import_react4.useContext)(ToastContext);
|
|
196
339
|
if (!context) {
|
|
197
340
|
throw new Error("useToast must be used within a ToastProvider");
|
|
198
341
|
}
|
|
@@ -200,15 +343,18 @@ function useToast() {
|
|
|
200
343
|
}
|
|
201
344
|
|
|
202
345
|
// src/hooks/use-copilot-runtime-client.ts
|
|
203
|
-
var
|
|
204
|
-
var
|
|
346
|
+
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
347
|
+
var import_react5 = require("react");
|
|
205
348
|
var useCopilotRuntimeClient = (options) => {
|
|
206
349
|
const { addGraphQLErrorsToast } = useToast();
|
|
207
|
-
const
|
|
208
|
-
|
|
350
|
+
const addErrorToast = useErrorToast();
|
|
351
|
+
const runtimeClient = (0, import_react5.useMemo)(() => {
|
|
352
|
+
return new import_runtime_client_gql2.CopilotRuntimeClient(__spreadProps(__spreadValues({}, options), {
|
|
209
353
|
handleGQLErrors: (error) => {
|
|
210
354
|
if (error.graphQLErrors.length) {
|
|
211
355
|
addGraphQLErrorsToast(error.graphQLErrors);
|
|
356
|
+
} else {
|
|
357
|
+
addErrorToast([error]);
|
|
212
358
|
}
|
|
213
359
|
}
|
|
214
360
|
}));
|
|
@@ -229,8 +375,8 @@ function useChat(options) {
|
|
|
229
375
|
actions,
|
|
230
376
|
onFunctionCall,
|
|
231
377
|
onCoAgentStateRender,
|
|
232
|
-
|
|
233
|
-
|
|
378
|
+
setCoagentStatesWithRef,
|
|
379
|
+
coagentStatesRef,
|
|
234
380
|
agentSession,
|
|
235
381
|
setAgentSession,
|
|
236
382
|
threadId,
|
|
@@ -239,244 +385,298 @@ function useChat(options) {
|
|
|
239
385
|
setRunId,
|
|
240
386
|
chatAbortControllerRef
|
|
241
387
|
} = options;
|
|
242
|
-
const abortController = new AbortController();
|
|
243
|
-
chatAbortControllerRef.current = abortController;
|
|
244
388
|
const { addGraphQLErrorsToast } = useToast();
|
|
245
|
-
const runChatCompletionRef = (0,
|
|
246
|
-
const
|
|
247
|
-
coagentStatesRef.current = coagentStates;
|
|
248
|
-
const agentSessionRef = (0, import_react5.useRef)(agentSession);
|
|
389
|
+
const runChatCompletionRef = (0, import_react6.useRef)();
|
|
390
|
+
const agentSessionRef = (0, import_react6.useRef)(agentSession);
|
|
249
391
|
agentSessionRef.current = agentSession;
|
|
250
|
-
const threadIdRef = (0,
|
|
392
|
+
const threadIdRef = (0, import_react6.useRef)(threadId);
|
|
251
393
|
threadIdRef.current = threadId;
|
|
252
|
-
const runIdRef = (0,
|
|
394
|
+
const runIdRef = (0, import_react6.useRef)(runId);
|
|
253
395
|
runIdRef.current = runId;
|
|
254
396
|
const publicApiKey = copilotConfig.publicApiKey;
|
|
255
|
-
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [
|
|
397
|
+
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared2.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
|
|
256
398
|
const runtimeClient = useCopilotRuntimeClient({
|
|
257
399
|
url: copilotConfig.chatApiEndpoint,
|
|
258
400
|
publicApiKey: copilotConfig.publicApiKey,
|
|
259
401
|
headers,
|
|
260
402
|
credentials: copilotConfig.credentials
|
|
261
403
|
});
|
|
262
|
-
const runChatCompletion = (
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
available
|
|
295
|
-
};
|
|
296
|
-
}),
|
|
297
|
-
url: window.location.href
|
|
298
|
-
},
|
|
299
|
-
threadId: threadIdRef.current,
|
|
300
|
-
runId: runIdRef.current,
|
|
301
|
-
messages: (0, import_runtime_client_gql2.convertMessagesToGqlInput)((0, import_runtime_client_gql2.filterAgentStateMessages)(messagesWithContext))
|
|
302
|
-
}, copilotConfig.cloud ? {
|
|
303
|
-
cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
|
|
304
|
-
guardrails: {
|
|
305
|
-
inputValidationRules: {
|
|
306
|
-
allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
|
|
307
|
-
denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
|
|
404
|
+
const runChatCompletion = useAsyncCallback(
|
|
405
|
+
(previousMessages) => __async(this, null, function* () {
|
|
406
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
407
|
+
setIsLoading(true);
|
|
408
|
+
let newMessages = [
|
|
409
|
+
new import_runtime_client_gql3.TextMessage({
|
|
410
|
+
content: "",
|
|
411
|
+
role: import_runtime_client_gql3.Role.Assistant
|
|
412
|
+
})
|
|
413
|
+
];
|
|
414
|
+
chatAbortControllerRef.current = new AbortController();
|
|
415
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
416
|
+
const systemMessage = makeSystemMessageCallback();
|
|
417
|
+
const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
|
|
418
|
+
const isAgentRun = agentSessionRef.current !== null;
|
|
419
|
+
const stream = runtimeClient.asStream(
|
|
420
|
+
runtimeClient.generateCopilotResponse({
|
|
421
|
+
data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
|
|
422
|
+
frontend: {
|
|
423
|
+
actions: processActionsForRuntimeRequest(actions),
|
|
424
|
+
url: window.location.href
|
|
425
|
+
},
|
|
426
|
+
threadId: threadIdRef.current,
|
|
427
|
+
runId: runIdRef.current,
|
|
428
|
+
messages: (0, import_runtime_client_gql3.convertMessagesToGqlInput)((0, import_runtime_client_gql3.filterAgentStateMessages)(messagesWithContext))
|
|
429
|
+
}, copilotConfig.cloud ? {
|
|
430
|
+
cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
|
|
431
|
+
guardrails: {
|
|
432
|
+
inputValidationRules: {
|
|
433
|
+
allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
|
|
434
|
+
denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
|
|
435
|
+
}
|
|
308
436
|
}
|
|
437
|
+
} : {})
|
|
438
|
+
} : {}), {
|
|
439
|
+
metadata: {
|
|
440
|
+
requestType: import_runtime_client_gql3.CopilotRequestType.Chat
|
|
309
441
|
}
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
442
|
+
}), agentSessionRef.current ? {
|
|
443
|
+
agentSession: agentSessionRef.current
|
|
444
|
+
} : {}), {
|
|
445
|
+
agentStates: Object.values(coagentStatesRef.current).map((state) => ({
|
|
446
|
+
agentName: state.name,
|
|
447
|
+
state: JSON.stringify(state.state)
|
|
448
|
+
}))
|
|
449
|
+
}),
|
|
450
|
+
properties: copilotConfig.properties,
|
|
451
|
+
signal: (_d = chatAbortControllerRef.current) == null ? void 0 : _d.signal
|
|
452
|
+
})
|
|
453
|
+
);
|
|
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;
|
|
455
|
+
const reader = stream.getReader();
|
|
456
|
+
let executedCoAgentStateRenders = [];
|
|
457
|
+
let followUp = void 0;
|
|
458
|
+
let messages2 = [];
|
|
459
|
+
let syncedMessages = [];
|
|
460
|
+
try {
|
|
461
|
+
while (true) {
|
|
462
|
+
let done, value;
|
|
463
|
+
try {
|
|
464
|
+
const readResult = yield reader.read();
|
|
465
|
+
done = readResult.done;
|
|
466
|
+
value = readResult.value;
|
|
467
|
+
} catch (readError) {
|
|
468
|
+
break;
|
|
314
469
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
state: JSON.stringify(state.state)
|
|
321
|
-
}))
|
|
322
|
-
}),
|
|
323
|
-
properties: copilotConfig.properties,
|
|
324
|
-
signal: (_d = chatAbortControllerRef.current) == null ? void 0 : _d.signal
|
|
325
|
-
})
|
|
326
|
-
);
|
|
327
|
-
const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
|
|
328
|
-
const reader = stream.getReader();
|
|
329
|
-
let actionResults = {};
|
|
330
|
-
let executedCoAgentStateRenders = [];
|
|
331
|
-
let followUp = void 0;
|
|
332
|
-
try {
|
|
333
|
-
while (true) {
|
|
334
|
-
let done, value;
|
|
335
|
-
try {
|
|
336
|
-
const readResult = yield reader.read();
|
|
337
|
-
done = readResult.done;
|
|
338
|
-
value = readResult.value;
|
|
339
|
-
} catch (readError) {
|
|
340
|
-
break;
|
|
341
|
-
}
|
|
342
|
-
if (done) {
|
|
343
|
-
if (chatAbortControllerRef.current.signal.aborted) {
|
|
344
|
-
return newMessages.slice();
|
|
470
|
+
if (done) {
|
|
471
|
+
if (chatAbortControllerRef.current.signal.aborted) {
|
|
472
|
+
return [];
|
|
473
|
+
}
|
|
474
|
+
break;
|
|
345
475
|
}
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
if (!(message.id in actionResults)) {
|
|
476
|
+
if (!(value == null ? void 0 : value.generateCopilotResponse)) {
|
|
477
|
+
continue;
|
|
478
|
+
}
|
|
479
|
+
threadIdRef.current = value.generateCopilotResponse.threadId || null;
|
|
480
|
+
runIdRef.current = value.generateCopilotResponse.runId || null;
|
|
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)
|
|
485
|
+
);
|
|
486
|
+
if (messages2.length === 0) {
|
|
487
|
+
continue;
|
|
488
|
+
}
|
|
489
|
+
newMessages = [];
|
|
490
|
+
if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
|
|
491
|
+
newMessages = [
|
|
492
|
+
new import_runtime_client_gql3.TextMessage({
|
|
493
|
+
role: import_runtime_client_gql3.MessageRole.Assistant,
|
|
494
|
+
content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
|
|
495
|
+
})
|
|
496
|
+
];
|
|
497
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
498
|
+
break;
|
|
499
|
+
} else {
|
|
500
|
+
newMessages = [...messages2];
|
|
501
|
+
for (const message of messages2) {
|
|
502
|
+
if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
|
|
374
503
|
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
375
504
|
break;
|
|
376
505
|
}
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
console.error(`Failed to execute action ${message.name}: ${e}`);
|
|
506
|
+
yield onCoAgentStateRender({
|
|
507
|
+
name: message.agentName,
|
|
508
|
+
nodeName: message.nodeName,
|
|
509
|
+
state: message.state
|
|
510
|
+
});
|
|
511
|
+
executedCoAgentStateRenders.push(message.id);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
const lastAgentStateMessage = [...messages2].reverse().find((message) => message.isAgentStateMessage());
|
|
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
|
+
}
|
|
521
|
+
setCoagentStatesWithRef((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
522
|
+
[lastAgentStateMessage.agentName]: {
|
|
523
|
+
name: lastAgentStateMessage.agentName,
|
|
524
|
+
state: lastAgentStateMessage.state,
|
|
525
|
+
running: lastAgentStateMessage.running,
|
|
526
|
+
active: lastAgentStateMessage.active,
|
|
527
|
+
threadId: lastAgentStateMessage.threadId,
|
|
528
|
+
nodeName: lastAgentStateMessage.nodeName,
|
|
529
|
+
runId: lastAgentStateMessage.runId
|
|
402
530
|
}
|
|
531
|
+
}));
|
|
532
|
+
if (lastAgentStateMessage.running) {
|
|
533
|
+
setAgentSession({
|
|
534
|
+
threadId: lastAgentStateMessage.threadId,
|
|
535
|
+
agentName: lastAgentStateMessage.agentName,
|
|
536
|
+
nodeName: lastAgentStateMessage.nodeName
|
|
537
|
+
});
|
|
538
|
+
} else {
|
|
539
|
+
setAgentSession(null);
|
|
403
540
|
}
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
if (newMessages.length > 0) {
|
|
544
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
545
|
+
}
|
|
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),
|
|
407
601
|
actionExecutionId: message.id,
|
|
408
602
|
actionName: message.name
|
|
409
603
|
})
|
|
410
604
|
);
|
|
411
605
|
}
|
|
412
|
-
if (message.isAgentStateMessage() && !message.active && !executedCoAgentStateRenders.includes(message.id) && onCoAgentStateRender) {
|
|
413
|
-
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
414
|
-
break;
|
|
415
|
-
}
|
|
416
|
-
yield onCoAgentStateRender({
|
|
417
|
-
name: message.agentName,
|
|
418
|
-
nodeName: message.nodeName,
|
|
419
|
-
state: message.state
|
|
420
|
-
});
|
|
421
|
-
executedCoAgentStateRenders.push(message.id);
|
|
422
|
-
}
|
|
423
606
|
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
if (
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
nodeName: lastAgentStateMessage.nodeName
|
|
442
|
-
});
|
|
443
|
-
} else {
|
|
444
|
-
setAgentSession(null);
|
|
607
|
+
setMessages(finalMessages);
|
|
608
|
+
}
|
|
609
|
+
if (
|
|
610
|
+
// if followUp is not explicitly false
|
|
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)
|
|
615
|
+
) {
|
|
616
|
+
yield new Promise((resolve) => setTimeout(resolve, 10));
|
|
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
|
+
);
|
|
445
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
|
+
});
|
|
446
635
|
}
|
|
636
|
+
return newMessages.filter((message) => repairedMessageIds.includes(message.id));
|
|
637
|
+
} else {
|
|
638
|
+
return newMessages.slice();
|
|
447
639
|
}
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
}
|
|
640
|
+
} finally {
|
|
641
|
+
setIsLoading(false);
|
|
451
642
|
}
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
643
|
+
}),
|
|
644
|
+
[
|
|
645
|
+
messages,
|
|
646
|
+
setMessages,
|
|
647
|
+
makeSystemMessageCallback,
|
|
648
|
+
copilotConfig,
|
|
649
|
+
setIsLoading,
|
|
650
|
+
initialMessages,
|
|
651
|
+
isLoading,
|
|
652
|
+
actions,
|
|
653
|
+
onFunctionCall,
|
|
654
|
+
onCoAgentStateRender,
|
|
655
|
+
setCoagentStatesWithRef,
|
|
656
|
+
coagentStatesRef,
|
|
657
|
+
agentSession,
|
|
658
|
+
setAgentSession
|
|
659
|
+
]
|
|
660
|
+
);
|
|
467
661
|
runChatCompletionRef.current = runChatCompletion;
|
|
468
|
-
const runChatCompletionAndHandleFunctionCall = (
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
662
|
+
const runChatCompletionAndHandleFunctionCall = useAsyncCallback(
|
|
663
|
+
(messages2) => __async(this, null, function* () {
|
|
664
|
+
yield runChatCompletionRef.current(messages2);
|
|
665
|
+
}),
|
|
666
|
+
[messages]
|
|
667
|
+
);
|
|
668
|
+
const append = useAsyncCallback(
|
|
669
|
+
(message) => __async(this, null, function* () {
|
|
670
|
+
if (isLoading) {
|
|
671
|
+
return;
|
|
672
|
+
}
|
|
673
|
+
const newMessages = [...messages, message];
|
|
674
|
+
setMessages(newMessages);
|
|
675
|
+
return runChatCompletionAndHandleFunctionCall(newMessages);
|
|
676
|
+
}),
|
|
677
|
+
[isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]
|
|
678
|
+
);
|
|
679
|
+
const reload = useAsyncCallback(() => __async(this, null, function* () {
|
|
480
680
|
if (isLoading || messages.length === 0) {
|
|
481
681
|
return;
|
|
482
682
|
}
|
|
@@ -487,7 +687,7 @@ function useChat(options) {
|
|
|
487
687
|
}
|
|
488
688
|
setMessages(newMessages);
|
|
489
689
|
return runChatCompletionAndHandleFunctionCall(newMessages);
|
|
490
|
-
});
|
|
690
|
+
}), [isLoading, messages, setMessages, runChatCompletionAndHandleFunctionCall]);
|
|
491
691
|
const stop = () => {
|
|
492
692
|
var _a;
|
|
493
693
|
(_a = chatAbortControllerRef.current) == null ? void 0 : _a.abort("Stop was called");
|
|
@@ -495,15 +695,33 @@ function useChat(options) {
|
|
|
495
695
|
return {
|
|
496
696
|
append,
|
|
497
697
|
reload,
|
|
498
|
-
stop
|
|
698
|
+
stop,
|
|
699
|
+
runChatCompletion: () => runChatCompletionRef.current(messages)
|
|
499
700
|
};
|
|
500
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
|
+
}
|
|
501
719
|
|
|
502
720
|
// src/components/copilot-provider/copilotkit.tsx
|
|
503
|
-
var
|
|
721
|
+
var import_react7 = require("react");
|
|
504
722
|
var import_react_dom = require("react-dom");
|
|
505
|
-
var
|
|
506
|
-
var
|
|
723
|
+
var import_shared3 = require("@copilotkit/shared");
|
|
724
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
507
725
|
var defaultCopilotContextCategories = ["global"];
|
|
508
726
|
|
|
509
727
|
// src/hooks/use-copilot-chat.ts
|
|
@@ -521,8 +739,8 @@ function useCopilotChat(_a = {}) {
|
|
|
521
739
|
setIsLoading,
|
|
522
740
|
chatInstructions,
|
|
523
741
|
actions,
|
|
524
|
-
|
|
525
|
-
|
|
742
|
+
coagentStatesRef,
|
|
743
|
+
setCoagentStatesWithRef,
|
|
526
744
|
coAgentStateRenders,
|
|
527
745
|
agentSession,
|
|
528
746
|
setAgentSession,
|
|
@@ -535,21 +753,21 @@ function useCopilotChat(_a = {}) {
|
|
|
535
753
|
} = useCopilotContext();
|
|
536
754
|
const { messages, setMessages } = useCopilotMessagesContext();
|
|
537
755
|
const latestGetContextString = useUpdatedRef(getContextString);
|
|
538
|
-
const deleteMessage = (0,
|
|
756
|
+
const deleteMessage = (0, import_react8.useCallback)(
|
|
539
757
|
(messageId) => {
|
|
540
758
|
setMessages((prev) => prev.filter((message) => message.id !== messageId));
|
|
541
759
|
},
|
|
542
760
|
[setMessages]
|
|
543
761
|
);
|
|
544
|
-
const makeSystemMessageCallback = (0,
|
|
762
|
+
const makeSystemMessageCallback = (0, import_react8.useCallback)(() => {
|
|
545
763
|
const systemMessageMaker = makeSystemMessage || defaultSystemMessage;
|
|
546
764
|
const contextString = latestGetContextString.current([], defaultCopilotContextCategories);
|
|
547
|
-
return new
|
|
765
|
+
return new import_runtime_client_gql4.TextMessage({
|
|
548
766
|
content: systemMessageMaker(contextString, chatInstructions),
|
|
549
|
-
role:
|
|
767
|
+
role: import_runtime_client_gql4.Role.System
|
|
550
768
|
});
|
|
551
769
|
}, [getContextString, makeSystemMessage, chatInstructions]);
|
|
552
|
-
const onCoAgentStateRender = (
|
|
770
|
+
const onCoAgentStateRender = useAsyncCallback(
|
|
553
771
|
(args) => __async(this, null, function* () {
|
|
554
772
|
var _a2;
|
|
555
773
|
const { name, nodeName, state } = args;
|
|
@@ -567,7 +785,7 @@ function useCopilotChat(_a = {}) {
|
|
|
567
785
|
}),
|
|
568
786
|
[coAgentStateRenders]
|
|
569
787
|
);
|
|
570
|
-
const { append, reload, stop } = useChat(__spreadProps(__spreadValues({}, options), {
|
|
788
|
+
const { append, reload, stop, runChatCompletion } = useChat(__spreadProps(__spreadValues({}, options), {
|
|
571
789
|
actions: Object.values(actions),
|
|
572
790
|
copilotConfig: copilotApiConfig,
|
|
573
791
|
initialMessages: options.initialMessages || [],
|
|
@@ -578,8 +796,8 @@ function useCopilotChat(_a = {}) {
|
|
|
578
796
|
makeSystemMessageCallback,
|
|
579
797
|
isLoading,
|
|
580
798
|
setIsLoading,
|
|
581
|
-
|
|
582
|
-
|
|
799
|
+
coagentStatesRef,
|
|
800
|
+
setCoagentStatesWithRef,
|
|
583
801
|
agentSession,
|
|
584
802
|
setAgentSession,
|
|
585
803
|
threadId,
|
|
@@ -589,40 +807,44 @@ function useCopilotChat(_a = {}) {
|
|
|
589
807
|
chatAbortControllerRef
|
|
590
808
|
}));
|
|
591
809
|
const latestAppend = useUpdatedRef(append);
|
|
592
|
-
const latestAppendFunc = (
|
|
593
|
-
(message) => {
|
|
594
|
-
return latestAppend.current(message);
|
|
595
|
-
},
|
|
810
|
+
const latestAppendFunc = useAsyncCallback(
|
|
811
|
+
(message) => __async(this, null, function* () {
|
|
812
|
+
return yield latestAppend.current(message);
|
|
813
|
+
}),
|
|
596
814
|
[latestAppend]
|
|
597
815
|
);
|
|
598
816
|
const latestReload = useUpdatedRef(reload);
|
|
599
|
-
const latestReloadFunc = (
|
|
600
|
-
return latestReload.current();
|
|
601
|
-
}, [latestReload]);
|
|
817
|
+
const latestReloadFunc = useAsyncCallback(() => __async(this, null, function* () {
|
|
818
|
+
return yield latestReload.current();
|
|
819
|
+
}), [latestReload]);
|
|
602
820
|
const latestStop = useUpdatedRef(stop);
|
|
603
|
-
const latestStopFunc = (0,
|
|
821
|
+
const latestStopFunc = (0, import_react8.useCallback)(() => {
|
|
604
822
|
return latestStop.current();
|
|
605
823
|
}, [latestStop]);
|
|
606
824
|
const latestDelete = useUpdatedRef(deleteMessage);
|
|
607
|
-
const latestDeleteFunc = (0,
|
|
825
|
+
const latestDeleteFunc = (0, import_react8.useCallback)(
|
|
608
826
|
(messageId) => {
|
|
609
827
|
return latestDelete.current(messageId);
|
|
610
828
|
},
|
|
611
829
|
[latestDelete]
|
|
612
830
|
);
|
|
613
831
|
const latestSetMessages = useUpdatedRef(setMessages);
|
|
614
|
-
const latestSetMessagesFunc = (0,
|
|
832
|
+
const latestSetMessagesFunc = (0, import_react8.useCallback)(
|
|
615
833
|
(messages2) => {
|
|
616
834
|
return latestSetMessages.current(messages2);
|
|
617
835
|
},
|
|
618
836
|
[latestSetMessages]
|
|
619
837
|
);
|
|
620
|
-
const
|
|
838
|
+
const latestRunChatCompletion = useUpdatedRef(runChatCompletion);
|
|
839
|
+
const latestRunChatCompletionFunc = useAsyncCallback(() => __async(this, null, function* () {
|
|
840
|
+
return yield latestRunChatCompletion.current();
|
|
841
|
+
}), [latestRunChatCompletion]);
|
|
842
|
+
const reset = (0, import_react8.useCallback)(() => {
|
|
621
843
|
latestStopFunc();
|
|
622
844
|
setMessages([]);
|
|
623
845
|
setThreadId(null);
|
|
624
846
|
setRunId(null);
|
|
625
|
-
|
|
847
|
+
setCoagentStatesWithRef({});
|
|
626
848
|
let initialAgentSession = null;
|
|
627
849
|
if (agentLock) {
|
|
628
850
|
initialAgentSession = {
|
|
@@ -630,9 +852,16 @@ function useCopilotChat(_a = {}) {
|
|
|
630
852
|
};
|
|
631
853
|
}
|
|
632
854
|
setAgentSession(initialAgentSession);
|
|
633
|
-
}, [
|
|
855
|
+
}, [
|
|
856
|
+
latestStopFunc,
|
|
857
|
+
setMessages,
|
|
858
|
+
setThreadId,
|
|
859
|
+
setCoagentStatesWithRef,
|
|
860
|
+
setAgentSession,
|
|
861
|
+
agentLock
|
|
862
|
+
]);
|
|
634
863
|
const latestReset = useUpdatedRef(reset);
|
|
635
|
-
const latestResetFunc = (0,
|
|
864
|
+
const latestResetFunc = (0, import_react8.useCallback)(() => {
|
|
636
865
|
return latestReset.current();
|
|
637
866
|
}, [latestReset]);
|
|
638
867
|
return {
|
|
@@ -643,12 +872,13 @@ function useCopilotChat(_a = {}) {
|
|
|
643
872
|
stopGeneration: latestStopFunc,
|
|
644
873
|
reset: latestResetFunc,
|
|
645
874
|
deleteMessage: latestDeleteFunc,
|
|
875
|
+
runChatCompletion: latestRunChatCompletionFunc,
|
|
646
876
|
isLoading
|
|
647
877
|
};
|
|
648
878
|
}
|
|
649
879
|
function useUpdatedRef(value) {
|
|
650
|
-
const ref = (0,
|
|
651
|
-
(0,
|
|
880
|
+
const ref = (0, import_react8.useRef)(value);
|
|
881
|
+
(0, import_react8.useEffect)(() => {
|
|
652
882
|
ref.current = value;
|
|
653
883
|
}, [value]);
|
|
654
884
|
return ref;
|
|
@@ -689,8 +919,8 @@ function useCoAgent(options) {
|
|
|
689
919
|
const generalContext = useCopilotContext();
|
|
690
920
|
const messagesContext = useCopilotMessagesContext();
|
|
691
921
|
const context = __spreadValues(__spreadValues({}, generalContext), messagesContext);
|
|
692
|
-
const { coagentStates,
|
|
693
|
-
const { appendMessage } = useCopilotChat();
|
|
922
|
+
const { coagentStates, coagentStatesRef, setCoagentStatesWithRef } = context;
|
|
923
|
+
const { appendMessage, runChatCompletion } = useCopilotChat();
|
|
694
924
|
const getCoagentState = (coagentStates2, name2) => {
|
|
695
925
|
if (coagentStates2[name2]) {
|
|
696
926
|
return coagentStates2[name2];
|
|
@@ -707,19 +937,17 @@ function useCoAgent(options) {
|
|
|
707
937
|
}
|
|
708
938
|
};
|
|
709
939
|
const setState = (newState) => {
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
});
|
|
718
|
-
});
|
|
940
|
+
let coagentState2 = getCoagentState(coagentStatesRef.current || {}, name);
|
|
941
|
+
const updatedState = typeof newState === "function" ? newState(coagentState2.state) : newState;
|
|
942
|
+
setCoagentStatesWithRef(__spreadProps(__spreadValues({}, coagentStatesRef.current), {
|
|
943
|
+
[name]: __spreadProps(__spreadValues({}, coagentState2), {
|
|
944
|
+
state: updatedState
|
|
945
|
+
})
|
|
946
|
+
}));
|
|
719
947
|
};
|
|
720
948
|
const coagentState = getCoagentState(coagentStates, name);
|
|
721
949
|
const state = isExternalStateManagement(options) ? options.state : coagentState.state;
|
|
722
|
-
(0,
|
|
950
|
+
(0, import_react9.useEffect)(() => {
|
|
723
951
|
if (isExternalStateManagement(options)) {
|
|
724
952
|
setState(options.state);
|
|
725
953
|
} else if (coagentStates[name] === void 0) {
|
|
@@ -728,23 +956,24 @@ function useCoAgent(options) {
|
|
|
728
956
|
}, [
|
|
729
957
|
isExternalStateManagement(options) ? JSON.stringify(options.state) : void 0,
|
|
730
958
|
// reset initialstate on reset
|
|
731
|
-
coagentStates === void 0
|
|
959
|
+
coagentStates[name] === void 0
|
|
732
960
|
]);
|
|
961
|
+
const runAgentCallback = useAsyncCallback(
|
|
962
|
+
(hint) => __async(this, null, function* () {
|
|
963
|
+
yield runAgent(name, context, appendMessage, runChatCompletion, hint);
|
|
964
|
+
}),
|
|
965
|
+
[name, context, appendMessage, runChatCompletion]
|
|
966
|
+
);
|
|
733
967
|
return {
|
|
734
968
|
name,
|
|
735
969
|
nodeName: coagentState.nodeName,
|
|
736
|
-
|
|
737
|
-
setState,
|
|
970
|
+
threadId: coagentState.threadId,
|
|
738
971
|
running: coagentState.running,
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
stop: () =>
|
|
743
|
-
|
|
744
|
-
},
|
|
745
|
-
run: (hint) => {
|
|
746
|
-
return runAgent(name, context, appendMessage, hint);
|
|
747
|
-
}
|
|
972
|
+
state: coagentState.state,
|
|
973
|
+
setState: isExternalStateManagement(options) ? options.setState : setState,
|
|
974
|
+
start: () => startAgent(name, context),
|
|
975
|
+
stop: () => stopAgent(name, context),
|
|
976
|
+
run: runAgentCallback
|
|
748
977
|
};
|
|
749
978
|
}
|
|
750
979
|
function startAgent(name, context) {
|
|
@@ -772,7 +1001,7 @@ function stopAgent(name, context) {
|
|
|
772
1001
|
console.warn(`No agent session found for ${name}`);
|
|
773
1002
|
}
|
|
774
1003
|
}
|
|
775
|
-
function runAgent(name, context, appendMessage, hint) {
|
|
1004
|
+
function runAgent(name, context, appendMessage, runChatCompletion, hint) {
|
|
776
1005
|
return __async(this, null, function* () {
|
|
777
1006
|
var _a, _b;
|
|
778
1007
|
const { agentSession, setAgentSession } = context;
|
|
@@ -788,12 +1017,16 @@ function runAgent(name, context, appendMessage, hint) {
|
|
|
788
1017
|
previousState = message.state;
|
|
789
1018
|
}
|
|
790
1019
|
}
|
|
791
|
-
let state = ((_b = (_a = context.
|
|
1020
|
+
let state = ((_b = (_a = context.coagentStatesRef.current) == null ? void 0 : _a[name]) == null ? void 0 : _b.state) || {};
|
|
792
1021
|
if (hint) {
|
|
793
1022
|
const hintMessage = hint({ previousState, currentState: state });
|
|
794
1023
|
if (hintMessage) {
|
|
795
1024
|
yield appendMessage(hintMessage);
|
|
1025
|
+
} else {
|
|
1026
|
+
yield runChatCompletion();
|
|
796
1027
|
}
|
|
1028
|
+
} else {
|
|
1029
|
+
yield runChatCompletion();
|
|
797
1030
|
}
|
|
798
1031
|
});
|
|
799
1032
|
}
|