@copilotkit/runtime 1.50.0-beta.2 → 1.50.0-beta.4

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 (252) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/chunk-27JKTS6P.mjs +1704 -0
  3. package/dist/chunk-27JKTS6P.mjs.map +1 -0
  4. package/dist/chunk-2GPTVDTO.mjs +25 -0
  5. package/dist/chunk-2GPTVDTO.mjs.map +1 -0
  6. package/dist/chunk-2OZAGFV3.mjs +43 -0
  7. package/dist/chunk-2OZAGFV3.mjs.map +1 -0
  8. package/dist/chunk-3AJVKDZX.mjs +3097 -0
  9. package/dist/chunk-3AJVKDZX.mjs.map +1 -0
  10. package/dist/chunk-45RCC3ZS.mjs +25 -0
  11. package/dist/chunk-45RCC3ZS.mjs.map +1 -0
  12. package/dist/chunk-4EHJ4XFJ.mjs +25 -0
  13. package/dist/chunk-4EHJ4XFJ.mjs.map +1 -0
  14. package/dist/chunk-4IANB4TC.mjs +25 -0
  15. package/dist/chunk-4IANB4TC.mjs.map +1 -0
  16. package/dist/chunk-4KES76K3.mjs +74 -0
  17. package/dist/chunk-4KES76K3.mjs.map +1 -0
  18. package/dist/chunk-4OGE3SLW.mjs +3100 -0
  19. package/dist/chunk-4OGE3SLW.mjs.map +1 -0
  20. package/dist/chunk-54YJBMCP.mjs +3097 -0
  21. package/dist/chunk-54YJBMCP.mjs.map +1 -0
  22. package/dist/chunk-62NE5S6M.mjs +226 -0
  23. package/dist/chunk-62NE5S6M.mjs.map +1 -0
  24. package/dist/chunk-6ER4SZYH.mjs +74 -0
  25. package/dist/chunk-6ER4SZYH.mjs.map +1 -0
  26. package/dist/chunk-6TNSLHVR.mjs +74 -0
  27. package/dist/chunk-6TNSLHVR.mjs.map +1 -0
  28. package/dist/chunk-6XRUR5UK.mjs +1 -0
  29. package/dist/chunk-6XRUR5UK.mjs.map +1 -0
  30. package/dist/chunk-7V4BK7TZ.mjs +25 -0
  31. package/dist/chunk-7V4BK7TZ.mjs.map +1 -0
  32. package/dist/chunk-7YZIEXD2.mjs +74 -0
  33. package/dist/chunk-7YZIEXD2.mjs.map +1 -0
  34. package/dist/chunk-A4XHOAFU.mjs +25 -0
  35. package/dist/chunk-A4XHOAFU.mjs.map +1 -0
  36. package/dist/chunk-A555KEAD.mjs +6020 -0
  37. package/dist/chunk-A555KEAD.mjs.map +1 -0
  38. package/dist/chunk-AF73TFTX.mjs +74 -0
  39. package/dist/chunk-AF73TFTX.mjs.map +1 -0
  40. package/dist/chunk-AMUJQ6IR.mjs +50 -0
  41. package/dist/chunk-AMUJQ6IR.mjs.map +1 -0
  42. package/dist/chunk-AQG2SVCA.mjs +25 -0
  43. package/dist/chunk-AQG2SVCA.mjs.map +1 -0
  44. package/dist/chunk-BJZHMXND.mjs +74 -0
  45. package/dist/chunk-BJZHMXND.mjs.map +1 -0
  46. package/dist/chunk-CB2OJXF6.mjs +25 -0
  47. package/dist/chunk-CB2OJXF6.mjs.map +1 -0
  48. package/dist/chunk-CEOMFPJU.mjs +6020 -0
  49. package/dist/chunk-CEOMFPJU.mjs.map +1 -0
  50. package/dist/chunk-CZVLR7CC.mjs +175 -0
  51. package/dist/chunk-CZVLR7CC.mjs.map +1 -0
  52. package/dist/chunk-DCEEHMLJ.mjs +1127 -0
  53. package/dist/chunk-DCEEHMLJ.mjs.map +1 -0
  54. package/dist/chunk-DE3CLKUG.mjs +25 -0
  55. package/dist/chunk-DE3CLKUG.mjs.map +1 -0
  56. package/dist/chunk-DTPRUTNV.mjs +25 -0
  57. package/dist/chunk-DTPRUTNV.mjs.map +1 -0
  58. package/dist/chunk-ERUOA47O.mjs +626 -0
  59. package/dist/chunk-ERUOA47O.mjs.map +1 -0
  60. package/dist/chunk-ESSRC64W.mjs +74 -0
  61. package/dist/chunk-ESSRC64W.mjs.map +1 -0
  62. package/dist/chunk-FHD4JECV.mjs +33 -0
  63. package/dist/chunk-FHD4JECV.mjs.map +1 -0
  64. package/dist/chunk-GRAN6K6N.mjs +25 -0
  65. package/dist/chunk-GRAN6K6N.mjs.map +1 -0
  66. package/dist/chunk-I27F2UPA.mjs +175 -0
  67. package/dist/chunk-I27F2UPA.mjs.map +1 -0
  68. package/dist/chunk-IAZKTOQW.mjs +25 -0
  69. package/dist/chunk-IAZKTOQW.mjs.map +1 -0
  70. package/dist/chunk-J6XZ5MFB.mjs +25 -0
  71. package/dist/chunk-J6XZ5MFB.mjs.map +1 -0
  72. package/dist/chunk-JJ32MA4C.mjs +73 -0
  73. package/dist/chunk-JJ32MA4C.mjs.map +1 -0
  74. package/dist/chunk-JJY4ZTHQ.mjs +25 -0
  75. package/dist/chunk-JJY4ZTHQ.mjs.map +1 -0
  76. package/dist/chunk-KEYLBFU2.mjs +3117 -0
  77. package/dist/chunk-KEYLBFU2.mjs.map +1 -0
  78. package/dist/chunk-KQ53L4WZ.mjs +3094 -0
  79. package/dist/chunk-KQ53L4WZ.mjs.map +1 -0
  80. package/dist/chunk-KTELVQ67.mjs +3098 -0
  81. package/dist/chunk-KTELVQ67.mjs.map +1 -0
  82. package/dist/chunk-LPEPX6NH.mjs +25 -0
  83. package/dist/chunk-LPEPX6NH.mjs.map +1 -0
  84. package/dist/chunk-MDXE55DK.mjs +3117 -0
  85. package/dist/chunk-MDXE55DK.mjs.map +1 -0
  86. package/dist/chunk-MMFUVOXH.mjs +73 -0
  87. package/dist/chunk-MMFUVOXH.mjs.map +1 -0
  88. package/dist/chunk-N3Y4U66N.mjs +253 -0
  89. package/dist/chunk-N3Y4U66N.mjs.map +1 -0
  90. package/dist/chunk-O7UYB4MH.mjs +25 -0
  91. package/dist/chunk-O7UYB4MH.mjs.map +1 -0
  92. package/dist/chunk-OFNVQHNM.mjs +3089 -0
  93. package/dist/chunk-OFNVQHNM.mjs.map +1 -0
  94. package/dist/chunk-OFSV5GET.mjs +3074 -0
  95. package/dist/chunk-OFSV5GET.mjs.map +1 -0
  96. package/dist/chunk-OMRST67R.mjs +25 -0
  97. package/dist/chunk-OMRST67R.mjs.map +1 -0
  98. package/dist/chunk-OWIGJONH.mjs +275 -0
  99. package/dist/chunk-OWIGJONH.mjs.map +1 -0
  100. package/dist/chunk-PRZHE74A.mjs +25 -0
  101. package/dist/chunk-PRZHE74A.mjs.map +1 -0
  102. package/dist/chunk-PTYRVXXP.mjs +80 -0
  103. package/dist/chunk-PTYRVXXP.mjs.map +1 -0
  104. package/dist/chunk-R22B5CCO.mjs +25 -0
  105. package/dist/chunk-R22B5CCO.mjs.map +1 -0
  106. package/dist/chunk-SHBDMA63.mjs +141 -0
  107. package/dist/chunk-SHBDMA63.mjs.map +1 -0
  108. package/dist/chunk-SPVXBPRA.mjs +74 -0
  109. package/dist/chunk-SPVXBPRA.mjs.map +1 -0
  110. package/dist/chunk-T72G46ME.mjs +25 -0
  111. package/dist/chunk-T72G46ME.mjs.map +1 -0
  112. package/dist/chunk-TGELROPU.mjs +25 -0
  113. package/dist/chunk-TGELROPU.mjs.map +1 -0
  114. package/dist/chunk-UNX4IAAD.mjs +25 -0
  115. package/dist/chunk-UNX4IAAD.mjs.map +1 -0
  116. package/dist/chunk-V4DHVC7M.mjs +3085 -0
  117. package/dist/chunk-V4DHVC7M.mjs.map +1 -0
  118. package/dist/chunk-VVRFOB66.mjs +25 -0
  119. package/dist/chunk-VVRFOB66.mjs.map +1 -0
  120. package/dist/chunk-W6NVBYM6.mjs +80 -0
  121. package/dist/chunk-W6NVBYM6.mjs.map +1 -0
  122. package/dist/chunk-W7MBACGC.mjs +74 -0
  123. package/dist/chunk-W7MBACGC.mjs.map +1 -0
  124. package/dist/chunk-WMD4XZZS.mjs +25 -0
  125. package/dist/chunk-WMD4XZZS.mjs.map +1 -0
  126. package/dist/chunk-WX2ZNCRT.mjs +74 -0
  127. package/dist/chunk-WX2ZNCRT.mjs.map +1 -0
  128. package/dist/chunk-XWBDEXDA.mjs +153 -0
  129. package/dist/chunk-XWBDEXDA.mjs.map +1 -0
  130. package/dist/chunk-Y2Z62E2T.mjs +74 -0
  131. package/dist/chunk-Y2Z62E2T.mjs.map +1 -0
  132. package/dist/chunk-YO4I6RVI.mjs +25 -0
  133. package/dist/chunk-YO4I6RVI.mjs.map +1 -0
  134. package/dist/chunk-Z6Q5IW6I.mjs +3098 -0
  135. package/dist/chunk-Z6Q5IW6I.mjs.map +1 -0
  136. package/dist/chunk-Z726O3G2.mjs +25 -0
  137. package/dist/chunk-Z726O3G2.mjs.map +1 -0
  138. package/dist/chunk-ZE4SMZZR.mjs +3097 -0
  139. package/dist/chunk-ZE4SMZZR.mjs.map +1 -0
  140. package/dist/chunk-ZULZB33C.mjs +73 -0
  141. package/dist/chunk-ZULZB33C.mjs.map +1 -0
  142. package/dist/chunk-ZVRGXMY7.mjs +25 -0
  143. package/dist/chunk-ZVRGXMY7.mjs.map +1 -0
  144. package/dist/chunk-ZZ35WBYQ.mjs +25 -0
  145. package/dist/chunk-ZZ35WBYQ.mjs.map +1 -0
  146. package/dist/graphql/message-conversion/index.d.ts +18 -0
  147. package/dist/graphql/message-conversion/index.js +725 -0
  148. package/dist/graphql/message-conversion/index.js.map +1 -0
  149. package/dist/graphql/message-conversion/index.mjs +245 -0
  150. package/dist/graphql/message-conversion/index.mjs.map +1 -0
  151. package/dist/graphql/types/base/index.d.ts +6 -0
  152. package/dist/graphql/types/base/index.js +63 -0
  153. package/dist/graphql/types/base/index.js.map +1 -0
  154. package/dist/graphql/types/base/index.mjs +8 -0
  155. package/dist/graphql/types/base/index.mjs.map +1 -0
  156. package/dist/graphql/types/converted/index.d.ts +2 -0
  157. package/dist/graphql/types/converted/index.js +200 -0
  158. package/dist/graphql/types/converted/index.js.map +1 -0
  159. package/dist/graphql/types/converted/index.mjs +19 -0
  160. package/dist/graphql/types/converted/index.mjs.map +1 -0
  161. package/dist/groq-adapter-540da9c3.d.ts +331 -0
  162. package/dist/groq-adapter-a6f5e9d2.d.ts +331 -0
  163. package/dist/groq-adapter-c8aec5c5.d.ts +321 -0
  164. package/dist/index-96b330da.d.ts +119 -0
  165. package/dist/index-adbd78f1.d.ts +154 -0
  166. package/dist/index.d.ts +71 -281
  167. package/dist/index.js +294 -277
  168. package/dist/index.js.map +1 -1
  169. package/dist/index.mjs +287 -266
  170. package/dist/index.mjs.map +1 -1
  171. package/dist/langgraph.d.ts +284 -0
  172. package/dist/langgraph.js +211 -0
  173. package/dist/langgraph.js.map +1 -0
  174. package/dist/langgraph.mjs +206 -0
  175. package/dist/langgraph.mjs.map +1 -0
  176. package/dist/langserve-0c6100e3.d.ts +257 -0
  177. package/dist/langserve-978d5790.d.ts +243 -0
  178. package/dist/langserve-9fc76ce5.d.ts +243 -0
  179. package/dist/lib/cloud/index.d.ts +6 -0
  180. package/dist/lib/cloud/index.js +18 -0
  181. package/dist/lib/cloud/index.js.map +1 -0
  182. package/dist/lib/cloud/index.mjs +1 -0
  183. package/dist/lib/cloud/index.mjs.map +1 -0
  184. package/dist/lib/index.d.ts +212 -0
  185. package/dist/lib/index.js +7843 -0
  186. package/dist/lib/index.js.map +1 -0
  187. package/dist/lib/index.mjs +76 -0
  188. package/dist/lib/index.mjs.map +1 -0
  189. package/dist/lib/integrations/index.d.ts +34 -0
  190. package/dist/lib/integrations/index.js +3052 -0
  191. package/dist/lib/integrations/index.js.map +1 -0
  192. package/dist/lib/integrations/index.mjs +37 -0
  193. package/dist/lib/integrations/index.mjs.map +1 -0
  194. package/dist/lib/integrations/nest/index.d.ts +15 -0
  195. package/dist/lib/integrations/nest/index.js +2959 -0
  196. package/dist/lib/integrations/nest/index.js.map +1 -0
  197. package/dist/lib/integrations/nest/index.mjs +14 -0
  198. package/dist/lib/integrations/nest/index.mjs.map +1 -0
  199. package/dist/lib/integrations/node-express/index.d.ts +15 -0
  200. package/dist/lib/integrations/node-express/index.js +2959 -0
  201. package/dist/lib/integrations/node-express/index.js.map +1 -0
  202. package/dist/lib/integrations/node-express/index.mjs +14 -0
  203. package/dist/lib/integrations/node-express/index.mjs.map +1 -0
  204. package/dist/lib/integrations/node-http/index.d.ts +15 -0
  205. package/dist/lib/integrations/node-http/index.js +2945 -0
  206. package/dist/lib/integrations/node-http/index.js.map +1 -0
  207. package/dist/lib/integrations/node-http/index.mjs +13 -0
  208. package/dist/lib/integrations/node-http/index.mjs.map +1 -0
  209. package/dist/service-adapters/index.d.ts +162 -0
  210. package/dist/service-adapters/index.js +1787 -0
  211. package/dist/service-adapters/index.js.map +1 -0
  212. package/dist/service-adapters/index.mjs +34 -0
  213. package/dist/service-adapters/index.mjs.map +1 -0
  214. package/dist/service-adapters/shared/index.d.ts +9 -0
  215. package/dist/service-adapters/shared/index.js +72 -0
  216. package/dist/service-adapters/shared/index.js.map +1 -0
  217. package/dist/service-adapters/shared/index.mjs +8 -0
  218. package/dist/service-adapters/shared/index.mjs.map +1 -0
  219. package/dist/shared-0a7346ce.d.ts +466 -0
  220. package/dist/shared-35c6eb04.d.ts +448 -0
  221. package/dist/shared-9ed1dc31.d.ts +414 -0
  222. package/dist/shared-da5708fe.d.ts +449 -0
  223. package/dist/utils/index.d.ts +65 -0
  224. package/dist/utils/index.js +175 -0
  225. package/dist/utils/index.js.map +1 -0
  226. package/dist/utils/index.mjs +12 -0
  227. package/dist/utils/index.mjs.map +1 -0
  228. package/dist/v2/index.d.ts +1 -0
  229. package/dist/v2/index.js +7 -0
  230. package/dist/v2/index.js.map +1 -1
  231. package/dist/v2/index.mjs +1 -0
  232. package/dist/v2/index.mjs.map +1 -1
  233. package/package.json +50 -17
  234. package/src/langgraph.ts +1 -0
  235. package/src/lib/index.ts +41 -1
  236. package/src/lib/integrations/node-http/index.ts +129 -10
  237. package/src/lib/runtime/agent-integrations/{langgraph.agent.ts → langgraph/agent.ts} +5 -30
  238. package/src/lib/runtime/agent-integrations/langgraph/consts.ts +34 -0
  239. package/src/lib/runtime/agent-integrations/langgraph/index.ts +2 -0
  240. package/src/lib/runtime/copilot-runtime.ts +17 -40
  241. package/src/service-adapters/anthropic/anthropic-adapter.ts +16 -3
  242. package/src/service-adapters/bedrock/bedrock-adapter.ts +4 -1
  243. package/src/service-adapters/experimental/ollama/ollama-adapter.ts +2 -1
  244. package/src/service-adapters/google/google-genai-adapter.ts +9 -4
  245. package/src/service-adapters/groq/groq-adapter.ts +16 -3
  246. package/src/service-adapters/langchain/langchain-adapter.ts +5 -3
  247. package/src/service-adapters/langchain/langserve.ts +2 -1
  248. package/src/service-adapters/openai/openai-adapter.ts +17 -3
  249. package/src/service-adapters/openai/openai-assistant-adapter.ts +26 -11
  250. package/src/service-adapters/unify/unify-adapter.ts +3 -1
  251. package/src/v2/index.ts +1 -0
  252. package/tsup.config.ts +5 -2
@@ -23,7 +23,6 @@ import {
23
23
  CopilotRuntimeChatCompletionRequest,
24
24
  CopilotRuntimeChatCompletionResponse,
25
25
  } from "../../service-adapter";
26
- import { Ollama } from "@langchain/community/llms/ollama";
27
26
  import { randomId, randomUUID } from "@copilotkit/shared";
28
27
 
29
28
  const DEFAULT_MODEL = "llama3:latest";
@@ -53,6 +52,8 @@ export class ExperimentalOllamaAdapter implements CopilotServiceAdapter {
53
52
  const { messages, actions, eventSource } = request;
54
53
  // const messages = this.transformMessages(forwardedProps.messages);
55
54
 
55
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
56
+ const { Ollama } = require("@langchain/community/llms/ollama");
56
57
  const ollama = new Ollama({
57
58
  model: this.model,
58
59
  });
@@ -14,9 +14,7 @@
14
14
  * return new GoogleGenerativeAIAdapter({ model: "gemini-1.5-pro" });
15
15
  * ```
16
16
  */
17
- import { ChatGoogle } from "@langchain/google-gauth";
18
17
  import { LangChainAdapter } from "../langchain/langchain-adapter";
19
- import { AIMessage } from "@langchain/core/messages";
20
18
 
21
19
  interface GoogleGenerativeAIAdapterOptions {
22
20
  /**
@@ -38,6 +36,12 @@ export class GoogleGenerativeAIAdapter extends LangChainAdapter {
38
36
  constructor(options?: GoogleGenerativeAIAdapterOptions) {
39
37
  super({
40
38
  chainFn: async ({ messages, tools, threadId }) => {
39
+ // Lazy require for optional peer dependencies
40
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
41
+ const { ChatGoogle } = require("@langchain/google-gauth");
42
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
43
+ const { AIMessage } = require("@langchain/core/messages");
44
+
41
45
  // Filter out empty assistant messages to prevent Gemini validation errors
42
46
  // Gemini specifically rejects conversations containing AIMessages with empty content
43
47
  const filteredMessages = messages.filter((message) => {
@@ -48,9 +52,10 @@ export class GoogleGenerativeAIAdapter extends LangChainAdapter {
48
52
 
49
53
  // For AIMessages, only keep those with non-empty content
50
54
  // Also keep AIMessages with tool_calls even if content is empty
55
+ const aiMsg = message as any;
51
56
  return (
52
- (message.content && String(message.content).trim().length > 0) ||
53
- (message.tool_calls && message.tool_calls.length > 0)
57
+ (aiMsg.content && String(aiMsg.content).trim().length > 0) ||
58
+ (aiMsg.tool_calls && aiMsg.tool_calls.length > 0)
54
59
  );
55
60
  });
56
61
 
@@ -14,7 +14,7 @@
14
14
  * return new GroqAdapter({ groq, model: "<model-name>" });
15
15
  * ```
16
16
  */
17
- import { Groq } from "groq-sdk";
17
+ import type { Groq } from "groq-sdk";
18
18
  import type { ChatCompletionMessageParam } from "groq-sdk/resources/chat";
19
19
  import {
20
20
  CopilotServiceAdapter,
@@ -67,13 +67,25 @@ export class GroqAdapter implements CopilotServiceAdapter {
67
67
  }
68
68
 
69
69
  constructor(params?: GroqAdapterParams) {
70
- this._groq = params?.groq || new Groq({});
70
+ if (params?.groq) {
71
+ this._groq = params.groq;
72
+ }
73
+ // If no instance provided, we'll lazy-load in ensureGroq()
71
74
  if (params?.model) {
72
75
  this.model = params.model;
73
76
  }
74
77
  this.disableParallelToolCalls = params?.disableParallelToolCalls || false;
75
78
  }
76
79
 
80
+ private ensureGroq(): Groq {
81
+ if (!this._groq) {
82
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
83
+ const { Groq } = require("groq-sdk");
84
+ this._groq = new Groq({});
85
+ }
86
+ return this._groq;
87
+ }
88
+
77
89
  async process(
78
90
  request: CopilotRuntimeChatCompletionRequest,
79
91
  ): Promise<CopilotRuntimeChatCompletionResponse> {
@@ -101,7 +113,8 @@ export class GroqAdapter implements CopilotServiceAdapter {
101
113
  }
102
114
  let stream;
103
115
  try {
104
- stream = await this.groq.chat.completions.create({
116
+ const groq = this.ensureGroq();
117
+ stream = await groq.chat.completions.create({
105
118
  model: model,
106
119
  stream: true,
107
120
  messages: openaiMessages as unknown as ChatCompletionMessageParam[],
@@ -31,7 +31,7 @@
31
31
  * - A LangChain `AIMessage` object
32
32
  */
33
33
 
34
- import { BaseMessage } from "@langchain/core/messages";
34
+ import type { BaseMessage } from "@langchain/core/messages";
35
35
  import { CopilotServiceAdapter } from "../service-adapter";
36
36
  import {
37
37
  CopilotRuntimeChatCompletionRequest,
@@ -42,10 +42,9 @@ import {
42
42
  convertMessageToLangChainMessage,
43
43
  streamLangChainResponse,
44
44
  } from "./utils";
45
- import { DynamicStructuredTool } from "@langchain/core/tools";
45
+ import type { DynamicStructuredTool } from "@langchain/core/tools";
46
46
  import { LangChainReturnType } from "./types";
47
47
  import { randomUUID } from "@copilotkit/shared";
48
- import { awaitAllCallbacks } from "@langchain/core/callbacks/promises";
49
48
 
50
49
  interface ChainFnParameters {
51
50
  model: string;
@@ -103,6 +102,9 @@ export class LangChainAdapter implements CopilotServiceAdapter {
103
102
  threadId,
104
103
  };
105
104
  } finally {
105
+ // Lazy require for optional peer dependency
106
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
107
+ const { awaitAllCallbacks } = require("@langchain/core/callbacks/promises");
106
108
  await awaitAllCallbacks();
107
109
  }
108
110
  }
@@ -1,5 +1,4 @@
1
1
  import { Parameter, Action } from "@copilotkit/shared";
2
- import { RemoteRunnable } from "langchain/runnables/remote";
3
2
 
4
3
  export interface RemoteChainParameters {
5
4
  name: string;
@@ -34,6 +33,8 @@ export class RemoteChain {
34
33
  description: this.description,
35
34
  parameters: this.parameters!,
36
35
  handler: async (args: any) => {
36
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
37
+ const { RemoteRunnable } = require("langchain/runnables/remote");
37
38
  const runnable = new RemoteRunnable({ url: this.chainUrl });
38
39
  let input: any;
39
40
  if (this.parameterType === "single") {
@@ -48,7 +48,7 @@
48
48
  * return new OpenAIAdapter({ openai });
49
49
  * ```
50
50
  */
51
- import OpenAI from "openai";
51
+ import type OpenAI from "openai";
52
52
  import {
53
53
  CopilotServiceAdapter,
54
54
  CopilotRuntimeChatCompletionRequest,
@@ -111,7 +111,11 @@ export class OpenAIAdapter implements CopilotServiceAdapter {
111
111
  }
112
112
 
113
113
  constructor(params?: OpenAIAdapterParams) {
114
- this._openai = params?.openai || new OpenAI({});
114
+ if (params?.openai) {
115
+ this._openai = params.openai;
116
+ }
117
+ // If no instance provided, we'll lazy-load in ensureOpenAI()
118
+
115
119
  if (params?.model) {
116
120
  this.model = params.model;
117
121
  }
@@ -119,6 +123,15 @@ export class OpenAIAdapter implements CopilotServiceAdapter {
119
123
  this.keepSystemRole = params?.keepSystemRole ?? false;
120
124
  }
121
125
 
126
+ private ensureOpenAI(): OpenAI {
127
+ if (!this._openai) {
128
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
129
+ const OpenAI = require("openai").default;
130
+ this._openai = new OpenAI();
131
+ }
132
+ return this._openai;
133
+ }
134
+
122
135
  async process(
123
136
  request: CopilotRuntimeChatCompletionRequest,
124
137
  ): Promise<CopilotRuntimeChatCompletionResponse> {
@@ -174,7 +187,8 @@ export class OpenAIAdapter implements CopilotServiceAdapter {
174
187
  }
175
188
 
176
189
  try {
177
- const stream = this.openai.beta.chat.completions.stream({
190
+ const openai = this.ensureOpenAI();
191
+ const stream = openai.beta.chat.completions.stream({
178
192
  model: model,
179
193
  stream: true,
180
194
  messages: openaiMessages,
@@ -22,7 +22,10 @@
22
22
  * });
23
23
  * ```
24
24
  */
25
- import OpenAI from "openai";
25
+ import type OpenAI from "openai";
26
+ import type { RunSubmitToolOutputsStreamParams } from "openai/resources/beta/threads/runs/runs";
27
+ import type { AssistantStream } from "openai/lib/AssistantStream";
28
+ import type { AssistantStreamEvent, AssistantTool } from "openai/resources/beta/assistants";
26
29
  import {
27
30
  CopilotServiceAdapter,
28
31
  CopilotRuntimeChatCompletionRequest,
@@ -34,11 +37,8 @@ import {
34
37
  convertMessageToOpenAIMessage,
35
38
  convertSystemMessageToAssistantAPI,
36
39
  } from "./utils";
37
- import { RunSubmitToolOutputsStreamParams } from "openai/resources/beta/threads/runs/runs";
38
- import { AssistantStream } from "openai/lib/AssistantStream";
39
40
  import { RuntimeEventSource } from "../events";
40
41
  import { ActionInput } from "../../graphql/inputs/action.input";
41
- import { AssistantStreamEvent, AssistantTool } from "openai/resources/beta/assistants";
42
42
  import { ForwardedParametersInput } from "../../graphql/inputs/forwarded-parameters.input";
43
43
 
44
44
  export interface OpenAIAssistantAdapterParams {
@@ -84,7 +84,7 @@ export interface OpenAIAssistantAdapterParams {
84
84
  }
85
85
 
86
86
  export class OpenAIAssistantAdapter implements CopilotServiceAdapter {
87
- private openai: OpenAI;
87
+ private _openai: OpenAI;
88
88
  private codeInterpreterEnabled: boolean;
89
89
  private assistantId: string;
90
90
  private fileSearchEnabled: boolean;
@@ -96,7 +96,10 @@ export class OpenAIAssistantAdapter implements CopilotServiceAdapter {
96
96
  }
97
97
 
98
98
  constructor(params: OpenAIAssistantAdapterParams) {
99
- this.openai = params.openai || new OpenAI({});
99
+ if (params.openai) {
100
+ this._openai = params.openai;
101
+ }
102
+ // If no instance provided, we'll lazy-load in ensureOpenAI()
100
103
  this.codeInterpreterEnabled = params.codeInterpreterEnabled === false || true;
101
104
  this.fileSearchEnabled = params.fileSearchEnabled === false || true;
102
105
  this.assistantId = params.assistantId;
@@ -104,6 +107,15 @@ export class OpenAIAssistantAdapter implements CopilotServiceAdapter {
104
107
  this.keepSystemRole = params?.keepSystemRole ?? false;
105
108
  }
106
109
 
110
+ private ensureOpenAI(): OpenAI {
111
+ if (!this._openai) {
112
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
113
+ const OpenAI = require("openai").default;
114
+ this._openai = new OpenAI({});
115
+ }
116
+ return this._openai;
117
+ }
118
+
107
119
  async process(
108
120
  request: CopilotRuntimeChatCompletionRequest,
109
121
  ): Promise<CopilotRuntimeChatCompletionResponse> {
@@ -111,9 +123,10 @@ export class OpenAIAssistantAdapter implements CopilotServiceAdapter {
111
123
 
112
124
  // if we don't have a threadId, create a new thread
113
125
  let threadId = request.extensions?.openaiAssistantAPI?.threadId;
126
+ const openai = this.ensureOpenAI();
114
127
 
115
128
  if (!threadId) {
116
- threadId = (await this.openai.beta.threads.create()).id;
129
+ threadId = (await openai.beta.threads.create()).id;
117
130
  }
118
131
 
119
132
  const lastMessage = messages.at(-1);
@@ -158,7 +171,8 @@ export class OpenAIAssistantAdapter implements CopilotServiceAdapter {
158
171
  messages: Message[],
159
172
  eventSource: RuntimeEventSource,
160
173
  ) {
161
- let run = await this.openai.beta.threads.runs.retrieve(threadId, runId);
174
+ const openai = this.ensureOpenAI();
175
+ let run = await openai.beta.threads.runs.retrieve(threadId, runId);
162
176
 
163
177
  if (!run.required_action) {
164
178
  throw new Error("No tool outputs required");
@@ -188,7 +202,7 @@ export class OpenAIAssistantAdapter implements CopilotServiceAdapter {
188
202
  },
189
203
  );
190
204
 
191
- const stream = this.openai.beta.threads.runs.submitToolOutputsStream(threadId, runId, {
205
+ const stream = openai.beta.threads.runs.submitToolOutputsStream(threadId, runId, {
192
206
  tool_outputs: toolOutputs,
193
207
  ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),
194
208
  });
@@ -204,6 +218,7 @@ export class OpenAIAssistantAdapter implements CopilotServiceAdapter {
204
218
  eventSource: RuntimeEventSource,
205
219
  forwardedParameters: ForwardedParametersInput,
206
220
  ) {
221
+ const openai = this.ensureOpenAI();
207
222
  messages = [...messages];
208
223
 
209
224
  // get the instruction message
@@ -220,7 +235,7 @@ export class OpenAIAssistantAdapter implements CopilotServiceAdapter {
220
235
  throw new Error("No user message found");
221
236
  }
222
237
 
223
- await this.openai.beta.threads.messages.create(threadId, {
238
+ await openai.beta.threads.messages.create(threadId, {
224
239
  role: "user",
225
240
  content: userMessage.content,
226
241
  });
@@ -233,7 +248,7 @@ export class OpenAIAssistantAdapter implements CopilotServiceAdapter {
233
248
  ...(this.fileSearchEnabled ? [{ type: "file_search" } as AssistantTool] : []),
234
249
  ];
235
250
 
236
- let stream = this.openai.beta.threads.runs.stream(threadId, {
251
+ let stream = openai.beta.threads.runs.stream(threadId, {
237
252
  assistant_id: this.assistantId,
238
253
  instructions,
239
254
  tools: tools,
@@ -22,7 +22,6 @@ import {
22
22
  CopilotRuntimeChatCompletionResponse,
23
23
  CopilotServiceAdapter,
24
24
  } from "../service-adapter";
25
- import OpenAI from "openai";
26
25
  import { randomId, randomUUID } from "@copilotkit/shared";
27
26
  import { convertActionInputToOpenAITool, convertMessageToOpenAIMessage } from "../openai/utils";
28
27
 
@@ -55,6 +54,9 @@ export class UnifyAdapter implements CopilotServiceAdapter {
55
54
  request: CopilotRuntimeChatCompletionRequest,
56
55
  ): Promise<CopilotRuntimeChatCompletionResponse> {
57
56
  const tools = request.actions.map(convertActionInputToOpenAITool);
57
+ // Lazy require for optional peer dependency
58
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
59
+ const OpenAI = require("openai").default;
58
60
  const openai = new OpenAI({
59
61
  apiKey: this.apiKey,
60
62
  baseURL: "https://api.unify.ai/v0/",
package/src/v2/index.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  import "reflect-metadata";
2
2
  export * from "@copilotkitnext/runtime";
3
+ export * from "@copilotkitnext/agent";
package/tsup.config.ts CHANGED
@@ -2,11 +2,11 @@ import { defineConfig, Options } from "tsup";
2
2
 
3
3
  export default defineConfig((options: Options) => ({
4
4
  ...options,
5
- entry: ["src/index.ts", "src/v2/index.ts"],
5
+ entry: ["src/index.ts", "src/v2/index.ts", "src/langgraph.ts"],
6
6
  format: ["esm", "cjs"],
7
7
  dts: true,
8
8
  minify: false,
9
- external: [],
9
+ external: ["@ag-ui/langgraph"],
10
10
  sourcemap: true,
11
11
  exclude: [
12
12
  "**/*.test.ts", // Exclude TypeScript test files
@@ -14,4 +14,7 @@ export default defineConfig((options: Options) => ({
14
14
  "**/__tests__/*", // Exclude any files inside a __tests__ directory
15
15
  ],
16
16
  treeshake: true,
17
+ // Disable code splitting so each entry point is fully independent
18
+ // This prevents @ag-ui/langgraph from being pulled into index.mjs via shared chunks
19
+ splitting: false,
17
20
  }));