@copilotkit/runtime 1.9.2-next.2 → 1.9.2-next.21

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 (87) hide show
  1. package/CHANGELOG.md +136 -0
  2. package/dist/{chunk-CD2SZGIZ.mjs → chunk-47L6Z7PJ.mjs} +2 -2
  3. package/dist/chunk-AMUJQ6IR.mjs +50 -0
  4. package/dist/chunk-AMUJQ6IR.mjs.map +1 -0
  5. package/dist/{chunk-DOWRU5U6.mjs → chunk-IBYPYIVX.mjs} +2353 -1854
  6. package/dist/chunk-IBYPYIVX.mjs.map +1 -0
  7. package/dist/{chunk-D3SPXEVJ.mjs → chunk-IXK4UOV6.mjs} +2 -2
  8. package/dist/{chunk-6TQCQ3WJ.mjs → chunk-P3HORCYJ.mjs} +2 -2
  9. package/dist/{chunk-IIXJVVTV.mjs → chunk-QLLV2QVK.mjs} +132 -78
  10. package/dist/chunk-QLLV2QVK.mjs.map +1 -0
  11. package/dist/{chunk-ODF35LFG.mjs → chunk-UPC6N4MV.mjs} +19 -2
  12. package/dist/chunk-UPC6N4MV.mjs.map +1 -0
  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-098f97f6.d.ts} +5 -1
  16. package/dist/index.d.ts +4 -3
  17. package/dist/index.js +3728 -3114
  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 +5 -4
  22. package/dist/lib/index.js +2711 -2140
  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 +160 -96
  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 +160 -96
  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 +160 -96
  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 +160 -96
  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 +202 -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-41d4988d.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 +2 -2
  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 +107 -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-error.test.ts +169 -0
  63. package/src/lib/runtime/agui-action.ts +9 -3
  64. package/src/lib/runtime/copilot-runtime.ts +384 -83
  65. package/src/lib/runtime/langgraph/langgraph-agent.ts +12 -0
  66. package/src/lib/runtime/remote-action-constructors.ts +28 -3
  67. package/src/lib/runtime/remote-actions.ts +6 -0
  68. package/src/lib/runtime/remote-lg-action.ts +130 -40
  69. package/src/lib/streaming.ts +125 -36
  70. package/src/service-adapters/anthropic/anthropic-adapter.ts +67 -8
  71. package/src/service-adapters/anthropic/utils.ts +3 -8
  72. package/src/service-adapters/events.ts +37 -81
  73. package/src/service-adapters/google/google-genai-adapter.ts +5 -0
  74. package/src/service-adapters/groq/groq-adapter.ts +66 -56
  75. package/src/service-adapters/index.ts +1 -0
  76. package/src/service-adapters/openai/openai-adapter.ts +4 -3
  77. package/src/service-adapters/shared/error-utils.ts +61 -0
  78. package/src/service-adapters/shared/index.ts +1 -0
  79. package/src/utils/failed-response-status-reasons.ts +23 -1
  80. package/tests/service-adapters/anthropic/anthropic-adapter.test.ts +172 -387
  81. package/dist/chunk-DOWRU5U6.mjs.map +0 -1
  82. package/dist/chunk-IIXJVVTV.mjs.map +0 -1
  83. package/dist/chunk-ODF35LFG.mjs.map +0 -1
  84. package/dist/{chunk-CD2SZGIZ.mjs.map → chunk-47L6Z7PJ.mjs.map} +0 -0
  85. package/dist/{chunk-D3SPXEVJ.mjs.map → chunk-IXK4UOV6.mjs.map} +0 -0
  86. package/dist/{chunk-6TQCQ3WJ.mjs.map → chunk-P3HORCYJ.mjs.map} +0 -0
  87. package/dist/{langserve-4a5c9217.d.ts → langserve-fc5cac89.d.ts} +7 -7
@@ -2,7 +2,7 @@ import {
2
2
  getCommonConfig,
3
3
  getRuntimeInstanceTelemetryInfo,
4
4
  telemetry_client_default
5
- } from "./chunk-DOWRU5U6.mjs";
5
+ } from "./chunk-IBYPYIVX.mjs";
6
6
  import {
7
7
  __name
8
8
  } from "./chunk-FHD4JECV.mjs";
@@ -77,4 +77,4 @@ export {
77
77
  config,
78
78
  copilotRuntimeNextJSPagesRouterEndpoint
79
79
  };
80
- //# sourceMappingURL=chunk-D3SPXEVJ.mjs.map
80
+ //# sourceMappingURL=chunk-IXK4UOV6.mjs.map
@@ -2,7 +2,7 @@ import {
2
2
  copilotRuntimeNodeHttpEndpoint,
3
3
  getRuntimeInstanceTelemetryInfo,
4
4
  telemetry_client_default
5
- } from "./chunk-DOWRU5U6.mjs";
5
+ } from "./chunk-IBYPYIVX.mjs";
6
6
  import {
7
7
  __name
8
8
  } from "./chunk-FHD4JECV.mjs";
@@ -22,4 +22,4 @@ __name(copilotRuntimeNestEndpoint, "copilotRuntimeNestEndpoint");
22
22
  export {
23
23
  copilotRuntimeNestEndpoint
24
24
  };
25
- //# sourceMappingURL=chunk-6TQCQ3WJ.mjs.map
25
+ //# sourceMappingURL=chunk-P3HORCYJ.mjs.map
@@ -1,3 +1,6 @@
1
+ import {
2
+ convertServiceAdapterError
3
+ } from "./chunk-AMUJQ6IR.mjs";
1
4
  import {
2
5
  __name
3
6
  } from "./chunk-FHD4JECV.mjs";
@@ -403,14 +406,14 @@ var OpenAIAdapter = class {
403
406
  });
404
407
  }
405
408
  } catch (error) {
406
- console.error("[OpenAI] Error processing stream:", error);
407
- throw error;
409
+ console.error("[OpenAI] Error during API call:", error);
410
+ throw convertServiceAdapterError(error, "OpenAI");
408
411
  }
409
412
  eventStream$.complete();
410
413
  });
411
414
  } catch (error) {
412
415
  console.error("[OpenAI] Error during API call:", error);
413
- throw error;
416
+ throw convertServiceAdapterError(error, "OpenAI");
414
417
  }
415
418
  return {
416
419
  threadId
@@ -698,6 +701,7 @@ var GoogleGenerativeAIAdapter = class extends LangChainAdapter {
698
701
  return message.content && String(message.content).trim().length > 0 || message.tool_calls && message.tool_calls.length > 0;
699
702
  });
700
703
  const model = new ChatGoogle({
704
+ apiKey: (options == null ? void 0 : options.apiKey) ?? process.env.GOOGLE_API_KEY,
701
705
  modelName: (options == null ? void 0 : options.model) ?? "gemini-1.5-pro",
702
706
  apiVersion: "v1beta"
703
707
  }).bindTools(tools);
@@ -1064,85 +1068,94 @@ var GroqAdapter = class {
1064
1068
  }
1065
1069
  };
1066
1070
  }
1067
- const stream = await this.groq.chat.completions.create({
1068
- model,
1069
- stream: true,
1070
- messages: openaiMessages,
1071
- ...tools.length > 0 && {
1072
- tools
1073
- },
1074
- ...(forwardedParameters == null ? void 0 : forwardedParameters.maxTokens) && {
1075
- max_tokens: forwardedParameters.maxTokens
1076
- },
1077
- ...(forwardedParameters == null ? void 0 : forwardedParameters.stop) && {
1078
- stop: forwardedParameters.stop
1079
- },
1080
- ...toolChoice && {
1081
- tool_choice: toolChoice
1082
- },
1083
- ...this.disableParallelToolCalls && {
1084
- parallel_tool_calls: false
1085
- },
1086
- ...(forwardedParameters == null ? void 0 : forwardedParameters.temperature) && {
1087
- temperature: forwardedParameters.temperature
1088
- }
1089
- });
1071
+ let stream;
1072
+ try {
1073
+ stream = await this.groq.chat.completions.create({
1074
+ model,
1075
+ stream: true,
1076
+ messages: openaiMessages,
1077
+ ...tools.length > 0 && {
1078
+ tools
1079
+ },
1080
+ ...(forwardedParameters == null ? void 0 : forwardedParameters.maxTokens) && {
1081
+ max_tokens: forwardedParameters.maxTokens
1082
+ },
1083
+ ...(forwardedParameters == null ? void 0 : forwardedParameters.stop) && {
1084
+ stop: forwardedParameters.stop
1085
+ },
1086
+ ...toolChoice && {
1087
+ tool_choice: toolChoice
1088
+ },
1089
+ ...this.disableParallelToolCalls && {
1090
+ parallel_tool_calls: false
1091
+ },
1092
+ ...(forwardedParameters == null ? void 0 : forwardedParameters.temperature) && {
1093
+ temperature: forwardedParameters.temperature
1094
+ }
1095
+ });
1096
+ } catch (error) {
1097
+ throw convertServiceAdapterError(error, "Groq");
1098
+ }
1090
1099
  eventSource.stream(async (eventStream$) => {
1091
1100
  var _a, _b;
1092
1101
  let mode = null;
1093
1102
  let currentMessageId;
1094
1103
  let currentToolCallId;
1095
- for await (const chunk of stream) {
1096
- const toolCall = (_a = chunk.choices[0].delta.tool_calls) == null ? void 0 : _a[0];
1097
- const content = chunk.choices[0].delta.content;
1098
- if (mode === "message" && (toolCall == null ? void 0 : toolCall.id)) {
1099
- mode = null;
1100
- eventStream$.sendTextMessageEnd({
1101
- messageId: currentMessageId
1102
- });
1103
- } else if (mode === "function" && (toolCall === void 0 || (toolCall == null ? void 0 : toolCall.id))) {
1104
- mode = null;
1105
- eventStream$.sendActionExecutionEnd({
1106
- actionExecutionId: currentToolCallId
1107
- });
1108
- }
1109
- if (mode === null) {
1110
- if (toolCall == null ? void 0 : toolCall.id) {
1111
- mode = "function";
1112
- currentToolCallId = toolCall.id;
1113
- eventStream$.sendActionExecutionStart({
1114
- actionExecutionId: currentToolCallId,
1115
- actionName: toolCall.function.name,
1116
- parentMessageId: chunk.id
1117
- });
1118
- } else if (content) {
1119
- mode = "message";
1120
- currentMessageId = chunk.id;
1121
- eventStream$.sendTextMessageStart({
1104
+ try {
1105
+ for await (const chunk of stream) {
1106
+ const toolCall = (_a = chunk.choices[0].delta.tool_calls) == null ? void 0 : _a[0];
1107
+ const content = chunk.choices[0].delta.content;
1108
+ if (mode === "message" && (toolCall == null ? void 0 : toolCall.id)) {
1109
+ mode = null;
1110
+ eventStream$.sendTextMessageEnd({
1122
1111
  messageId: currentMessageId
1123
1112
  });
1113
+ } else if (mode === "function" && (toolCall === void 0 || (toolCall == null ? void 0 : toolCall.id))) {
1114
+ mode = null;
1115
+ eventStream$.sendActionExecutionEnd({
1116
+ actionExecutionId: currentToolCallId
1117
+ });
1118
+ }
1119
+ if (mode === null) {
1120
+ if (toolCall == null ? void 0 : toolCall.id) {
1121
+ mode = "function";
1122
+ currentToolCallId = toolCall.id;
1123
+ eventStream$.sendActionExecutionStart({
1124
+ actionExecutionId: currentToolCallId,
1125
+ actionName: toolCall.function.name,
1126
+ parentMessageId: chunk.id
1127
+ });
1128
+ } else if (content) {
1129
+ mode = "message";
1130
+ currentMessageId = chunk.id;
1131
+ eventStream$.sendTextMessageStart({
1132
+ messageId: currentMessageId
1133
+ });
1134
+ }
1135
+ }
1136
+ if (mode === "message" && content) {
1137
+ eventStream$.sendTextMessageContent({
1138
+ messageId: currentMessageId,
1139
+ content
1140
+ });
1141
+ } else if (mode === "function" && ((_b = toolCall == null ? void 0 : toolCall.function) == null ? void 0 : _b.arguments)) {
1142
+ eventStream$.sendActionExecutionArgs({
1143
+ actionExecutionId: currentToolCallId,
1144
+ args: toolCall.function.arguments
1145
+ });
1124
1146
  }
1125
1147
  }
1126
- if (mode === "message" && content) {
1127
- eventStream$.sendTextMessageContent({
1128
- messageId: currentMessageId,
1129
- content
1148
+ if (mode === "message") {
1149
+ eventStream$.sendTextMessageEnd({
1150
+ messageId: currentMessageId
1130
1151
  });
1131
- } else if (mode === "function" && ((_b = toolCall == null ? void 0 : toolCall.function) == null ? void 0 : _b.arguments)) {
1132
- eventStream$.sendActionExecutionArgs({
1133
- actionExecutionId: currentToolCallId,
1134
- args: toolCall.function.arguments
1152
+ } else if (mode === "function") {
1153
+ eventStream$.sendActionExecutionEnd({
1154
+ actionExecutionId: currentToolCallId
1135
1155
  });
1136
1156
  }
1137
- }
1138
- if (mode === "message") {
1139
- eventStream$.sendTextMessageEnd({
1140
- messageId: currentMessageId
1141
- });
1142
- } else if (mode === "function") {
1143
- eventStream$.sendActionExecutionEnd({
1144
- actionExecutionId: currentToolCallId
1145
- });
1157
+ } catch (error) {
1158
+ throw convertServiceAdapterError(error, "Groq");
1146
1159
  }
1147
1160
  eventStream$.complete();
1148
1161
  });
@@ -1293,7 +1306,7 @@ function convertMessageToAnthropicMessage(message) {
1293
1306
  content: [
1294
1307
  {
1295
1308
  type: "tool_result",
1296
- content: message.result,
1309
+ content: message.result || "Action completed successfully",
1297
1310
  tool_use_id: message.actionExecutionId
1298
1311
  }
1299
1312
  ]
@@ -1317,6 +1330,22 @@ var AnthropicAdapter = class {
1317
1330
  this.model = params.model;
1318
1331
  }
1319
1332
  }
1333
+ shouldGenerateFallbackResponse(messages) {
1334
+ var _a, _b, _c;
1335
+ if (messages.length === 0)
1336
+ return false;
1337
+ const lastMessage = messages[messages.length - 1];
1338
+ const endsWithToolResult = lastMessage.role === "user" && Array.isArray(lastMessage.content) && lastMessage.content.some((content) => content.type === "tool_result");
1339
+ if (messages.length >= 3 && endsWithToolResult) {
1340
+ const lastThree = messages.slice(-3);
1341
+ const hasRecentToolPattern = ((_a = lastThree[0]) == null ? void 0 : _a.role) === "user" && // Initial user message
1342
+ ((_b = lastThree[1]) == null ? void 0 : _b.role) === "assistant" && // Assistant tool use
1343
+ 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
1344
+ Array.isArray(lastThree[2].content) && lastThree[2].content.some((content) => content.type === "tool_result");
1345
+ return hasRecentToolPattern;
1346
+ }
1347
+ return endsWithToolResult;
1348
+ }
1320
1349
  async process(request) {
1321
1350
  const { threadId, model = this.model, messages: rawMessages, actions, eventSource, forwardedParameters } = request;
1322
1351
  const tools = actions.map(convertActionInputToAnthropicTool);
@@ -1331,18 +1360,22 @@ var AnthropicAdapter = class {
1331
1360
  validToolUseIds.add(message.id);
1332
1361
  }
1333
1362
  }
1363
+ const processedToolResultIds = /* @__PURE__ */ new Set();
1334
1364
  const anthropicMessages = messages.map((message) => {
1335
1365
  if (message.isResultMessage()) {
1336
1366
  if (!validToolUseIds.has(message.actionExecutionId)) {
1337
1367
  return null;
1338
1368
  }
1339
- validToolUseIds.delete(message.actionExecutionId);
1369
+ if (processedToolResultIds.has(message.actionExecutionId)) {
1370
+ return null;
1371
+ }
1372
+ processedToolResultIds.add(message.actionExecutionId);
1340
1373
  return {
1341
1374
  role: "user",
1342
1375
  content: [
1343
1376
  {
1344
1377
  type: "tool_result",
1345
- content: message.result,
1378
+ content: message.result || "Action completed successfully",
1346
1379
  tool_use_id: message.actionExecutionId
1347
1380
  }
1348
1381
  ]
@@ -1388,11 +1421,13 @@ var AnthropicAdapter = class {
1388
1421
  let currentMessageId = randomId3();
1389
1422
  let currentToolCallId = randomId3();
1390
1423
  let filterThinkingTextBuffer = new FilterThinkingTextBuffer();
1424
+ let hasReceivedContent = false;
1391
1425
  try {
1392
1426
  for await (const chunk of stream) {
1393
1427
  if (chunk.type === "message_start") {
1394
1428
  currentMessageId = chunk.message.id;
1395
1429
  } else if (chunk.type === "content_block_start") {
1430
+ hasReceivedContent = true;
1396
1431
  if (chunk.content_block.type === "text") {
1397
1432
  didOutputText = false;
1398
1433
  filterThinkingTextBuffer.reset();
@@ -1442,14 +1477,33 @@ var AnthropicAdapter = class {
1442
1477
  }
1443
1478
  }
1444
1479
  } catch (error) {
1445
- console.error("[Anthropic] Error processing stream:", error);
1446
- throw error;
1480
+ throw convertServiceAdapterError(error, "Anthropic");
1481
+ }
1482
+ if (!hasReceivedContent && this.shouldGenerateFallbackResponse(limitedMessages)) {
1483
+ let fallbackContent = "Task completed successfully.";
1484
+ const lastMessage = limitedMessages[limitedMessages.length - 1];
1485
+ if ((lastMessage == null ? void 0 : lastMessage.role) === "user" && Array.isArray(lastMessage.content)) {
1486
+ const toolResult = lastMessage.content.find((c) => c.type === "tool_result");
1487
+ if ((toolResult == null ? void 0 : toolResult.content) && toolResult.content !== "Action completed successfully") {
1488
+ fallbackContent = toolResult.content;
1489
+ }
1490
+ }
1491
+ currentMessageId = randomId3();
1492
+ eventStream$.sendTextMessageStart({
1493
+ messageId: currentMessageId
1494
+ });
1495
+ eventStream$.sendTextMessageContent({
1496
+ messageId: currentMessageId,
1497
+ content: fallbackContent
1498
+ });
1499
+ eventStream$.sendTextMessageEnd({
1500
+ messageId: currentMessageId
1501
+ });
1447
1502
  }
1448
1503
  eventStream$.complete();
1449
1504
  });
1450
1505
  } catch (error) {
1451
- console.error("[Anthropic] Error during API call:", error);
1452
- throw error;
1506
+ throw convertServiceAdapterError(error, "Anthropic");
1453
1507
  }
1454
1508
  return {
1455
1509
  threadId: threadId || randomUUID5()
@@ -1581,4 +1635,4 @@ export {
1581
1635
  EmptyAdapter,
1582
1636
  ExperimentalEmptyAdapter
1583
1637
  };
1584
- //# sourceMappingURL=chunk-IIXJVVTV.mjs.map
1638
+ //# sourceMappingURL=chunk-QLLV2QVK.mjs.map