@copilotkit/runtime 1.4.0-pre-1-4-0.0 → 1.4.0-pre-1-4-0.11

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 (55) hide show
  1. package/CHANGELOG.md +96 -3
  2. package/__snapshots__/schema/schema.graphql +1 -0
  3. package/dist/{chunk-3SXVSM2J.mjs → chunk-3DNY5YTL.mjs} +2 -2
  4. package/dist/{chunk-5DFP5VJV.mjs → chunk-677K33J7.mjs} +2 -2
  5. package/dist/{chunk-VGYN7TGZ.mjs → chunk-BNQDVBQH.mjs} +1 -1
  6. package/dist/chunk-BNQDVBQH.mjs.map +1 -0
  7. package/dist/{chunk-KDT43TMW.mjs → chunk-FL67XJAX.mjs} +3 -3
  8. package/dist/{chunk-KDT43TMW.mjs.map → chunk-FL67XJAX.mjs.map} +1 -1
  9. package/dist/{chunk-SBNW3ABC.mjs → chunk-V2YEM4Z5.mjs} +2 -2
  10. package/dist/{chunk-5LEQEQFA.mjs → chunk-VBGS6IWV.mjs} +108 -142
  11. package/dist/chunk-VBGS6IWV.mjs.map +1 -0
  12. package/dist/{copilot-runtime-68acb673.d.ts → copilot-runtime-8d3f40c7.d.ts} +3 -3
  13. package/dist/graphql/types/converted/index.d.ts +1 -1
  14. package/dist/{groq-adapter-c30654bd.d.ts → groq-adapter-dbfba3eb.d.ts} +34 -1
  15. package/dist/{index-439dfa2a.d.ts → index-83ee522f.d.ts} +2 -1
  16. package/dist/index.d.ts +4 -4
  17. package/dist/index.js +107 -141
  18. package/dist/index.js.map +1 -1
  19. package/dist/index.mjs +6 -6
  20. package/dist/{langserve-0d844922.d.ts → langserve-f00629d2.d.ts} +1 -1
  21. package/dist/lib/index.d.ts +4 -4
  22. package/dist/lib/index.js +107 -141
  23. package/dist/lib/index.js.map +1 -1
  24. package/dist/lib/index.mjs +6 -6
  25. package/dist/lib/integrations/index.d.ts +4 -4
  26. package/dist/lib/integrations/index.js +2 -1
  27. package/dist/lib/integrations/index.js.map +1 -1
  28. package/dist/lib/integrations/index.mjs +4 -4
  29. package/dist/lib/integrations/nest/index.d.ts +3 -3
  30. package/dist/lib/integrations/nest/index.js +2 -1
  31. package/dist/lib/integrations/nest/index.js.map +1 -1
  32. package/dist/lib/integrations/nest/index.mjs +2 -2
  33. package/dist/lib/integrations/node-express/index.d.ts +3 -3
  34. package/dist/lib/integrations/node-express/index.js +2 -1
  35. package/dist/lib/integrations/node-express/index.js.map +1 -1
  36. package/dist/lib/integrations/node-express/index.mjs +2 -2
  37. package/dist/lib/integrations/node-http/index.d.ts +3 -3
  38. package/dist/lib/integrations/node-http/index.js +2 -1
  39. package/dist/lib/integrations/node-http/index.js.map +1 -1
  40. package/dist/lib/integrations/node-http/index.mjs +1 -1
  41. package/dist/service-adapters/index.d.ts +4 -4
  42. package/dist/service-adapters/index.js.map +1 -1
  43. package/dist/service-adapters/index.mjs +1 -1
  44. package/package.json +4 -4
  45. package/src/agents/langgraph/events.ts +1 -0
  46. package/src/graphql/types/enums.ts +1 -0
  47. package/src/lib/runtime/copilot-runtime.ts +2 -2
  48. package/src/lib/runtime/remote-lg-cloud-action.ts +137 -160
  49. package/src/service-adapters/openai/openai-adapter.ts +33 -0
  50. package/src/service-adapters/openai/utils.ts +13 -9
  51. package/dist/chunk-5LEQEQFA.mjs.map +0 -1
  52. package/dist/chunk-VGYN7TGZ.mjs.map +0 -1
  53. /package/dist/{chunk-3SXVSM2J.mjs.map → chunk-3DNY5YTL.mjs.map} +0 -0
  54. /package/dist/{chunk-5DFP5VJV.mjs.map → chunk-677K33J7.mjs.map} +0 -0
  55. /package/dist/{chunk-SBNW3ABC.mjs.map → chunk-V2YEM4Z5.mjs.map} +0 -0
@@ -36,7 +36,7 @@ var require_package = __commonJS({
36
36
  publishConfig: {
37
37
  access: "public"
38
38
  },
39
- version: "1.4.0-pre-1-4-0.0",
39
+ version: "1.4.0-pre-1-4-0.11",
40
40
  sideEffects: false,
41
41
  main: "./dist/index.js",
42
42
  module: "./dist/index.mjs",
@@ -136,6 +136,7 @@ var MessageRole;
136
136
  MessageRole2["user"] = "user";
137
137
  MessageRole2["assistant"] = "assistant";
138
138
  MessageRole2["system"] = "system";
139
+ MessageRole2["tool"] = "tool";
139
140
  })(MessageRole || (MessageRole = {}));
140
141
  var ActionExecutionScope;
141
142
  (function(ActionExecutionScope2) {
@@ -1055,6 +1056,7 @@ var CustomEventNames;
1055
1056
  CustomEventNames2["CopilotKitManuallyEmitMessage"] = "copilotkit_manually_emit_message";
1056
1057
  CustomEventNames2["CopilotKitManuallyEmitToolCall"] = "copilotkit_manually_emit_tool_call";
1057
1058
  CustomEventNames2["CopilotKitManuallyEmitIntermediateState"] = "copilotkit_manually_emit_intermediate_state";
1059
+ CustomEventNames2["CopilotKitExit"] = "copilotkit_exit";
1058
1060
  })(CustomEventNames || (CustomEventNames = {}));
1059
1061
 
1060
1062
  // src/agents/langgraph/event-source.ts
@@ -1311,7 +1313,13 @@ async function streamEvents(controller, args) {
1311
1313
  const agentStateValues = agentState.values;
1312
1314
  state.messages = agentStateValues.messages;
1313
1315
  const mode = wasInitiatedWithExistingThread && nodeName != "__end__" ? "continue" : "start";
1314
- state = langGraphDefaultMergeState(state, formatMessages(messages), actions, name);
1316
+ let formattedMessages = [];
1317
+ try {
1318
+ formattedMessages = formatMessages(messages);
1319
+ } catch (e) {
1320
+ logger2.error(e, `Error event thrown: ${e.message}`);
1321
+ }
1322
+ state = langGraphDefaultMergeState(state, formattedMessages, actions, name);
1315
1323
  if (mode === "continue") {
1316
1324
  await client.threads.updateState(threadId, {
1317
1325
  values: state,
@@ -1334,7 +1342,7 @@ async function streamEvents(controller, args) {
1334
1342
  let streamingStateExtractor = new StreamingStateExtractor([]);
1335
1343
  let prevNodeName = null;
1336
1344
  let emitIntermediateStateUntilEnd = null;
1337
- let shouldExit = null;
1345
+ let shouldExit = false;
1338
1346
  let externalRunId = null;
1339
1347
  const streamResponse2 = client.runs.stream(threadId, assistantId, {
1340
1348
  input: streamInput,
@@ -1345,125 +1353,104 @@ async function streamEvents(controller, args) {
1345
1353
  });
1346
1354
  const emit = /* @__PURE__ */ __name((message) => controller.enqueue(new TextEncoder().encode(message)), "emit");
1347
1355
  let latestStateValues = {};
1348
- for await (const chunk of streamResponse2) {
1349
- if (![
1350
- "events",
1351
- "values",
1352
- "error"
1353
- ].includes(chunk.event))
1354
- continue;
1355
- if (chunk.event === "error") {
1356
- logger2.error(chunk, `Error event thrown: ${chunk.data.message}`);
1357
- throw new Error(`Error event thrown: ${chunk.data.message}`);
1358
- }
1359
- if (chunk.event === "values") {
1360
- latestStateValues = chunk.data;
1361
- continue;
1362
- }
1363
- const event = chunk.data;
1364
- const currentNodeName = event.name;
1365
- const eventType = event.event;
1366
- const runId = event.metadata.run_id;
1367
- externalRunId = runId;
1368
- const metadata = event.metadata;
1369
- shouldExit = shouldExit != null ? shouldExit : metadata["copilotkit:exit"];
1370
- const emitIntermediateState = metadata["copilotkit:emit-intermediate-state"];
1371
- const forceEmitIntermediateState = metadata["copilotkit:force-emit-intermediate-state"];
1372
- const manuallyEmitMessage = metadata["copilotkit:manually-emit-messages"];
1373
- const manuallyEmitToolCall = metadata["copilotkit:manually-emit-tool-calls"];
1374
- if (graphInfo["nodes"].some((node) => node.id === currentNodeName)) {
1375
- nodeName = currentNodeName;
1376
- }
1377
- if (!nodeName) {
1378
- continue;
1379
- }
1380
- if (forceEmitIntermediateState) {
1381
- if (eventType === "on_chain_end") {
1382
- state = event.data.output;
1356
+ let updatedState = state;
1357
+ try {
1358
+ for await (const chunk of streamResponse2) {
1359
+ if (![
1360
+ "events",
1361
+ "values",
1362
+ "error"
1363
+ ].includes(chunk.event))
1364
+ continue;
1365
+ if (chunk.event === "error") {
1366
+ logger2.error(chunk, `Error event thrown: ${chunk.data.message}`);
1367
+ throw new Error(`Error event thrown: ${chunk.data.message}`);
1368
+ }
1369
+ if (chunk.event === "values") {
1370
+ latestStateValues = chunk.data;
1371
+ continue;
1372
+ }
1373
+ const event = chunk.data;
1374
+ const currentNodeName = event.name;
1375
+ const eventType = event.event;
1376
+ const runId = event.metadata.run_id;
1377
+ externalRunId = runId;
1378
+ const metadata = event.metadata;
1379
+ shouldExit = shouldExit || eventType === LangGraphEventTypes.OnCustomEvent && event.name === CustomEventNames.CopilotKitExit;
1380
+ const emitIntermediateState = metadata["copilotkit:emit-intermediate-state"];
1381
+ const manuallyEmitIntermediateState = eventType === LangGraphEventTypes.OnCustomEvent && event.name === CustomEventNames.CopilotKitManuallyEmitIntermediateState;
1382
+ if (graphInfo["nodes"].some((node) => node.id === currentNodeName)) {
1383
+ nodeName = currentNodeName;
1384
+ if (eventType === LangGraphEventTypes.OnChainStart || eventType === LangGraphEventTypes.OnChainEnd) {
1385
+ updatedState = latestStateValues;
1386
+ }
1387
+ }
1388
+ if (!nodeName) {
1389
+ continue;
1390
+ }
1391
+ if (manuallyEmitIntermediateState) {
1392
+ updatedState = event.data;
1383
1393
  emit(getStateSyncEvent({
1384
1394
  threadId,
1385
1395
  runId,
1386
1396
  agentName: agent.name,
1387
1397
  nodeName,
1388
- state: event.data.output,
1398
+ state: updatedState,
1389
1399
  running: true,
1390
1400
  active: true
1391
1401
  }));
1402
+ continue;
1392
1403
  }
1393
- continue;
1394
- }
1395
- if (manuallyEmitMessage) {
1396
- if (eventType === "on_chain_end") {
1397
- state = event.data.output;
1398
- emit(JSON.stringify({
1399
- event: "on_copilotkit_emit_message",
1400
- message: event.data.output,
1401
- messageId: randomUUID(),
1402
- role: MessageRole.assistant
1403
- }) + "\n");
1404
+ if (emitIntermediateState && emitIntermediateStateUntilEnd == null) {
1405
+ emitIntermediateStateUntilEnd = nodeName;
1404
1406
  }
1405
- continue;
1406
- }
1407
- if (manuallyEmitToolCall) {
1408
- if (eventType === "on_chain_end") {
1409
- state = event.data.output;
1410
- emit(JSON.stringify({
1411
- event: "on_copilotkit_emit_tool_call",
1412
- name: event.data.output.name,
1413
- args: event.data.output.args,
1414
- id: event.data.output.id
1415
- }) + "\n");
1407
+ if (emitIntermediateState && eventType === LangGraphEventTypes.OnChatModelStart) {
1408
+ streamingStateExtractor = new StreamingStateExtractor(emitIntermediateState);
1416
1409
  }
1417
- continue;
1418
- }
1419
- if (emitIntermediateState && emitIntermediateStateUntilEnd == null) {
1420
- emitIntermediateStateUntilEnd = nodeName;
1421
- }
1422
- if (emitIntermediateState && eventType === "on_chat_model_start") {
1423
- streamingStateExtractor = new StreamingStateExtractor(emitIntermediateState);
1424
- }
1425
- let updatedState = latestStateValues;
1426
- if (emitIntermediateState && eventType === "on_chat_model_stream") {
1427
- streamingStateExtractor.bufferToolCalls(event);
1428
- }
1429
- if (emitIntermediateStateUntilEnd !== null) {
1430
- updatedState = {
1431
- ...updatedState,
1432
- ...streamingStateExtractor.extractState()
1433
- };
1434
- }
1435
- if (!emitIntermediateState && currentNodeName === emitIntermediateStateUntilEnd && eventType === "on_chain_end") {
1436
- emitIntermediateStateUntilEnd = null;
1437
- }
1438
- const exitingNode = nodeName === currentNodeName && eventType === "on_chain_end";
1439
- if (JSON.stringify(updatedState) !== JSON.stringify(state) || prevNodeName != nodeName || exitingNode) {
1440
- state = updatedState;
1441
- prevNodeName = nodeName;
1442
- emit(getStateSyncEvent({
1443
- threadId,
1444
- runId,
1445
- agentName: agent.name,
1446
- nodeName,
1447
- state,
1448
- running: true,
1449
- active: !exitingNode
1450
- }));
1410
+ if (emitIntermediateState && eventType === LangGraphEventTypes.OnChatModelStream) {
1411
+ streamingStateExtractor.bufferToolCalls(event);
1412
+ }
1413
+ if (emitIntermediateStateUntilEnd !== null) {
1414
+ updatedState = {
1415
+ ...updatedState,
1416
+ ...streamingStateExtractor.extractState()
1417
+ };
1418
+ }
1419
+ if (!emitIntermediateState && currentNodeName === emitIntermediateStateUntilEnd && eventType === LangGraphEventTypes.OnChainEnd) {
1420
+ emitIntermediateStateUntilEnd = null;
1421
+ }
1422
+ const exitingNode = nodeName === currentNodeName && eventType === LangGraphEventTypes.OnChainEnd;
1423
+ if (JSON.stringify(updatedState) !== JSON.stringify(state) || prevNodeName != nodeName || exitingNode) {
1424
+ state = updatedState;
1425
+ prevNodeName = nodeName;
1426
+ emit(getStateSyncEvent({
1427
+ threadId,
1428
+ runId,
1429
+ agentName: agent.name,
1430
+ nodeName,
1431
+ state,
1432
+ running: true,
1433
+ active: !exitingNode
1434
+ }));
1435
+ }
1436
+ emit(JSON.stringify(event) + "\n");
1451
1437
  }
1452
- emit(JSON.stringify(event) + "\n");
1438
+ state = await client.threads.getState(threadId);
1439
+ const isEndNode = state.next.length === 0;
1440
+ nodeName = Object.keys(state.metadata.writes)[0];
1441
+ emit(getStateSyncEvent({
1442
+ threadId,
1443
+ runId: externalRunId,
1444
+ agentName: agent.name,
1445
+ nodeName: isEndNode ? "__end__" : nodeName,
1446
+ state: state.values,
1447
+ running: !shouldExit,
1448
+ active: false
1449
+ }));
1450
+ return Promise.resolve();
1451
+ } catch (e) {
1452
+ return Promise.resolve();
1453
1453
  }
1454
- state = await client.threads.getState(threadId);
1455
- const isEndNode = state.next.length === 0;
1456
- nodeName = Object.keys(state.metadata.writes)[0];
1457
- emit(getStateSyncEvent({
1458
- threadId,
1459
- runId: externalRunId,
1460
- agentName: agent.name,
1461
- nodeName: isEndNode ? "__end__" : nodeName,
1462
- state: state.values,
1463
- running: !shouldExit,
1464
- active: false
1465
- }));
1466
- return Promise.resolve();
1467
1454
  }
1468
1455
  __name(streamEvents, "streamEvents");
1469
1456
  function getStateSyncEvent({ threadId, runId, agentName, nodeName, state, running, active }) {
@@ -1474,7 +1461,7 @@ function getStateSyncEvent({ threadId, runId, agentName, nodeName, state, runnin
1474
1461
  return acc;
1475
1462
  }, {});
1476
1463
  return JSON.stringify({
1477
- event: "on_copilotkit_state_sync",
1464
+ event: LangGraphEventTypes.OnCopilotKitStateSync,
1478
1465
  thread_id: threadId,
1479
1466
  run_id: runId,
1480
1467
  agent_name: agentName,
@@ -1500,10 +1487,10 @@ var StreamingStateExtractor = /* @__PURE__ */ __name(class StreamingStateExtract
1500
1487
  bufferToolCalls(event) {
1501
1488
  if (event.data.chunk.tool_call_chunks.length > 0) {
1502
1489
  const chunk = event.data.chunk.tool_call_chunks[0];
1503
- if (chunk.name !== null) {
1490
+ if (chunk.name !== null && chunk.name !== void 0) {
1504
1491
  this.currentToolCall = chunk.name;
1505
1492
  this.toolCallBuffer[this.currentToolCall] = chunk.args;
1506
- } else if (this.currentToolCall !== null) {
1493
+ } else if (this.currentToolCall !== null && this.currentToolCall !== void 0) {
1507
1494
  this.toolCallBuffer[this.currentToolCall] += chunk.args;
1508
1495
  }
1509
1496
  }
@@ -1579,12 +1566,10 @@ function langGraphDefaultMergeState(state, messages, actions, agentName) {
1579
1566
  mergedMessages.push(message);
1580
1567
  } else {
1581
1568
  for (let i = 0; i < mergedMessages.length; i++) {
1582
- if (mergedMessages[i].id === message.id) {
1583
- if ("tool_calls" in message) {
1584
- if (("tool_calls" in mergedMessages[i] || "additional_kwargs" in mergedMessages[i]) && mergedMessages[i].content) {
1585
- message.tool_calls = mergedMessages[i]["tool_calls"];
1586
- message.additional_kwargs = mergedMessages[i].additional_kwargs;
1587
- }
1569
+ if (mergedMessages[i].id === message.id && message.role === "assistant") {
1570
+ if (("tool_calls" in mergedMessages[i] || "additional_kwargs" in mergedMessages[i]) && mergedMessages[i].content) {
1571
+ message.tool_calls = mergedMessages[i]["tool_calls"];
1572
+ message.additional_kwargs = mergedMessages[i].additional_kwargs;
1588
1573
  }
1589
1574
  mergedMessages[i] = message;
1590
1575
  }
@@ -1636,34 +1621,15 @@ function langGraphDefaultMergeState(state, messages, actions, agentName) {
1636
1621
  }
1637
1622
  correctedMessages.push(currentMessage);
1638
1623
  }
1639
- return deepMerge(state, {
1624
+ return {
1625
+ ...state,
1640
1626
  messages: correctedMessages,
1641
1627
  copilotkit: {
1642
1628
  actions
1643
1629
  }
1644
- });
1645
- }
1646
- __name(langGraphDefaultMergeState, "langGraphDefaultMergeState");
1647
- function deepMerge(obj1, obj2) {
1648
- let result = {
1649
- ...obj1
1650
1630
  };
1651
- for (let key in obj2) {
1652
- if (typeof obj2[key] === "object" && !Array.isArray(obj2[key])) {
1653
- if (obj1[key]) {
1654
- result[key] = deepMerge(obj1[key], obj2[key]);
1655
- } else {
1656
- result[key] = {
1657
- ...obj2[key]
1658
- };
1659
- }
1660
- } else {
1661
- result[key] = obj2[key];
1662
- }
1663
- }
1664
- return result;
1665
1631
  }
1666
- __name(deepMerge, "deepMerge");
1632
+ __name(langGraphDefaultMergeState, "langGraphDefaultMergeState");
1667
1633
  function formatMessages(messages) {
1668
1634
  return messages.map((message) => {
1669
1635
  if (message.isTextMessage() && message.role === "assistant") {
@@ -1698,7 +1664,7 @@ function formatMessages(messages) {
1698
1664
  id: message.id,
1699
1665
  tool_call_id: message.actionExecutionId,
1700
1666
  name: message.actionName,
1701
- role: MessageRole.assistant
1667
+ role: MessageRole.tool
1702
1668
  };
1703
1669
  }
1704
1670
  throw new Error(`Unknown message type ${message.type}`);
@@ -2789,4 +2755,4 @@ export {
2789
2755
  getCommonConfig,
2790
2756
  copilotRuntimeNodeHttpEndpoint
2791
2757
  };
2792
- //# sourceMappingURL=chunk-5LEQEQFA.mjs.map
2758
+ //# sourceMappingURL=chunk-VBGS6IWV.mjs.map