@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/utils/extract.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
5
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
7
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
8
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
7
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
10
8
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -31,14 +29,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
31
29
|
}
|
|
32
30
|
return to;
|
|
33
31
|
};
|
|
34
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
35
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
36
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
37
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
38
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
39
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
40
|
-
mod
|
|
41
|
-
));
|
|
42
32
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
43
33
|
var __async = (__this, __arguments, generator) => {
|
|
44
34
|
return new Promise((resolve, reject) => {
|
|
@@ -67,7 +57,8 @@ __export(extract_exports, {
|
|
|
67
57
|
extract: () => extract
|
|
68
58
|
});
|
|
69
59
|
module.exports = __toCommonJS(extract_exports);
|
|
70
|
-
var
|
|
60
|
+
var import_shared2 = require("@copilotkit/shared");
|
|
61
|
+
var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
71
62
|
|
|
72
63
|
// src/components/copilot-provider/copilotkit.tsx
|
|
73
64
|
var import_react = require("react");
|
|
@@ -75,69 +66,9 @@ var import_shared = require("@copilotkit/shared");
|
|
|
75
66
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
76
67
|
var defaultCopilotContextCategories = ["global"];
|
|
77
68
|
|
|
78
|
-
// src/utils/fetch-chat-completion.ts
|
|
79
|
-
var import_shared2 = require("@copilotkit/shared");
|
|
80
|
-
function fetchChatCompletion(_0) {
|
|
81
|
-
return __async(this, arguments, function* ({
|
|
82
|
-
copilotConfig,
|
|
83
|
-
model,
|
|
84
|
-
messages,
|
|
85
|
-
tools,
|
|
86
|
-
temperature,
|
|
87
|
-
headers,
|
|
88
|
-
body,
|
|
89
|
-
signal,
|
|
90
|
-
toolChoice
|
|
91
|
-
}) {
|
|
92
|
-
temperature || (temperature = 0.5);
|
|
93
|
-
tools || (tools = []);
|
|
94
|
-
const cleanedMessages = messages.map((message) => {
|
|
95
|
-
const { content, role, name, function_call } = message;
|
|
96
|
-
return { content, role, name, function_call };
|
|
97
|
-
});
|
|
98
|
-
toolChoice || (toolChoice = "auto");
|
|
99
|
-
const response = yield fetch(copilotConfig.chatApiEndpoint, {
|
|
100
|
-
method: "POST",
|
|
101
|
-
headers: __spreadValues(__spreadValues({
|
|
102
|
-
"Content-Type": "application/json"
|
|
103
|
-
}, copilotConfig.headers), headers ? __spreadValues({}, headers) : {}),
|
|
104
|
-
body: JSON.stringify(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({
|
|
105
|
-
model,
|
|
106
|
-
messages: cleanedMessages,
|
|
107
|
-
stream: true
|
|
108
|
-
}, 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 } : {})),
|
|
109
|
-
signal,
|
|
110
|
-
credentials: copilotConfig.credentials
|
|
111
|
-
});
|
|
112
|
-
return response;
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
function excludeBackendOnlyProps(copilotConfig) {
|
|
116
|
-
var _a;
|
|
117
|
-
const backendOnlyProps = (_a = copilotConfig.backendOnlyProps) != null ? _a : {};
|
|
118
|
-
if (Object.keys(backendOnlyProps).length > 0) {
|
|
119
|
-
return {
|
|
120
|
-
[import_shared2.EXCLUDE_FROM_FORWARD_PROPS_KEYS]: Object.keys(backendOnlyProps)
|
|
121
|
-
};
|
|
122
|
-
} else {
|
|
123
|
-
return {};
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
function fetchAndDecodeChatCompletion(params) {
|
|
127
|
-
return __async(this, null, function* () {
|
|
128
|
-
const response = yield fetchChatCompletion(params);
|
|
129
|
-
if (!response.ok || !response.body) {
|
|
130
|
-
response.events = null;
|
|
131
|
-
} else {
|
|
132
|
-
const events = yield (0, import_shared2.decodeChatCompletion)((0, import_shared2.parseChatCompletion)(response.body));
|
|
133
|
-
response.events = events;
|
|
134
|
-
}
|
|
135
|
-
return response;
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
|
|
139
69
|
// src/utils/extract.ts
|
|
140
|
-
var
|
|
70
|
+
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
71
|
+
var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
|
|
141
72
|
function extract(_0) {
|
|
142
73
|
return __async(this, arguments, function* ({
|
|
143
74
|
context,
|
|
@@ -165,51 +96,64 @@ function extract(_0) {
|
|
|
165
96
|
if (includeReadable) {
|
|
166
97
|
contextString += context.getContextString([], defaultCopilotContextCategories);
|
|
167
98
|
}
|
|
168
|
-
const systemMessage = {
|
|
169
|
-
id: "system",
|
|
99
|
+
const systemMessage = new import_runtime_client_gql.TextMessage({
|
|
170
100
|
content: makeSystemMessage(contextString, instructions),
|
|
171
|
-
role:
|
|
172
|
-
};
|
|
173
|
-
const headers = __spreadValues(__spreadValues({}, context.copilotApiConfig.headers || {}), context.copilotApiConfig.publicApiKey ? { [import_shared3.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: context.copilotApiConfig.publicApiKey } : {});
|
|
174
|
-
const response = yield fetchAndDecodeChatCompletion({
|
|
175
|
-
copilotConfig: context.copilotApiConfig,
|
|
176
|
-
messages: includeMessages ? [systemMessage, ...messages] : [systemMessage],
|
|
177
|
-
tools: context.getChatCompletionFunctionDescriptions({ extract: action }),
|
|
178
|
-
headers,
|
|
179
|
-
body: context.copilotApiConfig.body,
|
|
180
|
-
toolChoice: { type: "function", function: { name: "extract" } },
|
|
181
|
-
signal: abortSignal
|
|
101
|
+
role: import_runtime_client_gql.Role.System
|
|
182
102
|
});
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
103
|
+
const headers = __spreadValues(__spreadValues({}, context.copilotApiConfig.headers || {}), context.copilotApiConfig.publicApiKey ? { [import_shared2.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: context.copilotApiConfig.publicApiKey } : {});
|
|
104
|
+
const runtimeClient = new import_runtime_client_gql2.CopilotRuntimeClient({
|
|
105
|
+
url: context.copilotApiConfig.chatApiEndpoint,
|
|
106
|
+
publicApiKey: context.copilotApiConfig.publicApiKey,
|
|
107
|
+
headers
|
|
108
|
+
});
|
|
109
|
+
const response = import_runtime_client_gql2.CopilotRuntimeClient.asStream(
|
|
110
|
+
runtimeClient.generateCopilotResponse(
|
|
111
|
+
{
|
|
112
|
+
frontend: {
|
|
113
|
+
actions: [
|
|
114
|
+
{
|
|
115
|
+
name: action.name,
|
|
116
|
+
description: action.description || "",
|
|
117
|
+
jsonSchema: JSON.stringify((0, import_shared2.actionParametersToJsonSchema)(action.parameters || []))
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
messages: (0, import_runtime_client_gql3.convertMessagesToGqlInput)(
|
|
122
|
+
includeMessages ? [systemMessage, ...messages] : [systemMessage]
|
|
123
|
+
)
|
|
124
|
+
},
|
|
125
|
+
context.copilotApiConfig.properties,
|
|
126
|
+
abortSignal
|
|
127
|
+
)
|
|
128
|
+
);
|
|
129
|
+
const reader = response.getReader();
|
|
187
130
|
let isInitial = true;
|
|
131
|
+
let actionExecutionMessage = void 0;
|
|
188
132
|
while (true) {
|
|
189
133
|
const { done, value } = yield reader.read();
|
|
190
134
|
if (done) {
|
|
191
135
|
break;
|
|
192
136
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
args: partialArguments
|
|
199
|
-
});
|
|
200
|
-
isInitial = false;
|
|
201
|
-
} catch (e) {
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
if (value.type === "function") {
|
|
205
|
-
stream == null ? void 0 : stream({
|
|
206
|
-
status: "complete",
|
|
207
|
-
args: value.arguments
|
|
208
|
-
});
|
|
209
|
-
return value.arguments;
|
|
137
|
+
actionExecutionMessage = (0, import_runtime_client_gql.convertGqlOutputToMessages)(
|
|
138
|
+
value.generateCopilotResponse.messages
|
|
139
|
+
).find((msg) => msg instanceof import_runtime_client_gql.ActionExecutionMessage);
|
|
140
|
+
if (!actionExecutionMessage) {
|
|
141
|
+
continue;
|
|
210
142
|
}
|
|
143
|
+
stream == null ? void 0 : stream({
|
|
144
|
+
status: isInitial ? "initial" : "inProgress",
|
|
145
|
+
args: actionExecutionMessage.arguments
|
|
146
|
+
});
|
|
147
|
+
isInitial = false;
|
|
211
148
|
}
|
|
212
|
-
|
|
149
|
+
if (!actionExecutionMessage) {
|
|
150
|
+
throw new Error("extract() failed: No function call occurred");
|
|
151
|
+
}
|
|
152
|
+
stream == null ? void 0 : stream({
|
|
153
|
+
status: "complete",
|
|
154
|
+
args: actionExecutionMessage.arguments
|
|
155
|
+
});
|
|
156
|
+
return actionExecutionMessage.arguments;
|
|
213
157
|
});
|
|
214
158
|
}
|
|
215
159
|
function makeSystemMessage(contextString, instructions) {
|
|
@@ -224,7 +168,7 @@ The user has provided you with the following context:
|
|
|
224
168
|
${contextString}
|
|
225
169
|
\`\`\`
|
|
226
170
|
|
|
227
|
-
They have also provided you with a function you MUST call to initiate actions on their behalf.
|
|
171
|
+
They have also provided you with a function called extract you MUST call to initiate actions on their behalf.
|
|
228
172
|
|
|
229
173
|
Please assist them as best you can.
|
|
230
174
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/extract.ts","../../src/components/copilot-provider/copilotkit.tsx","../../src/utils/fetch-chat-completion.ts"],"sourcesContent":["import {\n Action,\n COPILOT_CLOUD_PUBLIC_API_KEY_HEADER,\n MappedParameterTypes,\n Message,\n Parameter,\n} from \"@copilotkit/shared\";\nimport { CopilotContextParams } from \"../context\";\nimport { defaultCopilotContextCategories } from \"../components\";\nimport { fetchAndDecodeChatCompletion } from \"./fetch-chat-completion\";\nimport untruncateJson from \"untruncate-json\";\n\ninterface InitialState<T extends Parameter[] | [] = []> {\n status: \"initial\";\n args: Partial<MappedParameterTypes<T>>;\n}\n\ninterface InProgressState<T extends Parameter[] | [] = []> {\n status: \"inProgress\";\n args: Partial<MappedParameterTypes<T>>;\n}\n\ninterface CompleteState<T extends Parameter[] | [] = []> {\n status: \"complete\";\n args: MappedParameterTypes<T>;\n}\n\ntype StreamHandlerArgs<T extends Parameter[] | [] = []> =\n | InitialState<T>\n | InProgressState<T>\n | CompleteState<T>;\n\ninterface ExtractOptions<T extends Parameter[]> {\n context: CopilotContextParams;\n instructions: string;\n parameters: T;\n include?: IncludeOptions;\n data?: any;\n abortSignal?: AbortSignal;\n stream?: (args: StreamHandlerArgs<T>) => void;\n}\n\ninterface IncludeOptions {\n readable?: boolean;\n messages?: boolean;\n}\n\nexport async function extract<const T extends Parameter[]>({\n context,\n instructions,\n parameters,\n include,\n data,\n abortSignal,\n stream,\n}: ExtractOptions<T>): Promise<MappedParameterTypes<T>> {\n const { messages } = context;\n\n const action: Action<any> = {\n name: \"extract\",\n parameters,\n handler: (args: any) => {},\n };\n\n const includeReadable = include?.readable ?? false;\n const includeMessages = include?.messages ?? false;\n\n let contextString = \"\";\n\n if (data) {\n contextString = (typeof data === \"string\" ? data : JSON.stringify(data)) + \"\\n\\n\";\n }\n\n if (includeReadable) {\n contextString += context.getContextString([], defaultCopilotContextCategories);\n }\n\n const systemMessage: Message = {\n id: \"system\",\n content: makeSystemMessage(contextString, instructions),\n role: \"system\",\n };\n\n const headers = {\n ...(context.copilotApiConfig.headers || {}),\n ...(context.copilotApiConfig.publicApiKey\n ? { [COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: context.copilotApiConfig.publicApiKey }\n : {}),\n };\n\n const response = await fetchAndDecodeChatCompletion({\n copilotConfig: context.copilotApiConfig,\n messages: includeMessages ? [systemMessage, ...messages] : [systemMessage],\n tools: context.getChatCompletionFunctionDescriptions({ extract: action }),\n headers,\n body: context.copilotApiConfig.body,\n toolChoice: { type: \"function\", function: { name: \"extract\" } },\n signal: abortSignal,\n });\n\n if (!response.events) {\n throw new Error(\"extract() failed: Could not fetch chat completion\");\n }\n\n const reader = response.events.getReader();\n let isInitial = true;\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n if (value.type === \"partial\") {\n try {\n let partialArguments = JSON.parse(untruncateJson(value.arguments));\n stream?.({\n status: isInitial ? \"initial\" : \"inProgress\",\n args: partialArguments as Partial<MappedParameterTypes<T>>,\n });\n isInitial = false;\n } catch (e) {}\n }\n\n if (value.type === \"function\") {\n stream?.({\n status: \"complete\",\n args: value.arguments as MappedParameterTypes<T>,\n });\n return value.arguments as MappedParameterTypes<T>;\n }\n }\n\n throw new Error(\"extract() failed: No function call occurred\");\n}\n\nfunction makeSystemMessage(contextString: string, instructions: string): string {\n return `\nPlease act as an efficient, competent, conscientious, and industrious professional assistant.\n\nHelp 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.\nAlways be polite and respectful, and prefer brevity over verbosity.\n\nThe user has provided you with the following context:\n\\`\\`\\`\n${contextString}\n\\`\\`\\`\n\nThey have also provided you with a function you MUST call to initiate actions on their behalf.\n\nPlease assist them as best you can.\n\nThis is not a conversation, so please do not ask questions. Just call the function without saying anything else.\n\nThe user has given you the following task to complete:\n\n\\`\\`\\`\n${instructions}\n\\`\\`\\`\n\nAny additional messages provided are for providing context only and should not be used to ask questions or engage in conversation.\n`;\n}\n","/**\n * Provides the Copilot context to its children.\n * \n * <img\n * referrerPolicy=\"no-referrer-when-downgrade\"\n * src=\"https://static.scarf.sh/a.png?x-pxid=a9b290bb-38f9-4518-ac3b-8f54fdbf43be\"\n * />\n * \n * This component provides the Copilot context to its children.\n * It can be configured either with a chat API endpoint or a `CopilotApiConfig`.\n * \n * <Note>\n * The backend can use OpenAI, or you can bring your own LLM. For examples of the\n * backend api implementation, see `examples/next-openai` or the [runtime\n * docs](https://docs.copilotkit.ai/getting-started/quickstart-runtime).\n * </Note>\n * \n * <RequestExample>\n * ```jsx CopilotKit Example\n * import { CopilotKit } from \"@copilotkit/react-core\";\n * \n * <CopilotKit \n * runtimeUrl=\"https://your.copilotkit.api\">\n * <YourApp/>\n * </CopilotKit>\n * ```\n * </RequestExample>\n * \n * ## Example usage\n * \n * ```jsx\n * <CopilotKit publicApiKey=\"the api key or self host (see below)\">\n * <App />\n * </CopilotKit>\n```\n */\nimport { Ref, useCallback, useRef, useState } from \"react\";\nimport {\n CopilotContext,\n CopilotApiConfig,\n InChatRenderFunction,\n} from \"../../context/copilot-context\";\nimport useTree from \"../../hooks/use-tree\";\nimport { CopilotChatSuggestionConfiguration, DocumentPointer } from \"../../types\";\n\nimport {\n COPILOT_CLOUD_CHAT_URL,\n CopilotCloudConfig,\n FunctionCallHandler,\n Message,\n actionToChatCompletionFunction,\n} from \"@copilotkit/shared\";\n\nimport { FrontendAction } from \"../../types/frontend-action\";\nimport useFlatCategoryStore from \"../../hooks/use-flat-category-store\";\nimport { CopilotKitProps } from \"./copilotkit-props\";\nimport { ToolDefinition } from \"@copilotkit/shared\";\n\nexport function CopilotKit({ children, ...props }: CopilotKitProps) {\n // Compute all the functions and properties that we need to pass\n // to the CopilotContext.\n\n if (!props.runtimeUrl && !props.url && !props.publicApiKey) {\n throw new Error(\"Please provide either a url or a publicApiKey to the CopilotKit component.\");\n }\n\n const chatApiEndpoint = props.runtimeUrl || props.url || COPILOT_CLOUD_CHAT_URL;\n\n const [entryPoints, setEntryPoints] = useState<Record<string, FrontendAction<any>>>({});\n const chatComponentsCache = useRef<Record<string, InChatRenderFunction | string>>({});\n const { addElement, removeElement, printTree } = useTree();\n const [messages, setMessages] = useState<Message[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [chatInstructions, setChatInstructions] = useState(\"\");\n\n const {\n addElement: addDocument,\n removeElement: removeDocument,\n allElements: allDocuments,\n } = useFlatCategoryStore<DocumentPointer>();\n\n const setEntryPoint = useCallback((id: string, entryPoint: FrontendAction<any>) => {\n setEntryPoints((prevPoints) => {\n return {\n ...prevPoints,\n [id]: entryPoint,\n };\n });\n }, []);\n\n const removeEntryPoint = useCallback((id: string) => {\n setEntryPoints((prevPoints) => {\n const newPoints = { ...prevPoints };\n delete newPoints[id];\n return newPoints;\n });\n }, []);\n\n const getContextString = useCallback(\n (documents: DocumentPointer[], categories: string[]) => {\n const documentsString = documents\n .map((document) => {\n return `${document.name} (${document.sourceApplication}):\\n${document.getContents()}`;\n })\n .join(\"\\n\\n\");\n\n const nonDocumentStrings = printTree(categories);\n\n return `${documentsString}\\n\\n${nonDocumentStrings}`;\n },\n [printTree],\n );\n\n const addContext = useCallback(\n (\n context: string,\n parentId?: string,\n categories: string[] = defaultCopilotContextCategories,\n ) => {\n return addElement(context, categories, parentId);\n },\n [addElement],\n );\n\n const removeContext = useCallback(\n (id: string) => {\n removeElement(id);\n },\n [removeElement],\n );\n\n const getChatCompletionFunctionDescriptions = useCallback(\n (customEntryPoints?: Record<string, FrontendAction<any>>) => {\n return entryPointsToChatCompletionFunctions(Object.values(customEntryPoints || entryPoints));\n },\n [entryPoints],\n );\n\n const getFunctionCallHandler = useCallback(\n (customEntryPoints?: Record<string, FrontendAction<any>>) => {\n return entryPointsToFunctionCallHandler(Object.values(customEntryPoints || entryPoints));\n },\n [entryPoints],\n );\n\n const getDocumentsContext = useCallback(\n (categories: string[]) => {\n return allDocuments(categories);\n },\n [allDocuments],\n );\n\n const addDocumentContext = useCallback(\n (documentPointer: DocumentPointer, categories: string[] = defaultCopilotContextCategories) => {\n return addDocument(documentPointer, categories);\n },\n [addDocument],\n );\n\n const removeDocumentContext = useCallback(\n (documentId: string) => {\n removeDocument(documentId);\n },\n [removeDocument],\n );\n\n if (!props.publicApiKey) {\n if (props.cloudRestrictToTopic) {\n throw new Error(\n \"To use the cloudRestrictToTopic feature, please sign up at https://copilotkit.ai and provide a publicApiKey.\",\n );\n }\n }\n\n let cloud: CopilotCloudConfig | undefined = undefined;\n if (props.publicApiKey) {\n cloud = {\n guardrails: {\n input: {\n restrictToTopic: {\n enabled: props.cloudRestrictToTopic ? true : false,\n validTopics: props.cloudRestrictToTopic?.validTopics || [],\n invalidTopics: props.cloudRestrictToTopic?.invalidTopics || [],\n },\n },\n },\n };\n }\n\n // get the appropriate CopilotApiConfig from the props\n const copilotApiConfig: CopilotApiConfig = {\n publicApiKey: props.publicApiKey,\n ...(cloud ? { cloud } : {}),\n chatApiEndpoint: chatApiEndpoint,\n chatApiEndpointV2: `${props.url}/v2`,\n headers: props.headers || {},\n body: {\n ...props.body,\n ...props.backendOnlyProps,\n },\n transcribeAudioUrl: props.transcribeAudioUrl,\n textToSpeechUrl: props.textToSpeechUrl,\n credentials: props.credentials,\n };\n\n const [chatSuggestionConfiguration, setChatSuggestionConfiguration] = useState<{\n [key: string]: CopilotChatSuggestionConfiguration;\n }>({});\n\n const addChatSuggestionConfiguration = (\n id: string,\n suggestion: CopilotChatSuggestionConfiguration,\n ) => {\n setChatSuggestionConfiguration((prev) => ({ ...prev, [id]: suggestion }));\n };\n\n const removeChatSuggestionConfiguration = (id: string) => {\n setChatSuggestionConfiguration((prev) => {\n const { [id]: _, ...rest } = prev;\n return rest;\n });\n };\n\n return (\n <CopilotContext.Provider\n value={{\n entryPoints,\n chatComponentsCache,\n getChatCompletionFunctionDescriptions,\n getFunctionCallHandler,\n setEntryPoint,\n removeEntryPoint,\n getContextString,\n addContext,\n removeContext,\n getDocumentsContext,\n addDocumentContext,\n removeDocumentContext,\n copilotApiConfig: copilotApiConfig,\n messages,\n setMessages,\n isLoading,\n setIsLoading,\n chatSuggestionConfiguration,\n addChatSuggestionConfiguration,\n removeChatSuggestionConfiguration,\n chatInstructions,\n setChatInstructions,\n }}\n >\n {children}\n </CopilotContext.Provider>\n );\n}\n\nexport const defaultCopilotContextCategories = [\"global\"];\n\nfunction entryPointsToChatCompletionFunctions(actions: FrontendAction<any>[]): ToolDefinition[] {\n return actions.map(actionToChatCompletionFunction);\n}\n\nfunction entryPointsToFunctionCallHandler(actions: FrontendAction<any>[]): FunctionCallHandler {\n return async (chatMessages, functionCall) => {\n let actionsByFunctionName: Record<string, FrontendAction<any>> = {};\n for (let action of actions) {\n actionsByFunctionName[action.name] = action;\n }\n\n const action = actionsByFunctionName[functionCall.name || \"\"];\n if (action) {\n let functionCallArguments: Record<string, any>[] = [];\n if (functionCall.arguments) {\n functionCallArguments = JSON.parse(functionCall.arguments);\n }\n return await action.handler(functionCallArguments);\n }\n };\n}\n","import {\n Message,\n ToolDefinition,\n ChatCompletionEvent,\n decodeChatCompletion,\n parseChatCompletion,\n decodeChatCompletionAsText,\n EXCLUDE_FROM_FORWARD_PROPS_KEYS,\n} from \"@copilotkit/shared\";\nimport { CopilotApiConfig } from \"../context\";\n\nexport interface FetchChatCompletionParams {\n copilotConfig: CopilotApiConfig;\n model?: string;\n messages: Message[];\n tools?: ToolDefinition[];\n temperature?: number;\n maxTokens?: number;\n headers?: Record<string, string> | Headers;\n body?: object;\n signal?: AbortSignal;\n toolChoice?: string | { type: \"function\"; function: { name: string } };\n}\n\nexport async function fetchChatCompletion({\n copilotConfig,\n model,\n messages,\n tools,\n temperature,\n headers,\n body,\n signal,\n toolChoice,\n}: FetchChatCompletionParams): Promise<Response> {\n temperature ||= 0.5;\n tools ||= [];\n\n // clean up any extra properties from messages\n const cleanedMessages = messages.map((message) => {\n const { content, role, name, function_call } = message;\n return { content, role, name, function_call };\n });\n\n toolChoice ||= \"auto\";\n\n const response = await fetch(copilotConfig.chatApiEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...copilotConfig.headers,\n ...(headers ? { ...headers } : {}),\n },\n body: JSON.stringify({\n model,\n messages: cleanedMessages,\n stream: true,\n ...(tools.length ? { tools } : {}),\n ...(temperature ? { temperature } : {}),\n ...(tools.length != 0 ? { tool_choice: toolChoice } : {}),\n ...copilotConfig.body,\n ...copilotConfig.backendOnlyProps,\n ...excludeBackendOnlyProps(copilotConfig),\n ...(body ? { ...body } : {}),\n ...(copilotConfig.cloud ? { cloud: copilotConfig.cloud } : {}),\n }),\n signal,\n credentials: copilotConfig.credentials,\n });\n\n return response;\n}\n\nfunction excludeBackendOnlyProps(copilotConfig: any) {\n const backendOnlyProps = copilotConfig.backendOnlyProps ?? {};\n if (Object.keys(backendOnlyProps).length > 0) {\n return {\n [EXCLUDE_FROM_FORWARD_PROPS_KEYS]: Object.keys(backendOnlyProps),\n };\n } else {\n return {};\n }\n}\n\nexport interface DecodedChatCompletionResponse extends Response {\n events: ReadableStream<ChatCompletionEvent> | null;\n}\n\nexport async function fetchAndDecodeChatCompletion(\n params: FetchChatCompletionParams,\n): Promise<DecodedChatCompletionResponse> {\n const response = await fetchChatCompletion(params);\n if (!response.ok || !response.body) {\n (response as any).events = null;\n } else {\n const events = await decodeChatCompletion(parseChatCompletion(response.body));\n (response as any).events = events;\n }\n return response as any;\n}\n\nexport interface DecodedChatCompletionResponseAsText extends Response {\n events: ReadableStream<string> | null;\n}\n\nexport async function fetchAndDecodeChatCompletionAsText(\n params: FetchChatCompletionParams,\n): Promise<DecodedChatCompletionResponseAsText> {\n const response = await fetchChatCompletion(params);\n if (!response.ok || !response.body) {\n (response as any).events = null;\n } else {\n const events = await decodeChatCompletionAsText(\n decodeChatCompletion(parseChatCompletion(response.body)),\n );\n (response as any).events = events;\n }\n\n return response as any;\n}\n"],"mappings":"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","names":["import_shared","import_shared","untruncateJson"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/extract.ts","../../src/components/copilot-provider/copilotkit.tsx"],"sourcesContent":["import {\n Action,\n COPILOT_CLOUD_PUBLIC_API_KEY_HEADER,\n MappedParameterTypes,\n Parameter,\n actionParametersToJsonSchema,\n} from \"@copilotkit/shared\";\nimport {\n ActionExecutionMessage,\n Message,\n Role,\n TextMessage,\n convertGqlOutputToMessages,\n} from \"@copilotkit/runtime-client-gql\";\nimport { CopilotContextParams } from \"../context\";\nimport { defaultCopilotContextCategories } from \"../components\";\nimport { CopilotRuntimeClient } from \"@copilotkit/runtime-client-gql\";\nimport { convertMessagesToGqlInput } from \"@copilotkit/runtime-client-gql\";\n\ninterface InitialState<T extends Parameter[] | [] = []> {\n status: \"initial\";\n args: Partial<MappedParameterTypes<T>>;\n}\n\ninterface InProgressState<T extends Parameter[] | [] = []> {\n status: \"inProgress\";\n args: Partial<MappedParameterTypes<T>>;\n}\n\ninterface CompleteState<T extends Parameter[] | [] = []> {\n status: \"complete\";\n args: MappedParameterTypes<T>;\n}\n\ntype StreamHandlerArgs<T extends Parameter[] | [] = []> =\n | InitialState<T>\n | InProgressState<T>\n | CompleteState<T>;\n\ninterface ExtractOptions<T extends Parameter[]> {\n context: CopilotContextParams;\n instructions: string;\n parameters: T;\n include?: IncludeOptions;\n data?: any;\n abortSignal?: AbortSignal;\n stream?: (args: StreamHandlerArgs<T>) => void;\n}\n\ninterface IncludeOptions {\n readable?: boolean;\n messages?: boolean;\n}\n\nexport async function extract<const T extends Parameter[]>({\n context,\n instructions,\n parameters,\n include,\n data,\n abortSignal,\n stream,\n}: ExtractOptions<T>): Promise<MappedParameterTypes<T>> {\n const { messages } = context;\n\n const action: Action<any> = {\n name: \"extract\",\n parameters,\n handler: (args: any) => {},\n };\n\n const includeReadable = include?.readable ?? false;\n const includeMessages = include?.messages ?? false;\n\n let contextString = \"\";\n\n if (data) {\n contextString = (typeof data === \"string\" ? data : JSON.stringify(data)) + \"\\n\\n\";\n }\n\n if (includeReadable) {\n contextString += context.getContextString([], defaultCopilotContextCategories);\n }\n\n const systemMessage: Message = new TextMessage({\n content: makeSystemMessage(contextString, instructions),\n role: Role.System,\n });\n\n const headers = {\n ...(context.copilotApiConfig.headers || {}),\n ...(context.copilotApiConfig.publicApiKey\n ? { [COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: context.copilotApiConfig.publicApiKey }\n : {}),\n };\n\n const runtimeClient = new CopilotRuntimeClient({\n url: context.copilotApiConfig.chatApiEndpoint,\n publicApiKey: context.copilotApiConfig.publicApiKey,\n headers,\n });\n\n const response = CopilotRuntimeClient.asStream(\n runtimeClient.generateCopilotResponse(\n {\n frontend: {\n actions: [\n {\n name: action.name,\n description: action.description || \"\",\n jsonSchema: JSON.stringify(actionParametersToJsonSchema(action.parameters || [])),\n },\n ],\n },\n\n messages: convertMessagesToGqlInput(\n includeMessages ? [systemMessage, ...messages] : [systemMessage],\n ),\n },\n context.copilotApiConfig.properties,\n abortSignal,\n ),\n );\n\n const reader = response.getReader();\n\n let isInitial = true;\n\n let actionExecutionMessage: ActionExecutionMessage | undefined = undefined;\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n actionExecutionMessage = convertGqlOutputToMessages(\n value.generateCopilotResponse.messages,\n ).find((msg) => msg instanceof ActionExecutionMessage) as ActionExecutionMessage | undefined;\n\n if (!actionExecutionMessage) {\n continue;\n }\n\n stream?.({\n status: isInitial ? \"initial\" : \"inProgress\",\n args: actionExecutionMessage.arguments as Partial<MappedParameterTypes<T>>,\n });\n\n isInitial = false;\n }\n\n if (!actionExecutionMessage) {\n throw new Error(\"extract() failed: No function call occurred\");\n }\n\n stream?.({\n status: \"complete\",\n args: actionExecutionMessage.arguments as MappedParameterTypes<T>,\n });\n\n return actionExecutionMessage.arguments as MappedParameterTypes<T>;\n}\n\nfunction makeSystemMessage(contextString: string, instructions: string): string {\n return `\nPlease act as an efficient, competent, conscientious, and industrious professional assistant.\n\nHelp 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.\nAlways be polite and respectful, and prefer brevity over verbosity.\n\nThe user has provided you with the following context:\n\\`\\`\\`\n${contextString}\n\\`\\`\\`\n\nThey have also provided you with a function called extract you MUST call to initiate actions on their behalf.\n\nPlease assist them as best you can.\n\nThis is not a conversation, so please do not ask questions. Just call the function without saying anything else.\n\nThe user has given you the following task to complete:\n\n\\`\\`\\`\n${instructions}\n\\`\\`\\`\n\nAny additional messages provided are for providing context only and should not be used to ask questions or engage in conversation.\n`;\n}\n","/**\n * Provides the Copilot context to its children.\n * \n * <img\n * referrerPolicy=\"no-referrer-when-downgrade\"\n * src=\"https://static.scarf.sh/a.png?x-pxid=a9b290bb-38f9-4518-ac3b-8f54fdbf43be\"\n * />\n * \n * This component provides the Copilot context to its children.\n * It can be configured either with a chat API endpoint or a `CopilotApiConfig`.\n * \n * <Note>\n * The backend can use OpenAI, or you can bring your own LLM. For examples of the\n * backend api implementation, see `examples/next-openai` or the [runtime\n * docs](https://docs.copilotkit.ai/getting-started/quickstart-runtime).\n * </Note>\n * \n * <RequestExample>\n * ```jsx CopilotKit Example\n * import { CopilotKit } from \"@copilotkit/react-core\";\n * \n * <CopilotKit \n * runtimeUrl=\"https://your.copilotkit.api\">\n * <YourApp/>\n * </CopilotKit>\n * ```\n * </RequestExample>\n * \n * ## Example usage\n * \n * ```jsx\n * <CopilotKit publicApiKey=\"the api key or self host (see below)\">\n * <App />\n * </CopilotKit>\n```\n */\nimport { Ref, useCallback, useRef, useState } from \"react\";\nimport {\n CopilotContext,\n CopilotApiConfig,\n InChatRenderFunction,\n} from \"../../context/copilot-context\";\nimport useTree from \"../../hooks/use-tree\";\nimport { CopilotChatSuggestionConfiguration, DocumentPointer } from \"../../types\";\n\nimport {\n COPILOT_CLOUD_CHAT_URL,\n CopilotCloudConfig,\n FunctionCallHandler,\n} from \"@copilotkit/shared\";\nimport { Message } from \"@copilotkit/runtime-client-gql\";\n\nimport { FrontendAction } from \"../../types/frontend-action\";\nimport useFlatCategoryStore from \"../../hooks/use-flat-category-store\";\nimport { CopilotKitProps } from \"./copilotkit-props\";\n\nexport function CopilotKit({ children, ...props }: CopilotKitProps) {\n // Compute all the functions and properties that we need to pass\n // to the CopilotContext.\n\n if (!props.runtimeUrl && !props.url && !props.publicApiKey) {\n throw new Error(\"Please provide either a url or a publicApiKey to the CopilotKit component.\");\n }\n\n const chatApiEndpoint = props.runtimeUrl || props.url || COPILOT_CLOUD_CHAT_URL;\n\n const [actions, setActions] = useState<Record<string, FrontendAction<any>>>({});\n const chatComponentsCache = useRef<Record<string, InChatRenderFunction | string>>({});\n const { addElement, removeElement, printTree } = useTree();\n const [messages, setMessages] = useState<Message[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [chatInstructions, setChatInstructions] = useState(\"\");\n\n const {\n addElement: addDocument,\n removeElement: removeDocument,\n allElements: allDocuments,\n } = useFlatCategoryStore<DocumentPointer>();\n\n const setAction = useCallback((id: string, action: FrontendAction<any>) => {\n setActions((prevPoints) => {\n return {\n ...prevPoints,\n [id]: action,\n };\n });\n }, []);\n\n const removeAction = useCallback((id: string) => {\n setActions((prevPoints) => {\n const newPoints = { ...prevPoints };\n delete newPoints[id];\n return newPoints;\n });\n }, []);\n\n const getContextString = useCallback(\n (documents: DocumentPointer[], categories: string[]) => {\n const documentsString = documents\n .map((document) => {\n return `${document.name} (${document.sourceApplication}):\\n${document.getContents()}`;\n })\n .join(\"\\n\\n\");\n\n const nonDocumentStrings = printTree(categories);\n\n return `${documentsString}\\n\\n${nonDocumentStrings}`;\n },\n [printTree],\n );\n\n const addContext = useCallback(\n (\n context: string,\n parentId?: string,\n categories: string[] = defaultCopilotContextCategories,\n ) => {\n return addElement(context, categories, parentId);\n },\n [addElement],\n );\n\n const removeContext = useCallback(\n (id: string) => {\n removeElement(id);\n },\n [removeElement],\n );\n\n const getFunctionCallHandler = useCallback(\n (customEntryPoints?: Record<string, FrontendAction<any>>) => {\n return entryPointsToFunctionCallHandler(Object.values(customEntryPoints || actions));\n },\n [actions],\n );\n\n const getDocumentsContext = useCallback(\n (categories: string[]) => {\n return allDocuments(categories);\n },\n [allDocuments],\n );\n\n const addDocumentContext = useCallback(\n (documentPointer: DocumentPointer, categories: string[] = defaultCopilotContextCategories) => {\n return addDocument(documentPointer, categories);\n },\n [addDocument],\n );\n\n const removeDocumentContext = useCallback(\n (documentId: string) => {\n removeDocument(documentId);\n },\n [removeDocument],\n );\n\n if (!props.publicApiKey) {\n if (props.cloudRestrictToTopic) {\n throw new Error(\n \"To use the cloudRestrictToTopic feature, please sign up at https://copilotkit.ai and provide a publicApiKey.\",\n );\n }\n }\n\n let cloud: CopilotCloudConfig | undefined = undefined;\n if (props.publicApiKey) {\n cloud = {\n guardrails: {\n input: {\n restrictToTopic: {\n enabled: props.cloudRestrictToTopic ? true : false,\n validTopics: props.cloudRestrictToTopic?.validTopics || [],\n invalidTopics: props.cloudRestrictToTopic?.invalidTopics || [],\n },\n },\n },\n };\n }\n\n // get the appropriate CopilotApiConfig from the props\n const copilotApiConfig: CopilotApiConfig = {\n publicApiKey: props.publicApiKey,\n ...(cloud ? { cloud } : {}),\n chatApiEndpoint: chatApiEndpoint,\n chatApiEndpointV2: `${props.url}/v2`,\n headers: props.headers || {},\n properties: props.properties || {},\n transcribeAudioUrl: props.transcribeAudioUrl,\n textToSpeechUrl: props.textToSpeechUrl,\n credentials: props.credentials,\n };\n\n const [chatSuggestionConfiguration, setChatSuggestionConfiguration] = useState<{\n [key: string]: CopilotChatSuggestionConfiguration;\n }>({});\n\n const addChatSuggestionConfiguration = (\n id: string,\n suggestion: CopilotChatSuggestionConfiguration,\n ) => {\n setChatSuggestionConfiguration((prev) => ({ ...prev, [id]: suggestion }));\n };\n\n const removeChatSuggestionConfiguration = (id: string) => {\n setChatSuggestionConfiguration((prev) => {\n const { [id]: _, ...rest } = prev;\n return rest;\n });\n };\n\n return (\n <CopilotContext.Provider\n value={{\n actions,\n chatComponentsCache,\n getFunctionCallHandler,\n setAction,\n removeAction,\n getContextString,\n addContext,\n removeContext,\n getDocumentsContext,\n addDocumentContext,\n removeDocumentContext,\n copilotApiConfig: copilotApiConfig,\n messages,\n setMessages,\n isLoading,\n setIsLoading,\n chatSuggestionConfiguration,\n addChatSuggestionConfiguration,\n removeChatSuggestionConfiguration,\n chatInstructions,\n setChatInstructions,\n }}\n >\n {children}\n </CopilotContext.Provider>\n );\n}\n\nexport const defaultCopilotContextCategories = [\"global\"];\n\nfunction entryPointsToFunctionCallHandler(actions: FrontendAction<any>[]): FunctionCallHandler {\n return async ({ messages, name, args }) => {\n let actionsByFunctionName: Record<string, FrontendAction<any>> = {};\n for (let action of actions) {\n actionsByFunctionName[action.name] = action;\n }\n\n const action = actionsByFunctionName[name];\n if (action) {\n return await action.handler(args);\n }\n };\n}\n"],"mappings":"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","names":["import_shared","import_runtime_client_gql"]}
|
package/dist/utils/extract.mjs
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
extract
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-WU3I3G3G.mjs";
|
|
4
4
|
import "../chunk-JD7BAH7U.mjs";
|
|
5
5
|
import "../chunk-SPCZTZCY.mjs";
|
|
6
|
-
import "../chunk-
|
|
6
|
+
import "../chunk-DDHJCFFV.mjs";
|
|
7
7
|
import "../chunk-YULKJPY3.mjs";
|
|
8
8
|
import "../chunk-YWITCRBI.mjs";
|
|
9
|
-
import "../chunk-
|
|
10
|
-
import "../chunk-DY63PD22.mjs";
|
|
9
|
+
import "../chunk-K6EV2CNB.mjs";
|
|
11
10
|
import "../chunk-SKC7AJIV.mjs";
|
|
12
11
|
export {
|
|
13
12
|
extract
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { FetchChatCompletionParams, fetchAndDecodeChatCompletion, fetchAndDecodeChatCompletionAsText, fetchChatCompletion } from './fetch-chat-completion.js';
|
|
2
1
|
export { extract } from './extract.js';
|
|
3
2
|
import '@copilotkit/shared';
|
|
4
3
|
import '../context/copilot-context.js';
|
|
4
|
+
import '@copilotkit/runtime-client-gql';
|
|
5
5
|
import '../types/frontend-action.js';
|
|
6
6
|
import 'react';
|
|
7
7
|
import '../hooks/use-tree.js';
|
package/dist/utils/index.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
5
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
7
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
8
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
7
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
10
8
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -31,14 +29,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
31
29
|
}
|
|
32
30
|
return to;
|
|
33
31
|
};
|
|
34
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
35
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
36
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
37
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
38
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
39
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
40
|
-
mod
|
|
41
|
-
));
|
|
42
32
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
43
33
|
var __async = (__this, __arguments, generator) => {
|
|
44
34
|
return new Promise((resolve, reject) => {
|
|
@@ -64,99 +54,23 @@ var __async = (__this, __arguments, generator) => {
|
|
|
64
54
|
// src/utils/index.ts
|
|
65
55
|
var utils_exports = {};
|
|
66
56
|
__export(utils_exports, {
|
|
67
|
-
extract: () => extract
|
|
68
|
-
fetchAndDecodeChatCompletion: () => fetchAndDecodeChatCompletion,
|
|
69
|
-
fetchAndDecodeChatCompletionAsText: () => fetchAndDecodeChatCompletionAsText,
|
|
70
|
-
fetchChatCompletion: () => fetchChatCompletion
|
|
57
|
+
extract: () => extract
|
|
71
58
|
});
|
|
72
59
|
module.exports = __toCommonJS(utils_exports);
|
|
73
60
|
|
|
74
|
-
// src/utils/fetch-chat-completion.ts
|
|
75
|
-
var import_shared = require("@copilotkit/shared");
|
|
76
|
-
function fetchChatCompletion(_0) {
|
|
77
|
-
return __async(this, arguments, function* ({
|
|
78
|
-
copilotConfig,
|
|
79
|
-
model,
|
|
80
|
-
messages,
|
|
81
|
-
tools,
|
|
82
|
-
temperature,
|
|
83
|
-
headers,
|
|
84
|
-
body,
|
|
85
|
-
signal,
|
|
86
|
-
toolChoice
|
|
87
|
-
}) {
|
|
88
|
-
temperature || (temperature = 0.5);
|
|
89
|
-
tools || (tools = []);
|
|
90
|
-
const cleanedMessages = messages.map((message) => {
|
|
91
|
-
const { content, role, name, function_call } = message;
|
|
92
|
-
return { content, role, name, function_call };
|
|
93
|
-
});
|
|
94
|
-
toolChoice || (toolChoice = "auto");
|
|
95
|
-
const response = yield fetch(copilotConfig.chatApiEndpoint, {
|
|
96
|
-
method: "POST",
|
|
97
|
-
headers: __spreadValues(__spreadValues({
|
|
98
|
-
"Content-Type": "application/json"
|
|
99
|
-
}, copilotConfig.headers), headers ? __spreadValues({}, headers) : {}),
|
|
100
|
-
body: JSON.stringify(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({
|
|
101
|
-
model,
|
|
102
|
-
messages: cleanedMessages,
|
|
103
|
-
stream: true
|
|
104
|
-
}, 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 } : {})),
|
|
105
|
-
signal,
|
|
106
|
-
credentials: copilotConfig.credentials
|
|
107
|
-
});
|
|
108
|
-
return response;
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
function excludeBackendOnlyProps(copilotConfig) {
|
|
112
|
-
var _a;
|
|
113
|
-
const backendOnlyProps = (_a = copilotConfig.backendOnlyProps) != null ? _a : {};
|
|
114
|
-
if (Object.keys(backendOnlyProps).length > 0) {
|
|
115
|
-
return {
|
|
116
|
-
[import_shared.EXCLUDE_FROM_FORWARD_PROPS_KEYS]: Object.keys(backendOnlyProps)
|
|
117
|
-
};
|
|
118
|
-
} else {
|
|
119
|
-
return {};
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
function fetchAndDecodeChatCompletion(params) {
|
|
123
|
-
return __async(this, null, function* () {
|
|
124
|
-
const response = yield fetchChatCompletion(params);
|
|
125
|
-
if (!response.ok || !response.body) {
|
|
126
|
-
response.events = null;
|
|
127
|
-
} else {
|
|
128
|
-
const events = yield (0, import_shared.decodeChatCompletion)((0, import_shared.parseChatCompletion)(response.body));
|
|
129
|
-
response.events = events;
|
|
130
|
-
}
|
|
131
|
-
return response;
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
function fetchAndDecodeChatCompletionAsText(params) {
|
|
135
|
-
return __async(this, null, function* () {
|
|
136
|
-
const response = yield fetchChatCompletion(params);
|
|
137
|
-
if (!response.ok || !response.body) {
|
|
138
|
-
response.events = null;
|
|
139
|
-
} else {
|
|
140
|
-
const events = yield (0, import_shared.decodeChatCompletionAsText)(
|
|
141
|
-
(0, import_shared.decodeChatCompletion)((0, import_shared.parseChatCompletion)(response.body))
|
|
142
|
-
);
|
|
143
|
-
response.events = events;
|
|
144
|
-
}
|
|
145
|
-
return response;
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
|
|
149
61
|
// src/utils/extract.ts
|
|
150
|
-
var
|
|
62
|
+
var import_shared2 = require("@copilotkit/shared");
|
|
63
|
+
var import_runtime_client_gql = require("@copilotkit/runtime-client-gql");
|
|
151
64
|
|
|
152
65
|
// src/components/copilot-provider/copilotkit.tsx
|
|
153
66
|
var import_react = require("react");
|
|
154
|
-
var
|
|
67
|
+
var import_shared = require("@copilotkit/shared");
|
|
155
68
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
156
69
|
var defaultCopilotContextCategories = ["global"];
|
|
157
70
|
|
|
158
71
|
// src/utils/extract.ts
|
|
159
|
-
var
|
|
72
|
+
var import_runtime_client_gql2 = require("@copilotkit/runtime-client-gql");
|
|
73
|
+
var import_runtime_client_gql3 = require("@copilotkit/runtime-client-gql");
|
|
160
74
|
function extract(_0) {
|
|
161
75
|
return __async(this, arguments, function* ({
|
|
162
76
|
context,
|
|
@@ -184,51 +98,64 @@ function extract(_0) {
|
|
|
184
98
|
if (includeReadable) {
|
|
185
99
|
contextString += context.getContextString([], defaultCopilotContextCategories);
|
|
186
100
|
}
|
|
187
|
-
const systemMessage = {
|
|
188
|
-
id: "system",
|
|
101
|
+
const systemMessage = new import_runtime_client_gql.TextMessage({
|
|
189
102
|
content: makeSystemMessage(contextString, instructions),
|
|
190
|
-
role:
|
|
191
|
-
};
|
|
192
|
-
const headers = __spreadValues(__spreadValues({}, context.copilotApiConfig.headers || {}), context.copilotApiConfig.publicApiKey ? { [import_shared3.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: context.copilotApiConfig.publicApiKey } : {});
|
|
193
|
-
const response = yield fetchAndDecodeChatCompletion({
|
|
194
|
-
copilotConfig: context.copilotApiConfig,
|
|
195
|
-
messages: includeMessages ? [systemMessage, ...messages] : [systemMessage],
|
|
196
|
-
tools: context.getChatCompletionFunctionDescriptions({ extract: action }),
|
|
197
|
-
headers,
|
|
198
|
-
body: context.copilotApiConfig.body,
|
|
199
|
-
toolChoice: { type: "function", function: { name: "extract" } },
|
|
200
|
-
signal: abortSignal
|
|
103
|
+
role: import_runtime_client_gql.Role.System
|
|
201
104
|
});
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
105
|
+
const headers = __spreadValues(__spreadValues({}, context.copilotApiConfig.headers || {}), context.copilotApiConfig.publicApiKey ? { [import_shared2.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER]: context.copilotApiConfig.publicApiKey } : {});
|
|
106
|
+
const runtimeClient = new import_runtime_client_gql2.CopilotRuntimeClient({
|
|
107
|
+
url: context.copilotApiConfig.chatApiEndpoint,
|
|
108
|
+
publicApiKey: context.copilotApiConfig.publicApiKey,
|
|
109
|
+
headers
|
|
110
|
+
});
|
|
111
|
+
const response = import_runtime_client_gql2.CopilotRuntimeClient.asStream(
|
|
112
|
+
runtimeClient.generateCopilotResponse(
|
|
113
|
+
{
|
|
114
|
+
frontend: {
|
|
115
|
+
actions: [
|
|
116
|
+
{
|
|
117
|
+
name: action.name,
|
|
118
|
+
description: action.description || "",
|
|
119
|
+
jsonSchema: JSON.stringify((0, import_shared2.actionParametersToJsonSchema)(action.parameters || []))
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
},
|
|
123
|
+
messages: (0, import_runtime_client_gql3.convertMessagesToGqlInput)(
|
|
124
|
+
includeMessages ? [systemMessage, ...messages] : [systemMessage]
|
|
125
|
+
)
|
|
126
|
+
},
|
|
127
|
+
context.copilotApiConfig.properties,
|
|
128
|
+
abortSignal
|
|
129
|
+
)
|
|
130
|
+
);
|
|
131
|
+
const reader = response.getReader();
|
|
206
132
|
let isInitial = true;
|
|
133
|
+
let actionExecutionMessage = void 0;
|
|
207
134
|
while (true) {
|
|
208
135
|
const { done, value } = yield reader.read();
|
|
209
136
|
if (done) {
|
|
210
137
|
break;
|
|
211
138
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
args: partialArguments
|
|
218
|
-
});
|
|
219
|
-
isInitial = false;
|
|
220
|
-
} catch (e) {
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
if (value.type === "function") {
|
|
224
|
-
stream == null ? void 0 : stream({
|
|
225
|
-
status: "complete",
|
|
226
|
-
args: value.arguments
|
|
227
|
-
});
|
|
228
|
-
return value.arguments;
|
|
139
|
+
actionExecutionMessage = (0, import_runtime_client_gql.convertGqlOutputToMessages)(
|
|
140
|
+
value.generateCopilotResponse.messages
|
|
141
|
+
).find((msg) => msg instanceof import_runtime_client_gql.ActionExecutionMessage);
|
|
142
|
+
if (!actionExecutionMessage) {
|
|
143
|
+
continue;
|
|
229
144
|
}
|
|
145
|
+
stream == null ? void 0 : stream({
|
|
146
|
+
status: isInitial ? "initial" : "inProgress",
|
|
147
|
+
args: actionExecutionMessage.arguments
|
|
148
|
+
});
|
|
149
|
+
isInitial = false;
|
|
150
|
+
}
|
|
151
|
+
if (!actionExecutionMessage) {
|
|
152
|
+
throw new Error("extract() failed: No function call occurred");
|
|
230
153
|
}
|
|
231
|
-
|
|
154
|
+
stream == null ? void 0 : stream({
|
|
155
|
+
status: "complete",
|
|
156
|
+
args: actionExecutionMessage.arguments
|
|
157
|
+
});
|
|
158
|
+
return actionExecutionMessage.arguments;
|
|
232
159
|
});
|
|
233
160
|
}
|
|
234
161
|
function makeSystemMessage(contextString, instructions) {
|
|
@@ -243,7 +170,7 @@ The user has provided you with the following context:
|
|
|
243
170
|
${contextString}
|
|
244
171
|
\`\`\`
|
|
245
172
|
|
|
246
|
-
They have also provided you with a function you MUST call to initiate actions on their behalf.
|
|
173
|
+
They have also provided you with a function called extract you MUST call to initiate actions on their behalf.
|
|
247
174
|
|
|
248
175
|
Please assist them as best you can.
|
|
249
176
|
|
|
@@ -260,9 +187,6 @@ Any additional messages provided are for providing context only and should not b
|
|
|
260
187
|
}
|
|
261
188
|
// Annotate the CommonJS export names for ESM import in node:
|
|
262
189
|
0 && (module.exports = {
|
|
263
|
-
extract
|
|
264
|
-
fetchAndDecodeChatCompletion,
|
|
265
|
-
fetchAndDecodeChatCompletionAsText,
|
|
266
|
-
fetchChatCompletion
|
|
190
|
+
extract
|
|
267
191
|
});
|
|
268
192
|
//# sourceMappingURL=index.js.map
|