@copilotkit/react-core 0.19.0-alpha.1 → 0.20.0-tools.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.
Files changed (96) hide show
  1. package/.turbo/turbo-build.log +211 -197
  2. package/CHANGELOG.md +26 -0
  3. package/dist/{chunk-VP2EU4US.mjs → chunk-4LKP4DMT.mjs} +3 -3
  4. package/dist/{chunk-4CFJ6A6A.mjs → chunk-4OWTRVNI.mjs} +6 -2
  5. package/dist/chunk-4OWTRVNI.mjs.map +1 -0
  6. package/dist/{chunk-IQEWY7P4.mjs → chunk-ABXVFQLN.mjs} +46 -29
  7. package/dist/chunk-ABXVFQLN.mjs.map +1 -0
  8. package/dist/{chunk-YOXWT7I6.mjs → chunk-CPEUPJQJ.mjs} +2 -2
  9. package/dist/{chunk-UAKLDQMP.mjs → chunk-JIKWSWIX.mjs} +4 -4
  10. package/dist/chunk-JIKWSWIX.mjs.map +1 -0
  11. package/dist/{chunk-DGUVNY3V.mjs → chunk-K2LVBFRY.mjs} +2 -2
  12. package/dist/{chunk-GBZZPQ5X.mjs → chunk-KAZJPE2I.mjs} +14 -8
  13. package/dist/chunk-KAZJPE2I.mjs.map +1 -0
  14. package/dist/{chunk-5GS7FQPW.mjs → chunk-KZNQLITJ.mjs} +5 -5
  15. package/dist/chunk-KZNQLITJ.mjs.map +1 -0
  16. package/dist/chunk-LUGEI4YQ.mjs +1 -0
  17. package/dist/chunk-LUGEI4YQ.mjs.map +1 -0
  18. package/dist/chunk-TZPIY754.mjs +102 -0
  19. package/dist/chunk-TZPIY754.mjs.map +1 -0
  20. package/dist/{chunk-IQH5AQQC.mjs → chunk-XBLCD24W.mjs} +2 -2
  21. package/dist/components/copilot-provider/copilotkit.js +12 -6
  22. package/dist/components/copilot-provider/copilotkit.js.map +1 -1
  23. package/dist/components/copilot-provider/copilotkit.mjs +2 -2
  24. package/dist/components/copilot-provider/index.js +12 -6
  25. package/dist/components/copilot-provider/index.js.map +1 -1
  26. package/dist/components/copilot-provider/index.mjs +2 -2
  27. package/dist/components/index.js +12 -6
  28. package/dist/components/index.js.map +1 -1
  29. package/dist/components/index.mjs +2 -2
  30. package/dist/context/copilot-context.d.ts +5 -4
  31. package/dist/context/copilot-context.js +7 -2
  32. package/dist/context/copilot-context.js.map +1 -1
  33. package/dist/context/copilot-context.mjs +5 -3
  34. package/dist/context/index.d.ts +1 -1
  35. package/dist/context/index.js +7 -2
  36. package/dist/context/index.js.map +1 -1
  37. package/dist/context/index.mjs +5 -3
  38. package/dist/hooks/index.js +47 -29
  39. package/dist/hooks/index.js.map +1 -1
  40. package/dist/hooks/index.mjs +8 -8
  41. package/dist/hooks/use-chat.d.ts +2 -2
  42. package/dist/hooks/use-chat.js +46 -28
  43. package/dist/hooks/use-chat.js.map +1 -1
  44. package/dist/hooks/use-chat.mjs +2 -2
  45. package/dist/hooks/use-copilot-chat.js +47 -29
  46. package/dist/hooks/use-copilot-chat.js.map +1 -1
  47. package/dist/hooks/use-copilot-chat.mjs +5 -5
  48. package/dist/hooks/use-make-copilot-actionable.js.map +1 -1
  49. package/dist/hooks/use-make-copilot-actionable.mjs +2 -2
  50. package/dist/hooks/use-make-copilot-document-readable.js.map +1 -1
  51. package/dist/hooks/use-make-copilot-document-readable.mjs +2 -2
  52. package/dist/hooks/use-make-copilot-readable.js.map +1 -1
  53. package/dist/hooks/use-make-copilot-readable.mjs +2 -2
  54. package/dist/index.d.ts +2 -1
  55. package/dist/index.js +154 -35
  56. package/dist/index.js.map +1 -1
  57. package/dist/index.mjs +18 -11
  58. package/dist/lib/copilot-task.d.ts +34 -0
  59. package/dist/lib/copilot-task.js +206 -0
  60. package/dist/lib/copilot-task.js.map +1 -0
  61. package/dist/lib/copilot-task.mjs +16 -0
  62. package/dist/lib/copilot-task.mjs.map +1 -0
  63. package/dist/lib/index.d.ts +6 -0
  64. package/dist/lib/index.js +206 -0
  65. package/dist/lib/index.js.map +1 -0
  66. package/dist/lib/index.mjs +17 -0
  67. package/dist/lib/index.mjs.map +1 -0
  68. package/dist/openai-assistants/hooks/index.js.map +1 -1
  69. package/dist/openai-assistants/hooks/index.mjs +3 -3
  70. package/dist/openai-assistants/hooks/use-copilot-chat-v2.js.map +1 -1
  71. package/dist/openai-assistants/hooks/use-copilot-chat-v2.mjs +3 -3
  72. package/dist/openai-assistants/index.js.map +1 -1
  73. package/dist/openai-assistants/index.mjs +3 -3
  74. package/dist/utils/fetch-chat-completion.d.ts +3 -3
  75. package/dist/utils/fetch-chat-completion.js +3 -3
  76. package/dist/utils/fetch-chat-completion.js.map +1 -1
  77. package/dist/utils/fetch-chat-completion.mjs +1 -1
  78. package/package.json +4 -4
  79. package/src/components/copilot-provider/copilotkit.tsx +17 -8
  80. package/src/context/copilot-context.tsx +11 -3
  81. package/src/context/index.ts +1 -1
  82. package/src/hooks/use-chat.ts +52 -30
  83. package/src/hooks/use-copilot-chat.ts +3 -3
  84. package/src/index.tsx +1 -0
  85. package/src/lib/copilot-task.ts +131 -0
  86. package/src/lib/index.ts +1 -0
  87. package/src/utils/fetch-chat-completion.ts +6 -6
  88. package/dist/chunk-4CFJ6A6A.mjs.map +0 -1
  89. package/dist/chunk-5GS7FQPW.mjs.map +0 -1
  90. package/dist/chunk-GBZZPQ5X.mjs.map +0 -1
  91. package/dist/chunk-IQEWY7P4.mjs.map +0 -1
  92. package/dist/chunk-UAKLDQMP.mjs.map +0 -1
  93. /package/dist/{chunk-VP2EU4US.mjs.map → chunk-4LKP4DMT.mjs.map} +0 -0
  94. /package/dist/{chunk-YOXWT7I6.mjs.map → chunk-CPEUPJQJ.mjs.map} +0 -0
  95. /package/dist/{chunk-DGUVNY3V.mjs.map → chunk-K2LVBFRY.mjs.map} +0 -0
  96. /package/dist/{chunk-IQH5AQQC.mjs.map → chunk-XBLCD24W.mjs.map} +0 -0
package/dist/index.mjs CHANGED
@@ -1,49 +1,55 @@
1
+ import "./chunk-EFZPSZWO.mjs";
2
+ import "./chunk-LUGEI4YQ.mjs";
3
+ import {
4
+ CopilotTask
5
+ } from "./chunk-TZPIY754.mjs";
1
6
  import "./chunk-7GFKOIO7.mjs";
2
7
  import "./chunk-BABVSMJR.mjs";
3
8
  import {
4
9
  useCopilotChatV2
5
- } from "./chunk-VP2EU4US.mjs";
10
+ } from "./chunk-4LKP4DMT.mjs";
6
11
  import "./chunk-FRAKUJWH.mjs";
7
12
  import {
8
13
  processMessageStream
9
14
  } from "./chunk-MZ5UN3BY.mjs";
10
- import "./chunk-EFZPSZWO.mjs";
11
15
  import "./chunk-VNRDQJXW.mjs";
12
16
  import "./chunk-5UGLWBZJ.mjs";
13
17
  import {
14
18
  useMakeCopilotActionable
15
- } from "./chunk-DGUVNY3V.mjs";
19
+ } from "./chunk-K2LVBFRY.mjs";
16
20
  import {
17
21
  useMakeCopilotDocumentReadable
18
- } from "./chunk-IQH5AQQC.mjs";
22
+ } from "./chunk-XBLCD24W.mjs";
19
23
  import {
20
24
  useMakeCopilotReadable
21
- } from "./chunk-YOXWT7I6.mjs";
25
+ } from "./chunk-CPEUPJQJ.mjs";
22
26
  import {
23
27
  useCopilotChat
24
- } from "./chunk-5GS7FQPW.mjs";
28
+ } from "./chunk-KZNQLITJ.mjs";
25
29
  import "./chunk-JD7BAH7U.mjs";
26
30
  import "./chunk-SPCZTZCY.mjs";
27
31
  import {
28
32
  CopilotKit,
29
33
  defaultCopilotContextCategories
30
- } from "./chunk-GBZZPQ5X.mjs";
34
+ } from "./chunk-KAZJPE2I.mjs";
31
35
  import "./chunk-F2JIAPZQ.mjs";
32
36
  import "./chunk-VUY2K2DI.mjs";
33
37
  import {
34
- CopilotContext
35
- } from "./chunk-4CFJ6A6A.mjs";
36
- import "./chunk-IQEWY7P4.mjs";
38
+ CopilotContext,
39
+ useCopilotContext
40
+ } from "./chunk-4OWTRVNI.mjs";
41
+ import "./chunk-ABXVFQLN.mjs";
37
42
  import {
38
43
  fetchAndDecodeChatCompletion,
39
44
  fetchAndDecodeChatCompletionAsText,
40
45
  fetchChatCompletion
41
- } from "./chunk-UAKLDQMP.mjs";
46
+ } from "./chunk-JIKWSWIX.mjs";
42
47
  import "./chunk-YULKJPY3.mjs";
43
48
  import "./chunk-MRXNTQOX.mjs";
44
49
  export {
45
50
  CopilotContext,
46
51
  CopilotKit,
52
+ CopilotTask,
47
53
  defaultCopilotContextCategories,
48
54
  fetchAndDecodeChatCompletion,
49
55
  fetchAndDecodeChatCompletionAsText,
@@ -51,6 +57,7 @@ export {
51
57
  processMessageStream,
52
58
  useCopilotChat,
53
59
  useCopilotChatV2,
60
+ useCopilotContext,
54
61
  useMakeCopilotActionable,
55
62
  useMakeCopilotDocumentReadable,
56
63
  useMakeCopilotReadable
@@ -0,0 +1,34 @@
1
+ import { AnnotatedFunction } from '@copilotkit/shared';
2
+ import { CopilotContextParams } from '../context/copilot-context.js';
3
+ import 'react';
4
+ import '../hooks/use-tree.js';
5
+ import '../types/document-pointer.js';
6
+
7
+ interface CopilotTaskConfig {
8
+ /**
9
+ * The instructions to be given to the assistant.
10
+ */
11
+ instructions: string;
12
+ /**
13
+ * Function definitions to be sent to the API.
14
+ */
15
+ functions?: AnnotatedFunction<any[]>[];
16
+ /**
17
+ * Whether to include the copilot readable context in the task.
18
+ */
19
+ includeCopilotReadable?: boolean;
20
+ /**
21
+ * Whether to include functions defined via useMakeCopilotActionable in the task.
22
+ */
23
+ includeCopilotActionable?: boolean;
24
+ }
25
+ declare class CopilotTask<T = any> {
26
+ private instructions;
27
+ private functions;
28
+ private includeCopilotReadable;
29
+ private includeCopilotActionable;
30
+ constructor(config: CopilotTaskConfig);
31
+ run(context: CopilotContextParams, data?: T): Promise<void>;
32
+ }
33
+
34
+ export { CopilotTask, CopilotTaskConfig };
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
10
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __spreadValues = (a, b) => {
12
+ for (var prop in b || (b = {}))
13
+ if (__hasOwnProp.call(b, prop))
14
+ __defNormalProp(a, prop, b[prop]);
15
+ if (__getOwnPropSymbols)
16
+ for (var prop of __getOwnPropSymbols(b)) {
17
+ if (__propIsEnum.call(b, prop))
18
+ __defNormalProp(a, prop, b[prop]);
19
+ }
20
+ return a;
21
+ };
22
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
23
+ var __export = (target, all) => {
24
+ for (var name in all)
25
+ __defProp(target, name, { get: all[name], enumerable: true });
26
+ };
27
+ var __copyProps = (to, from, except, desc) => {
28
+ if (from && typeof from === "object" || typeof from === "function") {
29
+ for (let key of __getOwnPropNames(from))
30
+ if (!__hasOwnProp.call(to, key) && key !== except)
31
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
32
+ }
33
+ return to;
34
+ };
35
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
36
+ var __async = (__this, __arguments, generator) => {
37
+ return new Promise((resolve, reject) => {
38
+ var fulfilled = (value) => {
39
+ try {
40
+ step(generator.next(value));
41
+ } catch (e) {
42
+ reject(e);
43
+ }
44
+ };
45
+ var rejected = (value) => {
46
+ try {
47
+ step(generator.throw(value));
48
+ } catch (e) {
49
+ reject(e);
50
+ }
51
+ };
52
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
53
+ step((generator = generator.apply(__this, __arguments)).next());
54
+ });
55
+ };
56
+
57
+ // src/lib/copilot-task.ts
58
+ var copilot_task_exports = {};
59
+ __export(copilot_task_exports, {
60
+ CopilotTask: () => CopilotTask
61
+ });
62
+ module.exports = __toCommonJS(copilot_task_exports);
63
+
64
+ // src/components/copilot-provider/copilotkit.tsx
65
+ var import_react = require("react");
66
+ var import_shared = require("@copilotkit/shared");
67
+ var import_jsx_runtime = require("react/jsx-runtime");
68
+ var defaultCopilotContextCategories = ["global"];
69
+
70
+ // src/utils/fetch-chat-completion.ts
71
+ var import_shared2 = require("@copilotkit/shared");
72
+ function fetchChatCompletion(_0) {
73
+ return __async(this, arguments, function* ({
74
+ copilotConfig,
75
+ model,
76
+ messages,
77
+ tools,
78
+ temperature,
79
+ headers,
80
+ body,
81
+ signal
82
+ }) {
83
+ temperature || (temperature = 0.5);
84
+ tools || (tools = []);
85
+ const cleanedMessages = messages.map((message) => {
86
+ const { content, role, name, function_call } = message;
87
+ return { content, role, name, function_call };
88
+ });
89
+ const response = yield fetch(copilotConfig.chatApiEndpoint, {
90
+ method: "POST",
91
+ headers: __spreadValues(__spreadValues({
92
+ "Content-Type": "application/json"
93
+ }, copilotConfig.headers), headers ? __spreadValues({}, headers) : {}),
94
+ body: JSON.stringify(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({
95
+ model,
96
+ messages: cleanedMessages,
97
+ stream: true
98
+ }, tools.length ? { tools } : {}), temperature ? { temperature } : {}), tools.length != 0 ? { tool_choice: "auto" } : {}), copilotConfig.body), body ? __spreadValues({}, body) : {})),
99
+ signal
100
+ });
101
+ return response;
102
+ });
103
+ }
104
+ function fetchAndDecodeChatCompletion(params) {
105
+ return __async(this, null, function* () {
106
+ const response = yield fetchChatCompletion(params);
107
+ if (!response.ok || !response.body) {
108
+ return __spreadProps(__spreadValues({}, response), { events: null });
109
+ }
110
+ const events = yield (0, import_shared2.decodeChatCompletion)((0, import_shared2.parseChatCompletion)(response.body));
111
+ return __spreadProps(__spreadValues({}, response), { events });
112
+ });
113
+ }
114
+
115
+ // src/lib/copilot-task.ts
116
+ var CopilotTask = class {
117
+ constructor(config) {
118
+ this.instructions = config.instructions;
119
+ this.functions = config.functions || [];
120
+ this.includeCopilotReadable = config.includeCopilotReadable || true;
121
+ this.includeCopilotActionable = config.includeCopilotActionable || true;
122
+ }
123
+ run(context, data) {
124
+ return __async(this, null, function* () {
125
+ const entryPoints = this.includeCopilotActionable ? Object.assign({}, context.entryPoints) : {};
126
+ for (const fn of this.functions) {
127
+ entryPoints[fn.name] = fn;
128
+ }
129
+ let contextString = "";
130
+ if (data) {
131
+ contextString = (typeof data === "string" ? data : JSON.stringify(data)) + "\n\n";
132
+ }
133
+ if (this.includeCopilotReadable) {
134
+ contextString += context.getContextString([], defaultCopilotContextCategories);
135
+ }
136
+ const systemMessage = {
137
+ id: "system",
138
+ content: taskSystemMessage(contextString, this.instructions),
139
+ role: "system"
140
+ };
141
+ const messages = [systemMessage];
142
+ const response = yield fetchAndDecodeChatCompletion({
143
+ copilotConfig: context.copilotApiConfig,
144
+ messages,
145
+ tools: context.getChatCompletionFunctionDescriptions(entryPoints),
146
+ headers: context.copilotApiConfig.headers,
147
+ body: context.copilotApiConfig.body
148
+ });
149
+ if (!response.events) {
150
+ throw new Error("Failed to execute task");
151
+ }
152
+ const reader = response.events.getReader();
153
+ let functionCalls = [];
154
+ while (true) {
155
+ const { done, value } = yield reader.read();
156
+ if (done) {
157
+ break;
158
+ }
159
+ if (value.type === "function") {
160
+ functionCalls.push({
161
+ name: value.name,
162
+ arguments: JSON.stringify(value.arguments)
163
+ });
164
+ break;
165
+ }
166
+ }
167
+ if (!functionCalls.length) {
168
+ throw new Error("No function call occurred");
169
+ }
170
+ const functionCallHandler = context.getFunctionCallHandler(entryPoints);
171
+ for (const functionCall of functionCalls) {
172
+ yield functionCallHandler(messages, functionCall);
173
+ }
174
+ });
175
+ }
176
+ };
177
+ function taskSystemMessage(contextString, instructions) {
178
+ return `
179
+ Please act as an efficient, competent, conscientious, and industrious professional assistant.
180
+
181
+ 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.
182
+ Always be polite and respectful, and prefer brevity over verbosity.
183
+
184
+ The user has provided you with the following context:
185
+ \`\`\`
186
+ ${contextString}
187
+ \`\`\`
188
+
189
+ They have also provided you with functions you can call to initiate actions on their behalf.
190
+
191
+ Please assist them as best you can.
192
+
193
+ This is not a conversation, so please do not ask questions. Just call a function without saying anything else.
194
+
195
+ The user has given you the following task to complete:
196
+
197
+ \`\`\`
198
+ ${instructions}
199
+ \`\`\`
200
+ `;
201
+ }
202
+ // Annotate the CommonJS export names for ESM import in node:
203
+ 0 && (module.exports = {
204
+ CopilotTask
205
+ });
206
+ //# sourceMappingURL=copilot-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/copilot-task.ts","../../src/components/copilot-provider/copilotkit.tsx","../../src/utils/fetch-chat-completion.ts"],"sourcesContent":["import { AnnotatedFunction, FunctionCall, Message } from \"@copilotkit/shared\";\nimport { CopilotContextParams } from \"../context\";\nimport { defaultCopilotContextCategories } from \"../components\";\nimport { fetchAndDecodeChatCompletion } from \"../utils/fetch-chat-completion\";\n\nexport interface CopilotTaskConfig {\n /**\n * The instructions to be given to the assistant.\n */\n instructions: string;\n /**\n * Function definitions to be sent to the API.\n */\n functions?: AnnotatedFunction<any[]>[];\n /**\n * Whether to include the copilot readable context in the task.\n */\n includeCopilotReadable?: boolean;\n\n /**\n * Whether to include functions defined via useMakeCopilotActionable in the task.\n */\n includeCopilotActionable?: boolean;\n}\n\nexport class CopilotTask<T = any> {\n private instructions: string;\n private functions: AnnotatedFunction<any[]>[];\n private includeCopilotReadable: boolean;\n private includeCopilotActionable: boolean;\n\n constructor(config: CopilotTaskConfig) {\n this.instructions = config.instructions;\n this.functions = config.functions || [];\n this.includeCopilotReadable = config.includeCopilotReadable || true;\n this.includeCopilotActionable = config.includeCopilotActionable || true;\n }\n\n async run(context: CopilotContextParams, data?: T): Promise<void> {\n const entryPoints = this.includeCopilotActionable ? Object.assign({}, context.entryPoints) : {};\n\n // merge functions into entry points\n for (const fn of this.functions) {\n entryPoints[fn.name] = fn;\n }\n\n let contextString = \"\";\n\n if (data) {\n contextString = (typeof data === \"string\" ? data : JSON.stringify(data)) + \"\\n\\n\";\n }\n\n if (this.includeCopilotReadable) {\n contextString += context.getContextString([], defaultCopilotContextCategories);\n }\n\n const systemMessage: Message = {\n id: \"system\",\n content: taskSystemMessage(contextString, this.instructions),\n role: \"system\",\n };\n\n const messages = [systemMessage];\n\n const response = await fetchAndDecodeChatCompletion({\n copilotConfig: context.copilotApiConfig,\n messages: messages,\n tools: context.getChatCompletionFunctionDescriptions(entryPoints),\n headers: context.copilotApiConfig.headers,\n body: context.copilotApiConfig.body,\n });\n\n if (!response.events) {\n throw new Error(\"Failed to execute task\");\n }\n\n const reader = response.events.getReader();\n let functionCalls: FunctionCall[] = [];\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n if (value.type === \"function\") {\n functionCalls.push({\n name: value.name,\n arguments: JSON.stringify(value.arguments),\n });\n break;\n }\n }\n\n if (!functionCalls.length) {\n throw new Error(\"No function call occurred\");\n }\n\n const functionCallHandler = context.getFunctionCallHandler(entryPoints);\n for (const functionCall of functionCalls) {\n await functionCallHandler(messages, functionCall);\n }\n }\n}\n\nfunction taskSystemMessage(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 functions you can 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 a function without saying anything else.\n\nThe user has given you the following task to complete:\n\n\\`\\`\\`\n${instructions}\n\\`\\`\\`\n`;\n}\n","\"use client\";\n\nimport { FunctionDefinition } from \"@copilotkit/shared\";\nimport { useCallback, useState } from \"react\";\nimport { CopilotContext, CopilotApiConfig } from \"../../context/copilot-context\";\nimport useTree from \"../../hooks/use-tree\";\nimport { DocumentPointer } from \"../../types\";\nimport {\n FunctionCallHandler,\n AnnotatedFunction,\n annotatedFunctionToChatCompletionFunction,\n} from \"@copilotkit/shared\";\nimport useFlatCategoryStore from \"../../hooks/use-flat-category-store\";\nimport { StandardCopilotApiConfig } from \"./standard-copilot-api-config\";\nimport { CopilotKitProps } from \"./copilotkit-props\";\nimport { ToolDefinition } from \"@copilotkit/shared\";\n\n/**\n * The CopilotKit component.\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: The backend can use OpenAI, or you can bring your own LLM.\n * For examples of the backend api implementation, see `examples/next-openai` usage (under `src/api/copilotkit`),\n * or read the documentation at https://docs.copilotkit.ai\n * In particular, Getting-Started > Quickstart-Backend: https://docs.copilotkit.ai/getting-started/quickstart-backend\n *\n * Example usage:\n * ```\n * <CopilotKit url=\"https://your.copilotkit.api\">\n * <App />\n * </CopilotKit>\n * ```\n *\n * or\n *\n * ```\n * const copilotApiConfig = new StandardCopilotApiConfig(\n * \"https://your.copilotkit.api/v1\",\n * \"https://your.copilotkit.api/v2\",\n * {},\n * {}\n * );\n *\n * // ...\n *\n * <CopilotKit chatApiConfig={copilotApiConfig}>\n * <App />\n * </CopilotKit>\n * ```\n *\n * @param props - The props for the component.\n * @returns The CopilotKit component.\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 const [entryPoints, setEntryPoints] = useState<Record<string, AnnotatedFunction<any[]>>>({});\n\n const { addElement, removeElement, printTree } = useTree();\n\n const {\n addElement: addDocument,\n removeElement: removeDocument,\n allElements: allDocuments,\n } = useFlatCategoryStore<DocumentPointer>();\n\n const setEntryPoint = useCallback((id: string, entryPoint: AnnotatedFunction<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, AnnotatedFunction<any[]>>) => {\n return entryPointsToChatCompletionFunctions(Object.values(customEntryPoints || entryPoints));\n },\n [entryPoints],\n );\n\n const getFunctionCallHandler = useCallback(\n (customEntryPoints?: Record<string, AnnotatedFunction<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 // get the appropriate CopilotApiConfig from the props\n const copilotApiConfig: CopilotApiConfig = new StandardCopilotApiConfig(\n props.url,\n `${props.url}/v2`,\n props.headers || {},\n props.body || {},\n );\n\n return (\n <CopilotContext.Provider\n value={{\n entryPoints,\n getChatCompletionFunctionDescriptions,\n getFunctionCallHandler,\n setEntryPoint,\n removeEntryPoint,\n getContextString,\n addContext,\n removeContext,\n getDocumentsContext,\n addDocumentContext,\n removeDocumentContext,\n copilotApiConfig: copilotApiConfig,\n }}\n >\n {children}\n </CopilotContext.Provider>\n );\n}\n\nexport const defaultCopilotContextCategories = [\"global\"];\n\nfunction entryPointsToFunctionCallHandler(\n entryPoints: AnnotatedFunction<any[]>[],\n): FunctionCallHandler {\n return async (chatMessages, functionCall) => {\n let entrypointsByFunctionName: Record<string, AnnotatedFunction<any[]>> = {};\n for (let entryPoint of entryPoints) {\n entrypointsByFunctionName[entryPoint.name] = entryPoint;\n }\n\n const entryPointFunction = entrypointsByFunctionName[functionCall.name || \"\"];\n if (entryPointFunction) {\n let functionCallArguments: Record<string, any>[] = [];\n if (functionCall.arguments) {\n functionCallArguments = JSON.parse(functionCall.arguments);\n }\n\n const paramsInCorrectOrder: any[] = [];\n for (let arg of entryPointFunction.argumentAnnotations) {\n paramsInCorrectOrder.push(\n functionCallArguments[arg.name as keyof typeof functionCallArguments],\n );\n }\n\n await entryPointFunction.implementation(...paramsInCorrectOrder);\n\n // commented out becasue for now we don't want to return anything\n // const result = await entryPointFunction.implementation(\n // ...parsedFunctionCallArguments\n // );\n // const functionResponse: ChatRequest = {\n // messages: [\n // ...chatMessages,\n // {\n // id: nanoid(),\n // name: functionCall.name,\n // role: 'function' as const,\n // content: JSON.stringify(result),\n // },\n // ],\n // };\n\n // return functionResponse;\n }\n };\n}\n\nfunction entryPointsToChatCompletionFunctions(\n entryPoints: AnnotatedFunction<any[]>[],\n): ToolDefinition[] {\n return entryPoints.map(annotatedFunctionToChatCompletionFunction);\n}\n","import {\n Message,\n ToolDefinition,\n ChatCompletionEvent,\n decodeChatCompletion,\n parseChatCompletion,\n decodeChatCompletionAsText,\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}\n\nexport async function fetchChatCompletion({\n copilotConfig,\n model,\n messages,\n tools,\n temperature,\n headers,\n body,\n signal,\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 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: \"auto\" } : {}),\n ...copilotConfig.body,\n ...(body ? { ...body } : {}),\n }),\n signal,\n });\n\n return response;\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 return { ...response, events: null };\n }\n const events = await decodeChatCompletion(parseChatCompletion(response.body));\n return { ...response, events };\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 return { ...response, events: null };\n }\n const events = await decodeChatCompletionAsText(\n decodeChatCompletion(parseChatCompletion(response.body)),\n );\n return { ...response, events };\n}\n"],"mappings":"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","names":["import_shared"]}
@@ -0,0 +1,16 @@
1
+ import {
2
+ CopilotTask
3
+ } from "../chunk-TZPIY754.mjs";
4
+ import "../chunk-JD7BAH7U.mjs";
5
+ import "../chunk-SPCZTZCY.mjs";
6
+ import "../chunk-KAZJPE2I.mjs";
7
+ import "../chunk-F2JIAPZQ.mjs";
8
+ import "../chunk-VUY2K2DI.mjs";
9
+ import "../chunk-4OWTRVNI.mjs";
10
+ import "../chunk-JIKWSWIX.mjs";
11
+ import "../chunk-YULKJPY3.mjs";
12
+ import "../chunk-MRXNTQOX.mjs";
13
+ export {
14
+ CopilotTask
15
+ };
16
+ //# sourceMappingURL=copilot-task.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,6 @@
1
+ export { CopilotTask, CopilotTaskConfig } from './copilot-task.js';
2
+ import '@copilotkit/shared';
3
+ import '../context/copilot-context.js';
4
+ import 'react';
5
+ import '../hooks/use-tree.js';
6
+ import '../types/document-pointer.js';
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
10
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __spreadValues = (a, b) => {
12
+ for (var prop in b || (b = {}))
13
+ if (__hasOwnProp.call(b, prop))
14
+ __defNormalProp(a, prop, b[prop]);
15
+ if (__getOwnPropSymbols)
16
+ for (var prop of __getOwnPropSymbols(b)) {
17
+ if (__propIsEnum.call(b, prop))
18
+ __defNormalProp(a, prop, b[prop]);
19
+ }
20
+ return a;
21
+ };
22
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
23
+ var __export = (target, all) => {
24
+ for (var name in all)
25
+ __defProp(target, name, { get: all[name], enumerable: true });
26
+ };
27
+ var __copyProps = (to, from, except, desc) => {
28
+ if (from && typeof from === "object" || typeof from === "function") {
29
+ for (let key of __getOwnPropNames(from))
30
+ if (!__hasOwnProp.call(to, key) && key !== except)
31
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
32
+ }
33
+ return to;
34
+ };
35
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
36
+ var __async = (__this, __arguments, generator) => {
37
+ return new Promise((resolve, reject) => {
38
+ var fulfilled = (value) => {
39
+ try {
40
+ step(generator.next(value));
41
+ } catch (e) {
42
+ reject(e);
43
+ }
44
+ };
45
+ var rejected = (value) => {
46
+ try {
47
+ step(generator.throw(value));
48
+ } catch (e) {
49
+ reject(e);
50
+ }
51
+ };
52
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
53
+ step((generator = generator.apply(__this, __arguments)).next());
54
+ });
55
+ };
56
+
57
+ // src/lib/index.ts
58
+ var lib_exports = {};
59
+ __export(lib_exports, {
60
+ CopilotTask: () => CopilotTask
61
+ });
62
+ module.exports = __toCommonJS(lib_exports);
63
+
64
+ // src/components/copilot-provider/copilotkit.tsx
65
+ var import_react = require("react");
66
+ var import_shared = require("@copilotkit/shared");
67
+ var import_jsx_runtime = require("react/jsx-runtime");
68
+ var defaultCopilotContextCategories = ["global"];
69
+
70
+ // src/utils/fetch-chat-completion.ts
71
+ var import_shared2 = require("@copilotkit/shared");
72
+ function fetchChatCompletion(_0) {
73
+ return __async(this, arguments, function* ({
74
+ copilotConfig,
75
+ model,
76
+ messages,
77
+ tools,
78
+ temperature,
79
+ headers,
80
+ body,
81
+ signal
82
+ }) {
83
+ temperature || (temperature = 0.5);
84
+ tools || (tools = []);
85
+ const cleanedMessages = messages.map((message) => {
86
+ const { content, role, name, function_call } = message;
87
+ return { content, role, name, function_call };
88
+ });
89
+ const response = yield fetch(copilotConfig.chatApiEndpoint, {
90
+ method: "POST",
91
+ headers: __spreadValues(__spreadValues({
92
+ "Content-Type": "application/json"
93
+ }, copilotConfig.headers), headers ? __spreadValues({}, headers) : {}),
94
+ body: JSON.stringify(__spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({
95
+ model,
96
+ messages: cleanedMessages,
97
+ stream: true
98
+ }, tools.length ? { tools } : {}), temperature ? { temperature } : {}), tools.length != 0 ? { tool_choice: "auto" } : {}), copilotConfig.body), body ? __spreadValues({}, body) : {})),
99
+ signal
100
+ });
101
+ return response;
102
+ });
103
+ }
104
+ function fetchAndDecodeChatCompletion(params) {
105
+ return __async(this, null, function* () {
106
+ const response = yield fetchChatCompletion(params);
107
+ if (!response.ok || !response.body) {
108
+ return __spreadProps(__spreadValues({}, response), { events: null });
109
+ }
110
+ const events = yield (0, import_shared2.decodeChatCompletion)((0, import_shared2.parseChatCompletion)(response.body));
111
+ return __spreadProps(__spreadValues({}, response), { events });
112
+ });
113
+ }
114
+
115
+ // src/lib/copilot-task.ts
116
+ var CopilotTask = class {
117
+ constructor(config) {
118
+ this.instructions = config.instructions;
119
+ this.functions = config.functions || [];
120
+ this.includeCopilotReadable = config.includeCopilotReadable || true;
121
+ this.includeCopilotActionable = config.includeCopilotActionable || true;
122
+ }
123
+ run(context, data) {
124
+ return __async(this, null, function* () {
125
+ const entryPoints = this.includeCopilotActionable ? Object.assign({}, context.entryPoints) : {};
126
+ for (const fn of this.functions) {
127
+ entryPoints[fn.name] = fn;
128
+ }
129
+ let contextString = "";
130
+ if (data) {
131
+ contextString = (typeof data === "string" ? data : JSON.stringify(data)) + "\n\n";
132
+ }
133
+ if (this.includeCopilotReadable) {
134
+ contextString += context.getContextString([], defaultCopilotContextCategories);
135
+ }
136
+ const systemMessage = {
137
+ id: "system",
138
+ content: taskSystemMessage(contextString, this.instructions),
139
+ role: "system"
140
+ };
141
+ const messages = [systemMessage];
142
+ const response = yield fetchAndDecodeChatCompletion({
143
+ copilotConfig: context.copilotApiConfig,
144
+ messages,
145
+ tools: context.getChatCompletionFunctionDescriptions(entryPoints),
146
+ headers: context.copilotApiConfig.headers,
147
+ body: context.copilotApiConfig.body
148
+ });
149
+ if (!response.events) {
150
+ throw new Error("Failed to execute task");
151
+ }
152
+ const reader = response.events.getReader();
153
+ let functionCalls = [];
154
+ while (true) {
155
+ const { done, value } = yield reader.read();
156
+ if (done) {
157
+ break;
158
+ }
159
+ if (value.type === "function") {
160
+ functionCalls.push({
161
+ name: value.name,
162
+ arguments: JSON.stringify(value.arguments)
163
+ });
164
+ break;
165
+ }
166
+ }
167
+ if (!functionCalls.length) {
168
+ throw new Error("No function call occurred");
169
+ }
170
+ const functionCallHandler = context.getFunctionCallHandler(entryPoints);
171
+ for (const functionCall of functionCalls) {
172
+ yield functionCallHandler(messages, functionCall);
173
+ }
174
+ });
175
+ }
176
+ };
177
+ function taskSystemMessage(contextString, instructions) {
178
+ return `
179
+ Please act as an efficient, competent, conscientious, and industrious professional assistant.
180
+
181
+ 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.
182
+ Always be polite and respectful, and prefer brevity over verbosity.
183
+
184
+ The user has provided you with the following context:
185
+ \`\`\`
186
+ ${contextString}
187
+ \`\`\`
188
+
189
+ They have also provided you with functions you can call to initiate actions on their behalf.
190
+
191
+ Please assist them as best you can.
192
+
193
+ This is not a conversation, so please do not ask questions. Just call a function without saying anything else.
194
+
195
+ The user has given you the following task to complete:
196
+
197
+ \`\`\`
198
+ ${instructions}
199
+ \`\`\`
200
+ `;
201
+ }
202
+ // Annotate the CommonJS export names for ESM import in node:
203
+ 0 && (module.exports = {
204
+ CopilotTask
205
+ });
206
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/index.ts","../../src/components/copilot-provider/copilotkit.tsx","../../src/utils/fetch-chat-completion.ts","../../src/lib/copilot-task.ts"],"sourcesContent":["export * from \"./copilot-task\";\n","\"use client\";\n\nimport { FunctionDefinition } from \"@copilotkit/shared\";\nimport { useCallback, useState } from \"react\";\nimport { CopilotContext, CopilotApiConfig } from \"../../context/copilot-context\";\nimport useTree from \"../../hooks/use-tree\";\nimport { DocumentPointer } from \"../../types\";\nimport {\n FunctionCallHandler,\n AnnotatedFunction,\n annotatedFunctionToChatCompletionFunction,\n} from \"@copilotkit/shared\";\nimport useFlatCategoryStore from \"../../hooks/use-flat-category-store\";\nimport { StandardCopilotApiConfig } from \"./standard-copilot-api-config\";\nimport { CopilotKitProps } from \"./copilotkit-props\";\nimport { ToolDefinition } from \"@copilotkit/shared\";\n\n/**\n * The CopilotKit component.\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: The backend can use OpenAI, or you can bring your own LLM.\n * For examples of the backend api implementation, see `examples/next-openai` usage (under `src/api/copilotkit`),\n * or read the documentation at https://docs.copilotkit.ai\n * In particular, Getting-Started > Quickstart-Backend: https://docs.copilotkit.ai/getting-started/quickstart-backend\n *\n * Example usage:\n * ```\n * <CopilotKit url=\"https://your.copilotkit.api\">\n * <App />\n * </CopilotKit>\n * ```\n *\n * or\n *\n * ```\n * const copilotApiConfig = new StandardCopilotApiConfig(\n * \"https://your.copilotkit.api/v1\",\n * \"https://your.copilotkit.api/v2\",\n * {},\n * {}\n * );\n *\n * // ...\n *\n * <CopilotKit chatApiConfig={copilotApiConfig}>\n * <App />\n * </CopilotKit>\n * ```\n *\n * @param props - The props for the component.\n * @returns The CopilotKit component.\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 const [entryPoints, setEntryPoints] = useState<Record<string, AnnotatedFunction<any[]>>>({});\n\n const { addElement, removeElement, printTree } = useTree();\n\n const {\n addElement: addDocument,\n removeElement: removeDocument,\n allElements: allDocuments,\n } = useFlatCategoryStore<DocumentPointer>();\n\n const setEntryPoint = useCallback((id: string, entryPoint: AnnotatedFunction<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, AnnotatedFunction<any[]>>) => {\n return entryPointsToChatCompletionFunctions(Object.values(customEntryPoints || entryPoints));\n },\n [entryPoints],\n );\n\n const getFunctionCallHandler = useCallback(\n (customEntryPoints?: Record<string, AnnotatedFunction<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 // get the appropriate CopilotApiConfig from the props\n const copilotApiConfig: CopilotApiConfig = new StandardCopilotApiConfig(\n props.url,\n `${props.url}/v2`,\n props.headers || {},\n props.body || {},\n );\n\n return (\n <CopilotContext.Provider\n value={{\n entryPoints,\n getChatCompletionFunctionDescriptions,\n getFunctionCallHandler,\n setEntryPoint,\n removeEntryPoint,\n getContextString,\n addContext,\n removeContext,\n getDocumentsContext,\n addDocumentContext,\n removeDocumentContext,\n copilotApiConfig: copilotApiConfig,\n }}\n >\n {children}\n </CopilotContext.Provider>\n );\n}\n\nexport const defaultCopilotContextCategories = [\"global\"];\n\nfunction entryPointsToFunctionCallHandler(\n entryPoints: AnnotatedFunction<any[]>[],\n): FunctionCallHandler {\n return async (chatMessages, functionCall) => {\n let entrypointsByFunctionName: Record<string, AnnotatedFunction<any[]>> = {};\n for (let entryPoint of entryPoints) {\n entrypointsByFunctionName[entryPoint.name] = entryPoint;\n }\n\n const entryPointFunction = entrypointsByFunctionName[functionCall.name || \"\"];\n if (entryPointFunction) {\n let functionCallArguments: Record<string, any>[] = [];\n if (functionCall.arguments) {\n functionCallArguments = JSON.parse(functionCall.arguments);\n }\n\n const paramsInCorrectOrder: any[] = [];\n for (let arg of entryPointFunction.argumentAnnotations) {\n paramsInCorrectOrder.push(\n functionCallArguments[arg.name as keyof typeof functionCallArguments],\n );\n }\n\n await entryPointFunction.implementation(...paramsInCorrectOrder);\n\n // commented out becasue for now we don't want to return anything\n // const result = await entryPointFunction.implementation(\n // ...parsedFunctionCallArguments\n // );\n // const functionResponse: ChatRequest = {\n // messages: [\n // ...chatMessages,\n // {\n // id: nanoid(),\n // name: functionCall.name,\n // role: 'function' as const,\n // content: JSON.stringify(result),\n // },\n // ],\n // };\n\n // return functionResponse;\n }\n };\n}\n\nfunction entryPointsToChatCompletionFunctions(\n entryPoints: AnnotatedFunction<any[]>[],\n): ToolDefinition[] {\n return entryPoints.map(annotatedFunctionToChatCompletionFunction);\n}\n","import {\n Message,\n ToolDefinition,\n ChatCompletionEvent,\n decodeChatCompletion,\n parseChatCompletion,\n decodeChatCompletionAsText,\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}\n\nexport async function fetchChatCompletion({\n copilotConfig,\n model,\n messages,\n tools,\n temperature,\n headers,\n body,\n signal,\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 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: \"auto\" } : {}),\n ...copilotConfig.body,\n ...(body ? { ...body } : {}),\n }),\n signal,\n });\n\n return response;\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 return { ...response, events: null };\n }\n const events = await decodeChatCompletion(parseChatCompletion(response.body));\n return { ...response, events };\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 return { ...response, events: null };\n }\n const events = await decodeChatCompletionAsText(\n decodeChatCompletion(parseChatCompletion(response.body)),\n );\n return { ...response, events };\n}\n","import { AnnotatedFunction, FunctionCall, Message } from \"@copilotkit/shared\";\nimport { CopilotContextParams } from \"../context\";\nimport { defaultCopilotContextCategories } from \"../components\";\nimport { fetchAndDecodeChatCompletion } from \"../utils/fetch-chat-completion\";\n\nexport interface CopilotTaskConfig {\n /**\n * The instructions to be given to the assistant.\n */\n instructions: string;\n /**\n * Function definitions to be sent to the API.\n */\n functions?: AnnotatedFunction<any[]>[];\n /**\n * Whether to include the copilot readable context in the task.\n */\n includeCopilotReadable?: boolean;\n\n /**\n * Whether to include functions defined via useMakeCopilotActionable in the task.\n */\n includeCopilotActionable?: boolean;\n}\n\nexport class CopilotTask<T = any> {\n private instructions: string;\n private functions: AnnotatedFunction<any[]>[];\n private includeCopilotReadable: boolean;\n private includeCopilotActionable: boolean;\n\n constructor(config: CopilotTaskConfig) {\n this.instructions = config.instructions;\n this.functions = config.functions || [];\n this.includeCopilotReadable = config.includeCopilotReadable || true;\n this.includeCopilotActionable = config.includeCopilotActionable || true;\n }\n\n async run(context: CopilotContextParams, data?: T): Promise<void> {\n const entryPoints = this.includeCopilotActionable ? Object.assign({}, context.entryPoints) : {};\n\n // merge functions into entry points\n for (const fn of this.functions) {\n entryPoints[fn.name] = fn;\n }\n\n let contextString = \"\";\n\n if (data) {\n contextString = (typeof data === \"string\" ? data : JSON.stringify(data)) + \"\\n\\n\";\n }\n\n if (this.includeCopilotReadable) {\n contextString += context.getContextString([], defaultCopilotContextCategories);\n }\n\n const systemMessage: Message = {\n id: \"system\",\n content: taskSystemMessage(contextString, this.instructions),\n role: \"system\",\n };\n\n const messages = [systemMessage];\n\n const response = await fetchAndDecodeChatCompletion({\n copilotConfig: context.copilotApiConfig,\n messages: messages,\n tools: context.getChatCompletionFunctionDescriptions(entryPoints),\n headers: context.copilotApiConfig.headers,\n body: context.copilotApiConfig.body,\n });\n\n if (!response.events) {\n throw new Error(\"Failed to execute task\");\n }\n\n const reader = response.events.getReader();\n let functionCalls: FunctionCall[] = [];\n\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n if (value.type === \"function\") {\n functionCalls.push({\n name: value.name,\n arguments: JSON.stringify(value.arguments),\n });\n break;\n }\n }\n\n if (!functionCalls.length) {\n throw new Error(\"No function call occurred\");\n }\n\n const functionCallHandler = context.getFunctionCallHandler(entryPoints);\n for (const functionCall of functionCalls) {\n await functionCallHandler(messages, functionCall);\n }\n }\n}\n\nfunction taskSystemMessage(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 functions you can 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 a function without saying anything else.\n\nThe user has given you the following task to complete:\n\n\\`\\`\\`\n${instructions}\n\\`\\`\\`\n`;\n}\n"],"mappings":"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","names":["import_shared"]}
@@ -0,0 +1,17 @@
1
+ import "../chunk-LUGEI4YQ.mjs";
2
+ import {
3
+ CopilotTask
4
+ } from "../chunk-TZPIY754.mjs";
5
+ import "../chunk-JD7BAH7U.mjs";
6
+ import "../chunk-SPCZTZCY.mjs";
7
+ import "../chunk-KAZJPE2I.mjs";
8
+ import "../chunk-F2JIAPZQ.mjs";
9
+ import "../chunk-VUY2K2DI.mjs";
10
+ import "../chunk-4OWTRVNI.mjs";
11
+ import "../chunk-JIKWSWIX.mjs";
12
+ import "../chunk-YULKJPY3.mjs";
13
+ import "../chunk-MRXNTQOX.mjs";
14
+ export {
15
+ CopilotTask
16
+ };
17
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}