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