@copilotkit/react-core 0.37.0 → 0.38.0-beta.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/.turbo/turbo-build.log +187 -234
- package/CHANGELOG.md +12 -0
- package/dist/{chunk-HUKLBIUK.mjs → chunk-5CKW6KE7.mjs} +13 -22
- package/dist/chunk-5CKW6KE7.mjs.map +1 -0
- package/dist/{chunk-S5LWO5V3.mjs → chunk-7GPIOOXB.mjs} +2 -2
- package/dist/{chunk-LLU5URI5.mjs → chunk-DDHJCFFV.mjs} +18 -33
- package/dist/chunk-DDHJCFFV.mjs.map +1 -0
- package/dist/{chunk-SR4RW4CU.mjs → chunk-IQCLNCGL.mjs} +6 -6
- package/dist/chunk-IQCLNCGL.mjs.map +1 -0
- package/dist/{chunk-DY63PD22.mjs → chunk-K6EV2CNB.mjs} +4 -5
- package/dist/chunk-K6EV2CNB.mjs.map +1 -0
- package/dist/{chunk-NSUYO6TP.mjs → chunk-LZVHW3T3.mjs} +9 -9
- package/dist/chunk-LZVHW3T3.mjs.map +1 -0
- package/dist/{chunk-Z5FB4WBL.mjs → chunk-NY6QSOU7.mjs} +43 -40
- package/dist/chunk-NY6QSOU7.mjs.map +1 -0
- package/dist/chunk-PHMHNAYC.mjs +192 -0
- package/dist/chunk-PHMHNAYC.mjs.map +1 -0
- package/dist/{chunk-B244LK6F.mjs → chunk-QNJQKKD4.mjs} +2 -2
- package/dist/{chunk-4OIVQMEM.mjs → chunk-WU3I3G3G.mjs} +60 -42
- package/dist/chunk-WU3I3G3G.mjs.map +1 -0
- package/dist/chunk-YJLRG5U3.mjs +1 -0
- package/dist/{chunk-MNZXQ6UH.mjs → chunk-YM2JV2YQ.mjs} +2 -2
- package/dist/components/copilot-provider/copilotkit-props.d.ts +2 -2
- package/dist/components/copilot-provider/copilotkit-props.js.map +1 -1
- package/dist/components/copilot-provider/copilotkit.js +18 -33
- 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 +18 -33
- package/dist/components/copilot-provider/index.js.map +1 -1
- package/dist/components/copilot-provider/index.mjs +2 -2
- package/dist/components/index.js +18 -33
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +2 -2
- package/dist/context/copilot-context.d.ts +7 -18
- package/dist/context/copilot-context.js +3 -4
- package/dist/context/copilot-context.js.map +1 -1
- package/dist/context/copilot-context.mjs +1 -1
- package/dist/context/index.d.ts +1 -0
- package/dist/context/index.js +3 -4
- 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 +140 -229
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +9 -10
- package/dist/hooks/use-chat.d.ts +25 -51
- package/dist/hooks/use-chat.js +109 -203
- package/dist/hooks/use-chat.js.map +1 -1
- package/dist/hooks/use-chat.mjs +1 -2
- package/dist/hooks/use-copilot-action.js +10 -11
- 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 -1
- package/dist/hooks/use-copilot-chat.js +123 -212
- package/dist/hooks/use-copilot-chat.js.map +1 -1
- package/dist/hooks/use-copilot-chat.mjs +4 -5
- package/dist/hooks/use-copilot-readable.js +3 -4
- 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-actionable.js +7 -8
- package/dist/hooks/use-make-copilot-actionable.js.map +1 -1
- package/dist/hooks/use-make-copilot-actionable.mjs +2 -2
- package/dist/hooks/use-make-copilot-document-readable.js +3 -4
- 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/hooks/use-make-copilot-readable.js +3 -4
- package/dist/hooks/use-make-copilot-readable.js.map +1 -1
- package/dist/hooks/use-make-copilot-readable.mjs +2 -2
- package/dist/index.d.ts +1 -3
- package/dist/index.js +239 -497
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +12 -31
- package/dist/lib/copilot-task.d.ts +1 -0
- package/dist/lib/copilot-task.js +34 -110
- package/dist/lib/copilot-task.js.map +1 -1
- package/dist/lib/copilot-task.mjs +3 -4
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +36 -110
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/index.mjs +3 -4
- package/dist/utils/extract.d.ts +1 -0
- package/dist/utils/extract.js +53 -109
- package/dist/utils/extract.js.map +1 -1
- package/dist/utils/extract.mjs +3 -4
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.js +56 -132
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +5 -13
- package/package.json +6 -5
- package/src/components/copilot-provider/copilotkit-props.tsx +2 -2
- package/src/components/copilot-provider/copilotkit.tsx +16 -37
- package/src/context/copilot-context.tsx +11 -30
- package/src/hooks/use-chat.ts +179 -208
- package/src/hooks/use-copilot-action.ts +7 -8
- package/src/hooks/use-copilot-chat.ts +9 -23
- package/src/hooks/use-make-copilot-actionable.ts +4 -4
- package/src/index.tsx +0 -1
- package/src/lib/copilot-task.ts +45 -42
- package/src/utils/extract.ts +64 -36
- package/src/utils/index.ts +0 -7
- package/dist/chunk-2EQGN5QK.mjs +0 -137
- package/dist/chunk-2EQGN5QK.mjs.map +0 -1
- package/dist/chunk-4OIVQMEM.mjs.map +0 -1
- package/dist/chunk-7GFKOIO7.mjs +0 -1
- package/dist/chunk-B2H3NC4E.mjs +0 -204
- package/dist/chunk-B2H3NC4E.mjs.map +0 -1
- package/dist/chunk-BABVSMJR.mjs +0 -1
- package/dist/chunk-BABVSMJR.mjs.map +0 -1
- package/dist/chunk-CYDWEPFL.mjs +0 -1
- package/dist/chunk-CYDWEPFL.mjs.map +0 -1
- package/dist/chunk-DY63PD22.mjs.map +0 -1
- package/dist/chunk-FRAKUJWH.mjs +0 -1
- package/dist/chunk-FRAKUJWH.mjs.map +0 -1
- package/dist/chunk-HUKLBIUK.mjs.map +0 -1
- package/dist/chunk-LLU5URI5.mjs.map +0 -1
- package/dist/chunk-MJKBCG4U.mjs +0 -91
- package/dist/chunk-MJKBCG4U.mjs.map +0 -1
- package/dist/chunk-NSUYO6TP.mjs.map +0 -1
- package/dist/chunk-SR4RW4CU.mjs.map +0 -1
- package/dist/chunk-Z5FB4WBL.mjs.map +0 -1
- package/dist/chunk-ZFS5SQUT.mjs +0 -31
- package/dist/chunk-ZFS5SQUT.mjs.map +0 -1
- package/dist/openai-assistants/hooks/index.d.ts +0 -2
- package/dist/openai-assistants/hooks/index.js +0 -277
- package/dist/openai-assistants/hooks/index.js.map +0 -1
- package/dist/openai-assistants/hooks/index.mjs +0 -18
- package/dist/openai-assistants/hooks/index.mjs.map +0 -1
- package/dist/openai-assistants/hooks/use-assistants.d.ts +0 -17
- package/dist/openai-assistants/hooks/use-assistants.js +0 -154
- package/dist/openai-assistants/hooks/use-assistants.js.map +0 -1
- package/dist/openai-assistants/hooks/use-assistants.mjs +0 -92
- package/dist/openai-assistants/hooks/use-assistants.mjs.map +0 -1
- package/dist/openai-assistants/hooks/use-copilot-chat-v2.d.ts +0 -44
- package/dist/openai-assistants/hooks/use-copilot-chat-v2.js +0 -277
- package/dist/openai-assistants/hooks/use-copilot-chat-v2.js.map +0 -1
- package/dist/openai-assistants/hooks/use-copilot-chat-v2.mjs +0 -19
- package/dist/openai-assistants/hooks/use-copilot-chat-v2.mjs.map +0 -1
- package/dist/openai-assistants/index.d.ts +0 -3
- package/dist/openai-assistants/index.js +0 -279
- package/dist/openai-assistants/index.js.map +0 -1
- package/dist/openai-assistants/index.mjs +0 -22
- package/dist/openai-assistants/index.mjs.map +0 -1
- package/dist/openai-assistants/utils/index.d.ts +0 -1
- package/dist/openai-assistants/utils/index.js +0 -73
- package/dist/openai-assistants/utils/index.js.map +0 -1
- package/dist/openai-assistants/utils/index.mjs +0 -9
- package/dist/openai-assistants/utils/index.mjs.map +0 -1
- package/dist/openai-assistants/utils/process-message-stream.d.ts +0 -3
- package/dist/openai-assistants/utils/process-message-stream.js +0 -71
- package/dist/openai-assistants/utils/process-message-stream.js.map +0 -1
- package/dist/openai-assistants/utils/process-message-stream.mjs +0 -8
- package/dist/openai-assistants/utils/process-message-stream.mjs.map +0 -1
- package/dist/utils/fetch-chat-completion.d.ts +0 -36
- package/dist/utils/fetch-chat-completion.js +0 -141
- package/dist/utils/fetch-chat-completion.js.map +0 -1
- package/dist/utils/fetch-chat-completion.mjs +0 -12
- package/dist/utils/fetch-chat-completion.mjs.map +0 -1
- package/src/openai-assistants/hooks/index.ts +0 -9
- package/src/openai-assistants/hooks/use-assistants.ts +0 -112
- package/src/openai-assistants/hooks/use-copilot-chat-v2.ts +0 -189
- package/src/openai-assistants/index.ts +0 -2
- package/src/openai-assistants/utils/index.ts +0 -1
- package/src/openai-assistants/utils/process-message-stream.ts +0 -25
- package/src/utils/fetch-chat-completion.ts +0 -120
- /package/dist/{chunk-S5LWO5V3.mjs.map → chunk-7GPIOOXB.mjs.map} +0 -0
- /package/dist/{chunk-B244LK6F.mjs.map → chunk-QNJQKKD4.mjs.map} +0 -0
- /package/dist/{chunk-7GFKOIO7.mjs.map → chunk-YJLRG5U3.mjs.map} +0 -0
- /package/dist/{chunk-MNZXQ6UH.mjs.map → chunk-YM2JV2YQ.mjs.map} +0 -0
package/dist/hooks/index.js
CHANGED
|
@@ -94,17 +94,16 @@ var import_react4 = require("react");
|
|
|
94
94
|
// src/context/copilot-context.tsx
|
|
95
95
|
var import_react = __toESM(require("react"));
|
|
96
96
|
var emptyCopilotContext = {
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
actions: {},
|
|
98
|
+
setAction: () => {
|
|
99
99
|
},
|
|
100
|
-
|
|
100
|
+
removeAction: () => {
|
|
101
101
|
},
|
|
102
102
|
chatComponentsCache: { current: {} },
|
|
103
103
|
getContextString: (documents, categories) => returnAndThrowInDebug(""),
|
|
104
104
|
addContext: () => "",
|
|
105
105
|
removeContext: () => {
|
|
106
106
|
},
|
|
107
|
-
getChatCompletionFunctionDescriptions: () => returnAndThrowInDebug([]),
|
|
108
107
|
getFunctionCallHandler: () => returnAndThrowInDebug(() => __async(void 0, null, function* () {
|
|
109
108
|
})),
|
|
110
109
|
messages: [],
|
|
@@ -143,228 +142,150 @@ function returnAndThrowInDebug(value) {
|
|
|
143
142
|
return value;
|
|
144
143
|
}
|
|
145
144
|
|
|
145
|
+
// src/hooks/use-copilot-chat.ts
|
|
146
|
+
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
147
|
+
|
|
146
148
|
// src/hooks/use-chat.ts
|
|
147
149
|
var import_react2 = require("react");
|
|
148
|
-
var import_shared2 = require("@copilotkit/shared");
|
|
149
|
-
var import_nanoid = require("nanoid");
|
|
150
|
-
|
|
151
|
-
// src/utils/fetch-chat-completion.ts
|
|
152
150
|
var import_shared = require("@copilotkit/shared");
|
|
153
|
-
|
|
154
|
-
return __async(this, arguments, function* ({
|
|
155
|
-
copilotConfig,
|
|
156
|
-
model,
|
|
157
|
-
messages,
|
|
158
|
-
tools,
|
|
159
|
-
temperature,
|
|
160
|
-
headers,
|
|
161
|
-
body,
|
|
162
|
-
signal,
|
|
163
|
-
toolChoice
|
|
164
|
-
}) {
|
|
165
|
-
temperature || (temperature = 0.5);
|
|
166
|
-
tools || (tools = []);
|
|
167
|
-
const cleanedMessages = messages.map((message) => {
|
|
168
|
-
const { content, role, name, function_call } = message;
|
|
169
|
-
return { content, role, name, function_call };
|
|
170
|
-
});
|
|
171
|
-
toolChoice || (toolChoice = "auto");
|
|
172
|
-
const response = yield fetch(copilotConfig.chatApiEndpoint, {
|
|
173
|
-
method: "POST",
|
|
174
|
-
headers: __spreadValues(__spreadValues({
|
|
175
|
-
"Content-Type": "application/json"
|
|
176
|
-
}, copilotConfig.headers), headers ? __spreadValues({}, headers) : {}),
|
|
177
|
-
body: JSON.stringify(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({
|
|
178
|
-
model,
|
|
179
|
-
messages: cleanedMessages,
|
|
180
|
-
stream: true
|
|
181
|
-
}, tools.length ? { tools } : {}), temperature ? { temperature } : {}), tools.length != 0 ? { tool_choice: toolChoice } : {}), copilotConfig.body), copilotConfig.backendOnlyProps), excludeBackendOnlyProps(copilotConfig)), body ? __spreadValues({}, body) : {}), copilotConfig.cloud ? { cloud: copilotConfig.cloud } : {})),
|
|
182
|
-
signal,
|
|
183
|
-
credentials: copilotConfig.credentials
|
|
184
|
-
});
|
|
185
|
-
return response;
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
function excludeBackendOnlyProps(copilotConfig) {
|
|
189
|
-
var _a;
|
|
190
|
-
const backendOnlyProps = (_a = copilotConfig.backendOnlyProps) != null ? _a : {};
|
|
191
|
-
if (Object.keys(backendOnlyProps).length > 0) {
|
|
192
|
-
return {
|
|
193
|
-
[import_shared.EXCLUDE_FROM_FORWARD_PROPS_KEYS]: Object.keys(backendOnlyProps)
|
|
194
|
-
};
|
|
195
|
-
} else {
|
|
196
|
-
return {};
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
function fetchAndDecodeChatCompletion(params) {
|
|
200
|
-
return __async(this, null, function* () {
|
|
201
|
-
const response = yield fetchChatCompletion(params);
|
|
202
|
-
if (!response.ok || !response.body) {
|
|
203
|
-
response.events = null;
|
|
204
|
-
} else {
|
|
205
|
-
const events = yield (0, import_shared.decodeChatCompletion)((0, import_shared.parseChatCompletion)(response.body));
|
|
206
|
-
response.events = events;
|
|
207
|
-
}
|
|
208
|
-
return response;
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
// src/hooks/use-chat.ts
|
|
213
|
-
var import_untruncate_json = __toESM(require("untruncate-json"));
|
|
151
|
+
var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
214
152
|
function useChat(options) {
|
|
215
|
-
const {
|
|
153
|
+
const {
|
|
154
|
+
messages,
|
|
155
|
+
setMessages,
|
|
156
|
+
makeSystemMessageCallback,
|
|
157
|
+
copilotConfig,
|
|
158
|
+
setIsLoading,
|
|
159
|
+
initialMessages,
|
|
160
|
+
isLoading,
|
|
161
|
+
actions,
|
|
162
|
+
onFunctionCall
|
|
163
|
+
} = options;
|
|
216
164
|
const abortControllerRef = (0, import_react2.useRef)();
|
|
217
165
|
const threadIdRef = (0, import_react2.useRef)(null);
|
|
218
166
|
const runIdRef = (0, import_react2.useRef)(null);
|
|
219
|
-
const publicApiKey =
|
|
220
|
-
const headers = __spreadValues(__spreadValues({},
|
|
221
|
-
const
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
167
|
+
const publicApiKey = copilotConfig.publicApiKey;
|
|
168
|
+
const headers = __spreadValues(__spreadValues({}, copilotConfig.headers || {}), publicApiKey ? { [import_shared.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: publicApiKey } : {});
|
|
169
|
+
const runtimeClient = new import_runtime_client_gql.CopilotRuntimeClient({
|
|
170
|
+
url: copilotConfig.chatApiEndpoint,
|
|
171
|
+
publicApiKey: copilotConfig.publicApiKey,
|
|
172
|
+
headers
|
|
173
|
+
});
|
|
174
|
+
const runChatCompletion = (previousMessages) => __async(this, null, function* () {
|
|
175
|
+
var _a, _b, _c, _d, _e, _f;
|
|
176
|
+
setIsLoading(true);
|
|
177
|
+
let newMessages = [
|
|
178
|
+
new import_runtime_client_gql.TextMessage({
|
|
227
179
|
content: "",
|
|
228
|
-
role:
|
|
229
|
-
}
|
|
180
|
+
role: import_runtime_client_gql.Role.Assistant
|
|
181
|
+
})
|
|
230
182
|
];
|
|
231
183
|
const abortController = new AbortController();
|
|
232
184
|
abortControllerRef.current = abortController;
|
|
233
|
-
setMessages([...
|
|
234
|
-
const copilotConfigBody = options.copilotConfig.body || {};
|
|
235
|
-
if (threadIdRef.current) {
|
|
236
|
-
copilotConfigBody.threadId = threadIdRef.current;
|
|
237
|
-
}
|
|
238
|
-
if (runIdRef.current) {
|
|
239
|
-
copilotConfigBody.runId = runIdRef.current;
|
|
240
|
-
}
|
|
185
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
241
186
|
const systemMessage = makeSystemMessageCallback();
|
|
242
|
-
const messagesWithContext = [systemMessage, ...
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
187
|
+
const messagesWithContext = [systemMessage, ...initialMessages || [], ...previousMessages];
|
|
188
|
+
const stream = import_runtime_client_gql.CopilotRuntimeClient.asStream(
|
|
189
|
+
runtimeClient.generateCopilotResponse(
|
|
190
|
+
__spreadValues({
|
|
191
|
+
frontend: {
|
|
192
|
+
actions: actions.map((action) => ({
|
|
193
|
+
name: action.name,
|
|
194
|
+
description: action.description || "",
|
|
195
|
+
jsonSchema: JSON.stringify((0, import_shared.actionParametersToJsonSchema)(action.parameters || []))
|
|
196
|
+
}))
|
|
197
|
+
},
|
|
198
|
+
threadId: threadIdRef.current,
|
|
199
|
+
runId: runIdRef.current,
|
|
200
|
+
messages: (0, import_runtime_client_gql.convertMessagesToGqlInput)(messagesWithContext)
|
|
201
|
+
}, copilotConfig.cloud ? {
|
|
202
|
+
cloud: {
|
|
203
|
+
guardrails: {
|
|
204
|
+
inputValidationRules: {
|
|
205
|
+
allowList: copilotConfig.cloud.guardrails.input.restrictToTopic.validTopics,
|
|
206
|
+
denyList: copilotConfig.cloud.guardrails.input.restrictToTopic.invalidTopics
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
} : {}),
|
|
211
|
+
copilotConfig.properties,
|
|
212
|
+
(_a = abortControllerRef.current) == null ? void 0 : _a.signal
|
|
213
|
+
)
|
|
214
|
+
);
|
|
215
|
+
const guardrailsEnabled = ((_d = (_c = (_b = copilotConfig.cloud) == null ? void 0 : _b.guardrails) == null ? void 0 : _c.input) == null ? void 0 : _d.restrictToTopic.enabled) || false;
|
|
216
|
+
const reader = stream.getReader();
|
|
217
|
+
let results = {};
|
|
271
218
|
try {
|
|
272
219
|
while (true) {
|
|
273
220
|
const { done, value } = yield reader.read();
|
|
274
221
|
if (done) {
|
|
275
222
|
break;
|
|
276
223
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
};
|
|
309
|
-
newMessages.push(currentMessage);
|
|
310
|
-
}
|
|
311
|
-
if (value.type === "function") {
|
|
312
|
-
currentMessage.function_call = {
|
|
313
|
-
name: value.name,
|
|
314
|
-
arguments: JSON.stringify(value.arguments),
|
|
315
|
-
scope: value.scope
|
|
316
|
-
};
|
|
317
|
-
} else if (value.type === "partial") {
|
|
318
|
-
let partialArguments = {};
|
|
319
|
-
try {
|
|
320
|
-
partialArguments = JSON.parse((0, import_untruncate_json.default)(value.arguments));
|
|
321
|
-
} catch (e) {
|
|
322
|
-
}
|
|
323
|
-
currentMessage.partialFunctionCall = {
|
|
324
|
-
name: value.name,
|
|
325
|
-
arguments: partialArguments
|
|
326
|
-
};
|
|
327
|
-
}
|
|
328
|
-
newMessages[newMessages.length - 1] = currentMessage;
|
|
329
|
-
setMessages([...messages2, ...newMessages]);
|
|
330
|
-
if (value.type === "function") {
|
|
331
|
-
try {
|
|
332
|
-
if (options.onFunctionCall && value.scope === "client") {
|
|
333
|
-
const result = yield options.onFunctionCall(
|
|
334
|
-
messages2,
|
|
335
|
-
currentMessage.function_call
|
|
336
|
-
);
|
|
337
|
-
currentMessage = {
|
|
338
|
-
id: (0, import_nanoid.nanoid)(),
|
|
339
|
-
role: "function",
|
|
340
|
-
content: (0, import_shared2.encodeResult)(result),
|
|
341
|
-
name: currentMessage.function_call.name
|
|
342
|
-
};
|
|
343
|
-
newMessages.push(currentMessage);
|
|
344
|
-
setMessages([...messages2, ...newMessages]);
|
|
345
|
-
feedback = true;
|
|
224
|
+
if (!(value == null ? void 0 : value.generateCopilotResponse)) {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
threadIdRef.current = value.generateCopilotResponse.threadId || null;
|
|
228
|
+
runIdRef.current = value.generateCopilotResponse.runId || null;
|
|
229
|
+
const messages2 = (0, import_runtime_client_gql.convertGqlOutputToMessages)(value.generateCopilotResponse.messages);
|
|
230
|
+
if (messages2.length === 0) {
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
newMessages = [];
|
|
234
|
+
if (((_e = value.generateCopilotResponse.status) == null ? void 0 : _e.__typename) === "FailedResponseStatus" && value.generateCopilotResponse.status.reason === "GUARDRAILS_VALIDATION_FAILED") {
|
|
235
|
+
newMessages = [
|
|
236
|
+
new import_runtime_client_gql.TextMessage({
|
|
237
|
+
role: import_runtime_client_gql.MessageRole.Assistant,
|
|
238
|
+
content: ((_f = value.generateCopilotResponse.status.details) == null ? void 0 : _f.guardrailsReason) || ""
|
|
239
|
+
})
|
|
240
|
+
];
|
|
241
|
+
} else {
|
|
242
|
+
for (const message of messages2) {
|
|
243
|
+
newMessages.push(message);
|
|
244
|
+
if (message instanceof import_runtime_client_gql.ActionExecutionMessage && message.status.code !== import_runtime_client_gql.MessageStatusCode.Pending && message.scope === "client" && onFunctionCall) {
|
|
245
|
+
if (!(message.id in results)) {
|
|
246
|
+
if (guardrailsEnabled && value.generateCopilotResponse.status === void 0) {
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
const result = yield onFunctionCall({
|
|
250
|
+
messages: previousMessages,
|
|
251
|
+
name: message.name,
|
|
252
|
+
args: message.arguments
|
|
253
|
+
});
|
|
254
|
+
results[message.id] = result;
|
|
346
255
|
}
|
|
347
|
-
|
|
348
|
-
|
|
256
|
+
newMessages.push(
|
|
257
|
+
new import_runtime_client_gql.ResultMessage({
|
|
258
|
+
result: import_runtime_client_gql.ResultMessage.encodeResult(results[message.id]),
|
|
259
|
+
actionExecutionId: message.id,
|
|
260
|
+
actionName: message.name
|
|
261
|
+
})
|
|
262
|
+
);
|
|
349
263
|
}
|
|
350
264
|
}
|
|
351
265
|
}
|
|
266
|
+
if (newMessages.length > 0) {
|
|
267
|
+
setMessages([...previousMessages, ...newMessages]);
|
|
268
|
+
}
|
|
352
269
|
}
|
|
353
|
-
if (
|
|
270
|
+
if (
|
|
271
|
+
// if we have client side results
|
|
272
|
+
Object.values(results).length || // or the last message we received is a result
|
|
273
|
+
newMessages.length && newMessages[newMessages.length - 1] instanceof import_runtime_client_gql.ResultMessage
|
|
274
|
+
) {
|
|
354
275
|
yield new Promise((resolve) => setTimeout(resolve, 10));
|
|
355
|
-
return yield runChatCompletion([...
|
|
276
|
+
return yield runChatCompletion([...previousMessages, ...newMessages]);
|
|
356
277
|
} else {
|
|
357
278
|
return newMessages.slice();
|
|
358
279
|
}
|
|
359
280
|
} finally {
|
|
360
|
-
|
|
281
|
+
setIsLoading(false);
|
|
361
282
|
}
|
|
362
283
|
});
|
|
363
284
|
const runChatCompletionAndHandleFunctionCall = (messages2) => __async(this, null, function* () {
|
|
364
285
|
yield runChatCompletion(messages2);
|
|
365
286
|
});
|
|
366
287
|
const append = (message) => __async(this, null, function* () {
|
|
367
|
-
if (
|
|
288
|
+
if (isLoading) {
|
|
368
289
|
return;
|
|
369
290
|
}
|
|
370
291
|
const newMessages = [...messages, message];
|
|
@@ -372,12 +293,12 @@ function useChat(options) {
|
|
|
372
293
|
return runChatCompletionAndHandleFunctionCall(newMessages);
|
|
373
294
|
});
|
|
374
295
|
const reload = () => __async(this, null, function* () {
|
|
375
|
-
if (
|
|
296
|
+
if (isLoading || messages.length === 0) {
|
|
376
297
|
return;
|
|
377
298
|
}
|
|
378
299
|
let newMessages = [...messages];
|
|
379
300
|
const lastMessage = messages[messages.length - 1];
|
|
380
|
-
if (lastMessage.role === "assistant") {
|
|
301
|
+
if (lastMessage instanceof import_runtime_client_gql.TextMessage && lastMessage.role === "assistant") {
|
|
381
302
|
newMessages = newMessages.slice(0, -1);
|
|
382
303
|
}
|
|
383
304
|
setMessages(newMessages);
|
|
@@ -396,7 +317,7 @@ function useChat(options) {
|
|
|
396
317
|
|
|
397
318
|
// src/components/copilot-provider/copilotkit.tsx
|
|
398
319
|
var import_react3 = require("react");
|
|
399
|
-
var
|
|
320
|
+
var import_shared2 = require("@copilotkit/shared");
|
|
400
321
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
401
322
|
var defaultCopilotContextCategories = ["global"];
|
|
402
323
|
|
|
@@ -409,14 +330,14 @@ function useCopilotChat(_a = {}) {
|
|
|
409
330
|
]);
|
|
410
331
|
const {
|
|
411
332
|
getContextString,
|
|
412
|
-
getChatCompletionFunctionDescriptions,
|
|
413
333
|
getFunctionCallHandler,
|
|
414
334
|
copilotApiConfig,
|
|
415
335
|
messages,
|
|
416
336
|
setMessages,
|
|
417
337
|
isLoading,
|
|
418
338
|
setIsLoading,
|
|
419
|
-
chatInstructions
|
|
339
|
+
chatInstructions,
|
|
340
|
+
actions
|
|
420
341
|
} = (0, import_react4.useContext)(CopilotContext);
|
|
421
342
|
const latestGetContextString = useUpdatedRef(getContextString);
|
|
422
343
|
const deleteMessage = (0, import_react4.useCallback)(
|
|
@@ -428,34 +349,24 @@ function useCopilotChat(_a = {}) {
|
|
|
428
349
|
const makeSystemMessageCallback = (0, import_react4.useCallback)(() => {
|
|
429
350
|
const systemMessageMaker = makeSystemMessage || defaultSystemMessage;
|
|
430
351
|
const contextString = latestGetContextString.current([], defaultCopilotContextCategories);
|
|
431
|
-
return {
|
|
432
|
-
id: "system",
|
|
352
|
+
return new import_runtime_client_gql2.TextMessage({
|
|
433
353
|
content: systemMessageMaker(contextString, chatInstructions),
|
|
434
|
-
role:
|
|
435
|
-
};
|
|
354
|
+
role: import_runtime_client_gql2.Role.System
|
|
355
|
+
});
|
|
436
356
|
}, [getContextString, makeSystemMessage, chatInstructions]);
|
|
437
|
-
const functionDescriptions = (0, import_react4.useMemo)(() => {
|
|
438
|
-
return getChatCompletionFunctionDescriptions();
|
|
439
|
-
}, [getChatCompletionFunctionDescriptions]);
|
|
440
357
|
const { append, reload, stop } = useChat(__spreadProps(__spreadValues({}, options), {
|
|
358
|
+
actions: Object.values(actions),
|
|
441
359
|
copilotConfig: copilotApiConfig,
|
|
442
|
-
id: options.id,
|
|
443
360
|
initialMessages: options.initialMessages || [],
|
|
444
|
-
tools: functionDescriptions,
|
|
445
361
|
onFunctionCall: getFunctionCallHandler(),
|
|
446
|
-
headers: __spreadValues({}, options.headers),
|
|
447
|
-
body: __spreadValues({}, options.body),
|
|
448
362
|
messages,
|
|
449
363
|
setMessages,
|
|
450
364
|
makeSystemMessageCallback,
|
|
451
365
|
isLoading,
|
|
452
366
|
setIsLoading
|
|
453
367
|
}));
|
|
454
|
-
const visibleMessages = messages.filter(
|
|
455
|
-
(message) => message.role === "user" || message.role === "assistant" || message.role === "function"
|
|
456
|
-
);
|
|
457
368
|
return {
|
|
458
|
-
visibleMessages,
|
|
369
|
+
visibleMessages: messages,
|
|
459
370
|
appendMessage: append,
|
|
460
371
|
setMessages,
|
|
461
372
|
reloadMessages: reload,
|
|
@@ -497,11 +408,11 @@ ${additionalInstructions}` : "");
|
|
|
497
408
|
|
|
498
409
|
// src/hooks/use-make-copilot-actionable.ts
|
|
499
410
|
var import_react5 = require("react");
|
|
500
|
-
var
|
|
501
|
-
var
|
|
411
|
+
var import_nanoid = require("nanoid");
|
|
412
|
+
var import_shared3 = require("@copilotkit/shared");
|
|
502
413
|
function useMakeCopilotActionable(annotatedFunction, dependencies) {
|
|
503
|
-
const idRef = (0, import_react5.useRef)((0,
|
|
504
|
-
const {
|
|
414
|
+
const idRef = (0, import_react5.useRef)((0, import_nanoid.nanoid)());
|
|
415
|
+
const { setAction, removeAction } = (0, import_react5.useContext)(CopilotContext);
|
|
505
416
|
const memoizedAnnotatedFunction = (0, import_react5.useMemo)(
|
|
506
417
|
() => ({
|
|
507
418
|
name: annotatedFunction.name,
|
|
@@ -512,23 +423,23 @@ function useMakeCopilotActionable(annotatedFunction, dependencies) {
|
|
|
512
423
|
dependencies
|
|
513
424
|
);
|
|
514
425
|
(0, import_react5.useEffect)(() => {
|
|
515
|
-
const action = (0,
|
|
516
|
-
|
|
426
|
+
const action = (0, import_shared3.annotatedFunctionToAction)(memoizedAnnotatedFunction);
|
|
427
|
+
setAction(idRef.current, action);
|
|
517
428
|
return () => {
|
|
518
|
-
|
|
429
|
+
removeAction(idRef.current);
|
|
519
430
|
};
|
|
520
|
-
}, [memoizedAnnotatedFunction,
|
|
431
|
+
}, [memoizedAnnotatedFunction, setAction, removeAction]);
|
|
521
432
|
}
|
|
522
433
|
|
|
523
434
|
// src/hooks/use-copilot-action.ts
|
|
524
435
|
var import_react6 = require("react");
|
|
525
|
-
var
|
|
436
|
+
var import_nanoid2 = require("nanoid");
|
|
526
437
|
function useCopilotAction(action, dependencies) {
|
|
527
|
-
const {
|
|
528
|
-
const idRef = (0, import_react6.useRef)((0,
|
|
438
|
+
const { setAction, removeAction, actions, chatComponentsCache } = (0, import_react6.useContext)(CopilotContext);
|
|
439
|
+
const idRef = (0, import_react6.useRef)((0, import_nanoid2.nanoid)());
|
|
529
440
|
if (dependencies === void 0) {
|
|
530
|
-
if (
|
|
531
|
-
|
|
441
|
+
if (actions[idRef.current]) {
|
|
442
|
+
actions[idRef.current].handler = action.handler;
|
|
532
443
|
if (typeof action.render === "function") {
|
|
533
444
|
if (chatComponentsCache.current !== null) {
|
|
534
445
|
chatComponentsCache.current[action.name] = action.render;
|
|
@@ -537,16 +448,16 @@ function useCopilotAction(action, dependencies) {
|
|
|
537
448
|
}
|
|
538
449
|
}
|
|
539
450
|
(0, import_react6.useEffect)(() => {
|
|
540
|
-
|
|
451
|
+
setAction(idRef.current, action);
|
|
541
452
|
if (chatComponentsCache.current !== null && action.render !== void 0) {
|
|
542
453
|
chatComponentsCache.current[action.name] = action.render;
|
|
543
454
|
}
|
|
544
455
|
return () => {
|
|
545
|
-
|
|
456
|
+
removeAction(idRef.current);
|
|
546
457
|
};
|
|
547
458
|
}, [
|
|
548
|
-
|
|
549
|
-
|
|
459
|
+
setAction,
|
|
460
|
+
removeAction,
|
|
550
461
|
action.description,
|
|
551
462
|
action.name,
|
|
552
463
|
// This should be faster than deep equality checking
|