@copilotkit/runtime 1.51.5-next.0 → 1.51.5-next.1

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 (490) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/_virtual/_@oxc-project_runtime@0.112.0/helpers/decorate.cjs +12 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.112.0/helpers/decorate.mjs +11 -0
  4. package/dist/_virtual/_@oxc-project_runtime@0.112.0/helpers/decorateMetadata.cjs +9 -0
  5. package/dist/_virtual/_@oxc-project_runtime@0.112.0/helpers/decorateMetadata.mjs +8 -0
  6. package/dist/_virtual/_@oxc-project_runtime@0.112.0/helpers/decorateParam.cjs +11 -0
  7. package/dist/_virtual/_@oxc-project_runtime@0.112.0/helpers/decorateParam.mjs +10 -0
  8. package/dist/_virtual/_rolldown/runtime.cjs +32 -0
  9. package/dist/_virtual/_rolldown/runtime.mjs +9 -0
  10. package/dist/agents/langgraph/events.cjs +25 -0
  11. package/dist/agents/langgraph/events.cjs.map +1 -0
  12. package/dist/agents/langgraph/events.mjs +24 -0
  13. package/dist/agents/langgraph/events.mjs.map +1 -0
  14. package/dist/graphql/inputs/action.input.cjs +24 -0
  15. package/dist/graphql/inputs/action.input.cjs.map +1 -0
  16. package/dist/graphql/inputs/action.input.d.cts +13 -0
  17. package/dist/graphql/inputs/action.input.d.cts.map +1 -0
  18. package/dist/graphql/inputs/action.input.d.mts +13 -0
  19. package/dist/graphql/inputs/action.input.d.mts.map +1 -0
  20. package/dist/graphql/inputs/action.input.mjs +18 -0
  21. package/dist/graphql/inputs/action.input.mjs.map +1 -0
  22. package/dist/graphql/inputs/agent-session.input.cjs +21 -0
  23. package/dist/graphql/inputs/agent-session.input.cjs.map +1 -0
  24. package/dist/graphql/inputs/agent-session.input.d.cts +10 -0
  25. package/dist/graphql/inputs/agent-session.input.d.cts.map +1 -0
  26. package/dist/graphql/inputs/agent-session.input.d.mts +10 -0
  27. package/dist/graphql/inputs/agent-session.input.d.mts.map +1 -0
  28. package/dist/graphql/inputs/agent-session.input.mjs +15 -0
  29. package/dist/graphql/inputs/agent-session.input.mjs.map +1 -0
  30. package/dist/graphql/inputs/agent-state.input.cjs +21 -0
  31. package/dist/graphql/inputs/agent-state.input.cjs.map +1 -0
  32. package/dist/graphql/inputs/agent-state.input.d.cts +10 -0
  33. package/dist/graphql/inputs/agent-state.input.d.cts.map +1 -0
  34. package/dist/graphql/inputs/agent-state.input.d.mts +10 -0
  35. package/dist/graphql/inputs/agent-state.input.d.mts.map +1 -0
  36. package/dist/graphql/inputs/agent-state.input.mjs +15 -0
  37. package/dist/graphql/inputs/agent-state.input.mjs.map +1 -0
  38. package/dist/graphql/inputs/cloud-guardrails.input.cjs +29 -0
  39. package/dist/graphql/inputs/cloud-guardrails.input.cjs.map +1 -0
  40. package/dist/graphql/inputs/cloud-guardrails.input.mjs +23 -0
  41. package/dist/graphql/inputs/cloud-guardrails.input.mjs.map +1 -0
  42. package/dist/graphql/inputs/cloud.input.cjs +21 -0
  43. package/dist/graphql/inputs/cloud.input.cjs.map +1 -0
  44. package/dist/graphql/inputs/cloud.input.mjs +15 -0
  45. package/dist/graphql/inputs/cloud.input.mjs.map +1 -0
  46. package/dist/graphql/inputs/copilot-context.input.cjs +20 -0
  47. package/dist/graphql/inputs/copilot-context.input.cjs.map +1 -0
  48. package/dist/graphql/inputs/copilot-context.input.mjs +14 -0
  49. package/dist/graphql/inputs/copilot-context.input.mjs.map +1 -0
  50. package/dist/graphql/inputs/extensions.input.cjs +24 -0
  51. package/dist/graphql/inputs/extensions.input.cjs.map +1 -0
  52. package/dist/graphql/inputs/extensions.input.d.cts +16 -0
  53. package/dist/graphql/inputs/extensions.input.d.cts.map +1 -0
  54. package/dist/graphql/inputs/extensions.input.d.mts +16 -0
  55. package/dist/graphql/inputs/extensions.input.d.mts.map +1 -0
  56. package/dist/graphql/inputs/extensions.input.mjs +18 -0
  57. package/dist/graphql/inputs/extensions.input.mjs.map +1 -0
  58. package/dist/graphql/inputs/forwarded-parameters.input.cjs +25 -0
  59. package/dist/graphql/inputs/forwarded-parameters.input.cjs.map +1 -0
  60. package/dist/graphql/inputs/forwarded-parameters.input.d.cts +13 -0
  61. package/dist/graphql/inputs/forwarded-parameters.input.d.cts.map +1 -0
  62. package/dist/graphql/inputs/forwarded-parameters.input.d.mts +13 -0
  63. package/dist/graphql/inputs/forwarded-parameters.input.d.mts.map +1 -0
  64. package/dist/graphql/inputs/forwarded-parameters.input.mjs +19 -0
  65. package/dist/graphql/inputs/forwarded-parameters.input.mjs.map +1 -0
  66. package/dist/graphql/inputs/frontend.input.cjs +22 -0
  67. package/dist/graphql/inputs/frontend.input.cjs.map +1 -0
  68. package/dist/graphql/inputs/frontend.input.mjs +16 -0
  69. package/dist/graphql/inputs/frontend.input.mjs.map +1 -0
  70. package/dist/graphql/inputs/generate-copilot-response.input.cjs +45 -0
  71. package/dist/graphql/inputs/generate-copilot-response.input.cjs.map +1 -0
  72. package/dist/graphql/inputs/generate-copilot-response.input.mjs +39 -0
  73. package/dist/graphql/inputs/generate-copilot-response.input.mjs.map +1 -0
  74. package/dist/graphql/inputs/load-agent-state.input.cjs +20 -0
  75. package/dist/graphql/inputs/load-agent-state.input.cjs.map +1 -0
  76. package/dist/graphql/inputs/load-agent-state.input.mjs +14 -0
  77. package/dist/graphql/inputs/load-agent-state.input.mjs.map +1 -0
  78. package/dist/graphql/inputs/message.input.cjs +62 -0
  79. package/dist/graphql/inputs/message.input.cjs.map +1 -0
  80. package/dist/graphql/inputs/message.input.d.cts +48 -0
  81. package/dist/graphql/inputs/message.input.d.cts.map +1 -0
  82. package/dist/graphql/inputs/message.input.d.mts +48 -0
  83. package/dist/graphql/inputs/message.input.d.mts.map +1 -0
  84. package/dist/graphql/inputs/message.input.mjs +56 -0
  85. package/dist/graphql/inputs/message.input.mjs.map +1 -0
  86. package/dist/graphql/inputs/meta-event.input.cjs +25 -0
  87. package/dist/graphql/inputs/meta-event.input.cjs.map +1 -0
  88. package/dist/graphql/inputs/meta-event.input.mjs +19 -0
  89. package/dist/graphql/inputs/meta-event.input.mjs.map +1 -0
  90. package/dist/graphql/message-conversion/agui-to-gql.cjs +155 -0
  91. package/dist/graphql/message-conversion/agui-to-gql.cjs.map +1 -0
  92. package/dist/graphql/message-conversion/agui-to-gql.mjs +155 -0
  93. package/dist/graphql/message-conversion/agui-to-gql.mjs.map +1 -0
  94. package/dist/graphql/resolvers/copilot.resolver.cjs +451 -0
  95. package/dist/graphql/resolvers/copilot.resolver.cjs.map +1 -0
  96. package/dist/graphql/resolvers/copilot.resolver.mjs +445 -0
  97. package/dist/graphql/resolvers/copilot.resolver.mjs.map +1 -0
  98. package/dist/graphql/resolvers/state.resolver.cjs +43 -0
  99. package/dist/graphql/resolvers/state.resolver.cjs.map +1 -0
  100. package/dist/graphql/resolvers/state.resolver.mjs +37 -0
  101. package/dist/graphql/resolvers/state.resolver.mjs.map +1 -0
  102. package/dist/graphql/types/agents-response.type.cjs +24 -0
  103. package/dist/graphql/types/agents-response.type.cjs.map +1 -0
  104. package/dist/graphql/types/agents-response.type.mjs +18 -0
  105. package/dist/graphql/types/agents-response.type.mjs.map +1 -0
  106. package/dist/graphql/types/base/index.cjs +21 -0
  107. package/dist/graphql/types/base/index.cjs.map +1 -0
  108. package/dist/graphql/types/base/index.d.cts +9 -0
  109. package/dist/graphql/types/base/index.d.cts.map +1 -0
  110. package/dist/graphql/types/base/index.d.mts +9 -0
  111. package/dist/graphql/types/base/index.d.mts.map +1 -0
  112. package/dist/graphql/types/base/index.mjs +15 -0
  113. package/dist/graphql/types/base/index.mjs.map +1 -0
  114. package/dist/graphql/types/converted/index.cjs +118 -0
  115. package/dist/graphql/types/converted/index.cjs.map +1 -0
  116. package/dist/graphql/types/converted/index.d.cts +78 -0
  117. package/dist/graphql/types/converted/index.d.cts.map +1 -0
  118. package/dist/graphql/types/converted/index.d.mts +78 -0
  119. package/dist/graphql/types/converted/index.d.mts.map +1 -0
  120. package/dist/graphql/types/converted/index.mjs +112 -0
  121. package/dist/graphql/types/converted/index.mjs.map +1 -0
  122. package/dist/graphql/types/copilot-response.type.cjs +82 -0
  123. package/dist/graphql/types/copilot-response.type.cjs.map +1 -0
  124. package/dist/graphql/types/copilot-response.type.d.cts +12 -0
  125. package/dist/graphql/types/copilot-response.type.d.cts.map +1 -0
  126. package/dist/graphql/types/copilot-response.type.d.mts +12 -0
  127. package/dist/graphql/types/copilot-response.type.d.mts.map +1 -0
  128. package/dist/graphql/types/copilot-response.type.mjs +70 -0
  129. package/dist/graphql/types/copilot-response.type.mjs.map +1 -0
  130. package/dist/graphql/types/enums.cjs +45 -0
  131. package/dist/graphql/types/enums.cjs.map +1 -0
  132. package/dist/graphql/types/enums.d.cts +17 -0
  133. package/dist/graphql/types/enums.d.cts.map +1 -0
  134. package/dist/graphql/types/enums.d.mts +17 -0
  135. package/dist/graphql/types/enums.d.mts.map +1 -0
  136. package/dist/graphql/types/enums.mjs +42 -0
  137. package/dist/graphql/types/enums.mjs.map +1 -0
  138. package/dist/graphql/types/extensions-response.type.cjs +24 -0
  139. package/dist/graphql/types/extensions-response.type.cjs.map +1 -0
  140. package/dist/graphql/types/extensions-response.type.d.cts +18 -0
  141. package/dist/graphql/types/extensions-response.type.d.cts.map +1 -0
  142. package/dist/graphql/types/extensions-response.type.d.mts +18 -0
  143. package/dist/graphql/types/extensions-response.type.d.mts.map +1 -0
  144. package/dist/graphql/types/extensions-response.type.mjs +18 -0
  145. package/dist/graphql/types/extensions-response.type.mjs.map +1 -0
  146. package/dist/graphql/types/load-agent-state-response.type.cjs +22 -0
  147. package/dist/graphql/types/load-agent-state-response.type.cjs.map +1 -0
  148. package/dist/graphql/types/load-agent-state-response.type.mjs +16 -0
  149. package/dist/graphql/types/load-agent-state-response.type.mjs.map +1 -0
  150. package/dist/graphql/types/message-status.type.cjs +65 -0
  151. package/dist/graphql/types/message-status.type.cjs.map +1 -0
  152. package/dist/graphql/types/message-status.type.d.cts +25 -0
  153. package/dist/graphql/types/message-status.type.d.cts.map +1 -0
  154. package/dist/graphql/types/message-status.type.d.mts +25 -0
  155. package/dist/graphql/types/message-status.type.d.mts.map +1 -0
  156. package/dist/graphql/types/message-status.type.mjs +51 -0
  157. package/dist/graphql/types/message-status.type.mjs.map +1 -0
  158. package/dist/graphql/types/meta-events.type.cjs +73 -0
  159. package/dist/graphql/types/meta-events.type.cjs.map +1 -0
  160. package/dist/graphql/types/meta-events.type.mjs +54 -0
  161. package/dist/graphql/types/meta-events.type.mjs.map +1 -0
  162. package/dist/graphql/types/response-status.type.cjs +79 -0
  163. package/dist/graphql/types/response-status.type.cjs.map +1 -0
  164. package/dist/graphql/types/response-status.type.d.cts +23 -0
  165. package/dist/graphql/types/response-status.type.d.cts.map +1 -0
  166. package/dist/graphql/types/response-status.type.d.mts +23 -0
  167. package/dist/graphql/types/response-status.type.d.mts.map +1 -0
  168. package/dist/graphql/types/response-status.type.mjs +65 -0
  169. package/dist/graphql/types/response-status.type.mjs.map +1 -0
  170. package/dist/index.cjs +62 -0
  171. package/dist/index.d.cts +28 -0
  172. package/dist/index.d.mts +28 -0
  173. package/dist/index.mjs +27 -5612
  174. package/dist/langgraph.cjs +10 -0
  175. package/dist/langgraph.d.cts +5 -0
  176. package/dist/langgraph.d.mts +5 -0
  177. package/dist/langgraph.mjs +4 -201
  178. package/dist/lib/cloud/index.d.cts +9 -0
  179. package/dist/lib/cloud/index.d.cts.map +1 -0
  180. package/dist/lib/cloud/index.d.mts +9 -0
  181. package/dist/lib/cloud/index.d.mts.map +1 -0
  182. package/dist/lib/index.cjs +40 -0
  183. package/dist/lib/index.cjs.map +1 -0
  184. package/dist/lib/index.d.cts +51 -0
  185. package/dist/lib/index.d.cts.map +1 -0
  186. package/dist/lib/index.d.mts +51 -0
  187. package/dist/lib/index.d.mts.map +1 -0
  188. package/dist/lib/index.mjs +39 -0
  189. package/dist/lib/index.mjs.map +1 -0
  190. package/dist/lib/integrations/index.d.cts +7 -0
  191. package/dist/lib/integrations/index.d.mts +7 -0
  192. package/dist/lib/integrations/nest/index.cjs +14 -0
  193. package/dist/lib/integrations/nest/index.cjs.map +1 -0
  194. package/dist/lib/integrations/nest/index.d.cts +9 -0
  195. package/dist/lib/integrations/nest/index.d.cts.map +1 -0
  196. package/dist/lib/integrations/nest/index.d.mts +9 -0
  197. package/dist/lib/integrations/nest/index.d.mts.map +1 -0
  198. package/dist/lib/integrations/nest/index.mjs +14 -0
  199. package/dist/lib/integrations/nest/index.mjs.map +1 -0
  200. package/dist/lib/integrations/nextjs/app-router.cjs +26 -0
  201. package/dist/lib/integrations/nextjs/app-router.cjs.map +1 -0
  202. package/dist/lib/integrations/nextjs/app-router.d.cts +10 -0
  203. package/dist/lib/integrations/nextjs/app-router.d.cts.map +1 -0
  204. package/dist/lib/integrations/nextjs/app-router.d.mts +10 -0
  205. package/dist/lib/integrations/nextjs/app-router.d.mts.map +1 -0
  206. package/dist/lib/integrations/nextjs/app-router.mjs +25 -0
  207. package/dist/lib/integrations/nextjs/app-router.mjs.map +1 -0
  208. package/dist/lib/integrations/nextjs/pages-router.cjs +20 -0
  209. package/dist/lib/integrations/nextjs/pages-router.cjs.map +1 -0
  210. package/dist/lib/integrations/nextjs/pages-router.d.cts +15 -0
  211. package/dist/lib/integrations/nextjs/pages-router.d.cts.map +1 -0
  212. package/dist/lib/integrations/nextjs/pages-router.d.mts +15 -0
  213. package/dist/lib/integrations/nextjs/pages-router.d.mts.map +1 -0
  214. package/dist/lib/integrations/nextjs/pages-router.mjs +19 -0
  215. package/dist/lib/integrations/nextjs/pages-router.mjs.map +1 -0
  216. package/dist/lib/integrations/node-express/index.cjs +14 -0
  217. package/dist/lib/integrations/node-express/index.cjs.map +1 -0
  218. package/dist/lib/integrations/node-express/index.d.cts +9 -0
  219. package/dist/lib/integrations/node-express/index.d.cts.map +1 -0
  220. package/dist/lib/integrations/node-express/index.d.mts +9 -0
  221. package/dist/lib/integrations/node-express/index.d.mts.map +1 -0
  222. package/dist/lib/integrations/node-express/index.mjs +14 -0
  223. package/dist/lib/integrations/node-express/index.mjs.map +1 -0
  224. package/dist/lib/integrations/node-http/index.cjs +85 -0
  225. package/dist/lib/integrations/node-http/index.cjs.map +1 -0
  226. package/dist/lib/integrations/node-http/index.d.cts +9 -0
  227. package/dist/lib/integrations/node-http/index.d.cts.map +1 -0
  228. package/dist/lib/integrations/node-http/index.d.mts +9 -0
  229. package/dist/lib/integrations/node-http/index.d.mts.map +1 -0
  230. package/dist/lib/integrations/node-http/index.mjs +84 -0
  231. package/dist/lib/integrations/node-http/index.mjs.map +1 -0
  232. package/dist/lib/integrations/node-http/request-handler.cjs +81 -0
  233. package/dist/lib/integrations/node-http/request-handler.cjs.map +1 -0
  234. package/dist/lib/integrations/node-http/request-handler.mjs +74 -0
  235. package/dist/lib/integrations/node-http/request-handler.mjs.map +1 -0
  236. package/dist/lib/integrations/shared.cjs +41 -0
  237. package/dist/lib/integrations/shared.cjs.map +1 -0
  238. package/dist/lib/integrations/shared.d.cts +57 -0
  239. package/dist/lib/integrations/shared.d.cts.map +1 -0
  240. package/dist/lib/integrations/shared.d.mts +57 -0
  241. package/dist/lib/integrations/shared.d.mts.map +1 -0
  242. package/dist/lib/integrations/shared.mjs +39 -0
  243. package/dist/lib/integrations/shared.mjs.map +1 -0
  244. package/dist/lib/logger.cjs +25 -0
  245. package/dist/lib/logger.cjs.map +1 -0
  246. package/dist/lib/logger.d.cts +13 -0
  247. package/dist/lib/logger.d.cts.map +1 -0
  248. package/dist/lib/logger.d.mts +13 -0
  249. package/dist/lib/logger.d.mts.map +1 -0
  250. package/dist/lib/logger.mjs +22 -0
  251. package/dist/lib/logger.mjs.map +1 -0
  252. package/dist/lib/observability.d.cts +72 -0
  253. package/dist/lib/observability.d.cts.map +1 -0
  254. package/dist/lib/observability.d.mts +72 -0
  255. package/dist/lib/observability.d.mts.map +1 -0
  256. package/dist/lib/runtime/agent-integrations/langgraph/agent.cjs +135 -0
  257. package/dist/lib/runtime/agent-integrations/langgraph/agent.cjs.map +1 -0
  258. package/dist/lib/runtime/agent-integrations/langgraph/agent.d.cts +851 -0
  259. package/dist/lib/runtime/agent-integrations/langgraph/agent.d.cts.map +1 -0
  260. package/dist/lib/runtime/agent-integrations/langgraph/agent.d.mts +851 -0
  261. package/dist/lib/runtime/agent-integrations/langgraph/agent.d.mts.map +1 -0
  262. package/dist/lib/runtime/agent-integrations/langgraph/agent.mjs +134 -0
  263. package/dist/lib/runtime/agent-integrations/langgraph/agent.mjs.map +1 -0
  264. package/dist/lib/runtime/agent-integrations/langgraph/consts.cjs +14 -0
  265. package/dist/lib/runtime/agent-integrations/langgraph/consts.cjs.map +1 -0
  266. package/dist/lib/runtime/agent-integrations/langgraph/consts.d.cts +20 -0
  267. package/dist/lib/runtime/agent-integrations/langgraph/consts.d.cts.map +1 -0
  268. package/dist/lib/runtime/agent-integrations/langgraph/consts.d.mts +20 -0
  269. package/dist/lib/runtime/agent-integrations/langgraph/consts.d.mts.map +1 -0
  270. package/dist/lib/runtime/agent-integrations/langgraph/consts.mjs +13 -0
  271. package/dist/lib/runtime/agent-integrations/langgraph/consts.mjs.map +1 -0
  272. package/dist/lib/runtime/agent-integrations/langgraph/index.d.cts +3 -0
  273. package/dist/lib/runtime/agent-integrations/langgraph/index.d.mts +3 -0
  274. package/dist/lib/runtime/copilot-runtime.cjs +251 -0
  275. package/dist/lib/runtime/copilot-runtime.cjs.map +1 -0
  276. package/dist/lib/runtime/copilot-runtime.d.cts +215 -0
  277. package/dist/lib/runtime/copilot-runtime.d.cts.map +1 -0
  278. package/dist/lib/runtime/copilot-runtime.d.mts +215 -0
  279. package/dist/lib/runtime/copilot-runtime.d.mts.map +1 -0
  280. package/dist/lib/runtime/copilot-runtime.mjs +247 -0
  281. package/dist/lib/runtime/copilot-runtime.mjs.map +1 -0
  282. package/dist/lib/runtime/mcp-tools-utils.cjs +138 -0
  283. package/dist/lib/runtime/mcp-tools-utils.cjs.map +1 -0
  284. package/dist/lib/runtime/mcp-tools-utils.d.cts +57 -0
  285. package/dist/lib/runtime/mcp-tools-utils.d.cts.map +1 -0
  286. package/dist/lib/runtime/mcp-tools-utils.d.mts +57 -0
  287. package/dist/lib/runtime/mcp-tools-utils.d.mts.map +1 -0
  288. package/dist/lib/runtime/mcp-tools-utils.mjs +135 -0
  289. package/dist/lib/runtime/mcp-tools-utils.mjs.map +1 -0
  290. package/dist/lib/runtime/telemetry-agent-runner.cjs +90 -0
  291. package/dist/lib/runtime/telemetry-agent-runner.cjs.map +1 -0
  292. package/dist/lib/runtime/telemetry-agent-runner.d.cts +55 -0
  293. package/dist/lib/runtime/telemetry-agent-runner.d.cts.map +1 -0
  294. package/dist/lib/runtime/telemetry-agent-runner.d.mts +55 -0
  295. package/dist/lib/runtime/telemetry-agent-runner.d.mts.map +1 -0
  296. package/dist/lib/runtime/telemetry-agent-runner.mjs +89 -0
  297. package/dist/lib/runtime/telemetry-agent-runner.mjs.map +1 -0
  298. package/dist/lib/runtime/types.cjs +12 -0
  299. package/dist/lib/runtime/types.cjs.map +1 -0
  300. package/dist/lib/runtime/types.d.cts +36 -0
  301. package/dist/lib/runtime/types.d.cts.map +1 -0
  302. package/dist/lib/runtime/types.d.mts +36 -0
  303. package/dist/lib/runtime/types.d.mts.map +1 -0
  304. package/dist/lib/runtime/types.mjs +11 -0
  305. package/dist/lib/runtime/types.mjs.map +1 -0
  306. package/dist/lib/telemetry-client.cjs +56 -0
  307. package/dist/lib/telemetry-client.cjs.map +1 -0
  308. package/dist/lib/telemetry-client.mjs +54 -0
  309. package/dist/lib/telemetry-client.mjs.map +1 -0
  310. package/dist/package.cjs +139 -0
  311. package/dist/package.cjs.map +1 -0
  312. package/dist/package.mjs +136 -0
  313. package/dist/package.mjs.map +1 -0
  314. package/dist/service-adapters/anthropic/anthropic-adapter.cjs +221 -0
  315. package/dist/service-adapters/anthropic/anthropic-adapter.cjs.map +1 -0
  316. package/dist/service-adapters/anthropic/anthropic-adapter.d.cts +54 -0
  317. package/dist/service-adapters/anthropic/anthropic-adapter.d.cts.map +1 -0
  318. package/dist/service-adapters/anthropic/anthropic-adapter.d.mts +54 -0
  319. package/dist/service-adapters/anthropic/anthropic-adapter.d.mts.map +1 -0
  320. package/dist/service-adapters/anthropic/anthropic-adapter.mjs +221 -0
  321. package/dist/service-adapters/anthropic/anthropic-adapter.mjs.map +1 -0
  322. package/dist/service-adapters/anthropic/utils.cjs +116 -0
  323. package/dist/service-adapters/anthropic/utils.cjs.map +1 -0
  324. package/dist/service-adapters/anthropic/utils.mjs +113 -0
  325. package/dist/service-adapters/anthropic/utils.mjs.map +1 -0
  326. package/dist/service-adapters/bedrock/bedrock-adapter.cjs +47 -0
  327. package/dist/service-adapters/bedrock/bedrock-adapter.cjs.map +1 -0
  328. package/dist/service-adapters/bedrock/bedrock-adapter.d.cts +31 -0
  329. package/dist/service-adapters/bedrock/bedrock-adapter.d.cts.map +1 -0
  330. package/dist/service-adapters/bedrock/bedrock-adapter.d.mts +31 -0
  331. package/dist/service-adapters/bedrock/bedrock-adapter.d.mts.map +1 -0
  332. package/dist/service-adapters/bedrock/bedrock-adapter.mjs +48 -0
  333. package/dist/service-adapters/bedrock/bedrock-adapter.mjs.map +1 -0
  334. package/dist/service-adapters/empty/empty-adapter.cjs +19 -0
  335. package/dist/service-adapters/empty/empty-adapter.cjs.map +1 -0
  336. package/dist/service-adapters/empty/empty-adapter.d.cts +12 -0
  337. package/dist/service-adapters/empty/empty-adapter.d.cts.map +1 -0
  338. package/dist/service-adapters/empty/empty-adapter.d.mts +12 -0
  339. package/dist/service-adapters/empty/empty-adapter.d.mts.map +1 -0
  340. package/dist/service-adapters/empty/empty-adapter.mjs +17 -0
  341. package/dist/service-adapters/empty/empty-adapter.mjs.map +1 -0
  342. package/dist/service-adapters/events.cjs +29 -0
  343. package/dist/service-adapters/events.cjs.map +1 -0
  344. package/dist/service-adapters/events.d.cts +185 -0
  345. package/dist/service-adapters/events.d.cts.map +1 -0
  346. package/dist/service-adapters/events.d.mts +185 -0
  347. package/dist/service-adapters/events.d.mts.map +1 -0
  348. package/dist/service-adapters/events.mjs +28 -0
  349. package/dist/service-adapters/events.mjs.map +1 -0
  350. package/dist/service-adapters/experimental/ollama/ollama-adapter.cjs +38 -0
  351. package/dist/service-adapters/experimental/ollama/ollama-adapter.cjs.map +1 -0
  352. package/dist/service-adapters/experimental/ollama/ollama-adapter.d.cts +17 -0
  353. package/dist/service-adapters/experimental/ollama/ollama-adapter.d.cts.map +1 -0
  354. package/dist/service-adapters/experimental/ollama/ollama-adapter.d.mts +17 -0
  355. package/dist/service-adapters/experimental/ollama/ollama-adapter.d.mts.map +1 -0
  356. package/dist/service-adapters/experimental/ollama/ollama-adapter.mjs +38 -0
  357. package/dist/service-adapters/experimental/ollama/ollama-adapter.mjs.map +1 -0
  358. package/dist/service-adapters/google/google-genai-adapter.cjs +52 -0
  359. package/dist/service-adapters/google/google-genai-adapter.cjs.map +1 -0
  360. package/dist/service-adapters/google/google-genai-adapter.d.cts +26 -0
  361. package/dist/service-adapters/google/google-genai-adapter.d.cts.map +1 -0
  362. package/dist/service-adapters/google/google-genai-adapter.d.mts +26 -0
  363. package/dist/service-adapters/google/google-genai-adapter.d.mts.map +1 -0
  364. package/dist/service-adapters/google/google-genai-adapter.mjs +53 -0
  365. package/dist/service-adapters/google/google-genai-adapter.mjs.map +1 -0
  366. package/dist/service-adapters/groq/groq-adapter.cjs +109 -0
  367. package/dist/service-adapters/groq/groq-adapter.cjs.map +1 -0
  368. package/dist/service-adapters/groq/groq-adapter.d.cts +38 -0
  369. package/dist/service-adapters/groq/groq-adapter.d.cts.map +1 -0
  370. package/dist/service-adapters/groq/groq-adapter.d.mts +38 -0
  371. package/dist/service-adapters/groq/groq-adapter.d.mts.map +1 -0
  372. package/dist/service-adapters/groq/groq-adapter.mjs +109 -0
  373. package/dist/service-adapters/groq/groq-adapter.mjs.map +1 -0
  374. package/dist/service-adapters/index.d.cts +14 -0
  375. package/dist/service-adapters/index.d.mts +15 -0
  376. package/dist/service-adapters/langchain/langchain-adapter.cjs +44 -0
  377. package/dist/service-adapters/langchain/langchain-adapter.cjs.map +1 -0
  378. package/dist/service-adapters/langchain/langchain-adapter.d.cts +32 -0
  379. package/dist/service-adapters/langchain/langchain-adapter.d.cts.map +1 -0
  380. package/dist/service-adapters/langchain/langchain-adapter.d.mts +32 -0
  381. package/dist/service-adapters/langchain/langchain-adapter.d.mts.map +1 -0
  382. package/dist/service-adapters/langchain/langchain-adapter.mjs +44 -0
  383. package/dist/service-adapters/langchain/langchain-adapter.mjs.map +1 -0
  384. package/dist/service-adapters/langchain/langserve.cjs +63 -0
  385. package/dist/service-adapters/langchain/langserve.cjs.map +1 -0
  386. package/dist/service-adapters/langchain/langserve.d.cts +24 -0
  387. package/dist/service-adapters/langchain/langserve.d.cts.map +1 -0
  388. package/dist/service-adapters/langchain/langserve.d.mts +24 -0
  389. package/dist/service-adapters/langchain/langserve.d.mts.map +1 -0
  390. package/dist/service-adapters/langchain/langserve.mjs +64 -0
  391. package/dist/service-adapters/langchain/langserve.mjs.map +1 -0
  392. package/dist/service-adapters/langchain/types.d.cts +11 -0
  393. package/dist/service-adapters/langchain/types.d.cts.map +1 -0
  394. package/dist/service-adapters/langchain/types.d.mts +11 -0
  395. package/dist/service-adapters/langchain/types.d.mts.map +1 -0
  396. package/dist/service-adapters/langchain/utils.cjs +183 -0
  397. package/dist/service-adapters/langchain/utils.cjs.map +1 -0
  398. package/dist/service-adapters/langchain/utils.mjs +180 -0
  399. package/dist/service-adapters/langchain/utils.mjs.map +1 -0
  400. package/dist/service-adapters/openai/openai-adapter.cjs +123 -0
  401. package/dist/service-adapters/openai/openai-adapter.cjs.map +1 -0
  402. package/dist/service-adapters/openai/openai-adapter.d.cts +47 -0
  403. package/dist/service-adapters/openai/openai-adapter.d.cts.map +1 -0
  404. package/dist/service-adapters/openai/openai-adapter.d.mts +47 -0
  405. package/dist/service-adapters/openai/openai-adapter.d.mts.map +1 -0
  406. package/dist/service-adapters/openai/openai-adapter.mjs +123 -0
  407. package/dist/service-adapters/openai/openai-adapter.mjs.map +1 -0
  408. package/dist/service-adapters/openai/openai-assistant-adapter.cjs +157 -0
  409. package/dist/service-adapters/openai/openai-assistant-adapter.cjs.map +1 -0
  410. package/dist/service-adapters/openai/openai-assistant-adapter.d.cts +59 -0
  411. package/dist/service-adapters/openai/openai-assistant-adapter.d.cts.map +1 -0
  412. package/dist/service-adapters/openai/openai-assistant-adapter.d.mts +59 -0
  413. package/dist/service-adapters/openai/openai-assistant-adapter.d.mts.map +1 -0
  414. package/dist/service-adapters/openai/openai-assistant-adapter.mjs +158 -0
  415. package/dist/service-adapters/openai/openai-assistant-adapter.mjs.map +1 -0
  416. package/dist/service-adapters/openai/utils.cjs +143 -0
  417. package/dist/service-adapters/openai/utils.cjs.map +1 -0
  418. package/dist/service-adapters/openai/utils.mjs +139 -0
  419. package/dist/service-adapters/openai/utils.mjs.map +1 -0
  420. package/dist/service-adapters/service-adapter.d.cts +37 -0
  421. package/dist/service-adapters/service-adapter.d.cts.map +1 -0
  422. package/dist/service-adapters/service-adapter.d.mts +37 -0
  423. package/dist/service-adapters/service-adapter.d.mts.map +1 -0
  424. package/dist/service-adapters/shared/error-utils.cjs +36 -0
  425. package/dist/service-adapters/shared/error-utils.cjs.map +1 -0
  426. package/dist/service-adapters/shared/error-utils.d.cts +12 -0
  427. package/dist/service-adapters/shared/error-utils.d.cts.map +1 -0
  428. package/dist/service-adapters/shared/error-utils.d.mts +12 -0
  429. package/dist/service-adapters/shared/error-utils.d.mts.map +1 -0
  430. package/dist/service-adapters/shared/error-utils.mjs +35 -0
  431. package/dist/service-adapters/shared/error-utils.mjs.map +1 -0
  432. package/dist/service-adapters/shared/index.d.mts +2 -0
  433. package/dist/service-adapters/unify/unify-adapter.cjs +93 -0
  434. package/dist/service-adapters/unify/unify-adapter.cjs.map +1 -0
  435. package/dist/service-adapters/unify/unify-adapter.d.cts +20 -0
  436. package/dist/service-adapters/unify/unify-adapter.d.cts.map +1 -0
  437. package/dist/service-adapters/unify/unify-adapter.d.mts +20 -0
  438. package/dist/service-adapters/unify/unify-adapter.d.mts.map +1 -0
  439. package/dist/service-adapters/unify/unify-adapter.mjs +93 -0
  440. package/dist/service-adapters/unify/unify-adapter.mjs.map +1 -0
  441. package/dist/utils/failed-response-status-reasons.cjs +37 -0
  442. package/dist/utils/failed-response-status-reasons.cjs.map +1 -0
  443. package/dist/utils/failed-response-status-reasons.d.cts +58 -0
  444. package/dist/utils/failed-response-status-reasons.d.cts.map +1 -0
  445. package/dist/utils/failed-response-status-reasons.d.mts +58 -0
  446. package/dist/utils/failed-response-status-reasons.d.mts.map +1 -0
  447. package/dist/utils/failed-response-status-reasons.mjs +35 -0
  448. package/dist/utils/failed-response-status-reasons.mjs.map +1 -0
  449. package/dist/v2/index.cjs +18 -0
  450. package/dist/v2/index.d.cts +3 -0
  451. package/dist/v2/index.d.mts +3 -0
  452. package/dist/v2/index.mjs +6 -5
  453. package/package.json +30 -28
  454. package/src/graphql/inputs/extensions.input.ts +6 -6
  455. package/src/graphql/inputs/message.input.ts +20 -20
  456. package/src/graphql/message-conversion/agui-to-gql.test.ts +2 -2
  457. package/src/graphql/message-conversion/gql-to-agui.test.ts +28 -28
  458. package/src/graphql/message-conversion/roundtrip-conversion.test.ts +8 -8
  459. package/src/graphql/types/extensions-response.type.ts +6 -6
  460. package/src/index.ts +0 -1
  461. package/src/lib/integrations/shared.ts +1 -81
  462. package/src/lib/runtime/__tests__/copilot-runtime-error.test.ts +4 -4
  463. package/src/lib/runtime/__tests__/mcp-tools-utils.test.ts +1 -1
  464. package/src/service-adapters/google/google-genai-adapter.test.ts +54 -11
  465. package/src/v2/index.ts +0 -1
  466. package/tests/global.d.ts +1 -13
  467. package/tests/service-adapters/anthropic/allowlist-approach.test.ts +0 -6
  468. package/tests/service-adapters/anthropic/anthropic-adapter.test.ts +28 -51
  469. package/tests/service-adapters/openai/allowlist-approach.test.ts +0 -6
  470. package/tests/service-adapters/openai/openai-adapter.test.ts +23 -38
  471. package/tests/setup.vitest.ts +8 -0
  472. package/tests/tsconfig.json +1 -1
  473. package/tsconfig.json +1 -1
  474. package/tsdown.config.ts +37 -0
  475. package/vitest.config.mjs +16 -0
  476. package/dist/index.d.ts +0 -1514
  477. package/dist/index.js +0 -5655
  478. package/dist/index.js.map +0 -1
  479. package/dist/index.mjs.map +0 -1
  480. package/dist/langgraph.d.ts +0 -869
  481. package/dist/langgraph.js +0 -207
  482. package/dist/langgraph.js.map +0 -1
  483. package/dist/langgraph.mjs.map +0 -1
  484. package/dist/v2/index.d.ts +0 -2
  485. package/dist/v2/index.js +0 -22
  486. package/dist/v2/index.js.map +0 -1
  487. package/dist/v2/index.mjs.map +0 -1
  488. package/jest.config.js +0 -10
  489. package/tests/setup.jest.ts +0 -21
  490. package/tsup.config.ts +0 -20
@@ -0,0 +1,47 @@
1
+ import "reflect-metadata";
2
+ import { CopilotRuntimeChatCompletionRequest, CopilotRuntimeChatCompletionResponse, CopilotServiceAdapter } from "../service-adapter.mjs";
3
+ import OpenAI from "openai";
4
+
5
+ //#region src/service-adapters/openai/openai-adapter.d.ts
6
+ interface OpenAIAdapterParams {
7
+ /**
8
+ * An optional OpenAI instance to use. If not provided, a new instance will be
9
+ * created.
10
+ */
11
+ openai?: OpenAI;
12
+ /**
13
+ * The model to use.
14
+ */
15
+ model?: string;
16
+ /**
17
+ * Whether to disable parallel tool calls.
18
+ * You can disable parallel tool calls to force the model to execute tool calls sequentially.
19
+ * This is useful if you want to execute tool calls in a specific order so that the state changes
20
+ * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)
21
+ *
22
+ * @default false
23
+ */
24
+ disableParallelToolCalls?: boolean;
25
+ /**
26
+ * Whether to keep the role in system messages as "System".
27
+ * By default, it is converted to "developer", which is used by newer OpenAI models
28
+ *
29
+ * @default false
30
+ */
31
+ keepSystemRole?: boolean;
32
+ }
33
+ declare class OpenAIAdapter implements CopilotServiceAdapter {
34
+ model: string;
35
+ provider: string;
36
+ private disableParallelToolCalls;
37
+ private _openai;
38
+ private keepSystemRole;
39
+ get openai(): OpenAI;
40
+ get name(): string;
41
+ constructor(params?: OpenAIAdapterParams);
42
+ private ensureOpenAI;
43
+ process(request: CopilotRuntimeChatCompletionRequest): Promise<CopilotRuntimeChatCompletionResponse>;
44
+ }
45
+ //#endregion
46
+ export { OpenAIAdapter, OpenAIAdapterParams };
47
+ //# sourceMappingURL=openai-adapter.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-adapter.d.mts","names":[],"sources":["../../../src/service-adapters/openai/openai-adapter.ts"],"mappings":";;;;;UAkEiB,mBAAA;;;;;EAKf,MAAA,GAAS,MAAA;;;;EAKT,KAAA;;;;;;;;;EAUA,wBAAA;;;;;;;EAQA,cAAA;AAAA;AAAA,cAGW,aAAA,YAAyB,qBAAA;EAC7B,KAAA;EACA,QAAA;EAAA,QAEC,wBAAA;EAAA,QACA,OAAA;EAAA,QACA,cAAA;EAAA,IAEG,MAAA,CAAA,GAAU,MAAA;EAAA,IAGV,IAAA,CAAA;cAIC,MAAA,GAAS,mBAAA;EAAA,QAab,YAAA;EASF,OAAA,CACJ,OAAA,EAAS,mCAAA,GACR,OAAA,CAAQ,oCAAA;AAAA"}
@@ -0,0 +1,123 @@
1
+ import "reflect-metadata";
2
+ import { __require } from "../../_virtual/_rolldown/runtime.mjs";
3
+ import { convertActionInputToOpenAITool, convertMessageToOpenAIMessage, limitMessagesToTokenCount } from "./utils.mjs";
4
+ import { convertServiceAdapterError } from "../shared/error-utils.mjs";
5
+ import { randomUUID } from "@copilotkit/shared";
6
+
7
+ //#region src/service-adapters/openai/openai-adapter.ts
8
+ const DEFAULT_MODEL = "gpt-4o";
9
+ var OpenAIAdapter = class {
10
+ get openai() {
11
+ return this._openai;
12
+ }
13
+ get name() {
14
+ return "OpenAIAdapter";
15
+ }
16
+ constructor(params) {
17
+ this.model = DEFAULT_MODEL;
18
+ this.provider = "openai";
19
+ this.disableParallelToolCalls = false;
20
+ this.keepSystemRole = false;
21
+ if (params?.openai) this._openai = params.openai;
22
+ if (params?.model) this.model = params.model;
23
+ this.disableParallelToolCalls = params?.disableParallelToolCalls || false;
24
+ this.keepSystemRole = params?.keepSystemRole ?? false;
25
+ }
26
+ ensureOpenAI() {
27
+ if (!this._openai) {
28
+ const OpenAI = __require("openai").default;
29
+ this._openai = new OpenAI();
30
+ }
31
+ return this._openai;
32
+ }
33
+ async process(request) {
34
+ const { threadId: threadIdFromRequest, model = this.model, messages, actions, eventSource, forwardedParameters } = request;
35
+ const tools = actions.map(convertActionInputToOpenAITool);
36
+ const threadId = threadIdFromRequest ?? randomUUID();
37
+ const validToolUseIds = /* @__PURE__ */ new Set();
38
+ for (const message of messages) if (message.isActionExecutionMessage()) validToolUseIds.add(message.id);
39
+ let openaiMessages = messages.filter((message) => {
40
+ if (message.isResultMessage()) {
41
+ if (!validToolUseIds.has(message.actionExecutionId)) return false;
42
+ validToolUseIds.delete(message.actionExecutionId);
43
+ return true;
44
+ }
45
+ return true;
46
+ }).map((m) => convertMessageToOpenAIMessage(m, { keepSystemRole: this.keepSystemRole }));
47
+ openaiMessages = limitMessagesToTokenCount(openaiMessages, tools, model);
48
+ let toolChoice = forwardedParameters?.toolChoice;
49
+ if (forwardedParameters?.toolChoice === "function") toolChoice = {
50
+ type: "function",
51
+ function: { name: forwardedParameters.toolChoiceFunctionName }
52
+ };
53
+ try {
54
+ const stream = this.ensureOpenAI().beta.chat.completions.stream({
55
+ model,
56
+ stream: true,
57
+ messages: openaiMessages,
58
+ ...tools.length > 0 && { tools },
59
+ ...forwardedParameters?.maxTokens && { max_completion_tokens: forwardedParameters.maxTokens },
60
+ ...forwardedParameters?.stop && { stop: forwardedParameters.stop },
61
+ ...toolChoice && { tool_choice: toolChoice },
62
+ ...this.disableParallelToolCalls && { parallel_tool_calls: false },
63
+ ...forwardedParameters?.temperature && { temperature: forwardedParameters.temperature }
64
+ });
65
+ eventSource.stream(async (eventStream$) => {
66
+ let mode = null;
67
+ let currentMessageId;
68
+ let currentToolCallId;
69
+ try {
70
+ for await (const chunk of stream) {
71
+ if (chunk.choices.length === 0) continue;
72
+ const toolCall = chunk.choices[0].delta.tool_calls?.[0];
73
+ const content = chunk.choices[0].delta.content;
74
+ if (mode === "message" && toolCall?.id) {
75
+ mode = null;
76
+ eventStream$.sendTextMessageEnd({ messageId: currentMessageId });
77
+ } else if (mode === "function" && (toolCall === void 0 || toolCall?.id)) {
78
+ mode = null;
79
+ eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });
80
+ }
81
+ if (mode === null) {
82
+ if (toolCall?.id) {
83
+ mode = "function";
84
+ currentToolCallId = toolCall.id;
85
+ eventStream$.sendActionExecutionStart({
86
+ actionExecutionId: currentToolCallId,
87
+ parentMessageId: chunk.id,
88
+ actionName: toolCall.function.name
89
+ });
90
+ } else if (content) {
91
+ mode = "message";
92
+ currentMessageId = chunk.id;
93
+ eventStream$.sendTextMessageStart({ messageId: currentMessageId });
94
+ }
95
+ }
96
+ if (mode === "message" && content) eventStream$.sendTextMessageContent({
97
+ messageId: currentMessageId,
98
+ content
99
+ });
100
+ else if (mode === "function" && toolCall?.function?.arguments) eventStream$.sendActionExecutionArgs({
101
+ actionExecutionId: currentToolCallId,
102
+ args: toolCall.function.arguments
103
+ });
104
+ }
105
+ if (mode === "message") eventStream$.sendTextMessageEnd({ messageId: currentMessageId });
106
+ else if (mode === "function") eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });
107
+ } catch (error) {
108
+ console.error("[OpenAI] Error during API call:", error);
109
+ throw convertServiceAdapterError(error, "OpenAI");
110
+ }
111
+ eventStream$.complete();
112
+ });
113
+ } catch (error) {
114
+ console.error("[OpenAI] Error during API call:", error);
115
+ throw convertServiceAdapterError(error, "OpenAI");
116
+ }
117
+ return { threadId };
118
+ }
119
+ };
120
+
121
+ //#endregion
122
+ export { OpenAIAdapter };
123
+ //# sourceMappingURL=openai-adapter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-adapter.mjs","names":[],"sources":["../../../src/service-adapters/openai/openai-adapter.ts"],"sourcesContent":["/**\n * Copilot Runtime adapter for OpenAI.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * organization: \"<your-organization-id>\", // optional\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new OpenAIAdapter({ openai });\n * ```\n *\n * ## Example with Azure OpenAI\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * // The name of your Azure OpenAI Instance.\n * // https://learn.microsoft.com/en-us/azure/cognitive-services/openai/how-to/create-resource?pivots=web-portal#create-a-resource\n * const instance = \"<your instance name>\";\n *\n * // Corresponds to your Model deployment within your OpenAI resource, e.g. my-gpt35-16k-deployment\n * // Navigate to the Azure OpenAI Studio to deploy a model.\n * const model = \"<your model>\";\n *\n * const apiKey = process.env[\"AZURE_OPENAI_API_KEY\"];\n * if (!apiKey) {\n * throw new Error(\"The AZURE_OPENAI_API_KEY environment variable is missing or empty.\");\n * }\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * apiKey,\n * baseURL: `https://${instance}.openai.azure.com/openai/deployments/${model}`,\n * defaultQuery: { \"api-version\": \"2024-04-01-preview\" },\n * defaultHeaders: { \"api-key\": apiKey },\n * });\n *\n * return new OpenAIAdapter({ openai });\n * ```\n */\nimport type OpenAI from \"openai\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n limitMessagesToTokenCount,\n} from \"./utils\";\nimport { randomUUID } from \"@copilotkit/shared\";\nimport { convertServiceAdapterError } from \"../shared\";\n\nconst DEFAULT_MODEL = \"gpt-4o\";\n\nexport interface OpenAIAdapterParams {\n /**\n * An optional OpenAI instance to use. If not provided, a new instance will be\n * created.\n */\n openai?: OpenAI;\n\n /**\n * The model to use.\n */\n model?: string;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n\n /**\n * Whether to keep the role in system messages as \"System\".\n * By default, it is converted to \"developer\", which is used by newer OpenAI models\n *\n * @default false\n */\n keepSystemRole?: boolean;\n}\n\nexport class OpenAIAdapter implements CopilotServiceAdapter {\n public model: string = DEFAULT_MODEL;\n public provider = \"openai\";\n\n private disableParallelToolCalls: boolean = false;\n private _openai: OpenAI;\n private keepSystemRole: boolean = false;\n\n public get openai(): OpenAI {\n return this._openai;\n }\n public get name() {\n return \"OpenAIAdapter\";\n }\n\n constructor(params?: OpenAIAdapterParams) {\n if (params?.openai) {\n this._openai = params.openai;\n }\n // If no instance provided, we'll lazy-load in ensureOpenAI()\n\n if (params?.model) {\n this.model = params.model;\n }\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n this.keepSystemRole = params?.keepSystemRole ?? false;\n }\n\n private ensureOpenAI(): OpenAI {\n if (!this._openai) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const OpenAI = require(\"openai\").default;\n this._openai = new OpenAI();\n }\n return this._openai;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const {\n threadId: threadIdFromRequest,\n model = this.model,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n } = request;\n const tools = actions.map(convertActionInputToOpenAITool);\n const threadId = threadIdFromRequest ?? randomUUID();\n\n // ALLOWLIST APPROACH: Only include tool_result messages that correspond to valid tool_calls\n // Step 1: Extract valid tool_call IDs\n const validToolUseIds = new Set<string>();\n\n for (const message of messages) {\n if (message.isActionExecutionMessage()) {\n validToolUseIds.add(message.id);\n }\n }\n\n // Step 2: Filter messages, keeping only those with valid tool_call IDs\n const filteredMessages = messages.filter((message) => {\n if (message.isResultMessage()) {\n // Skip if there's no corresponding tool_call\n if (!validToolUseIds.has(message.actionExecutionId)) {\n return false;\n }\n\n // Remove this ID from valid IDs so we don't process duplicates\n validToolUseIds.delete(message.actionExecutionId);\n return true;\n }\n\n // Keep all non-tool-result messages\n return true;\n });\n\n let openaiMessages = filteredMessages.map((m) =>\n convertMessageToOpenAIMessage(m, { keepSystemRole: this.keepSystemRole }),\n );\n openaiMessages = limitMessagesToTokenCount(openaiMessages, tools, model);\n\n let toolChoice: any = forwardedParameters?.toolChoice;\n if (forwardedParameters?.toolChoice === \"function\") {\n toolChoice = {\n type: \"function\",\n function: { name: forwardedParameters.toolChoiceFunctionName },\n };\n }\n\n try {\n const openai = this.ensureOpenAI();\n const stream = openai.beta.chat.completions.stream({\n model: model,\n stream: true,\n messages: openaiMessages,\n ...(tools.length > 0 && { tools }),\n ...(forwardedParameters?.maxTokens && {\n max_completion_tokens: forwardedParameters.maxTokens,\n }),\n ...(forwardedParameters?.stop && { stop: forwardedParameters.stop }),\n ...(toolChoice && { tool_choice: toolChoice }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n ...(forwardedParameters?.temperature && {\n temperature: forwardedParameters.temperature,\n }),\n });\n\n eventSource.stream(async (eventStream$) => {\n let mode: \"function\" | \"message\" | null = null;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n try {\n for await (const chunk of stream) {\n if (chunk.choices.length === 0) {\n continue;\n }\n\n const toolCall = chunk.choices[0].delta.tool_calls?.[0];\n const content = chunk.choices[0].delta.content;\n\n // When switching from message to function or vice versa,\n // send the respective end event.\n // If toolCall?.id is defined, it means a new tool call starts.\n if (mode === \"message\" && toolCall?.id) {\n mode = null;\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (\n mode === \"function\" &&\n (toolCall === undefined || toolCall?.id)\n ) {\n mode = null;\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n\n // If we send a new message type, send the appropriate start event.\n if (mode === null) {\n if (toolCall?.id) {\n mode = \"function\";\n currentToolCallId = toolCall!.id;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n parentMessageId: chunk.id,\n actionName: toolCall!.function!.name,\n });\n } else if (content) {\n mode = \"message\";\n currentMessageId = chunk.id;\n eventStream$.sendTextMessageStart({\n messageId: currentMessageId,\n });\n }\n }\n\n // send the content events\n if (mode === \"message\" && content) {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: content,\n });\n } else if (mode === \"function\" && toolCall?.function?.arguments) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCall.function.arguments,\n });\n }\n }\n\n // send the end events\n if (mode === \"message\") {\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n } else if (mode === \"function\") {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n } catch (error) {\n console.error(\"[OpenAI] Error during API call:\", error);\n throw convertServiceAdapterError(error, \"OpenAI\");\n }\n\n eventStream$.complete();\n });\n } catch (error) {\n console.error(\"[OpenAI] Error during API call:\", error);\n throw convertServiceAdapterError(error, \"OpenAI\");\n }\n\n return {\n threadId,\n };\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ require("reflect-metadata");
2
+ const require_utils = require('./utils.cjs');
3
+
4
+ //#region src/service-adapters/openai/openai-assistant-adapter.ts
5
+ var OpenAIAssistantAdapter = class {
6
+ get name() {
7
+ return "OpenAIAssistantAdapter";
8
+ }
9
+ constructor(params) {
10
+ this.keepSystemRole = false;
11
+ if (params.openai) this._openai = params.openai;
12
+ this.codeInterpreterEnabled = params.codeInterpreterEnabled === false || true;
13
+ this.fileSearchEnabled = params.fileSearchEnabled === false || true;
14
+ this.assistantId = params.assistantId;
15
+ this.disableParallelToolCalls = params?.disableParallelToolCalls || false;
16
+ this.keepSystemRole = params?.keepSystemRole ?? false;
17
+ }
18
+ ensureOpenAI() {
19
+ if (!this._openai) {
20
+ const OpenAI = require("openai").default;
21
+ this._openai = new OpenAI({});
22
+ }
23
+ return this._openai;
24
+ }
25
+ async process(request) {
26
+ const { messages, actions, eventSource, runId, forwardedParameters } = request;
27
+ let threadId = request.extensions?.openaiAssistantAPI?.threadId;
28
+ const openai = this.ensureOpenAI();
29
+ if (!threadId) threadId = (await openai.beta.threads.create()).id;
30
+ const lastMessage = messages.at(-1);
31
+ let nextRunId = void 0;
32
+ if (lastMessage.isResultMessage() && runId) nextRunId = await this.submitToolOutputs(threadId, runId, messages, eventSource);
33
+ else if (lastMessage.isTextMessage()) nextRunId = await this.submitUserMessage(threadId, messages, actions, eventSource, forwardedParameters);
34
+ else throw new Error("No actionable message found in the messages");
35
+ return {
36
+ runId: nextRunId,
37
+ threadId,
38
+ extensions: {
39
+ ...request.extensions,
40
+ openaiAssistantAPI: {
41
+ threadId,
42
+ runId: nextRunId
43
+ }
44
+ }
45
+ };
46
+ }
47
+ async submitToolOutputs(threadId, runId, messages, eventSource) {
48
+ const openai = this.ensureOpenAI();
49
+ let run = await openai.beta.threads.runs.retrieve(threadId, runId);
50
+ if (!run.required_action) throw new Error("No tool outputs required");
51
+ const toolCallsIds = run.required_action.submit_tool_outputs.tool_calls.map((toolCall) => toolCall.id);
52
+ const resultMessages = messages.filter((message) => message.isResultMessage() && toolCallsIds.includes(message.actionExecutionId));
53
+ if (toolCallsIds.length != resultMessages.length) throw new Error("Number of function results does not match the number of tool calls");
54
+ const toolOutputs = resultMessages.map((message) => {
55
+ return {
56
+ tool_call_id: message.actionExecutionId,
57
+ output: message.result
58
+ };
59
+ });
60
+ const stream = openai.beta.threads.runs.submitToolOutputsStream(threadId, runId, {
61
+ tool_outputs: toolOutputs,
62
+ ...this.disableParallelToolCalls && { parallel_tool_calls: false }
63
+ });
64
+ await this.streamResponse(stream, eventSource);
65
+ return runId;
66
+ }
67
+ async submitUserMessage(threadId, messages, actions, eventSource, forwardedParameters) {
68
+ const openai = this.ensureOpenAI();
69
+ messages = [...messages];
70
+ const instructionsMessage = messages.shift();
71
+ const instructions = instructionsMessage.isTextMessage() ? instructionsMessage.content : "";
72
+ const userMessage = messages.map((m) => require_utils.convertMessageToOpenAIMessage(m, { keepSystemRole: this.keepSystemRole })).map(require_utils.convertSystemMessageToAssistantAPI).at(-1);
73
+ if (userMessage.role !== "user") throw new Error("No user message found");
74
+ await openai.beta.threads.messages.create(threadId, {
75
+ role: "user",
76
+ content: userMessage.content
77
+ });
78
+ const tools = [
79
+ ...actions.map(require_utils.convertActionInputToOpenAITool),
80
+ ...this.codeInterpreterEnabled ? [{ type: "code_interpreter" }] : [],
81
+ ...this.fileSearchEnabled ? [{ type: "file_search" }] : []
82
+ ];
83
+ let stream = openai.beta.threads.runs.stream(threadId, {
84
+ assistant_id: this.assistantId,
85
+ instructions,
86
+ tools,
87
+ ...forwardedParameters?.maxTokens && { max_completion_tokens: forwardedParameters.maxTokens },
88
+ ...this.disableParallelToolCalls && { parallel_tool_calls: false }
89
+ });
90
+ await this.streamResponse(stream, eventSource);
91
+ return getRunIdFromStream(stream);
92
+ }
93
+ async streamResponse(stream, eventSource) {
94
+ eventSource.stream(async (eventStream$) => {
95
+ let inFunctionCall = false;
96
+ let currentMessageId;
97
+ let currentToolCallId;
98
+ for await (const chunk of stream) switch (chunk.event) {
99
+ case "thread.message.created":
100
+ if (inFunctionCall) eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });
101
+ currentMessageId = chunk.data.id;
102
+ eventStream$.sendTextMessageStart({ messageId: currentMessageId });
103
+ break;
104
+ case "thread.message.delta":
105
+ if (chunk.data.delta.content?.[0].type === "text") eventStream$.sendTextMessageContent({
106
+ messageId: currentMessageId,
107
+ content: chunk.data.delta.content?.[0].text.value
108
+ });
109
+ break;
110
+ case "thread.message.completed":
111
+ eventStream$.sendTextMessageEnd({ messageId: currentMessageId });
112
+ break;
113
+ case "thread.run.step.delta":
114
+ let toolCallId;
115
+ let toolCallName;
116
+ let toolCallArgs;
117
+ if (chunk.data.delta.step_details.type === "tool_calls" && chunk.data.delta.step_details.tool_calls?.[0].type === "function") {
118
+ toolCallId = chunk.data.delta.step_details.tool_calls?.[0].id;
119
+ toolCallName = chunk.data.delta.step_details.tool_calls?.[0].function.name;
120
+ toolCallArgs = chunk.data.delta.step_details.tool_calls?.[0].function.arguments;
121
+ }
122
+ if (toolCallName && toolCallId) {
123
+ if (inFunctionCall) eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });
124
+ inFunctionCall = true;
125
+ currentToolCallId = toolCallId;
126
+ eventStream$.sendActionExecutionStart({
127
+ actionExecutionId: currentToolCallId,
128
+ parentMessageId: chunk.data.id,
129
+ actionName: toolCallName
130
+ });
131
+ } else if (toolCallArgs) eventStream$.sendActionExecutionArgs({
132
+ actionExecutionId: currentToolCallId,
133
+ args: toolCallArgs
134
+ });
135
+ break;
136
+ }
137
+ if (inFunctionCall) eventStream$.sendActionExecutionEnd({ actionExecutionId: currentToolCallId });
138
+ eventStream$.complete();
139
+ });
140
+ }
141
+ };
142
+ function getRunIdFromStream(stream) {
143
+ return new Promise((resolve, reject) => {
144
+ let runIdGetter = (event) => {
145
+ if (event.event === "thread.run.created") {
146
+ const runId = event.data.id;
147
+ stream.off("event", runIdGetter);
148
+ resolve(runId);
149
+ }
150
+ };
151
+ stream.on("event", runIdGetter);
152
+ });
153
+ }
154
+
155
+ //#endregion
156
+ exports.OpenAIAssistantAdapter = OpenAIAssistantAdapter;
157
+ //# sourceMappingURL=openai-assistant-adapter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-assistant-adapter.cjs","names":["convertMessageToOpenAIMessage","convertSystemMessageToAssistantAPI","convertActionInputToOpenAITool"],"sources":["../../../src/service-adapters/openai/openai-assistant-adapter.ts"],"sourcesContent":["/**\n * Copilot Runtime adapter for the OpenAI Assistant API.\n *\n * ## Example\n *\n * ```ts\n * import { CopilotRuntime, OpenAIAssistantAdapter } from \"@copilotkit/runtime\";\n * import OpenAI from \"openai\";\n *\n * const copilotKit = new CopilotRuntime();\n *\n * const openai = new OpenAI({\n * organization: \"<your-organization-id>\",\n * apiKey: \"<your-api-key>\",\n * });\n *\n * return new OpenAIAssistantAdapter({\n * openai,\n * assistantId: \"<your-assistant-id>\",\n * codeInterpreterEnabled: true,\n * fileSearchEnabled: true,\n * });\n * ```\n */\nimport type OpenAI from \"openai\";\nimport type { RunSubmitToolOutputsStreamParams } from \"openai/resources/beta/threads/runs/runs\";\nimport type { AssistantStream } from \"openai/lib/AssistantStream\";\nimport type {\n AssistantStreamEvent,\n AssistantTool,\n} from \"openai/resources/beta/assistants\";\nimport {\n CopilotServiceAdapter,\n CopilotRuntimeChatCompletionRequest,\n CopilotRuntimeChatCompletionResponse,\n} from \"../service-adapter\";\nimport {\n Message,\n ResultMessage,\n TextMessage,\n} from \"../../graphql/types/converted\";\nimport {\n convertActionInputToOpenAITool,\n convertMessageToOpenAIMessage,\n convertSystemMessageToAssistantAPI,\n} from \"./utils\";\nimport { RuntimeEventSource } from \"../events\";\nimport { ActionInput } from \"../../graphql/inputs/action.input\";\nimport { ForwardedParametersInput } from \"../../graphql/inputs/forwarded-parameters.input\";\n\nexport interface OpenAIAssistantAdapterParams {\n /**\n * The ID of the assistant to use.\n */\n assistantId: string;\n\n /**\n * An optional OpenAI instance to use. If not provided, a new instance will be created.\n */\n openai?: OpenAI;\n\n /**\n * Whether to enable code interpretation.\n * @default true\n */\n codeInterpreterEnabled?: boolean;\n\n /**\n * Whether to enable file search.\n * @default true\n */\n fileSearchEnabled?: boolean;\n\n /**\n * Whether to disable parallel tool calls.\n * You can disable parallel tool calls to force the model to execute tool calls sequentially.\n * This is useful if you want to execute tool calls in a specific order so that the state changes\n * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)\n *\n * @default false\n */\n disableParallelToolCalls?: boolean;\n\n /**\n * Whether to keep the role in system messages as \"System\".\n * By default, it is converted to \"developer\", which is used by newer OpenAI models\n *\n * @default false\n */\n keepSystemRole?: boolean;\n}\n\nexport class OpenAIAssistantAdapter implements CopilotServiceAdapter {\n private _openai: OpenAI;\n private codeInterpreterEnabled: boolean;\n private assistantId: string;\n private fileSearchEnabled: boolean;\n private disableParallelToolCalls: boolean;\n private keepSystemRole: boolean = false;\n\n public get name() {\n return \"OpenAIAssistantAdapter\";\n }\n\n constructor(params: OpenAIAssistantAdapterParams) {\n if (params.openai) {\n this._openai = params.openai;\n }\n // If no instance provided, we'll lazy-load in ensureOpenAI()\n this.codeInterpreterEnabled =\n params.codeInterpreterEnabled === false || true;\n this.fileSearchEnabled = params.fileSearchEnabled === false || true;\n this.assistantId = params.assistantId;\n this.disableParallelToolCalls = params?.disableParallelToolCalls || false;\n this.keepSystemRole = params?.keepSystemRole ?? false;\n }\n\n private ensureOpenAI(): OpenAI {\n if (!this._openai) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const OpenAI = require(\"openai\").default;\n this._openai = new OpenAI({});\n }\n return this._openai;\n }\n\n async process(\n request: CopilotRuntimeChatCompletionRequest,\n ): Promise<CopilotRuntimeChatCompletionResponse> {\n const { messages, actions, eventSource, runId, forwardedParameters } =\n request;\n\n // if we don't have a threadId, create a new thread\n let threadId = request.extensions?.openaiAssistantAPI?.threadId;\n const openai = this.ensureOpenAI();\n\n if (!threadId) {\n threadId = (await openai.beta.threads.create()).id;\n }\n\n const lastMessage = messages.at(-1);\n\n let nextRunId: string | undefined = undefined;\n\n // submit function outputs\n if (lastMessage.isResultMessage() && runId) {\n nextRunId = await this.submitToolOutputs(\n threadId,\n runId,\n messages,\n eventSource,\n );\n }\n // submit user message\n else if (lastMessage.isTextMessage()) {\n nextRunId = await this.submitUserMessage(\n threadId,\n messages,\n actions,\n eventSource,\n forwardedParameters,\n );\n }\n // unsupported message\n else {\n throw new Error(\"No actionable message found in the messages\");\n }\n\n return {\n runId: nextRunId,\n threadId,\n extensions: {\n ...request.extensions,\n openaiAssistantAPI: {\n threadId: threadId,\n runId: nextRunId,\n },\n },\n };\n }\n\n private async submitToolOutputs(\n threadId: string,\n runId: string,\n messages: Message[],\n eventSource: RuntimeEventSource,\n ) {\n const openai = this.ensureOpenAI();\n let run = await openai.beta.threads.runs.retrieve(threadId, runId);\n\n if (!run.required_action) {\n throw new Error(\"No tool outputs required\");\n }\n\n // get the required tool call ids\n const toolCallsIds = run.required_action.submit_tool_outputs.tool_calls.map(\n (toolCall) => toolCall.id,\n );\n\n // search for these tool calls\n const resultMessages = messages.filter(\n (message) =>\n message.isResultMessage() &&\n toolCallsIds.includes(message.actionExecutionId),\n ) as ResultMessage[];\n\n if (toolCallsIds.length != resultMessages.length) {\n throw new Error(\n \"Number of function results does not match the number of tool calls\",\n );\n }\n\n // submit the tool outputs\n const toolOutputs: RunSubmitToolOutputsStreamParams.ToolOutput[] =\n resultMessages.map((message) => {\n return {\n tool_call_id: message.actionExecutionId,\n output: message.result,\n };\n });\n\n const stream = openai.beta.threads.runs.submitToolOutputsStream(\n threadId,\n runId,\n {\n tool_outputs: toolOutputs,\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n },\n );\n\n await this.streamResponse(stream, eventSource);\n return runId;\n }\n\n private async submitUserMessage(\n threadId: string,\n messages: Message[],\n actions: ActionInput[],\n eventSource: RuntimeEventSource,\n forwardedParameters: ForwardedParametersInput,\n ) {\n const openai = this.ensureOpenAI();\n messages = [...messages];\n\n // get the instruction message\n const instructionsMessage = messages.shift();\n const instructions = instructionsMessage.isTextMessage()\n ? instructionsMessage.content\n : \"\";\n\n // get the latest user message\n const userMessage = messages\n .map((m) =>\n convertMessageToOpenAIMessage(m, {\n keepSystemRole: this.keepSystemRole,\n }),\n )\n .map(convertSystemMessageToAssistantAPI)\n .at(-1);\n\n if (userMessage.role !== \"user\") {\n throw new Error(\"No user message found\");\n }\n\n await openai.beta.threads.messages.create(threadId, {\n role: \"user\",\n content: userMessage.content,\n });\n\n const openaiTools = actions.map(convertActionInputToOpenAITool);\n\n const tools = [\n ...openaiTools,\n ...(this.codeInterpreterEnabled\n ? [{ type: \"code_interpreter\" } as AssistantTool]\n : []),\n ...(this.fileSearchEnabled\n ? [{ type: \"file_search\" } as AssistantTool]\n : []),\n ];\n\n let stream = openai.beta.threads.runs.stream(threadId, {\n assistant_id: this.assistantId,\n instructions,\n tools: tools,\n ...(forwardedParameters?.maxTokens && {\n max_completion_tokens: forwardedParameters.maxTokens,\n }),\n ...(this.disableParallelToolCalls && { parallel_tool_calls: false }),\n });\n\n await this.streamResponse(stream, eventSource);\n\n return getRunIdFromStream(stream);\n }\n\n private async streamResponse(\n stream: AssistantStream,\n eventSource: RuntimeEventSource,\n ) {\n eventSource.stream(async (eventStream$) => {\n let inFunctionCall = false;\n let currentMessageId: string;\n let currentToolCallId: string;\n\n for await (const chunk of stream) {\n switch (chunk.event) {\n case \"thread.message.created\":\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n currentMessageId = chunk.data.id;\n eventStream$.sendTextMessageStart({ messageId: currentMessageId });\n break;\n case \"thread.message.delta\":\n if (chunk.data.delta.content?.[0].type === \"text\") {\n eventStream$.sendTextMessageContent({\n messageId: currentMessageId,\n content: chunk.data.delta.content?.[0].text.value,\n });\n }\n break;\n case \"thread.message.completed\":\n eventStream$.sendTextMessageEnd({ messageId: currentMessageId });\n break;\n case \"thread.run.step.delta\":\n let toolCallId: string | undefined;\n let toolCallName: string | undefined;\n let toolCallArgs: string | undefined;\n if (\n chunk.data.delta.step_details.type === \"tool_calls\" &&\n chunk.data.delta.step_details.tool_calls?.[0].type === \"function\"\n ) {\n toolCallId = chunk.data.delta.step_details.tool_calls?.[0].id;\n toolCallName =\n chunk.data.delta.step_details.tool_calls?.[0].function.name;\n toolCallArgs =\n chunk.data.delta.step_details.tool_calls?.[0].function\n .arguments;\n }\n\n if (toolCallName && toolCallId) {\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n inFunctionCall = true;\n currentToolCallId = toolCallId;\n eventStream$.sendActionExecutionStart({\n actionExecutionId: currentToolCallId,\n parentMessageId: chunk.data.id,\n actionName: toolCallName,\n });\n } else if (toolCallArgs) {\n eventStream$.sendActionExecutionArgs({\n actionExecutionId: currentToolCallId,\n args: toolCallArgs,\n });\n }\n break;\n }\n }\n if (inFunctionCall) {\n eventStream$.sendActionExecutionEnd({\n actionExecutionId: currentToolCallId,\n });\n }\n eventStream$.complete();\n });\n }\n}\n\nfunction getRunIdFromStream(stream: AssistantStream): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n let runIdGetter = (event: AssistantStreamEvent) => {\n if (event.event === \"thread.run.created\") {\n const runId = event.data.id;\n stream.off(\"event\", runIdGetter);\n resolve(runId);\n }\n };\n stream.on(\"event\", runIdGetter);\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+
2
+ import { CopilotRuntimeChatCompletionRequest, CopilotRuntimeChatCompletionResponse, CopilotServiceAdapter } from "../service-adapter.cjs";
3
+ import OpenAI from "openai";
4
+
5
+ //#region src/service-adapters/openai/openai-assistant-adapter.d.ts
6
+ interface OpenAIAssistantAdapterParams {
7
+ /**
8
+ * The ID of the assistant to use.
9
+ */
10
+ assistantId: string;
11
+ /**
12
+ * An optional OpenAI instance to use. If not provided, a new instance will be created.
13
+ */
14
+ openai?: OpenAI;
15
+ /**
16
+ * Whether to enable code interpretation.
17
+ * @default true
18
+ */
19
+ codeInterpreterEnabled?: boolean;
20
+ /**
21
+ * Whether to enable file search.
22
+ * @default true
23
+ */
24
+ fileSearchEnabled?: boolean;
25
+ /**
26
+ * Whether to disable parallel tool calls.
27
+ * You can disable parallel tool calls to force the model to execute tool calls sequentially.
28
+ * This is useful if you want to execute tool calls in a specific order so that the state changes
29
+ * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)
30
+ *
31
+ * @default false
32
+ */
33
+ disableParallelToolCalls?: boolean;
34
+ /**
35
+ * Whether to keep the role in system messages as "System".
36
+ * By default, it is converted to "developer", which is used by newer OpenAI models
37
+ *
38
+ * @default false
39
+ */
40
+ keepSystemRole?: boolean;
41
+ }
42
+ declare class OpenAIAssistantAdapter implements CopilotServiceAdapter {
43
+ private _openai;
44
+ private codeInterpreterEnabled;
45
+ private assistantId;
46
+ private fileSearchEnabled;
47
+ private disableParallelToolCalls;
48
+ private keepSystemRole;
49
+ get name(): string;
50
+ constructor(params: OpenAIAssistantAdapterParams);
51
+ private ensureOpenAI;
52
+ process(request: CopilotRuntimeChatCompletionRequest): Promise<CopilotRuntimeChatCompletionResponse>;
53
+ private submitToolOutputs;
54
+ private submitUserMessage;
55
+ private streamResponse;
56
+ }
57
+ //#endregion
58
+ export { OpenAIAssistantAdapter, OpenAIAssistantAdapterParams };
59
+ //# sourceMappingURL=openai-assistant-adapter.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-assistant-adapter.d.cts","names":[],"sources":["../../../src/service-adapters/openai/openai-assistant-adapter.ts"],"mappings":";;;;;UAkDiB,4BAAA;EA0C8B;;;EAtC7C,WAAA;EA0CQ;;;EArCR,MAAA,GAAS,MAAA;;;;;EAMT,sBAAA;EA8DW;;;;EAxDX,iBAAA;EAmKc;;;;;;;;EAzJd,wBAAA;;;;;;;EAQA,cAAA;AAAA;AAAA,cAGW,sBAAA,YAAkC,qBAAA;EAAA,QACrC,OAAA;EAAA,QACA,sBAAA;EAAA,QACA,WAAA;EAAA,QACA,iBAAA;EAAA,QACA,wBAAA;EAAA,QACA,cAAA;EAAA,IAEG,IAAA,CAAA;cAIC,MAAA,EAAQ,4BAAA;EAAA,QAaZ,YAAA;EASF,OAAA,CACJ,OAAA,EAAS,mCAAA,GACR,OAAA,CAAQ,oCAAA;EAAA,QAqDG,iBAAA;EAAA,QAqDA,iBAAA;EAAA,QA8DA,cAAA;AAAA"}
@@ -0,0 +1,59 @@
1
+ import "reflect-metadata";
2
+ import { CopilotRuntimeChatCompletionRequest, CopilotRuntimeChatCompletionResponse, CopilotServiceAdapter } from "../service-adapter.mjs";
3
+ import OpenAI from "openai";
4
+
5
+ //#region src/service-adapters/openai/openai-assistant-adapter.d.ts
6
+ interface OpenAIAssistantAdapterParams {
7
+ /**
8
+ * The ID of the assistant to use.
9
+ */
10
+ assistantId: string;
11
+ /**
12
+ * An optional OpenAI instance to use. If not provided, a new instance will be created.
13
+ */
14
+ openai?: OpenAI;
15
+ /**
16
+ * Whether to enable code interpretation.
17
+ * @default true
18
+ */
19
+ codeInterpreterEnabled?: boolean;
20
+ /**
21
+ * Whether to enable file search.
22
+ * @default true
23
+ */
24
+ fileSearchEnabled?: boolean;
25
+ /**
26
+ * Whether to disable parallel tool calls.
27
+ * You can disable parallel tool calls to force the model to execute tool calls sequentially.
28
+ * This is useful if you want to execute tool calls in a specific order so that the state changes
29
+ * introduced by one tool call are visible to the next tool call. (i.e. new actions or readables)
30
+ *
31
+ * @default false
32
+ */
33
+ disableParallelToolCalls?: boolean;
34
+ /**
35
+ * Whether to keep the role in system messages as "System".
36
+ * By default, it is converted to "developer", which is used by newer OpenAI models
37
+ *
38
+ * @default false
39
+ */
40
+ keepSystemRole?: boolean;
41
+ }
42
+ declare class OpenAIAssistantAdapter implements CopilotServiceAdapter {
43
+ private _openai;
44
+ private codeInterpreterEnabled;
45
+ private assistantId;
46
+ private fileSearchEnabled;
47
+ private disableParallelToolCalls;
48
+ private keepSystemRole;
49
+ get name(): string;
50
+ constructor(params: OpenAIAssistantAdapterParams);
51
+ private ensureOpenAI;
52
+ process(request: CopilotRuntimeChatCompletionRequest): Promise<CopilotRuntimeChatCompletionResponse>;
53
+ private submitToolOutputs;
54
+ private submitUserMessage;
55
+ private streamResponse;
56
+ }
57
+ //#endregion
58
+ export { OpenAIAssistantAdapter, OpenAIAssistantAdapterParams };
59
+ //# sourceMappingURL=openai-assistant-adapter.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-assistant-adapter.d.mts","names":[],"sources":["../../../src/service-adapters/openai/openai-assistant-adapter.ts"],"mappings":";;;;;UAkDiB,4BAAA;EA0C8B;;;EAtC7C,WAAA;EA0CQ;;;EArCR,MAAA,GAAS,MAAA;;;;;EAMT,sBAAA;EA8DW;;;;EAxDX,iBAAA;EAmKc;;;;;;;;EAzJd,wBAAA;;;;;;;EAQA,cAAA;AAAA;AAAA,cAGW,sBAAA,YAAkC,qBAAA;EAAA,QACrC,OAAA;EAAA,QACA,sBAAA;EAAA,QACA,WAAA;EAAA,QACA,iBAAA;EAAA,QACA,wBAAA;EAAA,QACA,cAAA;EAAA,IAEG,IAAA,CAAA;cAIC,MAAA,EAAQ,4BAAA;EAAA,QAaZ,YAAA;EASF,OAAA,CACJ,OAAA,EAAS,mCAAA,GACR,OAAA,CAAQ,oCAAA;EAAA,QAqDG,iBAAA;EAAA,QAqDA,iBAAA;EAAA,QA8DA,cAAA;AAAA"}