@copilotkit/runtime 1.4.0-pre-1-4-0.0 → 1.4.0-pre-1-4-0.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 (55) hide show
  1. package/CHANGELOG.md +85 -3
  2. package/__snapshots__/schema/schema.graphql +1 -0
  3. package/dist/{chunk-3SXVSM2J.mjs → chunk-5DNXXJKY.mjs} +2 -2
  4. package/dist/{chunk-KDT43TMW.mjs → chunk-7ASURDKE.mjs} +3 -3
  5. package/dist/{chunk-KDT43TMW.mjs.map → chunk-7ASURDKE.mjs.map} +1 -1
  6. package/dist/{chunk-VGYN7TGZ.mjs → chunk-BNQDVBQH.mjs} +1 -1
  7. package/dist/chunk-BNQDVBQH.mjs.map +1 -0
  8. package/dist/{chunk-SBNW3ABC.mjs → chunk-ITRJ4KUY.mjs} +2 -2
  9. package/dist/{chunk-5LEQEQFA.mjs → chunk-KDMS6EKE.mjs} +108 -142
  10. package/dist/chunk-KDMS6EKE.mjs.map +1 -0
  11. package/dist/{chunk-5DFP5VJV.mjs → chunk-NR7QFSEY.mjs} +2 -2
  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-5DNXXJKY.mjs.map} +0 -0
  54. /package/dist/{chunk-SBNW3ABC.mjs.map → chunk-ITRJ4KUY.mjs.map} +0 -0
  55. /package/dist/{chunk-5DFP5VJV.mjs.map → chunk-NR7QFSEY.mjs.map} +0 -0
package/dist/index.js CHANGED
@@ -44,7 +44,7 @@ var require_package = __commonJS({
44
44
  publishConfig: {
45
45
  access: "public"
46
46
  },
47
- version: "1.4.0-pre-1-4-0.0",
47
+ version: "1.4.0-pre-1-4-0.10",
48
48
  sideEffects: false,
49
49
  main: "./dist/index.js",
50
50
  module: "./dist/index.mjs",
@@ -1361,6 +1361,7 @@ var CustomEventNames;
1361
1361
  CustomEventNames2["CopilotKitManuallyEmitMessage"] = "copilotkit_manually_emit_message";
1362
1362
  CustomEventNames2["CopilotKitManuallyEmitToolCall"] = "copilotkit_manually_emit_tool_call";
1363
1363
  CustomEventNames2["CopilotKitManuallyEmitIntermediateState"] = "copilotkit_manually_emit_intermediate_state";
1364
+ CustomEventNames2["CopilotKitExit"] = "copilotkit_exit";
1364
1365
  })(CustomEventNames || (CustomEventNames = {}));
1365
1366
 
1366
1367
  // src/agents/langgraph/event-source.ts
@@ -1580,6 +1581,7 @@ var MessageRole;
1580
1581
  MessageRole2["user"] = "user";
1581
1582
  MessageRole2["assistant"] = "assistant";
1582
1583
  MessageRole2["system"] = "system";
1584
+ MessageRole2["tool"] = "tool";
1583
1585
  })(MessageRole || (MessageRole = {}));
1584
1586
  var ActionExecutionScope;
1585
1587
  (function(ActionExecutionScope2) {
@@ -1654,7 +1656,13 @@ async function streamEvents(controller, args) {
1654
1656
  const agentStateValues = agentState.values;
1655
1657
  state.messages = agentStateValues.messages;
1656
1658
  const mode = wasInitiatedWithExistingThread && nodeName != "__end__" ? "continue" : "start";
1657
- state = langGraphDefaultMergeState(state, formatMessages(messages), actions, name);
1659
+ let formattedMessages = [];
1660
+ try {
1661
+ formattedMessages = formatMessages(messages);
1662
+ } catch (e) {
1663
+ logger2.error(e, `Error event thrown: ${e.message}`);
1664
+ }
1665
+ state = langGraphDefaultMergeState(state, formattedMessages, actions, name);
1658
1666
  if (mode === "continue") {
1659
1667
  await client.threads.updateState(threadId, {
1660
1668
  values: state,
@@ -1677,7 +1685,7 @@ async function streamEvents(controller, args) {
1677
1685
  let streamingStateExtractor = new StreamingStateExtractor([]);
1678
1686
  let prevNodeName = null;
1679
1687
  let emitIntermediateStateUntilEnd = null;
1680
- let shouldExit = null;
1688
+ let shouldExit = false;
1681
1689
  let externalRunId = null;
1682
1690
  const streamResponse2 = client.runs.stream(threadId, assistantId, {
1683
1691
  input: streamInput,
@@ -1688,125 +1696,104 @@ async function streamEvents(controller, args) {
1688
1696
  });
1689
1697
  const emit = /* @__PURE__ */ __name((message) => controller.enqueue(new TextEncoder().encode(message)), "emit");
1690
1698
  let latestStateValues = {};
1691
- for await (const chunk of streamResponse2) {
1692
- if (![
1693
- "events",
1694
- "values",
1695
- "error"
1696
- ].includes(chunk.event))
1697
- continue;
1698
- if (chunk.event === "error") {
1699
- logger2.error(chunk, `Error event thrown: ${chunk.data.message}`);
1700
- throw new Error(`Error event thrown: ${chunk.data.message}`);
1701
- }
1702
- if (chunk.event === "values") {
1703
- latestStateValues = chunk.data;
1704
- continue;
1705
- }
1706
- const event = chunk.data;
1707
- const currentNodeName = event.name;
1708
- const eventType = event.event;
1709
- const runId = event.metadata.run_id;
1710
- externalRunId = runId;
1711
- const metadata = event.metadata;
1712
- shouldExit = shouldExit != null ? shouldExit : metadata["copilotkit:exit"];
1713
- const emitIntermediateState = metadata["copilotkit:emit-intermediate-state"];
1714
- const forceEmitIntermediateState = metadata["copilotkit:force-emit-intermediate-state"];
1715
- const manuallyEmitMessage = metadata["copilotkit:manually-emit-messages"];
1716
- const manuallyEmitToolCall = metadata["copilotkit:manually-emit-tool-calls"];
1717
- if (graphInfo["nodes"].some((node) => node.id === currentNodeName)) {
1718
- nodeName = currentNodeName;
1719
- }
1720
- if (!nodeName) {
1721
- continue;
1722
- }
1723
- if (forceEmitIntermediateState) {
1724
- if (eventType === "on_chain_end") {
1725
- state = event.data.output;
1699
+ let updatedState = state;
1700
+ try {
1701
+ for await (const chunk of streamResponse2) {
1702
+ if (![
1703
+ "events",
1704
+ "values",
1705
+ "error"
1706
+ ].includes(chunk.event))
1707
+ continue;
1708
+ if (chunk.event === "error") {
1709
+ logger2.error(chunk, `Error event thrown: ${chunk.data.message}`);
1710
+ throw new Error(`Error event thrown: ${chunk.data.message}`);
1711
+ }
1712
+ if (chunk.event === "values") {
1713
+ latestStateValues = chunk.data;
1714
+ continue;
1715
+ }
1716
+ const event = chunk.data;
1717
+ const currentNodeName = event.name;
1718
+ const eventType = event.event;
1719
+ const runId = event.metadata.run_id;
1720
+ externalRunId = runId;
1721
+ const metadata = event.metadata;
1722
+ shouldExit = shouldExit || eventType === LangGraphEventTypes.OnCustomEvent && event.name === CustomEventNames.CopilotKitExit;
1723
+ const emitIntermediateState = metadata["copilotkit:emit-intermediate-state"];
1724
+ const manuallyEmitIntermediateState = eventType === LangGraphEventTypes.OnCustomEvent && event.name === CustomEventNames.CopilotKitManuallyEmitIntermediateState;
1725
+ if (graphInfo["nodes"].some((node) => node.id === currentNodeName)) {
1726
+ nodeName = currentNodeName;
1727
+ if (eventType === LangGraphEventTypes.OnChainStart || eventType === LangGraphEventTypes.OnChainEnd) {
1728
+ updatedState = latestStateValues;
1729
+ }
1730
+ }
1731
+ if (!nodeName) {
1732
+ continue;
1733
+ }
1734
+ if (manuallyEmitIntermediateState) {
1735
+ updatedState = event.data;
1726
1736
  emit(getStateSyncEvent({
1727
1737
  threadId,
1728
1738
  runId,
1729
1739
  agentName: agent.name,
1730
1740
  nodeName,
1731
- state: event.data.output,
1741
+ state: updatedState,
1732
1742
  running: true,
1733
1743
  active: true
1734
1744
  }));
1745
+ continue;
1735
1746
  }
1736
- continue;
1737
- }
1738
- if (manuallyEmitMessage) {
1739
- if (eventType === "on_chain_end") {
1740
- state = event.data.output;
1741
- emit(JSON.stringify({
1742
- event: "on_copilotkit_emit_message",
1743
- message: event.data.output,
1744
- messageId: (0, import_node_crypto.randomUUID)(),
1745
- role: MessageRole.assistant
1746
- }) + "\n");
1747
+ if (emitIntermediateState && emitIntermediateStateUntilEnd == null) {
1748
+ emitIntermediateStateUntilEnd = nodeName;
1747
1749
  }
1748
- continue;
1749
- }
1750
- if (manuallyEmitToolCall) {
1751
- if (eventType === "on_chain_end") {
1752
- state = event.data.output;
1753
- emit(JSON.stringify({
1754
- event: "on_copilotkit_emit_tool_call",
1755
- name: event.data.output.name,
1756
- args: event.data.output.args,
1757
- id: event.data.output.id
1758
- }) + "\n");
1750
+ if (emitIntermediateState && eventType === LangGraphEventTypes.OnChatModelStart) {
1751
+ streamingStateExtractor = new StreamingStateExtractor(emitIntermediateState);
1759
1752
  }
1760
- continue;
1761
- }
1762
- if (emitIntermediateState && emitIntermediateStateUntilEnd == null) {
1763
- emitIntermediateStateUntilEnd = nodeName;
1764
- }
1765
- if (emitIntermediateState && eventType === "on_chat_model_start") {
1766
- streamingStateExtractor = new StreamingStateExtractor(emitIntermediateState);
1767
- }
1768
- let updatedState = latestStateValues;
1769
- if (emitIntermediateState && eventType === "on_chat_model_stream") {
1770
- streamingStateExtractor.bufferToolCalls(event);
1771
- }
1772
- if (emitIntermediateStateUntilEnd !== null) {
1773
- updatedState = {
1774
- ...updatedState,
1775
- ...streamingStateExtractor.extractState()
1776
- };
1777
- }
1778
- if (!emitIntermediateState && currentNodeName === emitIntermediateStateUntilEnd && eventType === "on_chain_end") {
1779
- emitIntermediateStateUntilEnd = null;
1780
- }
1781
- const exitingNode = nodeName === currentNodeName && eventType === "on_chain_end";
1782
- if (JSON.stringify(updatedState) !== JSON.stringify(state) || prevNodeName != nodeName || exitingNode) {
1783
- state = updatedState;
1784
- prevNodeName = nodeName;
1785
- emit(getStateSyncEvent({
1786
- threadId,
1787
- runId,
1788
- agentName: agent.name,
1789
- nodeName,
1790
- state,
1791
- running: true,
1792
- active: !exitingNode
1793
- }));
1753
+ if (emitIntermediateState && eventType === LangGraphEventTypes.OnChatModelStream) {
1754
+ streamingStateExtractor.bufferToolCalls(event);
1755
+ }
1756
+ if (emitIntermediateStateUntilEnd !== null) {
1757
+ updatedState = {
1758
+ ...updatedState,
1759
+ ...streamingStateExtractor.extractState()
1760
+ };
1761
+ }
1762
+ if (!emitIntermediateState && currentNodeName === emitIntermediateStateUntilEnd && eventType === LangGraphEventTypes.OnChainEnd) {
1763
+ emitIntermediateStateUntilEnd = null;
1764
+ }
1765
+ const exitingNode = nodeName === currentNodeName && eventType === LangGraphEventTypes.OnChainEnd;
1766
+ if (JSON.stringify(updatedState) !== JSON.stringify(state) || prevNodeName != nodeName || exitingNode) {
1767
+ state = updatedState;
1768
+ prevNodeName = nodeName;
1769
+ emit(getStateSyncEvent({
1770
+ threadId,
1771
+ runId,
1772
+ agentName: agent.name,
1773
+ nodeName,
1774
+ state,
1775
+ running: true,
1776
+ active: !exitingNode
1777
+ }));
1778
+ }
1779
+ emit(JSON.stringify(event) + "\n");
1794
1780
  }
1795
- emit(JSON.stringify(event) + "\n");
1781
+ state = await client.threads.getState(threadId);
1782
+ const isEndNode = state.next.length === 0;
1783
+ nodeName = Object.keys(state.metadata.writes)[0];
1784
+ emit(getStateSyncEvent({
1785
+ threadId,
1786
+ runId: externalRunId,
1787
+ agentName: agent.name,
1788
+ nodeName: isEndNode ? "__end__" : nodeName,
1789
+ state: state.values,
1790
+ running: !shouldExit,
1791
+ active: false
1792
+ }));
1793
+ return Promise.resolve();
1794
+ } catch (e) {
1795
+ return Promise.resolve();
1796
1796
  }
1797
- state = await client.threads.getState(threadId);
1798
- const isEndNode = state.next.length === 0;
1799
- nodeName = Object.keys(state.metadata.writes)[0];
1800
- emit(getStateSyncEvent({
1801
- threadId,
1802
- runId: externalRunId,
1803
- agentName: agent.name,
1804
- nodeName: isEndNode ? "__end__" : nodeName,
1805
- state: state.values,
1806
- running: !shouldExit,
1807
- active: false
1808
- }));
1809
- return Promise.resolve();
1810
1797
  }
1811
1798
  __name(streamEvents, "streamEvents");
1812
1799
  function getStateSyncEvent({ threadId, runId, agentName, nodeName, state, running, active }) {
@@ -1817,7 +1804,7 @@ function getStateSyncEvent({ threadId, runId, agentName, nodeName, state, runnin
1817
1804
  return acc;
1818
1805
  }, {});
1819
1806
  return JSON.stringify({
1820
- event: "on_copilotkit_state_sync",
1807
+ event: LangGraphEventTypes.OnCopilotKitStateSync,
1821
1808
  thread_id: threadId,
1822
1809
  run_id: runId,
1823
1810
  agent_name: agentName,
@@ -1843,10 +1830,10 @@ var StreamingStateExtractor = /* @__PURE__ */ __name(class StreamingStateExtract
1843
1830
  bufferToolCalls(event) {
1844
1831
  if (event.data.chunk.tool_call_chunks.length > 0) {
1845
1832
  const chunk = event.data.chunk.tool_call_chunks[0];
1846
- if (chunk.name !== null) {
1833
+ if (chunk.name !== null && chunk.name !== void 0) {
1847
1834
  this.currentToolCall = chunk.name;
1848
1835
  this.toolCallBuffer[this.currentToolCall] = chunk.args;
1849
- } else if (this.currentToolCall !== null) {
1836
+ } else if (this.currentToolCall !== null && this.currentToolCall !== void 0) {
1850
1837
  this.toolCallBuffer[this.currentToolCall] += chunk.args;
1851
1838
  }
1852
1839
  }
@@ -1922,12 +1909,10 @@ function langGraphDefaultMergeState(state, messages, actions, agentName) {
1922
1909
  mergedMessages.push(message);
1923
1910
  } else {
1924
1911
  for (let i = 0; i < mergedMessages.length; i++) {
1925
- if (mergedMessages[i].id === message.id) {
1926
- if ("tool_calls" in message) {
1927
- if (("tool_calls" in mergedMessages[i] || "additional_kwargs" in mergedMessages[i]) && mergedMessages[i].content) {
1928
- message.tool_calls = mergedMessages[i]["tool_calls"];
1929
- message.additional_kwargs = mergedMessages[i].additional_kwargs;
1930
- }
1912
+ if (mergedMessages[i].id === message.id && message.role === "assistant") {
1913
+ if (("tool_calls" in mergedMessages[i] || "additional_kwargs" in mergedMessages[i]) && mergedMessages[i].content) {
1914
+ message.tool_calls = mergedMessages[i]["tool_calls"];
1915
+ message.additional_kwargs = mergedMessages[i].additional_kwargs;
1931
1916
  }
1932
1917
  mergedMessages[i] = message;
1933
1918
  }
@@ -1979,34 +1964,15 @@ function langGraphDefaultMergeState(state, messages, actions, agentName) {
1979
1964
  }
1980
1965
  correctedMessages.push(currentMessage);
1981
1966
  }
1982
- return deepMerge(state, {
1967
+ return {
1968
+ ...state,
1983
1969
  messages: correctedMessages,
1984
1970
  copilotkit: {
1985
1971
  actions
1986
1972
  }
1987
- });
1988
- }
1989
- __name(langGraphDefaultMergeState, "langGraphDefaultMergeState");
1990
- function deepMerge(obj1, obj2) {
1991
- let result = {
1992
- ...obj1
1993
1973
  };
1994
- for (let key in obj2) {
1995
- if (typeof obj2[key] === "object" && !Array.isArray(obj2[key])) {
1996
- if (obj1[key]) {
1997
- result[key] = deepMerge(obj1[key], obj2[key]);
1998
- } else {
1999
- result[key] = {
2000
- ...obj2[key]
2001
- };
2002
- }
2003
- } else {
2004
- result[key] = obj2[key];
2005
- }
2006
- }
2007
- return result;
2008
1974
  }
2009
- __name(deepMerge, "deepMerge");
1975
+ __name(langGraphDefaultMergeState, "langGraphDefaultMergeState");
2010
1976
  function formatMessages(messages) {
2011
1977
  return messages.map((message) => {
2012
1978
  if (message.isTextMessage() && message.role === "assistant") {
@@ -2041,7 +2007,7 @@ function formatMessages(messages) {
2041
2007
  id: message.id,
2042
2008
  tool_call_id: message.actionExecutionId,
2043
2009
  name: message.actionName,
2044
- role: MessageRole.assistant
2010
+ role: MessageRole.tool
2045
2011
  };
2046
2012
  }
2047
2013
  throw new Error(`Unknown message type ${message.type}`);