@copilotkit/react-core 1.2.2-feat-runtime-remote-actions.1 → 1.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 +7 -15
- package/dist/{chunk-24BNTWFY.mjs → chunk-NT4LQOL4.mjs} +53 -4
- package/dist/chunk-NT4LQOL4.mjs.map +1 -0
- package/dist/hooks/index.js +48 -3
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +10 -10
- package/dist/hooks/use-coagent.d.ts +3 -13
- package/dist/hooks/use-coagent.js +440 -5
- package/dist/hooks/use-coagent.js.map +1 -1
- package/dist/hooks/use-coagent.mjs +8 -1
- package/dist/index.js +66 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -10
- package/package.json +5 -5
- package/src/hooks/use-coagent.ts +54 -5
- package/dist/chunk-24BNTWFY.mjs.map +0 -1
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
import { CopilotContextParams } from '../context/copilot-context.js';
|
|
2
|
-
import '@copilotkit/shared';
|
|
3
|
-
import '@copilotkit/runtime-client-gql';
|
|
4
|
-
import '../types/frontend-action.js';
|
|
5
|
-
import 'react';
|
|
6
|
-
import './use-tree.js';
|
|
7
|
-
import '../types/document-pointer.js';
|
|
8
|
-
import '../types/chat-suggestion-configuration.js';
|
|
9
|
-
import '../types/coagent-action.js';
|
|
10
|
-
import '../types/coagent-state.js';
|
|
11
|
-
|
|
12
1
|
interface WithInternalStateManagementAndInitial<T> {
|
|
13
2
|
name: string;
|
|
14
3
|
initialState: T;
|
|
@@ -30,8 +19,9 @@ interface UseCoagentReturnType<T> {
|
|
|
30
19
|
running: boolean;
|
|
31
20
|
state: T;
|
|
32
21
|
setState: (newState: T | ((prevState: T | undefined) => T)) => void;
|
|
33
|
-
start: (
|
|
34
|
-
stop: (
|
|
22
|
+
start: () => void;
|
|
23
|
+
stop: () => void;
|
|
24
|
+
run: (hint?: string) => Promise<void>;
|
|
35
25
|
}
|
|
36
26
|
declare function useCoAgent<T = any>(options: UseCoagentOptions<T>): UseCoagentReturnType<T>;
|
|
37
27
|
|
|
@@ -22,6 +22,18 @@ var __spreadValues = (a, b) => {
|
|
|
22
22
|
return a;
|
|
23
23
|
};
|
|
24
24
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
25
|
+
var __objRest = (source, exclude) => {
|
|
26
|
+
var target = {};
|
|
27
|
+
for (var prop in source)
|
|
28
|
+
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
|
|
29
|
+
target[prop] = source[prop];
|
|
30
|
+
if (source != null && __getOwnPropSymbols)
|
|
31
|
+
for (var prop of __getOwnPropSymbols(source)) {
|
|
32
|
+
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
|
|
33
|
+
target[prop] = source[prop];
|
|
34
|
+
}
|
|
35
|
+
return target;
|
|
36
|
+
};
|
|
25
37
|
var __export = (target, all) => {
|
|
26
38
|
for (var name in all)
|
|
27
39
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -70,7 +82,7 @@ __export(use_coagent_exports, {
|
|
|
70
82
|
useCoAgent: () => useCoAgent
|
|
71
83
|
});
|
|
72
84
|
module.exports = __toCommonJS(use_coagent_exports);
|
|
73
|
-
var
|
|
85
|
+
var import_react5 = require("react");
|
|
74
86
|
|
|
75
87
|
// src/context/copilot-context.tsx
|
|
76
88
|
var import_react = __toESM(require("react"));
|
|
@@ -139,7 +151,386 @@ function returnAndThrowInDebug(value) {
|
|
|
139
151
|
return value;
|
|
140
152
|
}
|
|
141
153
|
|
|
154
|
+
// src/hooks/use-copilot-chat.ts
|
|
155
|
+
var import_react4 = require("react");
|
|
156
|
+
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
157
|
+
|
|
158
|
+
// src/hooks/use-chat.ts
|
|
159
|
+
var import_react2 = require("react");
|
|
160
|
+
var import_shared = require("@copilotkit/shared");
|
|
161
|
+
var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
162
|
+
function useChat(options) {
|
|
163
|
+
const {
|
|
164
|
+
messages,
|
|
165
|
+
setMessages,
|
|
166
|
+
makeSystemMessageCallback,
|
|
167
|
+
copilotConfig,
|
|
168
|
+
setIsLoading,
|
|
169
|
+
initialMessages,
|
|
170
|
+
isLoading,
|
|
171
|
+
actions,
|
|
172
|
+
onFunctionCall,
|
|
173
|
+
onCoagentAction,
|
|
174
|
+
setCoagentStates,
|
|
175
|
+
coagentStates,
|
|
176
|
+
agentSession,
|
|
177
|
+
setAgentSession
|
|
178
|
+
} = options;
|
|
179
|
+
const abortControllerRef = (0, import_react2.useRef)();
|
|
180
|
+
const threadIdRef = (0, import_react2.useRef)(null);
|
|
181
|
+
const runIdRef = (0, import_react2.useRef)(null);
|
|
182
|
+
const publicApiKey = copilotConfig.publicApiKey;
|
|
183
|
+
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
|
|
184
|
+
const runtimeClient = new import_runtime_client_gql.CopilotRuntimeClient({
|
|
185
|
+
url: copilotConfig.chatApiEndpoint,
|
|
186
|
+
publicApiKey: copilotConfig.publicApiKey,
|
|
187
|
+
headers,
|
|
188
|
+
credentials: copilotConfig.credentials
|
|
189
|
+
});
|
|
190
|
+
const runChatCompletion = (previousMessages) => __async(this, null, function* () {
|
|
191
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
192
|
+
setIsLoading(true);
|
|
193
|
+
let newMessages = [
|
|
194
|
+
new import_runtime_client_gql.TextMessage({
|
|
195
|
+
content: "",
|
|
196
|
+
role: import_runtime_client_gql.Role.Assistant
|
|
197
|
+
})
|
|
198
|
+
];
|
|
199
|
+
const abortController = new AbortController();
|
|
200
|
+
abortControllerRef.current = abortController;
|
|
201
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
202
|
+
const systemMessage = makeSystemMessageCallback();
|
|
203
|
+
const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
|
|
204
|
+
const stream = import_runtime_client_gql.CopilotRuntimeClient.asStream(
|
|
205
|
+
runtimeClient.generateCopilotResponse({
|
|
206
|
+
data: __spreadProps(__spreadValues(__spreadProps(__spreadValues({
|
|
207
|
+
frontend: {
|
|
208
|
+
actions: actions.map((action) => ({
|
|
209
|
+
name: action.name,
|
|
210
|
+
description: action.description || "",
|
|
211
|
+
jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || []))
|
|
212
|
+
})),
|
|
213
|
+
url: window.location.href
|
|
214
|
+
},
|
|
215
|
+
threadId: threadIdRef.current,
|
|
216
|
+
runId: runIdRef.current,
|
|
217
|
+
messages: (0, import_runtime_client_gql.convertMessagesToGqlInput)((0, import_runtime_client_gql.filterAgentStateMessages)(messagesWithContext))
|
|
218
|
+
}, copilotConfig.cloud ? {
|
|
219
|
+
cloud: __spreadValues({}, ((_c = (_b = (_a = copilotConfig.cloud.guardrails) == null ? void 0 : _a.input) == null ? void 0 : _b.restrictToTopic) == null ? void 0 : _c.enabled) ? {
|
|
220
|
+
guardrails: {
|
|
221
|
+
inputValidationRules: {
|
|
222
|
+
allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
|
|
223
|
+
denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
} : {})
|
|
227
|
+
} : {}), {
|
|
228
|
+
metadata: {
|
|
229
|
+
requestType: import_runtime_client_gql.CopilotRequestType.Chat
|
|
230
|
+
}
|
|
231
|
+
}), agentSession ? {
|
|
232
|
+
agentSession
|
|
233
|
+
} : {}), {
|
|
234
|
+
agentStates: Object.values(coagentStates).map((state) => ({
|
|
235
|
+
agentName: state.name,
|
|
236
|
+
state: JSON.stringify(state.state)
|
|
237
|
+
}))
|
|
238
|
+
}),
|
|
239
|
+
properties: copilotConfig.properties,
|
|
240
|
+
signal: (_d = abortControllerRef.current) == null ? void 0 : _d.signal
|
|
241
|
+
})
|
|
242
|
+
);
|
|
243
|
+
const guardrailsEnabled = ((_g = (_f = (_e = copilotConfig.cloud) == null ? void 0 : _e.guardrails) == null ? void 0 : _f.input) == null ? void 0 : _g.restrictToTopic.enabled) || false;
|
|
244
|
+
const reader = stream.getReader();
|
|
245
|
+
let actionResults = {};
|
|
246
|
+
let executedCoagentActions = [];
|
|
247
|
+
try {
|
|
248
|
+
while (true) {
|
|
249
|
+
const { done, value } = yield reader.read();
|
|
250
|
+
if (done) {
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
if (!(value == null ? void 0 : value.generateCopilotResponse)) {
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
threadIdRef.current = value.generateCopilotResponse.threadId || null;
|
|
257
|
+
runIdRef.current = value.generateCopilotResponse.runId || null;
|
|
258
|
+
const messages2 = (0, import_runtime_client_gql.convertGqlOutputToMessages)(
|
|
259
|
+
(0, import_runtime_client_gql.filterAdjacentAgentStateMessages)(value.generateCopilotResponse.messages)
|
|
260
|
+
);
|
|
261
|
+
if (messages2.length === 0) {
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
newMessages = [];
|
|
265
|
+
if (((_h = value.generateCopilotResponse.status) == null ? void 0 : _h.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
|
|
266
|
+
newMessages = [
|
|
267
|
+
new import_runtime_client_gql.TextMessage({
|
|
268
|
+
role: import_runtime_client_gql.MessageRole.Assistant,
|
|
269
|
+
content: ((_i = value.generateCopilotResponse.status.details) == null ? void 0 : _i.guardrailsReason) || ""
|
|
270
|
+
})
|
|
271
|
+
];
|
|
272
|
+
} else {
|
|
273
|
+
for (const message of messages2) {
|
|
274
|
+
newMessages.push(message);
|
|
275
|
+
if (message instanceof import_runtime_client_gql.ActionExecutionMessage && message.status.code !== import_runtime_client_gql.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
|
|
276
|
+
if (!(message.id in actionResults)) {
|
|
277
|
+
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
const result = yield onFunctionCall({
|
|
281
|
+
messages: previousMessages,
|
|
282
|
+
name: message.name,
|
|
283
|
+
args: message.arguments
|
|
284
|
+
});
|
|
285
|
+
actionResults[message.id] = result;
|
|
286
|
+
}
|
|
287
|
+
newMessages.push(
|
|
288
|
+
new import_runtime_client_gql.ResultMessage({
|
|
289
|
+
result: import_runtime_client_gql.ResultMessage.encodeResult(actionResults[message.id]),
|
|
290
|
+
actionExecutionId: message.id,
|
|
291
|
+
actionName: message.name
|
|
292
|
+
})
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
if (message instanceof import_runtime_client_gql.AgentStateMessage && !message.active && !executedCoagentActions.includes(message.id) && onCoagentAction) {
|
|
296
|
+
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
yield onCoagentAction({
|
|
300
|
+
name: message.agentName,
|
|
301
|
+
nodeName: message.nodeName,
|
|
302
|
+
state: message.state
|
|
303
|
+
});
|
|
304
|
+
executedCoagentActions.push(message.id);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
const lastAgentStateMessage = [...messages2].reverse().find((message) => message instanceof import_runtime_client_gql.AgentStateMessage);
|
|
308
|
+
if (lastAgentStateMessage) {
|
|
309
|
+
if (lastAgentStateMessage.running) {
|
|
310
|
+
setCoagentStates((prevAgentStates) => __spreadProps(__spreadValues({}, prevAgentStates), {
|
|
311
|
+
[lastAgentStateMessage.agentName]: {
|
|
312
|
+
name: lastAgentStateMessage.agentName,
|
|
313
|
+
state: lastAgentStateMessage.state,
|
|
314
|
+
running: lastAgentStateMessage.running,
|
|
315
|
+
active: lastAgentStateMessage.active,
|
|
316
|
+
threadId: lastAgentStateMessage.threadId,
|
|
317
|
+
nodeName: lastAgentStateMessage.nodeName,
|
|
318
|
+
runId: lastAgentStateMessage.runId
|
|
319
|
+
}
|
|
320
|
+
}));
|
|
321
|
+
setAgentSession({
|
|
322
|
+
threadId: lastAgentStateMessage.threadId,
|
|
323
|
+
agentName: lastAgentStateMessage.agentName,
|
|
324
|
+
nodeName: lastAgentStateMessage.nodeName
|
|
325
|
+
});
|
|
326
|
+
} else {
|
|
327
|
+
setAgentSession(null);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
if (newMessages.length > 0) {
|
|
332
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (
|
|
336
|
+
// if we have client side results
|
|
337
|
+
Object.values(actionResults).length || // or the last message we received is a result
|
|
338
|
+
newMessages.length && newMessages[newMessages.length - 1] instanceof import_runtime_client_gql.ResultMessage
|
|
339
|
+
) {
|
|
340
|
+
yield new Promise((resolve) => setTimeout(resolve, 10));
|
|
341
|
+
return yield runChatCompletion([...previousMessages, ...newMessages]);
|
|
342
|
+
} else {
|
|
343
|
+
return newMessages.slice();
|
|
344
|
+
}
|
|
345
|
+
} finally {
|
|
346
|
+
setIsLoading(false);
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
const runChatCompletionAndHandleFunctionCall = (messages2) => __async(this, null, function* () {
|
|
350
|
+
yield runChatCompletion(messages2);
|
|
351
|
+
});
|
|
352
|
+
const append = (message) => __async(this, null, function* () {
|
|
353
|
+
if (isLoading) {
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
const newMessages = [...messages, message];
|
|
357
|
+
setMessages(newMessages);
|
|
358
|
+
return runChatCompletionAndHandleFunctionCall(newMessages);
|
|
359
|
+
});
|
|
360
|
+
const reload = () => __async(this, null, function* () {
|
|
361
|
+
if (isLoading || messages.length === 0) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
let newMessages = [...messages];
|
|
365
|
+
const lastMessage = messages[messages.length - 1];
|
|
366
|
+
if (lastMessage instanceof import_runtime_client_gql.TextMessage && lastMessage.role === "assistant") {
|
|
367
|
+
newMessages = newMessages.slice(0, -1);
|
|
368
|
+
}
|
|
369
|
+
setMessages(newMessages);
|
|
370
|
+
return runChatCompletionAndHandleFunctionCall(newMessages);
|
|
371
|
+
});
|
|
372
|
+
const stop = () => {
|
|
373
|
+
var _a;
|
|
374
|
+
(_a = abortControllerRef.current) == null ? void 0 : _a.abort();
|
|
375
|
+
};
|
|
376
|
+
return {
|
|
377
|
+
append,
|
|
378
|
+
reload,
|
|
379
|
+
stop
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// src/components/copilot-provider/copilotkit.tsx
|
|
384
|
+
var import_react3 = require("react");
|
|
385
|
+
var import_react_dom = require("react-dom");
|
|
386
|
+
var import_shared2 = require("@copilotkit/shared");
|
|
387
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
388
|
+
var defaultCopilotContextCategories = ["global"];
|
|
389
|
+
|
|
390
|
+
// src/hooks/use-copilot-chat.ts
|
|
391
|
+
function useCopilotChat(_a = {}) {
|
|
392
|
+
var _b = _a, {
|
|
393
|
+
makeSystemMessage
|
|
394
|
+
} = _b, options = __objRest(_b, [
|
|
395
|
+
"makeSystemMessage"
|
|
396
|
+
]);
|
|
397
|
+
const {
|
|
398
|
+
getContextString,
|
|
399
|
+
getFunctionCallHandler,
|
|
400
|
+
copilotApiConfig,
|
|
401
|
+
messages,
|
|
402
|
+
setMessages,
|
|
403
|
+
isLoading,
|
|
404
|
+
setIsLoading,
|
|
405
|
+
chatInstructions,
|
|
406
|
+
actions,
|
|
407
|
+
coagentStates,
|
|
408
|
+
setCoagentStates,
|
|
409
|
+
coagentActions,
|
|
410
|
+
agentSession,
|
|
411
|
+
setAgentSession
|
|
412
|
+
} = useCopilotContext();
|
|
413
|
+
const latestGetContextString = useUpdatedRef(getContextString);
|
|
414
|
+
const deleteMessage = (0, import_react4.useCallback)(
|
|
415
|
+
(messageId) => {
|
|
416
|
+
setMessages((prev) => prev.filter((message) => message.id !== messageId));
|
|
417
|
+
},
|
|
418
|
+
[setMessages]
|
|
419
|
+
);
|
|
420
|
+
const makeSystemMessageCallback = (0, import_react4.useCallback)(() => {
|
|
421
|
+
const systemMessageMaker = makeSystemMessage || defaultSystemMessage;
|
|
422
|
+
const contextString = latestGetContextString.current([], defaultCopilotContextCategories);
|
|
423
|
+
return new import_runtime_client_gql2.TextMessage({
|
|
424
|
+
content: systemMessageMaker(contextString, chatInstructions),
|
|
425
|
+
role: import_runtime_client_gql2.Role.System
|
|
426
|
+
});
|
|
427
|
+
}, [getContextString, makeSystemMessage, chatInstructions]);
|
|
428
|
+
const onCoagentAction = (0, import_react4.useCallback)(
|
|
429
|
+
(args) => __async(this, null, function* () {
|
|
430
|
+
var _a2;
|
|
431
|
+
const { name, nodeName, state } = args;
|
|
432
|
+
let action = Object.values(coagentActions).find(
|
|
433
|
+
(action2) => action2.name === name && action2.nodeName === nodeName
|
|
434
|
+
);
|
|
435
|
+
if (!action) {
|
|
436
|
+
action = Object.values(coagentActions).find(
|
|
437
|
+
(action2) => action2.name === name && !action2.nodeName
|
|
438
|
+
);
|
|
439
|
+
}
|
|
440
|
+
if (action) {
|
|
441
|
+
yield (_a2 = action.handler) == null ? void 0 : _a2.call(action, { state, nodeName });
|
|
442
|
+
}
|
|
443
|
+
}),
|
|
444
|
+
[coagentActions]
|
|
445
|
+
);
|
|
446
|
+
const { append, reload, stop } = useChat(__spreadProps(__spreadValues({}, options), {
|
|
447
|
+
actions: Object.values(actions),
|
|
448
|
+
copilotConfig: copilotApiConfig,
|
|
449
|
+
initialMessages: options.initialMessages || [],
|
|
450
|
+
onFunctionCall: getFunctionCallHandler(),
|
|
451
|
+
onCoagentAction,
|
|
452
|
+
messages,
|
|
453
|
+
setMessages,
|
|
454
|
+
makeSystemMessageCallback,
|
|
455
|
+
isLoading,
|
|
456
|
+
setIsLoading,
|
|
457
|
+
coagentStates,
|
|
458
|
+
setCoagentStates,
|
|
459
|
+
agentSession,
|
|
460
|
+
setAgentSession
|
|
461
|
+
}));
|
|
462
|
+
const latestAppend = useUpdatedRef(append);
|
|
463
|
+
const latestAppendFunc = (0, import_react4.useCallback)(
|
|
464
|
+
(message) => {
|
|
465
|
+
return latestAppend.current(message);
|
|
466
|
+
},
|
|
467
|
+
[latestAppend]
|
|
468
|
+
);
|
|
469
|
+
const latestReload = useUpdatedRef(reload);
|
|
470
|
+
const latestReloadFunc = (0, import_react4.useCallback)(() => {
|
|
471
|
+
return latestReload.current();
|
|
472
|
+
}, [latestReload]);
|
|
473
|
+
const latestStop = useUpdatedRef(stop);
|
|
474
|
+
const latestStopFunc = (0, import_react4.useCallback)(() => {
|
|
475
|
+
return latestStop.current();
|
|
476
|
+
}, [latestStop]);
|
|
477
|
+
const latestDelete = useUpdatedRef(deleteMessage);
|
|
478
|
+
const latestDeleteFunc = (0, import_react4.useCallback)(
|
|
479
|
+
(messageId) => {
|
|
480
|
+
return latestDelete.current(messageId);
|
|
481
|
+
},
|
|
482
|
+
[latestDelete]
|
|
483
|
+
);
|
|
484
|
+
const latestSetMessages = useUpdatedRef(setMessages);
|
|
485
|
+
const latestSetMessagesFunc = (0, import_react4.useCallback)(
|
|
486
|
+
(messages2) => {
|
|
487
|
+
return latestSetMessages.current(messages2);
|
|
488
|
+
},
|
|
489
|
+
[latestSetMessages]
|
|
490
|
+
);
|
|
491
|
+
return {
|
|
492
|
+
visibleMessages: messages,
|
|
493
|
+
appendMessage: latestAppendFunc,
|
|
494
|
+
setMessages: latestSetMessagesFunc,
|
|
495
|
+
reloadMessages: latestReloadFunc,
|
|
496
|
+
stopGeneration: latestStopFunc,
|
|
497
|
+
deleteMessage: latestDeleteFunc,
|
|
498
|
+
isLoading
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
function useUpdatedRef(value) {
|
|
502
|
+
const ref = (0, import_react4.useRef)(value);
|
|
503
|
+
(0, import_react4.useEffect)(() => {
|
|
504
|
+
ref.current = value;
|
|
505
|
+
}, [value]);
|
|
506
|
+
return ref;
|
|
507
|
+
}
|
|
508
|
+
function defaultSystemMessage(contextString, additionalInstructions) {
|
|
509
|
+
return `
|
|
510
|
+
Please act as an efficient, competent, conscientious, and industrious professional assistant.
|
|
511
|
+
|
|
512
|
+
Help the user achieve their goals, and you do so in a way that is as efficient as possible, without unnecessary fluff, but also without sacrificing professionalism.
|
|
513
|
+
Always be polite and respectful, and prefer brevity over verbosity.
|
|
514
|
+
|
|
515
|
+
The user has provided you with the following context:
|
|
516
|
+
\`\`\`
|
|
517
|
+
${contextString}
|
|
518
|
+
\`\`\`
|
|
519
|
+
|
|
520
|
+
They have also provided you with functions you can call to initiate actions on their behalf, or functions you can call to receive more information.
|
|
521
|
+
|
|
522
|
+
Please assist them as best you can.
|
|
523
|
+
|
|
524
|
+
You can ask them for clarifying questions if needed, but don't be annoying about it. If you can reasonably 'fill in the blanks' yourself, do so.
|
|
525
|
+
|
|
526
|
+
If you would like to call a function, call it without saying anything else.
|
|
527
|
+
` + (additionalInstructions ? `
|
|
528
|
+
|
|
529
|
+
${additionalInstructions}` : "");
|
|
530
|
+
}
|
|
531
|
+
|
|
142
532
|
// src/hooks/use-coagent.ts
|
|
533
|
+
var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
|
|
143
534
|
function useCoAgent(options) {
|
|
144
535
|
const isExternalStateManagement = (options2) => {
|
|
145
536
|
return "state" in options2 && "setState" in options2;
|
|
@@ -148,7 +539,9 @@ function useCoAgent(options) {
|
|
|
148
539
|
const isInternalStateManagementWithInitial = (options2) => {
|
|
149
540
|
return "initialState" in options2;
|
|
150
541
|
};
|
|
151
|
-
const
|
|
542
|
+
const context = useCopilotContext();
|
|
543
|
+
const { coagentStates, setCoagentStates } = context;
|
|
544
|
+
const { appendMessage } = useCopilotChat();
|
|
152
545
|
const getCoagentState = (coagentStates2, name2) => {
|
|
153
546
|
if (coagentStates2[name2]) {
|
|
154
547
|
return coagentStates2[name2];
|
|
@@ -177,7 +570,7 @@ function useCoAgent(options) {
|
|
|
177
570
|
};
|
|
178
571
|
const coagentState = getCoagentState(coagentStates, name);
|
|
179
572
|
const state = isExternalStateManagement(options) ? options.state : coagentState.state;
|
|
180
|
-
(0,
|
|
573
|
+
(0, import_react5.useEffect)(() => {
|
|
181
574
|
if (isExternalStateManagement(options)) {
|
|
182
575
|
setState(options.state);
|
|
183
576
|
} else if (coagentStates[name] === void 0) {
|
|
@@ -190,11 +583,14 @@ function useCoAgent(options) {
|
|
|
190
583
|
state,
|
|
191
584
|
setState,
|
|
192
585
|
running: coagentState.running,
|
|
193
|
-
start: (
|
|
586
|
+
start: () => {
|
|
194
587
|
startAgent(name, context);
|
|
195
588
|
},
|
|
196
|
-
stop: (
|
|
589
|
+
stop: () => {
|
|
197
590
|
stopAgent(name, context);
|
|
591
|
+
},
|
|
592
|
+
run: (hint) => {
|
|
593
|
+
return runAgent(name, context, appendMessage, hint);
|
|
198
594
|
}
|
|
199
595
|
};
|
|
200
596
|
}
|
|
@@ -212,6 +608,45 @@ function stopAgent(name, context) {
|
|
|
212
608
|
console.warn(`No agent session found for ${name}`);
|
|
213
609
|
}
|
|
214
610
|
}
|
|
611
|
+
function runAgent(name, context, appendMessage, hint) {
|
|
612
|
+
return __async(this, null, function* () {
|
|
613
|
+
var _a, _b;
|
|
614
|
+
const { agentSession, setAgentSession } = context;
|
|
615
|
+
if (!agentSession || agentSession.agentName !== name) {
|
|
616
|
+
setAgentSession({
|
|
617
|
+
agentName: name
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
let previousState = null;
|
|
621
|
+
for (let i = context.messages.length - 1; i >= 0; i--) {
|
|
622
|
+
const message = context.messages[i];
|
|
623
|
+
if (message instanceof import_runtime_client_gql3.AgentStateMessage && message.agentName === name) {
|
|
624
|
+
previousState = message.state;
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
let state = ((_b = (_a = context.coagentStates) == null ? void 0 : _a[name]) == null ? void 0 : _b.state) || {};
|
|
628
|
+
let content = "The state of the agent has been updated\n";
|
|
629
|
+
if (previousState !== null) {
|
|
630
|
+
content += `The previous state was:
|
|
631
|
+
${JSON.stringify(previousState, null, 2)}
|
|
632
|
+
|
|
633
|
+
`;
|
|
634
|
+
}
|
|
635
|
+
content += `The current state is:
|
|
636
|
+
${JSON.stringify(state, null, 2)}`;
|
|
637
|
+
if (hint) {
|
|
638
|
+
content += `
|
|
639
|
+
|
|
640
|
+
${hint}`;
|
|
641
|
+
}
|
|
642
|
+
return yield appendMessage(
|
|
643
|
+
new import_runtime_client_gql3.TextMessage({
|
|
644
|
+
role: import_runtime_client_gql3.Role.System,
|
|
645
|
+
content
|
|
646
|
+
})
|
|
647
|
+
);
|
|
648
|
+
});
|
|
649
|
+
}
|
|
215
650
|
// Annotate the CommonJS export names for ESM import in node:
|
|
216
651
|
0 && (module.exports = {
|
|
217
652
|
useCoAgent
|