@copilotkit/runtime 1.9.2-next.1 → 1.9.2-next.10

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 (84) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/dist/{chunk-YV3YXRMR.mjs → chunk-5OK4GLKL.mjs} +19 -2
  3. package/dist/chunk-5OK4GLKL.mjs.map +1 -0
  4. package/dist/{chunk-RIPQZJB5.mjs → chunk-6RUTA76W.mjs} +2 -2
  5. package/dist/chunk-AMUJQ6IR.mjs +50 -0
  6. package/dist/chunk-AMUJQ6IR.mjs.map +1 -0
  7. package/dist/{chunk-IIXJVVTV.mjs → chunk-GS7DO47Q.mjs} +155 -78
  8. package/dist/chunk-GS7DO47Q.mjs.map +1 -0
  9. package/dist/{chunk-XGBY45FP.mjs → chunk-PMIAGZGS.mjs} +2371 -1857
  10. package/dist/chunk-PMIAGZGS.mjs.map +1 -0
  11. package/dist/{chunk-C3SWOFLO.mjs → chunk-TOBFVWZU.mjs} +2 -2
  12. package/dist/{chunk-KPFOAXRX.mjs → chunk-VBXBFZEL.mjs} +2 -2
  13. package/dist/{chunk-5BIEM2UU.mjs → chunk-XWBDEXDA.mjs} +4 -3
  14. package/dist/{chunk-5BIEM2UU.mjs.map → chunk-XWBDEXDA.mjs.map} +1 -1
  15. package/dist/{groq-adapter-25a2bd35.d.ts → groq-adapter-172a2ca4.d.ts} +1 -1
  16. package/dist/index.d.ts +4 -3
  17. package/dist/index.js +3748 -3096
  18. package/dist/index.js.map +1 -1
  19. package/dist/index.mjs +12 -8
  20. package/dist/index.mjs.map +1 -1
  21. package/dist/lib/index.d.ts +7 -133
  22. package/dist/lib/index.js +3357 -2748
  23. package/dist/lib/index.js.map +1 -1
  24. package/dist/lib/index.mjs +9 -8
  25. package/dist/lib/integrations/index.d.ts +3 -3
  26. package/dist/lib/integrations/index.js +162 -98
  27. package/dist/lib/integrations/index.js.map +1 -1
  28. package/dist/lib/integrations/index.mjs +7 -6
  29. package/dist/lib/integrations/nest/index.d.ts +2 -2
  30. package/dist/lib/integrations/nest/index.js +162 -98
  31. package/dist/lib/integrations/nest/index.js.map +1 -1
  32. package/dist/lib/integrations/nest/index.mjs +5 -4
  33. package/dist/lib/integrations/node-express/index.d.ts +2 -2
  34. package/dist/lib/integrations/node-express/index.js +162 -98
  35. package/dist/lib/integrations/node-express/index.js.map +1 -1
  36. package/dist/lib/integrations/node-express/index.mjs +5 -4
  37. package/dist/lib/integrations/node-http/index.d.ts +2 -2
  38. package/dist/lib/integrations/node-http/index.js +162 -98
  39. package/dist/lib/integrations/node-http/index.js.map +1 -1
  40. package/dist/lib/integrations/node-http/index.mjs +4 -3
  41. package/dist/service-adapters/index.d.ts +6 -4
  42. package/dist/service-adapters/index.js +225 -107
  43. package/dist/service-adapters/index.js.map +1 -1
  44. package/dist/service-adapters/index.mjs +6 -2
  45. package/dist/service-adapters/shared/index.d.ts +9 -0
  46. package/dist/service-adapters/shared/index.js +72 -0
  47. package/dist/service-adapters/shared/index.js.map +1 -0
  48. package/dist/service-adapters/shared/index.mjs +8 -0
  49. package/dist/service-adapters/shared/index.mjs.map +1 -0
  50. package/dist/{shared-e272b15a.d.ts → shared-bd953ebf.d.ts} +45 -5
  51. package/dist/utils/index.d.ts +17 -1
  52. package/dist/utils/index.js +3 -2
  53. package/dist/utils/index.js.map +1 -1
  54. package/dist/utils/index.mjs +1 -1
  55. package/package.json +4 -4
  56. package/src/agents/langgraph/event-source.ts +36 -38
  57. package/src/agents/langgraph/events.ts +19 -1
  58. package/src/graphql/resolvers/copilot.resolver.ts +108 -45
  59. package/src/graphql/resolvers/state.resolver.ts +3 -3
  60. package/src/lib/error-messages.ts +200 -0
  61. package/src/lib/integrations/shared.ts +43 -0
  62. package/src/lib/runtime/__tests__/copilot-runtime-trace.test.ts +169 -0
  63. package/src/lib/runtime/copilot-runtime.ts +412 -83
  64. package/src/lib/runtime/langgraph/langgraph-agent.ts +12 -0
  65. package/src/lib/runtime/remote-action-constructors.ts +28 -3
  66. package/src/lib/runtime/remote-lg-action.ts +130 -40
  67. package/src/lib/streaming.ts +125 -36
  68. package/src/service-adapters/anthropic/anthropic-adapter.ts +67 -8
  69. package/src/service-adapters/anthropic/utils.ts +3 -8
  70. package/src/service-adapters/events.ts +37 -81
  71. package/src/service-adapters/groq/groq-adapter.ts +66 -56
  72. package/src/service-adapters/index.ts +1 -0
  73. package/src/service-adapters/openai/openai-adapter.ts +18 -3
  74. package/src/service-adapters/shared/error-utils.ts +61 -0
  75. package/src/service-adapters/shared/index.ts +1 -0
  76. package/src/utils/failed-response-status-reasons.ts +23 -1
  77. package/tests/service-adapters/anthropic/anthropic-adapter.test.ts +172 -387
  78. package/dist/chunk-IIXJVVTV.mjs.map +0 -1
  79. package/dist/chunk-XGBY45FP.mjs.map +0 -1
  80. package/dist/chunk-YV3YXRMR.mjs.map +0 -1
  81. package/dist/{chunk-RIPQZJB5.mjs.map → chunk-6RUTA76W.mjs.map} +0 -0
  82. package/dist/{chunk-C3SWOFLO.mjs.map → chunk-TOBFVWZU.mjs.map} +0 -0
  83. package/dist/{chunk-KPFOAXRX.mjs.map → chunk-VBXBFZEL.mjs.map} +0 -0
  84. package/dist/{langserve-4a5c9217.d.ts → langserve-fc5cac89.d.ts} +7 -7
@@ -1,9 +1,10 @@
1
1
  import {
2
2
  copilotRuntimeNodeHttpEndpoint
3
- } from "../../../chunk-XGBY45FP.mjs";
4
- import "../../../chunk-IIXJVVTV.mjs";
5
- import "../../../chunk-5BIEM2UU.mjs";
3
+ } from "../../../chunk-PMIAGZGS.mjs";
6
4
  import "../../../chunk-SHBDMA63.mjs";
5
+ import "../../../chunk-GS7DO47Q.mjs";
6
+ import "../../../chunk-XWBDEXDA.mjs";
7
+ import "../../../chunk-AMUJQ6IR.mjs";
7
8
  import "../../../chunk-2OZAGFV3.mjs";
8
9
  import "../../../chunk-FHD4JECV.mjs";
9
10
  export {
@@ -1,7 +1,8 @@
1
- import { b as CopilotServiceAdapter, C as CopilotRuntimeChatCompletionRequest, a as CopilotRuntimeChatCompletionResponse } from '../langserve-4a5c9217.js';
2
- export { c as RemoteChain, R as RemoteChainParameters } from '../langserve-4a5c9217.js';
3
- import { L as LangChainAdapter } from '../groq-adapter-25a2bd35.js';
4
- export { G as GoogleGenerativeAIAdapter, f as GroqAdapter, e as GroqAdapterParams, a as OpenAIAdapter, O as OpenAIAdapterParams, c as OpenAIAssistantAdapter, b as OpenAIAssistantAdapterParams, d as UnifyAdapter, U as UnifyAdapterParams } from '../groq-adapter-25a2bd35.js';
1
+ import { b as CopilotServiceAdapter, C as CopilotRuntimeChatCompletionRequest, a as CopilotRuntimeChatCompletionResponse } from '../langserve-fc5cac89.js';
2
+ export { c as RemoteChain, R as RemoteChainParameters } from '../langserve-fc5cac89.js';
3
+ export { convertServiceAdapterError } from './shared/index.js';
4
+ import { L as LangChainAdapter } from '../groq-adapter-172a2ca4.js';
5
+ export { G as GoogleGenerativeAIAdapter, f as GroqAdapter, e as GroqAdapterParams, a as OpenAIAdapter, O as OpenAIAdapterParams, c as OpenAIAssistantAdapter, b as OpenAIAssistantAdapterParams, d as UnifyAdapter, U as UnifyAdapterParams } from '../groq-adapter-172a2ca4.js';
5
6
  import Anthropic from '@anthropic-ai/sdk';
6
7
  import '../index-d4614f9b.js';
7
8
  import '../graphql/types/base/index.js';
@@ -48,6 +49,7 @@ declare class AnthropicAdapter implements CopilotServiceAdapter {
48
49
  private _anthropic;
49
50
  get anthropic(): Anthropic;
50
51
  constructor(params?: AnthropicAdapterParams);
52
+ private shouldGenerateFallbackResponse;
51
53
  process(request: CopilotRuntimeChatCompletionRequest): Promise<CopilotRuntimeChatCompletionResponse>;
52
54
  }
53
55
 
@@ -41,7 +41,8 @@ __export(service_adapters_exports, {
41
41
  OpenAIAdapter: () => OpenAIAdapter,
42
42
  OpenAIAssistantAdapter: () => OpenAIAssistantAdapter,
43
43
  RemoteChain: () => RemoteChain,
44
- UnifyAdapter: () => UnifyAdapter
44
+ UnifyAdapter: () => UnifyAdapter,
45
+ convertServiceAdapterError: () => convertServiceAdapterError
45
46
  });
46
47
  module.exports = __toCommonJS(service_adapters_exports);
47
48
 
@@ -123,11 +124,53 @@ var RemoteChain = class {
123
124
  };
124
125
  __name(RemoteChain, "RemoteChain");
125
126
 
127
+ // src/service-adapters/shared/error-utils.ts
128
+ var import_shared = require("@copilotkit/shared");
129
+ function convertServiceAdapterError(error, adapterName) {
130
+ var _a, _b, _c;
131
+ const errorName = ((_a = error == null ? void 0 : error.constructor) == null ? void 0 : _a.name) || error.name;
132
+ const errorMessage = (error == null ? void 0 : error.message) || String(error);
133
+ const statusCode = error.status || error.statusCode || ((_b = error.response) == null ? void 0 : _b.status);
134
+ const responseData = error.error || ((_c = error.response) == null ? void 0 : _c.data) || error.data;
135
+ const structuredError = new import_shared.CopilotKitLowLevelError({
136
+ error: error instanceof Error ? error : new Error(errorMessage),
137
+ url: `${adapterName} service adapter`,
138
+ message: `${adapterName} API error: ${errorMessage}`
139
+ });
140
+ if (statusCode) {
141
+ structuredError.statusCode = statusCode;
142
+ }
143
+ if (responseData) {
144
+ structuredError.responseData = responseData;
145
+ }
146
+ if (errorName) {
147
+ structuredError.originalErrorType = errorName;
148
+ }
149
+ let newCode;
150
+ if (statusCode === 401) {
151
+ newCode = import_shared.CopilotKitErrorCode.AUTHENTICATION_ERROR;
152
+ } else if (statusCode >= 400 && statusCode < 500) {
153
+ newCode = import_shared.CopilotKitErrorCode.CONFIGURATION_ERROR;
154
+ } else if (statusCode >= 500) {
155
+ newCode = import_shared.CopilotKitErrorCode.NETWORK_ERROR;
156
+ } else if (statusCode) {
157
+ newCode = import_shared.CopilotKitErrorCode.CONFIGURATION_ERROR;
158
+ } else {
159
+ newCode = import_shared.CopilotKitErrorCode.NETWORK_ERROR;
160
+ }
161
+ structuredError.code = newCode;
162
+ if (structuredError.extensions) {
163
+ structuredError.extensions.code = newCode;
164
+ }
165
+ return structuredError;
166
+ }
167
+ __name(convertServiceAdapterError, "convertServiceAdapterError");
168
+
126
169
  // src/service-adapters/openai/openai-adapter.ts
127
170
  var import_openai = __toESM(require("openai"));
128
171
 
129
172
  // src/service-adapters/openai/utils.ts
130
- var import_shared = require("@copilotkit/shared");
173
+ var import_shared2 = require("@copilotkit/shared");
131
174
  function limitMessagesToTokenCount(messages, tools, model, maxTokens) {
132
175
  maxTokens || (maxTokens = maxTokensForOpenAIModel(model));
133
176
  const result = [];
@@ -241,7 +284,7 @@ function convertActionInputToOpenAITool(action) {
241
284
  function: {
242
285
  name: action.name,
243
286
  description: action.description,
244
- parameters: (0, import_shared.parseJson)(action.jsonSchema, {})
287
+ parameters: (0, import_shared2.parseJson)(action.jsonSchema, {})
245
288
  }
246
289
  };
247
290
  }
@@ -309,7 +352,7 @@ function convertSystemMessageToAssistantAPI(message) {
309
352
  __name(convertSystemMessageToAssistantAPI, "convertSystemMessageToAssistantAPI");
310
353
 
311
354
  // src/service-adapters/openai/openai-adapter.ts
312
- var import_shared2 = require("@copilotkit/shared");
355
+ var import_shared3 = require("@copilotkit/shared");
313
356
  var DEFAULT_MODEL = "gpt-4o";
314
357
  var OpenAIAdapter = class {
315
358
  model = DEFAULT_MODEL;
@@ -330,7 +373,8 @@ var OpenAIAdapter = class {
330
373
  async process(request) {
331
374
  const { threadId: threadIdFromRequest, model = this.model, messages, actions, eventSource, forwardedParameters } = request;
332
375
  const tools = actions.map(convertActionInputToOpenAITool);
333
- const threadId = threadIdFromRequest ?? (0, import_shared2.randomUUID)();
376
+ const threadId = threadIdFromRequest ?? (0, import_shared3.randomUUID)();
377
+ console.log("messages", messages);
334
378
  const validToolUseIds = /* @__PURE__ */ new Set();
335
379
  for (const message of messages) {
336
380
  if (message.isActionExecutionMessage()) {
@@ -360,6 +404,29 @@ var OpenAIAdapter = class {
360
404
  }
361
405
  };
362
406
  }
407
+ console.log("INPUT", {
408
+ model,
409
+ stream: true,
410
+ messages: openaiMessages,
411
+ ...tools.length > 0 && {
412
+ tools
413
+ },
414
+ ...(forwardedParameters == null ? void 0 : forwardedParameters.maxTokens) && {
415
+ max_tokens: forwardedParameters.maxTokens
416
+ },
417
+ ...(forwardedParameters == null ? void 0 : forwardedParameters.stop) && {
418
+ stop: forwardedParameters.stop
419
+ },
420
+ ...toolChoice && {
421
+ tool_choice: toolChoice
422
+ },
423
+ ...this.disableParallelToolCalls && {
424
+ parallel_tool_calls: false
425
+ },
426
+ ...(forwardedParameters == null ? void 0 : forwardedParameters.temperature) && {
427
+ temperature: forwardedParameters.temperature
428
+ }
429
+ });
363
430
  try {
364
431
  const stream = this.openai.beta.chat.completions.stream({
365
432
  model,
@@ -446,14 +513,14 @@ var OpenAIAdapter = class {
446
513
  });
447
514
  }
448
515
  } catch (error) {
449
- console.error("[OpenAI] Error processing stream:", error);
450
- throw error;
516
+ console.error("[OpenAI] Error during API call:", error);
517
+ throw convertServiceAdapterError(error, "OpenAI");
451
518
  }
452
519
  eventStream$.complete();
453
520
  });
454
521
  } catch (error) {
455
522
  console.error("[OpenAI] Error during API call:", error);
456
- throw error;
523
+ throw convertServiceAdapterError(error, "OpenAI");
457
524
  }
458
525
  return {
459
526
  threadId
@@ -465,7 +532,7 @@ __name(OpenAIAdapter, "OpenAIAdapter");
465
532
  // src/service-adapters/langchain/utils.ts
466
533
  var import_messages = require("@langchain/core/messages");
467
534
  var import_tools = require("@langchain/core/tools");
468
- var import_shared3 = require("@copilotkit/shared");
535
+ var import_shared5 = require("@copilotkit/shared");
469
536
  function convertMessageToLangChainMessage(message) {
470
537
  if (message.isTextMessage()) {
471
538
  if (message.role == "user") {
@@ -498,7 +565,7 @@ function convertActionInputToLangChainTool(actionInput) {
498
565
  return new import_tools.DynamicStructuredTool({
499
566
  name: actionInput.name,
500
567
  description: actionInput.description,
501
- schema: (0, import_shared3.convertJsonSchemaToZodSchema)(JSON.parse(actionInput.jsonSchema), true),
568
+ schema: (0, import_shared5.convertJsonSchemaToZodSchema)(JSON.parse(actionInput.jsonSchema), true),
502
569
  func: async () => {
503
570
  return "";
504
571
  }
@@ -531,7 +598,7 @@ async function streamLangChainResponse({ result, eventStream$, actionExecution }
531
598
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
532
599
  if (typeof result === "string") {
533
600
  if (!actionExecution) {
534
- eventStream$.sendTextMessage((0, import_shared3.randomId)(), result);
601
+ eventStream$.sendTextMessage((0, import_shared5.randomId)(), result);
535
602
  } else {
536
603
  eventStream$.sendActionExecutionResult({
537
604
  actionExecutionId: actionExecution.id,
@@ -542,11 +609,11 @@ async function streamLangChainResponse({ result, eventStream$, actionExecution }
542
609
  } else if (isAIMessage(result)) {
543
610
  maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);
544
611
  if (result.content) {
545
- eventStream$.sendTextMessage((0, import_shared3.randomId)(), result.content);
612
+ eventStream$.sendTextMessage((0, import_shared5.randomId)(), result.content);
546
613
  }
547
614
  for (const toolCall of result.tool_calls) {
548
615
  eventStream$.sendActionExecution({
549
- actionExecutionId: toolCall.id || (0, import_shared3.randomId)(),
616
+ actionExecutionId: toolCall.id || (0, import_shared5.randomId)(),
550
617
  actionName: toolCall.name,
551
618
  args: JSON.stringify(toolCall.args)
552
619
  });
@@ -554,12 +621,12 @@ async function streamLangChainResponse({ result, eventStream$, actionExecution }
554
621
  } else if (isBaseMessageChunk(result)) {
555
622
  maybeSendActionExecutionResultIsMessage(eventStream$, actionExecution);
556
623
  if ((_a = result.lc_kwargs) == null ? void 0 : _a.content) {
557
- eventStream$.sendTextMessage((0, import_shared3.randomId)(), result.content);
624
+ eventStream$.sendTextMessage((0, import_shared5.randomId)(), result.content);
558
625
  }
559
626
  if ((_b = result.lc_kwargs) == null ? void 0 : _b.tool_calls) {
560
627
  for (const toolCall of (_c = result.lc_kwargs) == null ? void 0 : _c.tool_calls) {
561
628
  eventStream$.sendActionExecution({
562
- actionExecutionId: toolCall.id || (0, import_shared3.randomId)(),
629
+ actionExecutionId: toolCall.id || (0, import_shared5.randomId)(),
563
630
  actionName: toolCall.name,
564
631
  args: JSON.stringify(toolCall.args)
565
632
  });
@@ -633,7 +700,7 @@ async function streamLangChainResponse({ result, eventStream$, actionExecution }
633
700
  });
634
701
  } else if (content) {
635
702
  mode = "message";
636
- currentMessageId = ((_k = value.lc_kwargs) == null ? void 0 : _k.id) || (0, import_shared3.randomId)();
703
+ currentMessageId = ((_k = value.lc_kwargs) == null ? void 0 : _k.id) || (0, import_shared5.randomId)();
637
704
  eventStream$.sendTextMessageStart({
638
705
  messageId: currentMessageId
639
706
  });
@@ -690,7 +757,7 @@ function encodeResult(result) {
690
757
  __name(encodeResult, "encodeResult");
691
758
 
692
759
  // src/service-adapters/langchain/langchain-adapter.ts
693
- var import_shared4 = require("@copilotkit/shared");
760
+ var import_shared6 = require("@copilotkit/shared");
694
761
  var import_promises = require("@langchain/core/callbacks/promises");
695
762
  var LangChainAdapter = class {
696
763
  options;
@@ -703,7 +770,7 @@ var LangChainAdapter = class {
703
770
  async process(request) {
704
771
  try {
705
772
  const { eventSource, model, actions, messages, runId, threadId: threadIdFromRequest } = request;
706
- const threadId = threadIdFromRequest ?? (0, import_shared4.randomUUID)();
773
+ const threadId = threadIdFromRequest ?? (0, import_shared6.randomUUID)();
707
774
  const result = await this.options.chainFn({
708
775
  messages: messages.map(convertMessageToLangChainMessage),
709
776
  tools: actions.map(convertActionInputToLangChainTool),
@@ -958,7 +1025,7 @@ __name(getRunIdFromStream, "getRunIdFromStream");
958
1025
 
959
1026
  // src/service-adapters/unify/unify-adapter.ts
960
1027
  var import_openai3 = __toESM(require("openai"));
961
- var import_shared5 = require("@copilotkit/shared");
1028
+ var import_shared7 = require("@copilotkit/shared");
962
1029
  var UnifyAdapter = class {
963
1030
  apiKey;
964
1031
  model;
@@ -1000,7 +1067,7 @@ var UnifyAdapter = class {
1000
1067
  for await (const chunk of stream) {
1001
1068
  if (this.start) {
1002
1069
  model = chunk.model;
1003
- currentMessageId = (0, import_shared5.randomId)();
1070
+ currentMessageId = (0, import_shared7.randomId)();
1004
1071
  eventStream$.sendTextMessageStart({
1005
1072
  messageId: currentMessageId
1006
1073
  });
@@ -1067,7 +1134,7 @@ var UnifyAdapter = class {
1067
1134
  eventStream$.complete();
1068
1135
  });
1069
1136
  return {
1070
- threadId: request.threadId || (0, import_shared5.randomUUID)()
1137
+ threadId: request.threadId || (0, import_shared7.randomUUID)()
1071
1138
  };
1072
1139
  }
1073
1140
  };
@@ -1075,7 +1142,7 @@ __name(UnifyAdapter, "UnifyAdapter");
1075
1142
 
1076
1143
  // src/service-adapters/groq/groq-adapter.ts
1077
1144
  var import_groq_sdk = require("groq-sdk");
1078
- var import_shared6 = require("@copilotkit/shared");
1145
+ var import_shared8 = require("@copilotkit/shared");
1079
1146
  var DEFAULT_MODEL2 = "llama-3.3-70b-versatile";
1080
1147
  var GroqAdapter = class {
1081
1148
  model = DEFAULT_MODEL2;
@@ -1107,90 +1174,99 @@ var GroqAdapter = class {
1107
1174
  }
1108
1175
  };
1109
1176
  }
1110
- const stream = await this.groq.chat.completions.create({
1111
- model,
1112
- stream: true,
1113
- messages: openaiMessages,
1114
- ...tools.length > 0 && {
1115
- tools
1116
- },
1117
- ...(forwardedParameters == null ? void 0 : forwardedParameters.maxTokens) && {
1118
- max_tokens: forwardedParameters.maxTokens
1119
- },
1120
- ...(forwardedParameters == null ? void 0 : forwardedParameters.stop) && {
1121
- stop: forwardedParameters.stop
1122
- },
1123
- ...toolChoice && {
1124
- tool_choice: toolChoice
1125
- },
1126
- ...this.disableParallelToolCalls && {
1127
- parallel_tool_calls: false
1128
- },
1129
- ...(forwardedParameters == null ? void 0 : forwardedParameters.temperature) && {
1130
- temperature: forwardedParameters.temperature
1131
- }
1132
- });
1177
+ let stream;
1178
+ try {
1179
+ stream = await this.groq.chat.completions.create({
1180
+ model,
1181
+ stream: true,
1182
+ messages: openaiMessages,
1183
+ ...tools.length > 0 && {
1184
+ tools
1185
+ },
1186
+ ...(forwardedParameters == null ? void 0 : forwardedParameters.maxTokens) && {
1187
+ max_tokens: forwardedParameters.maxTokens
1188
+ },
1189
+ ...(forwardedParameters == null ? void 0 : forwardedParameters.stop) && {
1190
+ stop: forwardedParameters.stop
1191
+ },
1192
+ ...toolChoice && {
1193
+ tool_choice: toolChoice
1194
+ },
1195
+ ...this.disableParallelToolCalls && {
1196
+ parallel_tool_calls: false
1197
+ },
1198
+ ...(forwardedParameters == null ? void 0 : forwardedParameters.temperature) && {
1199
+ temperature: forwardedParameters.temperature
1200
+ }
1201
+ });
1202
+ } catch (error) {
1203
+ throw convertServiceAdapterError(error, "Groq");
1204
+ }
1133
1205
  eventSource.stream(async (eventStream$) => {
1134
1206
  var _a, _b;
1135
1207
  let mode = null;
1136
1208
  let currentMessageId;
1137
1209
  let currentToolCallId;
1138
- for await (const chunk of stream) {
1139
- const toolCall = (_a = chunk.choices[0].delta.tool_calls) == null ? void 0 : _a[0];
1140
- const content = chunk.choices[0].delta.content;
1141
- if (mode === "message" && (toolCall == null ? void 0 : toolCall.id)) {
1142
- mode = null;
1143
- eventStream$.sendTextMessageEnd({
1144
- messageId: currentMessageId
1145
- });
1146
- } else if (mode === "function" && (toolCall === void 0 || (toolCall == null ? void 0 : toolCall.id))) {
1147
- mode = null;
1148
- eventStream$.sendActionExecutionEnd({
1149
- actionExecutionId: currentToolCallId
1150
- });
1151
- }
1152
- if (mode === null) {
1153
- if (toolCall == null ? void 0 : toolCall.id) {
1154
- mode = "function";
1155
- currentToolCallId = toolCall.id;
1156
- eventStream$.sendActionExecutionStart({
1157
- actionExecutionId: currentToolCallId,
1158
- actionName: toolCall.function.name,
1159
- parentMessageId: chunk.id
1160
- });
1161
- } else if (content) {
1162
- mode = "message";
1163
- currentMessageId = chunk.id;
1164
- eventStream$.sendTextMessageStart({
1210
+ try {
1211
+ for await (const chunk of stream) {
1212
+ const toolCall = (_a = chunk.choices[0].delta.tool_calls) == null ? void 0 : _a[0];
1213
+ const content = chunk.choices[0].delta.content;
1214
+ if (mode === "message" && (toolCall == null ? void 0 : toolCall.id)) {
1215
+ mode = null;
1216
+ eventStream$.sendTextMessageEnd({
1165
1217
  messageId: currentMessageId
1166
1218
  });
1219
+ } else if (mode === "function" && (toolCall === void 0 || (toolCall == null ? void 0 : toolCall.id))) {
1220
+ mode = null;
1221
+ eventStream$.sendActionExecutionEnd({
1222
+ actionExecutionId: currentToolCallId
1223
+ });
1224
+ }
1225
+ if (mode === null) {
1226
+ if (toolCall == null ? void 0 : toolCall.id) {
1227
+ mode = "function";
1228
+ currentToolCallId = toolCall.id;
1229
+ eventStream$.sendActionExecutionStart({
1230
+ actionExecutionId: currentToolCallId,
1231
+ actionName: toolCall.function.name,
1232
+ parentMessageId: chunk.id
1233
+ });
1234
+ } else if (content) {
1235
+ mode = "message";
1236
+ currentMessageId = chunk.id;
1237
+ eventStream$.sendTextMessageStart({
1238
+ messageId: currentMessageId
1239
+ });
1240
+ }
1241
+ }
1242
+ if (mode === "message" && content) {
1243
+ eventStream$.sendTextMessageContent({
1244
+ messageId: currentMessageId,
1245
+ content
1246
+ });
1247
+ } else if (mode === "function" && ((_b = toolCall == null ? void 0 : toolCall.function) == null ? void 0 : _b.arguments)) {
1248
+ eventStream$.sendActionExecutionArgs({
1249
+ actionExecutionId: currentToolCallId,
1250
+ args: toolCall.function.arguments
1251
+ });
1167
1252
  }
1168
1253
  }
1169
- if (mode === "message" && content) {
1170
- eventStream$.sendTextMessageContent({
1171
- messageId: currentMessageId,
1172
- content
1254
+ if (mode === "message") {
1255
+ eventStream$.sendTextMessageEnd({
1256
+ messageId: currentMessageId
1173
1257
  });
1174
- } else if (mode === "function" && ((_b = toolCall == null ? void 0 : toolCall.function) == null ? void 0 : _b.arguments)) {
1175
- eventStream$.sendActionExecutionArgs({
1176
- actionExecutionId: currentToolCallId,
1177
- args: toolCall.function.arguments
1258
+ } else if (mode === "function") {
1259
+ eventStream$.sendActionExecutionEnd({
1260
+ actionExecutionId: currentToolCallId
1178
1261
  });
1179
1262
  }
1180
- }
1181
- if (mode === "message") {
1182
- eventStream$.sendTextMessageEnd({
1183
- messageId: currentMessageId
1184
- });
1185
- } else if (mode === "function") {
1186
- eventStream$.sendActionExecutionEnd({
1187
- actionExecutionId: currentToolCallId
1188
- });
1263
+ } catch (error) {
1264
+ throw convertServiceAdapterError(error, "Groq");
1189
1265
  }
1190
1266
  eventStream$.complete();
1191
1267
  });
1192
1268
  return {
1193
- threadId: request.threadId || (0, import_shared6.randomUUID)()
1269
+ threadId: request.threadId || (0, import_shared8.randomUUID)()
1194
1270
  };
1195
1271
  }
1196
1272
  };
@@ -1336,7 +1412,7 @@ function convertMessageToAnthropicMessage(message) {
1336
1412
  content: [
1337
1413
  {
1338
1414
  type: "tool_result",
1339
- content: message.result,
1415
+ content: message.result || "Action completed successfully",
1340
1416
  tool_use_id: message.actionExecutionId
1341
1417
  }
1342
1418
  ]
@@ -1346,7 +1422,7 @@ function convertMessageToAnthropicMessage(message) {
1346
1422
  __name(convertMessageToAnthropicMessage, "convertMessageToAnthropicMessage");
1347
1423
 
1348
1424
  // src/service-adapters/anthropic/anthropic-adapter.ts
1349
- var import_shared7 = require("@copilotkit/shared");
1425
+ var import_shared10 = require("@copilotkit/shared");
1350
1426
  var DEFAULT_MODEL3 = "claude-3-5-sonnet-latest";
1351
1427
  var AnthropicAdapter = class {
1352
1428
  model = DEFAULT_MODEL3;
@@ -1360,6 +1436,22 @@ var AnthropicAdapter = class {
1360
1436
  this.model = params.model;
1361
1437
  }
1362
1438
  }
1439
+ shouldGenerateFallbackResponse(messages) {
1440
+ var _a, _b, _c;
1441
+ if (messages.length === 0)
1442
+ return false;
1443
+ const lastMessage = messages[messages.length - 1];
1444
+ const endsWithToolResult = lastMessage.role === "user" && Array.isArray(lastMessage.content) && lastMessage.content.some((content) => content.type === "tool_result");
1445
+ if (messages.length >= 3 && endsWithToolResult) {
1446
+ const lastThree = messages.slice(-3);
1447
+ const hasRecentToolPattern = ((_a = lastThree[0]) == null ? void 0 : _a.role) === "user" && // Initial user message
1448
+ ((_b = lastThree[1]) == null ? void 0 : _b.role) === "assistant" && // Assistant tool use
1449
+ Array.isArray(lastThree[1].content) && lastThree[1].content.some((content) => content.type === "tool_use") && ((_c = lastThree[2]) == null ? void 0 : _c.role) === "user" && // Tool result
1450
+ Array.isArray(lastThree[2].content) && lastThree[2].content.some((content) => content.type === "tool_result");
1451
+ return hasRecentToolPattern;
1452
+ }
1453
+ return endsWithToolResult;
1454
+ }
1363
1455
  async process(request) {
1364
1456
  const { threadId, model = this.model, messages: rawMessages, actions, eventSource, forwardedParameters } = request;
1365
1457
  const tools = actions.map(convertActionInputToAnthropicTool);
@@ -1374,18 +1466,22 @@ var AnthropicAdapter = class {
1374
1466
  validToolUseIds.add(message.id);
1375
1467
  }
1376
1468
  }
1469
+ const processedToolResultIds = /* @__PURE__ */ new Set();
1377
1470
  const anthropicMessages = messages.map((message) => {
1378
1471
  if (message.isResultMessage()) {
1379
1472
  if (!validToolUseIds.has(message.actionExecutionId)) {
1380
1473
  return null;
1381
1474
  }
1382
- validToolUseIds.delete(message.actionExecutionId);
1475
+ if (processedToolResultIds.has(message.actionExecutionId)) {
1476
+ return null;
1477
+ }
1478
+ processedToolResultIds.add(message.actionExecutionId);
1383
1479
  return {
1384
1480
  role: "user",
1385
1481
  content: [
1386
1482
  {
1387
1483
  type: "tool_result",
1388
- content: message.result,
1484
+ content: message.result || "Action completed successfully",
1389
1485
  tool_use_id: message.actionExecutionId
1390
1486
  }
1391
1487
  ]
@@ -1428,14 +1524,16 @@ var AnthropicAdapter = class {
1428
1524
  eventSource.stream(async (eventStream$) => {
1429
1525
  let mode = null;
1430
1526
  let didOutputText = false;
1431
- let currentMessageId = (0, import_shared7.randomId)();
1432
- let currentToolCallId = (0, import_shared7.randomId)();
1527
+ let currentMessageId = (0, import_shared10.randomId)();
1528
+ let currentToolCallId = (0, import_shared10.randomId)();
1433
1529
  let filterThinkingTextBuffer = new FilterThinkingTextBuffer();
1530
+ let hasReceivedContent = false;
1434
1531
  try {
1435
1532
  for await (const chunk of stream) {
1436
1533
  if (chunk.type === "message_start") {
1437
1534
  currentMessageId = chunk.message.id;
1438
1535
  } else if (chunk.type === "content_block_start") {
1536
+ hasReceivedContent = true;
1439
1537
  if (chunk.content_block.type === "text") {
1440
1538
  didOutputText = false;
1441
1539
  filterThinkingTextBuffer.reset();
@@ -1485,17 +1583,36 @@ var AnthropicAdapter = class {
1485
1583
  }
1486
1584
  }
1487
1585
  } catch (error) {
1488
- console.error("[Anthropic] Error processing stream:", error);
1489
- throw error;
1586
+ throw convertServiceAdapterError(error, "Anthropic");
1587
+ }
1588
+ if (!hasReceivedContent && this.shouldGenerateFallbackResponse(limitedMessages)) {
1589
+ let fallbackContent = "Task completed successfully.";
1590
+ const lastMessage = limitedMessages[limitedMessages.length - 1];
1591
+ if ((lastMessage == null ? void 0 : lastMessage.role) === "user" && Array.isArray(lastMessage.content)) {
1592
+ const toolResult = lastMessage.content.find((c) => c.type === "tool_result");
1593
+ if ((toolResult == null ? void 0 : toolResult.content) && toolResult.content !== "Action completed successfully") {
1594
+ fallbackContent = toolResult.content;
1595
+ }
1596
+ }
1597
+ currentMessageId = (0, import_shared10.randomId)();
1598
+ eventStream$.sendTextMessageStart({
1599
+ messageId: currentMessageId
1600
+ });
1601
+ eventStream$.sendTextMessageContent({
1602
+ messageId: currentMessageId,
1603
+ content: fallbackContent
1604
+ });
1605
+ eventStream$.sendTextMessageEnd({
1606
+ messageId: currentMessageId
1607
+ });
1490
1608
  }
1491
1609
  eventStream$.complete();
1492
1610
  });
1493
1611
  } catch (error) {
1494
- console.error("[Anthropic] Error during API call:", error);
1495
- throw error;
1612
+ throw convertServiceAdapterError(error, "Anthropic");
1496
1613
  }
1497
1614
  return {
1498
- threadId: threadId || (0, import_shared7.randomUUID)()
1615
+ threadId: threadId || (0, import_shared10.randomUUID)()
1499
1616
  };
1500
1617
  }
1501
1618
  };
@@ -1535,7 +1652,7 @@ var FilterThinkingTextBuffer = /* @__PURE__ */ __name(class FilterThinkingTextBu
1535
1652
 
1536
1653
  // src/service-adapters/experimental/ollama/ollama-adapter.ts
1537
1654
  var import_ollama = require("@langchain/community/llms/ollama");
1538
- var import_shared8 = require("@copilotkit/shared");
1655
+ var import_shared12 = require("@copilotkit/shared");
1539
1656
  var DEFAULT_MODEL4 = "llama3:latest";
1540
1657
  var ExperimentalOllamaAdapter = class {
1541
1658
  model;
@@ -1554,7 +1671,7 @@ var ExperimentalOllamaAdapter = class {
1554
1671
  const contents = messages.filter((m) => m.isTextMessage()).map((m) => m.content);
1555
1672
  const _stream = await ollama.stream(contents);
1556
1673
  eventSource.stream(async (eventStream$) => {
1557
- const currentMessageId = (0, import_shared8.randomId)();
1674
+ const currentMessageId = (0, import_shared12.randomId)();
1558
1675
  eventStream$.sendTextMessageStart({
1559
1676
  messageId: currentMessageId
1560
1677
  });
@@ -1570,7 +1687,7 @@ var ExperimentalOllamaAdapter = class {
1570
1687
  eventStream$.complete();
1571
1688
  });
1572
1689
  return {
1573
- threadId: request.threadId || (0, import_shared8.randomUUID)()
1690
+ threadId: request.threadId || (0, import_shared12.randomUUID)()
1574
1691
  };
1575
1692
  }
1576
1693
  };
@@ -1598,11 +1715,11 @@ var BedrockAdapter = class extends LangChainAdapter {
1598
1715
  __name(BedrockAdapter, "BedrockAdapter");
1599
1716
 
1600
1717
  // src/service-adapters/empty/empty-adapter.ts
1601
- var import_shared9 = require("@copilotkit/shared");
1718
+ var import_shared13 = require("@copilotkit/shared");
1602
1719
  var EmptyAdapter = class {
1603
1720
  async process(request) {
1604
1721
  return {
1605
- threadId: request.threadId || (0, import_shared9.randomUUID)()
1722
+ threadId: request.threadId || (0, import_shared13.randomUUID)()
1606
1723
  };
1607
1724
  }
1608
1725
  };
@@ -1621,6 +1738,7 @@ var ExperimentalEmptyAdapter = EmptyAdapter;
1621
1738
  OpenAIAdapter,
1622
1739
  OpenAIAssistantAdapter,
1623
1740
  RemoteChain,
1624
- UnifyAdapter
1741
+ UnifyAdapter,
1742
+ convertServiceAdapterError
1625
1743
  });
1626
1744
  //# sourceMappingURL=index.js.map