@librechat/agents 3.2.21 → 3.2.31

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 (398) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +3 -2
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  3. package/dist/cjs/events.cjs.map +1 -1
  4. package/dist/cjs/graphs/Graph.cjs +200 -54
  5. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  6. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  7. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +13 -7
  8. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
  9. package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
  10. package/dist/cjs/hooks/types.cjs.map +1 -1
  11. package/dist/cjs/instrumentation.cjs +2 -2
  12. package/dist/cjs/instrumentation.cjs.map +1 -1
  13. package/dist/cjs/langfuse.cjs +17 -1
  14. package/dist/cjs/langfuse.cjs.map +1 -1
  15. package/dist/cjs/langfuseToolOutputTracing.cjs +2 -2
  16. package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
  17. package/dist/cjs/llm/anthropic/index.cjs +1 -1
  18. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  19. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  20. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +1 -1
  21. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  22. package/dist/cjs/llm/bedrock/index.cjs +2 -2
  23. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  24. package/dist/cjs/llm/bedrock/toolCache.cjs +8 -5
  25. package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
  26. package/dist/cjs/llm/fake.cjs +16 -14
  27. package/dist/cjs/llm/fake.cjs.map +1 -1
  28. package/dist/cjs/llm/google/index.cjs +22 -0
  29. package/dist/cjs/llm/google/index.cjs.map +1 -1
  30. package/dist/cjs/llm/google/utils/common.cjs +88 -27
  31. package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
  32. package/dist/cjs/llm/init.cjs +2 -2
  33. package/dist/cjs/llm/invoke.cjs +108 -11
  34. package/dist/cjs/llm/invoke.cjs.map +1 -1
  35. package/dist/cjs/llm/openai/index.cjs +1 -1
  36. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  37. package/dist/cjs/llm/openai/utils/index.cjs +1 -1
  38. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  39. package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
  40. package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
  41. package/dist/cjs/main.cjs +1 -0
  42. package/dist/cjs/main.cjs.map +1 -1
  43. package/dist/cjs/messages/cache.cjs +8 -7
  44. package/dist/cjs/messages/cache.cjs.map +1 -1
  45. package/dist/cjs/messages/content.cjs.map +1 -1
  46. package/dist/cjs/messages/contextPruning.cjs.map +1 -1
  47. package/dist/cjs/messages/format.cjs +124 -17
  48. package/dist/cjs/messages/format.cjs.map +1 -1
  49. package/dist/cjs/messages/prune.cjs.map +1 -1
  50. package/dist/cjs/messages/reducer.cjs +1 -1
  51. package/dist/cjs/messages/reducer.cjs.map +1 -1
  52. package/dist/cjs/messages/tools.cjs +1 -1
  53. package/dist/cjs/messages/tools.cjs.map +1 -1
  54. package/dist/cjs/openai/index.cjs.map +1 -1
  55. package/dist/cjs/responses/index.cjs.map +1 -1
  56. package/dist/cjs/run.cjs +41 -20
  57. package/dist/cjs/run.cjs.map +1 -1
  58. package/dist/cjs/session/AgentSession.cjs +4 -4
  59. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  60. package/dist/cjs/session/JsonlSessionStore.cjs +2 -2
  61. package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
  62. package/dist/cjs/session/handlers.cjs +2 -2
  63. package/dist/cjs/session/handlers.cjs.map +1 -1
  64. package/dist/cjs/stream.cjs +248 -25
  65. package/dist/cjs/stream.cjs.map +1 -1
  66. package/dist/cjs/summarization/node.cjs.map +1 -1
  67. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +1 -1
  68. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
  69. package/dist/cjs/tools/Calculator.cjs +1 -1
  70. package/dist/cjs/tools/Calculator.cjs.map +1 -1
  71. package/dist/cjs/tools/CodeExecutor.cjs +1 -1
  72. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  73. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  74. package/dist/cjs/tools/ToolNode.cjs +37 -18
  75. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  76. package/dist/cjs/tools/ToolSearch.cjs +1 -1
  77. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  78. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +7 -4
  79. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
  80. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs +4 -4
  81. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
  82. package/dist/cjs/tools/handlers.cjs +2 -1
  83. package/dist/cjs/tools/handlers.cjs.map +1 -1
  84. package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
  85. package/dist/cjs/tools/local/FileCheckpointer.cjs +2 -1
  86. package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
  87. package/dist/cjs/tools/local/LocalCodingTools.cjs +45 -19
  88. package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
  89. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +3 -3
  90. package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
  91. package/dist/cjs/tools/local/LocalExecutionTools.cjs +2 -2
  92. package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
  93. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +4 -3
  94. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
  95. package/dist/cjs/tools/local/attachments.cjs +0 -5
  96. package/dist/cjs/tools/local/attachments.cjs.map +1 -1
  97. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +4 -4
  98. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
  99. package/dist/cjs/tools/search/firecrawl.cjs +1 -1
  100. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  101. package/dist/cjs/tools/search/rerankers.cjs +7 -3
  102. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  103. package/dist/cjs/tools/search/tavily-search.cjs +1 -1
  104. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
  105. package/dist/cjs/tools/search/utils.cjs +76 -8
  106. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  107. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +1 -1
  108. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  109. package/dist/cjs/utils/handlers.cjs +1 -1
  110. package/dist/cjs/utils/handlers.cjs.map +1 -1
  111. package/dist/cjs/utils/run.cjs +1 -1
  112. package/dist/cjs/utils/run.cjs.map +1 -1
  113. package/dist/esm/agents/AgentContext.mjs +3 -2
  114. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  115. package/dist/esm/events.mjs.map +1 -1
  116. package/dist/esm/graphs/Graph.mjs +200 -54
  117. package/dist/esm/graphs/Graph.mjs.map +1 -1
  118. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  119. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +13 -7
  120. package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
  121. package/dist/esm/hooks/executeHooks.mjs.map +1 -1
  122. package/dist/esm/hooks/types.mjs.map +1 -1
  123. package/dist/esm/instrumentation.mjs +2 -2
  124. package/dist/esm/instrumentation.mjs.map +1 -1
  125. package/dist/esm/langfuse.mjs +17 -2
  126. package/dist/esm/langfuse.mjs.map +1 -1
  127. package/dist/esm/langfuseToolOutputTracing.mjs +2 -2
  128. package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
  129. package/dist/esm/llm/anthropic/index.mjs +1 -1
  130. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  131. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  132. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +1 -1
  133. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  134. package/dist/esm/llm/bedrock/index.mjs +2 -2
  135. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  136. package/dist/esm/llm/bedrock/toolCache.mjs +8 -5
  137. package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
  138. package/dist/esm/llm/fake.mjs +16 -14
  139. package/dist/esm/llm/fake.mjs.map +1 -1
  140. package/dist/esm/llm/google/index.mjs +23 -1
  141. package/dist/esm/llm/google/index.mjs.map +1 -1
  142. package/dist/esm/llm/google/utils/common.mjs +88 -27
  143. package/dist/esm/llm/google/utils/common.mjs.map +1 -1
  144. package/dist/esm/llm/init.mjs +2 -2
  145. package/dist/esm/llm/invoke.mjs +104 -7
  146. package/dist/esm/llm/invoke.mjs.map +1 -1
  147. package/dist/esm/llm/openai/index.mjs +1 -1
  148. package/dist/esm/llm/openai/index.mjs.map +1 -1
  149. package/dist/esm/llm/openai/utils/index.mjs +1 -1
  150. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  151. package/dist/esm/llm/openrouter/index.mjs.map +1 -1
  152. package/dist/esm/llm/vertexai/index.mjs.map +1 -1
  153. package/dist/esm/main.mjs +1 -1
  154. package/dist/esm/messages/cache.mjs +8 -7
  155. package/dist/esm/messages/cache.mjs.map +1 -1
  156. package/dist/esm/messages/content.mjs.map +1 -1
  157. package/dist/esm/messages/contextPruning.mjs.map +1 -1
  158. package/dist/esm/messages/format.mjs +124 -18
  159. package/dist/esm/messages/format.mjs.map +1 -1
  160. package/dist/esm/messages/prune.mjs.map +1 -1
  161. package/dist/esm/messages/reducer.mjs +1 -1
  162. package/dist/esm/messages/reducer.mjs.map +1 -1
  163. package/dist/esm/messages/tools.mjs +1 -1
  164. package/dist/esm/messages/tools.mjs.map +1 -1
  165. package/dist/esm/openai/index.mjs.map +1 -1
  166. package/dist/esm/responses/index.mjs.map +1 -1
  167. package/dist/esm/run.mjs +41 -20
  168. package/dist/esm/run.mjs.map +1 -1
  169. package/dist/esm/session/AgentSession.mjs +4 -4
  170. package/dist/esm/session/AgentSession.mjs.map +1 -1
  171. package/dist/esm/session/JsonlSessionStore.mjs +2 -2
  172. package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
  173. package/dist/esm/session/handlers.mjs +2 -2
  174. package/dist/esm/session/handlers.mjs.map +1 -1
  175. package/dist/esm/stream.mjs +248 -25
  176. package/dist/esm/stream.mjs.map +1 -1
  177. package/dist/esm/summarization/node.mjs.map +1 -1
  178. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +1 -1
  179. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
  180. package/dist/esm/tools/Calculator.mjs +1 -1
  181. package/dist/esm/tools/Calculator.mjs.map +1 -1
  182. package/dist/esm/tools/CodeExecutor.mjs +1 -1
  183. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  184. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  185. package/dist/esm/tools/ToolNode.mjs +37 -18
  186. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  187. package/dist/esm/tools/ToolSearch.mjs +1 -1
  188. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  189. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +7 -4
  190. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
  191. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs +4 -4
  192. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
  193. package/dist/esm/tools/handlers.mjs +2 -1
  194. package/dist/esm/tools/handlers.mjs.map +1 -1
  195. package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
  196. package/dist/esm/tools/local/FileCheckpointer.mjs +2 -1
  197. package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
  198. package/dist/esm/tools/local/LocalCodingTools.mjs +45 -19
  199. package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
  200. package/dist/esm/tools/local/LocalExecutionEngine.mjs +3 -3
  201. package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
  202. package/dist/esm/tools/local/LocalExecutionTools.mjs +2 -2
  203. package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
  204. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +4 -3
  205. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
  206. package/dist/esm/tools/local/attachments.mjs +0 -5
  207. package/dist/esm/tools/local/attachments.mjs.map +1 -1
  208. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +4 -4
  209. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
  210. package/dist/esm/tools/search/firecrawl.mjs +1 -1
  211. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  212. package/dist/esm/tools/search/rerankers.mjs +8 -4
  213. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  214. package/dist/esm/tools/search/tavily-search.mjs +1 -1
  215. package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
  216. package/dist/esm/tools/search/utils.mjs +76 -9
  217. package/dist/esm/tools/search/utils.mjs.map +1 -1
  218. package/dist/esm/tools/subagent/SubagentExecutor.mjs +1 -1
  219. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  220. package/dist/esm/utils/handlers.mjs +1 -1
  221. package/dist/esm/utils/handlers.mjs.map +1 -1
  222. package/dist/esm/utils/run.mjs +1 -1
  223. package/dist/esm/utils/run.mjs.map +1 -1
  224. package/dist/types/agents/__tests__/promptCacheLiveHelpers.d.ts +1 -1
  225. package/dist/types/events.d.ts +1 -1
  226. package/dist/types/graphs/Graph.d.ts +7 -1
  227. package/dist/types/hooks/executeHooks.d.ts +1 -1
  228. package/dist/types/hooks/types.d.ts +5 -0
  229. package/dist/types/langfuse.d.ts +4 -0
  230. package/dist/types/llm/anthropic/utils/message_inputs.d.ts +1 -1
  231. package/dist/types/llm/anthropic/utils/message_outputs.d.ts +1 -1
  232. package/dist/types/llm/anthropic/utils/output_parsers.d.ts +2 -2
  233. package/dist/types/llm/bedrock/index.d.ts +2 -2
  234. package/dist/types/llm/fake.d.ts +3 -3
  235. package/dist/types/llm/google/index.d.ts +1 -0
  236. package/dist/types/llm/google/types.d.ts +1 -1
  237. package/dist/types/llm/google/utils/common.d.ts +2 -2
  238. package/dist/types/llm/google/utils/tools.d.ts +1 -1
  239. package/dist/types/llm/google/utils/zod_to_genai_parameters.d.ts +1 -1
  240. package/dist/types/llm/openai/index.d.ts +2 -2
  241. package/dist/types/llm/openai/utils/index.d.ts +1 -1
  242. package/dist/types/llm/openrouter/index.d.ts +4 -4
  243. package/dist/types/messages/contextPruning.d.ts +1 -1
  244. package/dist/types/messages/format.d.ts +9 -4
  245. package/dist/types/messages/prune.d.ts +1 -1
  246. package/dist/types/session/JsonlSessionStore.d.ts +1 -1
  247. package/dist/types/session/handlers.d.ts +1 -1
  248. package/dist/types/session/types.d.ts +1 -1
  249. package/dist/types/summarization/node.d.ts +1 -1
  250. package/dist/types/tools/SubagentTool.d.ts +2 -2
  251. package/dist/types/tools/ToolNode.d.ts +9 -2
  252. package/dist/types/tools/cloudflare/CloudflareSandboxExecutionEngine.d.ts +1 -1
  253. package/dist/types/tools/search/types.d.ts +1 -1
  254. package/dist/types/tools/search/utils.d.ts +11 -0
  255. package/dist/types/types/graph.d.ts +4 -4
  256. package/dist/types/types/llm.d.ts +4 -3
  257. package/dist/types/types/messages.d.ts +1 -1
  258. package/dist/types/types/run.d.ts +6 -6
  259. package/dist/types/types/stream.d.ts +2 -2
  260. package/dist/types/types/tools.d.ts +5 -1
  261. package/dist/types/utils/handlers.d.ts +2 -2
  262. package/dist/types/utils/run.d.ts +1 -1
  263. package/package.json +6 -3
  264. package/src/__tests__/stream.eagerEventExecution.test.ts +543 -6
  265. package/src/agents/AgentContext.ts +2 -2
  266. package/src/agents/__tests__/AgentContext.test.ts +3 -3
  267. package/src/agents/__tests__/promptCacheLiveHelpers.ts +1 -1
  268. package/src/events.ts +1 -1
  269. package/src/graphs/Graph.ts +329 -72
  270. package/src/graphs/MultiAgentGraph.ts +1 -1
  271. package/src/graphs/__tests__/Graph.reasoning.test.ts +919 -6
  272. package/src/graphs/__tests__/MultiAgentGraph.test.ts +1 -1
  273. package/src/graphs/__tests__/composition.smoke.test.ts +1 -1
  274. package/src/hooks/__tests__/HookRegistry.test.ts +1 -1
  275. package/src/hooks/__tests__/compactHooks.test.ts +8 -8
  276. package/src/hooks/__tests__/createWorkspacePolicyHook.test.ts +34 -22
  277. package/src/hooks/__tests__/executeHooks.test.ts +3 -3
  278. package/src/hooks/__tests__/integration.test.ts +3 -3
  279. package/src/hooks/__tests__/toolHooks.test.ts +10 -10
  280. package/src/hooks/createWorkspacePolicyHook.ts +17 -14
  281. package/src/hooks/executeHooks.ts +1 -1
  282. package/src/hooks/types.ts +5 -0
  283. package/src/instrumentation.ts +11 -11
  284. package/src/langfuse.ts +35 -1
  285. package/src/langfuseToolOutputTracing.ts +2 -2
  286. package/src/llm/anthropic/index.ts +1 -1
  287. package/src/llm/anthropic/utils/message_inputs.ts +1 -1
  288. package/src/llm/anthropic/utils/message_outputs.ts +3 -5
  289. package/src/llm/anthropic/utils/output_parsers.ts +5 -5
  290. package/src/llm/bedrock/index.ts +4 -4
  291. package/src/llm/bedrock/toolCache.test.ts +48 -9
  292. package/src/llm/bedrock/toolCache.ts +11 -6
  293. package/src/llm/fake.ts +30 -25
  294. package/src/llm/google/index.ts +43 -1
  295. package/src/llm/google/llm.spec.ts +173 -1
  296. package/src/llm/google/types.ts +1 -1
  297. package/src/llm/google/utils/common.ts +154 -45
  298. package/src/llm/google/utils/tools.ts +8 -8
  299. package/src/llm/google/utils/zod_to_genai_parameters.ts +4 -4
  300. package/src/llm/invoke.test.ts +3 -3
  301. package/src/llm/invoke.ts +170 -10
  302. package/src/llm/openai/index.ts +4 -4
  303. package/src/llm/openai/utils/index.ts +14 -14
  304. package/src/llm/openrouter/index.ts +4 -4
  305. package/src/llm/openrouter/reasoning.test.ts +2 -2
  306. package/src/llm/vertexai/fixThoughtSignatures.test.ts +1 -1
  307. package/src/llm/vertexai/index.ts +1 -1
  308. package/src/messages/cache.test.ts +22 -0
  309. package/src/messages/cache.ts +25 -12
  310. package/src/messages/content.ts +1 -1
  311. package/src/messages/contextPruning.ts +1 -1
  312. package/src/messages/format.ts +227 -43
  313. package/src/messages/formatAgentMessages.skills.test.ts +105 -26
  314. package/src/messages/formatAgentMessages.test.ts +841 -10
  315. package/src/messages/labelContentByAgent.test.ts +2 -2
  316. package/src/messages/prune.ts +1 -1
  317. package/src/messages/reducer.ts +1 -1
  318. package/src/messages/tools.ts +1 -1
  319. package/src/openai/__tests__/openai.test.ts +2 -2
  320. package/src/openai/index.ts +1 -1
  321. package/src/responses/__tests__/responses.test.ts +2 -2
  322. package/src/responses/index.ts +1 -1
  323. package/src/run.ts +68 -41
  324. package/src/session/AgentSession.ts +6 -6
  325. package/src/session/JsonlSessionStore.ts +3 -3
  326. package/src/session/__tests__/JsonlSessionStore.test.ts +5 -5
  327. package/src/session/__tests__/handlers.test.ts +2 -2
  328. package/src/session/handlers.ts +5 -5
  329. package/src/session/types.ts +1 -1
  330. package/src/specs/agent-handoffs.test.ts +1 -1
  331. package/src/specs/langfuse-callbacks.test.ts +2 -2
  332. package/src/specs/langfuse-metadata.test.ts +39 -0
  333. package/src/specs/langfuse-tool-output-tracing.test.ts +1 -1
  334. package/src/specs/multi-agent-summarization.test.ts +4 -4
  335. package/src/specs/subagent.test.ts +3 -3
  336. package/src/specs/summarization-unit.test.ts +1 -1
  337. package/src/specs/thinking-handoff.test.ts +1 -1
  338. package/src/splitStream.test.ts +48 -0
  339. package/src/stream.test.ts +53 -3
  340. package/src/stream.ts +450 -39
  341. package/src/summarization/__tests__/aggregator.test.ts +2 -2
  342. package/src/summarization/__tests__/node.test.ts +2 -2
  343. package/src/summarization/node.ts +1 -1
  344. package/src/tools/BashProgrammaticToolCalling.ts +5 -5
  345. package/src/tools/Calculator.ts +1 -1
  346. package/src/tools/CodeExecutor.ts +2 -4
  347. package/src/tools/SubagentTool.ts +2 -2
  348. package/src/tools/ToolNode.ts +37 -16
  349. package/src/tools/ToolSearch.ts +1 -1
  350. package/src/tools/__tests__/CloudflareSandboxExecution.test.ts +4 -4
  351. package/src/tools/__tests__/CodeApiAuthHeaders.test.ts +12 -12
  352. package/src/tools/__tests__/LocalExecutionTools.test.ts +125 -93
  353. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +29 -5
  354. package/src/tools/__tests__/ReadFile.test.ts +1 -1
  355. package/src/tools/__tests__/SkillTool.test.ts +4 -4
  356. package/src/tools/__tests__/SubagentExecutor.test.ts +17 -13
  357. package/src/tools/__tests__/SubagentTool.test.ts +2 -2
  358. package/src/tools/__tests__/ToolNode.eagerEventExecution.test.ts +1 -1
  359. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +2 -5
  360. package/src/tools/__tests__/ToolNode.session.test.ts +1 -1
  361. package/src/tools/__tests__/ToolSearch.test.ts +1 -1
  362. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +1 -1
  363. package/src/tools/__tests__/directToolHITLResumeScope.test.ts +35 -32
  364. package/src/tools/__tests__/directToolHooks.test.ts +41 -0
  365. package/src/tools/__tests__/handlers.test.ts +2 -2
  366. package/src/tools/__tests__/hitl.test.ts +11 -11
  367. package/src/tools/__tests__/localToolNames.test.ts +8 -6
  368. package/src/tools/__tests__/skillCatalog.test.ts +1 -1
  369. package/src/tools/__tests__/subagentHooks.test.ts +20 -10
  370. package/src/tools/__tests__/workspaceSeam.test.ts +20 -7
  371. package/src/tools/cloudflare/CloudflareSandboxExecutionEngine.ts +9 -6
  372. package/src/tools/cloudflare/CloudflareSandboxTools.ts +19 -19
  373. package/src/tools/handlers.ts +5 -5
  374. package/src/tools/local/CompileCheckTool.ts +4 -7
  375. package/src/tools/local/FileCheckpointer.ts +6 -5
  376. package/src/tools/local/LocalCodingTools.ts +100 -45
  377. package/src/tools/local/LocalExecutionEngine.ts +5 -5
  378. package/src/tools/local/LocalExecutionTools.ts +9 -9
  379. package/src/tools/local/LocalProgrammaticToolCalling.ts +5 -4
  380. package/src/tools/local/attachments.ts +0 -6
  381. package/src/tools/local/resolveLocalExecutionTools.ts +15 -15
  382. package/src/tools/search/firecrawl.ts +1 -1
  383. package/src/tools/search/jina-reranker.test.ts +148 -37
  384. package/src/tools/search/rerankers.ts +14 -4
  385. package/src/tools/search/tavily-search.ts +2 -2
  386. package/src/tools/search/types.ts +1 -1
  387. package/src/tools/search/utils.ts +99 -9
  388. package/src/tools/subagent/SubagentExecutor.ts +12 -6
  389. package/src/types/graph.ts +12 -12
  390. package/src/types/llm.ts +7 -6
  391. package/src/types/messages.ts +1 -1
  392. package/src/types/run.ts +7 -7
  393. package/src/types/stream.ts +2 -2
  394. package/src/types/tools.ts +5 -1
  395. package/src/utils/handlers.ts +2 -2
  396. package/src/utils/llmConfig.ts +1 -1
  397. package/src/utils/logging.ts +20 -10
  398. package/src/utils/run.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"reducer.cjs","sources":["../../../src/messages/reducer.ts"],"sourcesContent":["import {\n BaseMessage,\n RemoveMessage,\n BaseMessageLike,\n coerceMessageLikeToMessage,\n} from '@langchain/core/messages';\nimport { v4 } from 'uuid';\n\nexport const REMOVE_ALL_MESSAGES = '__remove_all__';\n\n/**\n * Creates a message that instructs messagesStateReducer to remove ALL\n * existing messages from state. Messages appearing after this one in\n * the array become the new state.\n *\n * Usage (in a node return value):\n * ```ts\n * return { messages: [createRemoveAllMessage(), ...survivingMessages] };\n * ```\n *\n * This works because the reducer checks for `getType() === 'remove'`\n * with `id === REMOVE_ALL_MESSAGES` and discards everything before it.\n *\n * NOTE: Uses RemoveMessage from @langchain/core with a sentinel id so\n * the reducer can distinguish a \"remove-all\" marker from a single-message\n * removal.\n */\nexport function createRemoveAllMessage(): BaseMessage {\n return new RemoveMessage({ id: REMOVE_ALL_MESSAGES });\n}\n\nexport type Messages =\n | Array<BaseMessage | BaseMessageLike>\n | BaseMessage\n | BaseMessageLike;\n\n/**\n * Prebuilt reducer that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n */\nexport function messagesStateReducer(\n left: Messages,\n right: Messages\n): BaseMessage[] {\n const leftArray = Array.isArray(left) ? left : [left];\n const rightArray = Array.isArray(right) ? right : [right];\n // coerce to message\n const leftMessages = (leftArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n const rightMessages = (rightArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n // assign missing ids\n for (const m of leftMessages) {\n if (m.id === null || m.id === undefined) {\n m.id = v4();\n m.lc_kwargs.id = m.id;\n }\n }\n\n let removeAllIdx: number | undefined;\n for (let i = 0; i < rightMessages.length; i += 1) {\n const m = rightMessages[i];\n if (m.id === null || m.id === undefined) {\n m.id = v4();\n m.lc_kwargs.id = m.id;\n }\n\n if (m.getType() === 'remove' && m.id === REMOVE_ALL_MESSAGES) {\n removeAllIdx = i;\n }\n }\n\n if (removeAllIdx != null) return rightMessages.slice(removeAllIdx + 1);\n\n // merge\n const merged = [...leftMessages];\n const mergedById = new Map(merged.map((m, i) => [m.id, i]));\n const idsToRemove = new Set();\n for (const m of rightMessages) {\n const existingIdx = mergedById.get(m.id);\n if (existingIdx !== undefined) {\n if (m.getType() === 'remove') {\n idsToRemove.add(m.id);\n } else {\n idsToRemove.delete(m.id);\n merged[existingIdx] = m;\n }\n } else {\n if (m.getType() === 'remove') {\n throw new Error(\n `Attempting to delete a message with an ID that doesn't exist ('${m.id}')`\n );\n }\n mergedById.set(m.id, merged.length);\n merged.push(m);\n }\n }\n return merged.filter((m) => !idsToRemove.has(m.id));\n}\n"],"names":["RemoveMessage","coerceMessageLikeToMessage","v4"],"mappings":"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"}
1
+ {"version":3,"file":"reducer.cjs","sources":["../../../src/messages/reducer.ts"],"sourcesContent":["import { v4 } from 'uuid';\nimport {\n BaseMessage,\n RemoveMessage,\n BaseMessageLike,\n coerceMessageLikeToMessage,\n} from '@langchain/core/messages';\n\nexport const REMOVE_ALL_MESSAGES = '__remove_all__';\n\n/**\n * Creates a message that instructs messagesStateReducer to remove ALL\n * existing messages from state. Messages appearing after this one in\n * the array become the new state.\n *\n * Usage (in a node return value):\n * ```ts\n * return { messages: [createRemoveAllMessage(), ...survivingMessages] };\n * ```\n *\n * This works because the reducer checks for `getType() === 'remove'`\n * with `id === REMOVE_ALL_MESSAGES` and discards everything before it.\n *\n * NOTE: Uses RemoveMessage from @langchain/core with a sentinel id so\n * the reducer can distinguish a \"remove-all\" marker from a single-message\n * removal.\n */\nexport function createRemoveAllMessage(): BaseMessage {\n return new RemoveMessage({ id: REMOVE_ALL_MESSAGES });\n}\n\nexport type Messages =\n | Array<BaseMessage | BaseMessageLike>\n | BaseMessage\n | BaseMessageLike;\n\n/**\n * Prebuilt reducer that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n */\nexport function messagesStateReducer(\n left: Messages,\n right: Messages\n): BaseMessage[] {\n const leftArray = Array.isArray(left) ? left : [left];\n const rightArray = Array.isArray(right) ? right : [right];\n // coerce to message\n const leftMessages = (leftArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n const rightMessages = (rightArray as BaseMessageLike[]).map(\n coerceMessageLikeToMessage\n );\n // assign missing ids\n for (const m of leftMessages) {\n if (m.id === null || m.id === undefined) {\n m.id = v4();\n m.lc_kwargs.id = m.id;\n }\n }\n\n let removeAllIdx: number | undefined;\n for (let i = 0; i < rightMessages.length; i += 1) {\n const m = rightMessages[i];\n if (m.id === null || m.id === undefined) {\n m.id = v4();\n m.lc_kwargs.id = m.id;\n }\n\n if (m.getType() === 'remove' && m.id === REMOVE_ALL_MESSAGES) {\n removeAllIdx = i;\n }\n }\n\n if (removeAllIdx != null) return rightMessages.slice(removeAllIdx + 1);\n\n // merge\n const merged = [...leftMessages];\n const mergedById = new Map(merged.map((m, i) => [m.id, i]));\n const idsToRemove = new Set();\n for (const m of rightMessages) {\n const existingIdx = mergedById.get(m.id);\n if (existingIdx !== undefined) {\n if (m.getType() === 'remove') {\n idsToRemove.add(m.id);\n } else {\n idsToRemove.delete(m.id);\n merged[existingIdx] = m;\n }\n } else {\n if (m.getType() === 'remove') {\n throw new Error(\n `Attempting to delete a message with an ID that doesn't exist ('${m.id}')`\n );\n }\n mergedById.set(m.id, merged.length);\n merged.push(m);\n }\n }\n return merged.filter((m) => !idsToRemove.has(m.id));\n}\n"],"names":["RemoveMessage","coerceMessageLikeToMessage","v4"],"mappings":";;;;;AAQO,MAAM,mBAAmB,GAAG;AAEnC;;;;;;;;;;;;;;;;AAgBG;SACa,sBAAsB,GAAA;IACpC,OAAO,IAAIA,sBAAa,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,CAAC;AACvD;AAOA;;;;AAIG;AACG,SAAU,oBAAoB,CAClC,IAAc,EACd,KAAe,EAAA;AAEf,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC;AACrD,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;;IAEzD,MAAM,YAAY,GAAI,SAA+B,CAAC,GAAG,CACvDC,mCAA0B,CAC3B;IACD,MAAM,aAAa,GAAI,UAAgC,CAAC,GAAG,CACzDA,mCAA0B,CAC3B;;AAED,IAAA,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE;AAC5B,QAAA,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,EAAE;AACvC,YAAA,CAAC,CAAC,EAAE,GAAGC,OAAE,EAAE;YACX,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;QACvB;IACF;AAEA,IAAA,IAAI,YAAgC;AACpC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AAChD,QAAA,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,EAAE;AACvC,YAAA,CAAC,CAAC,EAAE,GAAGA,OAAE,EAAE;YACX,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;QACvB;AAEA,QAAA,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,mBAAmB,EAAE;YAC5D,YAAY,GAAG,CAAC;QAClB;IACF;IAEA,IAAI,YAAY,IAAI,IAAI;QAAE,OAAO,aAAa,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;;AAGtE,IAAA,MAAM,MAAM,GAAG,CAAC,GAAG,YAAY,CAAC;IAChC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,IAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE;AAC7B,IAAA,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE;QAC7B,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,QAAA,IAAI,WAAW,KAAK,SAAS,EAAE;AAC7B,YAAA,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ,EAAE;AAC5B,gBAAA,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB;iBAAO;AACL,gBAAA,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACxB,gBAAA,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC;YACzB;QACF;aAAO;AACL,YAAA,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ,EAAE;gBAC5B,MAAM,IAAI,KAAK,CACb,CAAA,+DAAA,EAAkE,CAAC,CAAC,EAAE,CAAA,EAAA,CAAI,CAC3E;YACH;YACA,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;AACnC,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAChB;IACF;AACA,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACrD;;;;;;"}
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var messages = require('@langchain/core/messages');
4
- var _enum = require('../common/enum.cjs');
5
4
  var core = require('./core.cjs');
5
+ var _enum = require('../common/enum.cjs');
6
6
 
7
7
  // src/messages/toolDiscovery.ts
8
8
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"tools.cjs","sources":["../../../src/messages/tools.ts"],"sourcesContent":["// src/messages/toolDiscovery.ts\nimport { AIMessageChunk, ToolMessage } from '@langchain/core/messages';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport { Constants } from '@/common';\nimport { findLastIndex } from './core';\n\ntype ToolSearchArtifact = {\n tool_references?: Array<{ tool_name: string }>;\n};\n\n/**\n * Extracts discovered tool names from tool search results in the current turn.\n * Only processes tool search messages after the latest AI message with tool calls.\n *\n * Similar pattern to formatArtifactPayload - finds relevant messages efficiently\n * by identifying the latest AI parent and only processing subsequent tool messages.\n *\n * @param messages - All messages in the conversation\n * @returns Array of discovered tool names (empty if no new discoveries)\n */\nexport function extractToolDiscoveries(messages: BaseMessage[]): string[] {\n const lastMessage = messages[messages.length - 1];\n if (!(lastMessage instanceof ToolMessage)) return [];\n\n // Find the latest AIMessage with tool_calls that this tool message belongs to\n const latestAIParentIndex = findLastIndex(\n messages,\n (msg) =>\n (msg instanceof AIMessageChunk &&\n (msg.tool_calls?.length ?? 0) > 0 &&\n msg.tool_calls?.some((tc) => tc.id === lastMessage.tool_call_id)) ??\n false\n );\n\n if (latestAIParentIndex === -1) return [];\n\n // Collect tool_call_ids from the AI message\n const aiMessage = messages[latestAIParentIndex] as AIMessageChunk;\n const toolCallIds = new Set(aiMessage.tool_calls?.map((tc) => tc.id) ?? []);\n\n // Only process tool search results after the AI message that belong to this turn\n const discoveredNames: string[] = [];\n for (let i = latestAIParentIndex + 1; i < messages.length; i++) {\n const msg = messages[i];\n if (!(msg instanceof ToolMessage)) continue;\n if (msg.name !== Constants.TOOL_SEARCH) continue;\n if (!toolCallIds.has(msg.tool_call_id)) continue;\n\n // This is a tool search result from the current turn\n if (typeof msg.artifact === 'object' && msg.artifact != null) {\n const artifact = msg.artifact as ToolSearchArtifact;\n if (artifact.tool_references && artifact.tool_references.length > 0) {\n for (const ref of artifact.tool_references) {\n discoveredNames.push(ref.tool_name);\n }\n }\n }\n }\n\n return discoveredNames;\n}\n\n/**\n * Checks if the current turn has any tool search results.\n * Quick check to avoid full extraction when not needed.\n */\nexport function hasToolSearchInCurrentTurn(messages: BaseMessage[]): boolean {\n const lastMessage = messages[messages.length - 1];\n if (!(lastMessage instanceof ToolMessage)) return false;\n\n // Find the latest AIMessage with tool_calls\n const latestAIParentIndex = findLastIndex(\n messages,\n (msg) =>\n (msg instanceof AIMessageChunk &&\n (msg.tool_calls?.length ?? 0) > 0 &&\n msg.tool_calls?.some((tc) => tc.id === lastMessage.tool_call_id)) ??\n false\n );\n\n if (latestAIParentIndex === -1) return false;\n\n const aiMessage = messages[latestAIParentIndex] as AIMessageChunk;\n const toolCallIds = new Set(aiMessage.tool_calls?.map((tc) => tc.id) ?? []);\n\n // Check if any tool search results exist after the AI message\n for (let i = latestAIParentIndex + 1; i < messages.length; i++) {\n const msg = messages[i];\n if (\n msg instanceof ToolMessage &&\n msg.name === Constants.TOOL_SEARCH &&\n toolCallIds.has(msg.tool_call_id)\n ) {\n return true;\n }\n }\n\n return false;\n}\n"],"names":["messages","ToolMessage","findLastIndex","AIMessageChunk","Constants"],"mappings":";;;;;;AAAA;AAUA;;;;;;;;;AASG;AACG,SAAU,sBAAsB,CAACA,UAAuB,EAAA;IAC5D,MAAM,WAAW,GAAGA,UAAQ,CAACA,UAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,IAAA,IAAI,EAAE,WAAW,YAAYC,oBAAW,CAAC;AAAE,QAAA,OAAO,EAAE;;AAGpD,IAAA,MAAM,mBAAmB,GAAGC,kBAAa,CACvCF,UAAQ,EACR,CAAC,GAAG,KACF,CAAC,GAAG,YAAYG,uBAAc;QAC5B,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,WAAW,CAAC,YAAY,CAAC;AAClE,QAAA,KAAK,CACR;IAED,IAAI,mBAAmB,KAAK,EAAE;AAAE,QAAA,OAAO,EAAE;;AAGzC,IAAA,MAAM,SAAS,GAAGH,UAAQ,CAAC,mBAAmB,CAAmB;IACjE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;;IAG3E,MAAM,eAAe,GAAa,EAAE;AACpC,IAAA,KAAK,IAAI,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE,CAAC,GAAGA,UAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9D,QAAA,MAAM,GAAG,GAAGA,UAAQ,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,EAAE,GAAG,YAAYC,oBAAW,CAAC;YAAE;AACnC,QAAA,IAAI,GAAG,CAAC,IAAI,KAAKG,eAAS,CAAC,WAAW;YAAE;QACxC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE;;AAGxC,QAAA,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,IAAI,EAAE;AAC5D,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAA8B;AACnD,YAAA,IAAI,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AACnE,gBAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,eAAe,EAAE;AAC1C,oBAAA,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;gBACrC;YACF;QACF;IACF;AAEA,IAAA,OAAO,eAAe;AACxB;AAEA;;;AAGG;AACG,SAAU,0BAA0B,CAACJ,UAAuB,EAAA;IAChE,MAAM,WAAW,GAAGA,UAAQ,CAACA,UAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,IAAA,IAAI,EAAE,WAAW,YAAYC,oBAAW,CAAC;AAAE,QAAA,OAAO,KAAK;;AAGvD,IAAA,MAAM,mBAAmB,GAAGC,kBAAa,CACvCF,UAAQ,EACR,CAAC,GAAG,KACF,CAAC,GAAG,YAAYG,uBAAc;QAC5B,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,WAAW,CAAC,YAAY,CAAC;AAClE,QAAA,KAAK,CACR;IAED,IAAI,mBAAmB,KAAK,EAAE;AAAE,QAAA,OAAO,KAAK;AAE5C,IAAA,MAAM,SAAS,GAAGH,UAAQ,CAAC,mBAAmB,CAAmB;IACjE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;;AAG3E,IAAA,KAAK,IAAI,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE,CAAC,GAAGA,UAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9D,QAAA,MAAM,GAAG,GAAGA,UAAQ,CAAC,CAAC,CAAC;QACvB,IACE,GAAG,YAAYC,oBAAW;AAC1B,YAAA,GAAG,CAAC,IAAI,KAAKG,eAAS,CAAC,WAAW;YAClC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,EACjC;AACA,YAAA,OAAO,IAAI;QACb;IACF;AAEA,IAAA,OAAO,KAAK;AACd;;;;;"}
1
+ {"version":3,"file":"tools.cjs","sources":["../../../src/messages/tools.ts"],"sourcesContent":["// src/messages/toolDiscovery.ts\nimport { AIMessageChunk, ToolMessage } from '@langchain/core/messages';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport { findLastIndex } from './core';\nimport { Constants } from '@/common';\n\ntype ToolSearchArtifact = {\n tool_references?: Array<{ tool_name: string }>;\n};\n\n/**\n * Extracts discovered tool names from tool search results in the current turn.\n * Only processes tool search messages after the latest AI message with tool calls.\n *\n * Similar pattern to formatArtifactPayload - finds relevant messages efficiently\n * by identifying the latest AI parent and only processing subsequent tool messages.\n *\n * @param messages - All messages in the conversation\n * @returns Array of discovered tool names (empty if no new discoveries)\n */\nexport function extractToolDiscoveries(messages: BaseMessage[]): string[] {\n const lastMessage = messages[messages.length - 1];\n if (!(lastMessage instanceof ToolMessage)) return [];\n\n // Find the latest AIMessage with tool_calls that this tool message belongs to\n const latestAIParentIndex = findLastIndex(\n messages,\n (msg) =>\n (msg instanceof AIMessageChunk &&\n (msg.tool_calls?.length ?? 0) > 0 &&\n msg.tool_calls?.some((tc) => tc.id === lastMessage.tool_call_id)) ??\n false\n );\n\n if (latestAIParentIndex === -1) return [];\n\n // Collect tool_call_ids from the AI message\n const aiMessage = messages[latestAIParentIndex] as AIMessageChunk;\n const toolCallIds = new Set(aiMessage.tool_calls?.map((tc) => tc.id) ?? []);\n\n // Only process tool search results after the AI message that belong to this turn\n const discoveredNames: string[] = [];\n for (let i = latestAIParentIndex + 1; i < messages.length; i++) {\n const msg = messages[i];\n if (!(msg instanceof ToolMessage)) continue;\n if (msg.name !== Constants.TOOL_SEARCH) continue;\n if (!toolCallIds.has(msg.tool_call_id)) continue;\n\n // This is a tool search result from the current turn\n if (typeof msg.artifact === 'object' && msg.artifact != null) {\n const artifact = msg.artifact as ToolSearchArtifact;\n if (artifact.tool_references && artifact.tool_references.length > 0) {\n for (const ref of artifact.tool_references) {\n discoveredNames.push(ref.tool_name);\n }\n }\n }\n }\n\n return discoveredNames;\n}\n\n/**\n * Checks if the current turn has any tool search results.\n * Quick check to avoid full extraction when not needed.\n */\nexport function hasToolSearchInCurrentTurn(messages: BaseMessage[]): boolean {\n const lastMessage = messages[messages.length - 1];\n if (!(lastMessage instanceof ToolMessage)) return false;\n\n // Find the latest AIMessage with tool_calls\n const latestAIParentIndex = findLastIndex(\n messages,\n (msg) =>\n (msg instanceof AIMessageChunk &&\n (msg.tool_calls?.length ?? 0) > 0 &&\n msg.tool_calls?.some((tc) => tc.id === lastMessage.tool_call_id)) ??\n false\n );\n\n if (latestAIParentIndex === -1) return false;\n\n const aiMessage = messages[latestAIParentIndex] as AIMessageChunk;\n const toolCallIds = new Set(aiMessage.tool_calls?.map((tc) => tc.id) ?? []);\n\n // Check if any tool search results exist after the AI message\n for (let i = latestAIParentIndex + 1; i < messages.length; i++) {\n const msg = messages[i];\n if (\n msg instanceof ToolMessage &&\n msg.name === Constants.TOOL_SEARCH &&\n toolCallIds.has(msg.tool_call_id)\n ) {\n return true;\n }\n }\n\n return false;\n}\n"],"names":["messages","ToolMessage","findLastIndex","AIMessageChunk","Constants"],"mappings":";;;;;;AAAA;AAUA;;;;;;;;;AASG;AACG,SAAU,sBAAsB,CAACA,UAAuB,EAAA;IAC5D,MAAM,WAAW,GAAGA,UAAQ,CAACA,UAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,IAAA,IAAI,EAAE,WAAW,YAAYC,oBAAW,CAAC;AAAE,QAAA,OAAO,EAAE;;AAGpD,IAAA,MAAM,mBAAmB,GAAGC,kBAAa,CACvCF,UAAQ,EACR,CAAC,GAAG,KACF,CAAC,GAAG,YAAYG,uBAAc;QAC5B,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,WAAW,CAAC,YAAY,CAAC;AAClE,QAAA,KAAK,CACR;IAED,IAAI,mBAAmB,KAAK,EAAE;AAAE,QAAA,OAAO,EAAE;;AAGzC,IAAA,MAAM,SAAS,GAAGH,UAAQ,CAAC,mBAAmB,CAAmB;IACjE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;;IAG3E,MAAM,eAAe,GAAa,EAAE;AACpC,IAAA,KAAK,IAAI,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE,CAAC,GAAGA,UAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9D,QAAA,MAAM,GAAG,GAAGA,UAAQ,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,EAAE,GAAG,YAAYC,oBAAW,CAAC;YAAE;AACnC,QAAA,IAAI,GAAG,CAAC,IAAI,KAAKG,eAAS,CAAC,WAAW;YAAE;QACxC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE;;AAGxC,QAAA,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,IAAI,EAAE;AAC5D,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAA8B;AACnD,YAAA,IAAI,QAAQ,CAAC,eAAe,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AACnE,gBAAA,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,eAAe,EAAE;AAC1C,oBAAA,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;gBACrC;YACF;QACF;IACF;AAEA,IAAA,OAAO,eAAe;AACxB;AAEA;;;AAGG;AACG,SAAU,0BAA0B,CAACJ,UAAuB,EAAA;IAChE,MAAM,WAAW,GAAGA,UAAQ,CAACA,UAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,IAAA,IAAI,EAAE,WAAW,YAAYC,oBAAW,CAAC;AAAE,QAAA,OAAO,KAAK;;AAGvD,IAAA,MAAM,mBAAmB,GAAGC,kBAAa,CACvCF,UAAQ,EACR,CAAC,GAAG,KACF,CAAC,GAAG,YAAYG,uBAAc;QAC5B,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,WAAW,CAAC,YAAY,CAAC;AAClE,QAAA,KAAK,CACR;IAED,IAAI,mBAAmB,KAAK,EAAE;AAAE,QAAA,OAAO,KAAK;AAE5C,IAAA,MAAM,SAAS,GAAGH,UAAQ,CAAC,mBAAmB,CAAmB;IACjE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;;AAG3E,IAAA,KAAK,IAAI,CAAC,GAAG,mBAAmB,GAAG,CAAC,EAAE,CAAC,GAAGA,UAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9D,QAAA,MAAM,GAAG,GAAGA,UAAQ,CAAC,CAAC,CAAC;QACvB,IACE,GAAG,YAAYC,oBAAW;AAC1B,YAAA,GAAG,CAAC,IAAI,KAAKG,eAAS,CAAC,WAAW;YAClC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,EACjC;AACA,YAAA,OAAO,IAAI;QACb;IACF;AAEA,IAAA,OAAO,KAAK;AACd;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/openai/index.ts"],"sourcesContent":["import { GraphEvents } from '@/common';\nimport type { UsageMetadata } from '@langchain/core/messages';\nimport type * as t from '@/types';\n\nexport interface OpenAICompatibleWriter {\n write(data: string): void | Promise<void>;\n}\n\nexport interface OpenAIResponseContext {\n requestId: string;\n model: string;\n created: number;\n}\n\nexport interface OpenAICompletionUsage {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n completion_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\n\nexport interface OpenAIToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\nexport interface OpenAIChatCompletionChunkChoice {\n index: number;\n delta: {\n role?: 'assistant';\n content?: string | null;\n reasoning?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: 'function';\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n };\n finish_reason: 'stop' | 'length' | 'tool_calls' | 'content_filter' | null;\n}\n\nexport interface OpenAIChatCompletionChunk {\n id: string;\n object: 'chat.completion.chunk';\n created: number;\n model: string;\n choices: OpenAIChatCompletionChunkChoice[];\n usage?: OpenAICompletionUsage;\n}\n\nexport interface OpenAIStreamTracker {\n hasRole: boolean;\n hasText: boolean;\n hasReasoning: boolean;\n lastChunkKind?: 'text' | 'reasoning' | 'tool_call';\n toolCalls: Map<number, OpenAIToolCall>;\n toolCallsByStep?: Map<string, Map<number, OpenAIToolCall>>;\n usage: {\n promptTokens: number;\n completionTokens: number;\n reasoningTokens: number;\n };\n}\n\nexport interface OpenAIHandlerConfig {\n writer: OpenAICompatibleWriter;\n context: OpenAIResponseContext;\n tracker: OpenAIStreamTracker;\n}\n\ninterface OpenAIToolCallFragment {\n index?: number;\n id?: string;\n name?: string;\n args?: string | object;\n function?: {\n name?: string;\n arguments?: string | object;\n };\n}\n\nexport function createOpenAIStreamTracker(): OpenAIStreamTracker {\n return {\n hasRole: false,\n hasText: false,\n hasReasoning: false,\n toolCalls: new Map(),\n toolCallsByStep: new Map(),\n usage: {\n promptTokens: 0,\n completionTokens: 0,\n reasoningTokens: 0,\n },\n };\n}\n\nfunction getTokenCount(value: number | null | undefined): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\nfunction getReasoningTokenCount(usage: Partial<UsageMetadata>): number {\n return getTokenCount(usage.output_token_details?.reasoning);\n}\n\nfunction getToolCallIndex(\n toolCall: OpenAIToolCallFragment,\n fallbackIndex: number\n): number {\n return typeof toolCall.index === 'number' ? toolCall.index : fallbackIndex;\n}\n\nfunction getToolCallName(toolCall: OpenAIToolCallFragment): string {\n return toolCall.name ?? toolCall.function?.name ?? '';\n}\n\nfunction getToolCallArguments(toolCall: OpenAIToolCallFragment): string {\n const args = toolCall.args ?? toolCall.function?.arguments;\n if (args == null) {\n return '';\n }\n if (typeof args === 'string') {\n return args;\n }\n return JSON.stringify(args);\n}\n\nfunction getStepToolCalls(\n tracker: OpenAIStreamTracker,\n stepId: string\n): Map<number, OpenAIToolCall> {\n const toolCallsByStep = tracker.toolCallsByStep ?? new Map();\n tracker.toolCallsByStep = toolCallsByStep;\n const existing = toolCallsByStep.get(stepId);\n if (existing != null) {\n return existing;\n }\n const stepToolCalls = new Map<number, OpenAIToolCall>();\n toolCallsByStep.set(stepId, stepToolCalls);\n return stepToolCalls;\n}\n\nexport function createChatCompletionChunk(\n context: OpenAIResponseContext,\n delta: OpenAIChatCompletionChunkChoice['delta'],\n finishReason: OpenAIChatCompletionChunkChoice['finish_reason'] = null,\n usage?: OpenAICompletionUsage\n): OpenAIChatCompletionChunk {\n return {\n id: context.requestId,\n object: 'chat.completion.chunk',\n created: context.created,\n model: context.model,\n choices: [{ index: 0, delta, finish_reason: finishReason }],\n ...(usage ? { usage } : {}),\n };\n}\n\nexport function createChatCompletionUsageChunk(\n context: OpenAIResponseContext,\n usage: OpenAICompletionUsage\n): OpenAIChatCompletionChunk {\n return {\n id: context.requestId,\n object: 'chat.completion.chunk',\n created: context.created,\n model: context.model,\n choices: [],\n usage,\n };\n}\n\nexport async function writeOpenAISSE(\n writer: OpenAICompatibleWriter,\n data: OpenAIChatCompletionChunk | '[DONE]'\n): Promise<void> {\n await writer.write(\n `data: ${data === '[DONE]' ? data : JSON.stringify(data)}\\n\\n`\n );\n}\n\nfunction getTextParts(\n data: t.MessageDeltaEvent | t.ReasoningDeltaEvent\n): string[] {\n const parts = data.delta.content ?? [];\n const text: string[] = [];\n for (const part of parts) {\n if ('text' in part && typeof part.text === 'string') {\n text.push(part.text);\n continue;\n }\n if ('think' in part && typeof part.think === 'string') {\n text.push(part.think);\n }\n }\n return text;\n}\n\nasync function emitAssistantRoleChunk(\n config: OpenAIHandlerConfig\n): Promise<void> {\n if (config.tracker.hasRole) {\n return;\n }\n config.tracker.hasRole = true;\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, { role: 'assistant' })\n );\n}\n\nasync function emitToolCallChunk(params: {\n config: OpenAIHandlerConfig;\n stepId: string;\n toolCall: OpenAIToolCallFragment;\n fallbackIndex: number;\n completed: boolean;\n}): Promise<void> {\n const { config, stepId, toolCall, fallbackIndex, completed } = params;\n const index = getToolCallIndex(toolCall, fallbackIndex);\n const stepToolCalls = getStepToolCalls(config.tracker, stepId);\n const existing = stepToolCalls.get(index);\n const current = existing ?? {\n id: toolCall.id ?? '',\n type: 'function' as const,\n function: { name: '', arguments: '' },\n };\n const name = getToolCallName(toolCall);\n const args = getToolCallArguments(toolCall);\n const idChanged =\n toolCall.id != null && toolCall.id !== '' && current.id !== toolCall.id;\n const nameChanged = name !== '' && current.function.name !== name;\n let argumentDelta = '';\n if (completed) {\n if (args !== '' && args !== current.function.arguments) {\n argumentDelta = args.startsWith(current.function.arguments)\n ? args.slice(current.function.arguments.length)\n : args;\n current.function.arguments = args;\n }\n } else if (args !== '') {\n argumentDelta = args;\n current.function.arguments += args;\n }\n if (toolCall.id != null && toolCall.id !== '') {\n current.id = toolCall.id;\n }\n if (name !== '') {\n current.function.name = name;\n }\n stepToolCalls.set(index, current);\n config.tracker.toolCalls.set(index, current);\n if (!idChanged && !nameChanged && argumentDelta === '' && existing) {\n return;\n }\n config.tracker.lastChunkKind = 'tool_call';\n const functionDelta: { name?: string; arguments?: string } = {};\n if (nameChanged || (!existing && current.function.name !== '')) {\n functionDelta.name = current.function.name;\n }\n if (argumentDelta !== '') {\n functionDelta.arguments = argumentDelta;\n }\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, {\n tool_calls: [\n {\n index,\n ...(current.id !== '' ? { id: current.id } : {}),\n type: 'function',\n ...(functionDelta.name != null || functionDelta.arguments != null\n ? { function: functionDelta }\n : {}),\n },\n ],\n })\n );\n}\n\nexport function createOpenAIHandlers(\n config: OpenAIHandlerConfig\n): Record<string, t.EventHandler> {\n return {\n [GraphEvents.ON_MESSAGE_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n for (const text of getTextParts(data as t.MessageDeltaEvent)) {\n config.tracker.hasText = true;\n config.tracker.lastChunkKind = 'text';\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, { content: text })\n );\n }\n },\n },\n [GraphEvents.ON_REASONING_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n for (const text of getTextParts(data as t.ReasoningDeltaEvent)) {\n config.tracker.hasReasoning = true;\n config.tracker.lastChunkKind = 'reasoning';\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, { reasoning: text })\n );\n }\n },\n },\n [GraphEvents.ON_RUN_STEP_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const runStepDelta = data as t.RunStepDeltaEvent;\n const delta = runStepDelta.delta;\n if (delta.type !== 'tool_calls') {\n return;\n }\n const toolCalls = delta.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n await emitToolCallChunk({\n config,\n stepId: runStepDelta.id,\n toolCall: toolCalls[index],\n fallbackIndex: index,\n completed: false,\n });\n }\n },\n },\n [GraphEvents.ON_RUN_STEP]: {\n handle: async (_event, data): Promise<void> => {\n const runStep = data as t.RunStep;\n if (runStep.stepDetails.type !== 'tool_calls') {\n return;\n }\n const toolCalls = runStep.stepDetails.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n await emitToolCallChunk({\n config,\n stepId: runStep.id,\n toolCall: toolCalls[index],\n fallbackIndex: index,\n completed: true,\n });\n }\n },\n },\n [GraphEvents.CHAT_MODEL_END]: {\n handle: (_event, data): void => {\n const usage = (data as t.ModelEndData)?.output?.usage_metadata as\n | Partial<UsageMetadata>\n | undefined;\n if (!usage) {\n return;\n }\n config.tracker.usage.promptTokens += getTokenCount(usage.input_tokens);\n config.tracker.usage.completionTokens += getTokenCount(\n usage.output_tokens\n );\n config.tracker.usage.reasoningTokens += getReasoningTokenCount(usage);\n },\n },\n };\n}\n\nexport async function sendOpenAIFinalChunk(\n config: OpenAIHandlerConfig,\n finishReason?: OpenAIChatCompletionChunkChoice['finish_reason']\n): Promise<void> {\n const resolvedFinishReason =\n finishReason ??\n (config.tracker.lastChunkKind === 'tool_call' ? 'tool_calls' : 'stop');\n const usage: OpenAICompletionUsage = {\n prompt_tokens: config.tracker.usage.promptTokens,\n completion_tokens: config.tracker.usage.completionTokens,\n total_tokens:\n config.tracker.usage.promptTokens + config.tracker.usage.completionTokens,\n };\n if (config.tracker.usage.reasoningTokens > 0) {\n usage.completion_tokens_details = {\n reasoning_tokens: config.tracker.usage.reasoningTokens,\n };\n }\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, {}, resolvedFinishReason)\n );\n await writeOpenAISSE(\n config.writer,\n createChatCompletionUsageChunk(config.context, usage)\n );\n await writeOpenAISSE(config.writer, '[DONE]');\n}\n"],"names":["GraphEvents"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/openai/index.ts"],"sourcesContent":["import type { UsageMetadata } from '@langchain/core/messages';\nimport type * as t from '@/types';\nimport { GraphEvents } from '@/common';\n\nexport interface OpenAICompatibleWriter {\n write(data: string): void | Promise<void>;\n}\n\nexport interface OpenAIResponseContext {\n requestId: string;\n model: string;\n created: number;\n}\n\nexport interface OpenAICompletionUsage {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n completion_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\n\nexport interface OpenAIToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\nexport interface OpenAIChatCompletionChunkChoice {\n index: number;\n delta: {\n role?: 'assistant';\n content?: string | null;\n reasoning?: string | null;\n tool_calls?: Array<{\n index: number;\n id?: string;\n type?: 'function';\n function?: {\n name?: string;\n arguments?: string;\n };\n }>;\n };\n finish_reason: 'stop' | 'length' | 'tool_calls' | 'content_filter' | null;\n}\n\nexport interface OpenAIChatCompletionChunk {\n id: string;\n object: 'chat.completion.chunk';\n created: number;\n model: string;\n choices: OpenAIChatCompletionChunkChoice[];\n usage?: OpenAICompletionUsage;\n}\n\nexport interface OpenAIStreamTracker {\n hasRole: boolean;\n hasText: boolean;\n hasReasoning: boolean;\n lastChunkKind?: 'text' | 'reasoning' | 'tool_call';\n toolCalls: Map<number, OpenAIToolCall>;\n toolCallsByStep?: Map<string, Map<number, OpenAIToolCall>>;\n usage: {\n promptTokens: number;\n completionTokens: number;\n reasoningTokens: number;\n };\n}\n\nexport interface OpenAIHandlerConfig {\n writer: OpenAICompatibleWriter;\n context: OpenAIResponseContext;\n tracker: OpenAIStreamTracker;\n}\n\ninterface OpenAIToolCallFragment {\n index?: number;\n id?: string;\n name?: string;\n args?: string | object;\n function?: {\n name?: string;\n arguments?: string | object;\n };\n}\n\nexport function createOpenAIStreamTracker(): OpenAIStreamTracker {\n return {\n hasRole: false,\n hasText: false,\n hasReasoning: false,\n toolCalls: new Map(),\n toolCallsByStep: new Map(),\n usage: {\n promptTokens: 0,\n completionTokens: 0,\n reasoningTokens: 0,\n },\n };\n}\n\nfunction getTokenCount(value: number | null | undefined): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\nfunction getReasoningTokenCount(usage: Partial<UsageMetadata>): number {\n return getTokenCount(usage.output_token_details?.reasoning);\n}\n\nfunction getToolCallIndex(\n toolCall: OpenAIToolCallFragment,\n fallbackIndex: number\n): number {\n return typeof toolCall.index === 'number' ? toolCall.index : fallbackIndex;\n}\n\nfunction getToolCallName(toolCall: OpenAIToolCallFragment): string {\n return toolCall.name ?? toolCall.function?.name ?? '';\n}\n\nfunction getToolCallArguments(toolCall: OpenAIToolCallFragment): string {\n const args = toolCall.args ?? toolCall.function?.arguments;\n if (args == null) {\n return '';\n }\n if (typeof args === 'string') {\n return args;\n }\n return JSON.stringify(args);\n}\n\nfunction getStepToolCalls(\n tracker: OpenAIStreamTracker,\n stepId: string\n): Map<number, OpenAIToolCall> {\n const toolCallsByStep = tracker.toolCallsByStep ?? new Map();\n tracker.toolCallsByStep = toolCallsByStep;\n const existing = toolCallsByStep.get(stepId);\n if (existing != null) {\n return existing;\n }\n const stepToolCalls = new Map<number, OpenAIToolCall>();\n toolCallsByStep.set(stepId, stepToolCalls);\n return stepToolCalls;\n}\n\nexport function createChatCompletionChunk(\n context: OpenAIResponseContext,\n delta: OpenAIChatCompletionChunkChoice['delta'],\n finishReason: OpenAIChatCompletionChunkChoice['finish_reason'] = null,\n usage?: OpenAICompletionUsage\n): OpenAIChatCompletionChunk {\n return {\n id: context.requestId,\n object: 'chat.completion.chunk',\n created: context.created,\n model: context.model,\n choices: [{ index: 0, delta, finish_reason: finishReason }],\n ...(usage ? { usage } : {}),\n };\n}\n\nexport function createChatCompletionUsageChunk(\n context: OpenAIResponseContext,\n usage: OpenAICompletionUsage\n): OpenAIChatCompletionChunk {\n return {\n id: context.requestId,\n object: 'chat.completion.chunk',\n created: context.created,\n model: context.model,\n choices: [],\n usage,\n };\n}\n\nexport async function writeOpenAISSE(\n writer: OpenAICompatibleWriter,\n data: OpenAIChatCompletionChunk | '[DONE]'\n): Promise<void> {\n await writer.write(\n `data: ${data === '[DONE]' ? data : JSON.stringify(data)}\\n\\n`\n );\n}\n\nfunction getTextParts(\n data: t.MessageDeltaEvent | t.ReasoningDeltaEvent\n): string[] {\n const parts = data.delta.content ?? [];\n const text: string[] = [];\n for (const part of parts) {\n if ('text' in part && typeof part.text === 'string') {\n text.push(part.text);\n continue;\n }\n if ('think' in part && typeof part.think === 'string') {\n text.push(part.think);\n }\n }\n return text;\n}\n\nasync function emitAssistantRoleChunk(\n config: OpenAIHandlerConfig\n): Promise<void> {\n if (config.tracker.hasRole) {\n return;\n }\n config.tracker.hasRole = true;\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, { role: 'assistant' })\n );\n}\n\nasync function emitToolCallChunk(params: {\n config: OpenAIHandlerConfig;\n stepId: string;\n toolCall: OpenAIToolCallFragment;\n fallbackIndex: number;\n completed: boolean;\n}): Promise<void> {\n const { config, stepId, toolCall, fallbackIndex, completed } = params;\n const index = getToolCallIndex(toolCall, fallbackIndex);\n const stepToolCalls = getStepToolCalls(config.tracker, stepId);\n const existing = stepToolCalls.get(index);\n const current = existing ?? {\n id: toolCall.id ?? '',\n type: 'function' as const,\n function: { name: '', arguments: '' },\n };\n const name = getToolCallName(toolCall);\n const args = getToolCallArguments(toolCall);\n const idChanged =\n toolCall.id != null && toolCall.id !== '' && current.id !== toolCall.id;\n const nameChanged = name !== '' && current.function.name !== name;\n let argumentDelta = '';\n if (completed) {\n if (args !== '' && args !== current.function.arguments) {\n argumentDelta = args.startsWith(current.function.arguments)\n ? args.slice(current.function.arguments.length)\n : args;\n current.function.arguments = args;\n }\n } else if (args !== '') {\n argumentDelta = args;\n current.function.arguments += args;\n }\n if (toolCall.id != null && toolCall.id !== '') {\n current.id = toolCall.id;\n }\n if (name !== '') {\n current.function.name = name;\n }\n stepToolCalls.set(index, current);\n config.tracker.toolCalls.set(index, current);\n if (!idChanged && !nameChanged && argumentDelta === '' && existing) {\n return;\n }\n config.tracker.lastChunkKind = 'tool_call';\n const functionDelta: { name?: string; arguments?: string } = {};\n if (nameChanged || (!existing && current.function.name !== '')) {\n functionDelta.name = current.function.name;\n }\n if (argumentDelta !== '') {\n functionDelta.arguments = argumentDelta;\n }\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, {\n tool_calls: [\n {\n index,\n ...(current.id !== '' ? { id: current.id } : {}),\n type: 'function',\n ...(functionDelta.name != null || functionDelta.arguments != null\n ? { function: functionDelta }\n : {}),\n },\n ],\n })\n );\n}\n\nexport function createOpenAIHandlers(\n config: OpenAIHandlerConfig\n): Record<string, t.EventHandler> {\n return {\n [GraphEvents.ON_MESSAGE_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n for (const text of getTextParts(data as t.MessageDeltaEvent)) {\n config.tracker.hasText = true;\n config.tracker.lastChunkKind = 'text';\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, { content: text })\n );\n }\n },\n },\n [GraphEvents.ON_REASONING_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n for (const text of getTextParts(data as t.ReasoningDeltaEvent)) {\n config.tracker.hasReasoning = true;\n config.tracker.lastChunkKind = 'reasoning';\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, { reasoning: text })\n );\n }\n },\n },\n [GraphEvents.ON_RUN_STEP_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const runStepDelta = data as t.RunStepDeltaEvent;\n const delta = runStepDelta.delta;\n if (delta.type !== 'tool_calls') {\n return;\n }\n const toolCalls = delta.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n await emitToolCallChunk({\n config,\n stepId: runStepDelta.id,\n toolCall: toolCalls[index],\n fallbackIndex: index,\n completed: false,\n });\n }\n },\n },\n [GraphEvents.ON_RUN_STEP]: {\n handle: async (_event, data): Promise<void> => {\n const runStep = data as t.RunStep;\n if (runStep.stepDetails.type !== 'tool_calls') {\n return;\n }\n const toolCalls = runStep.stepDetails.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n await emitToolCallChunk({\n config,\n stepId: runStep.id,\n toolCall: toolCalls[index],\n fallbackIndex: index,\n completed: true,\n });\n }\n },\n },\n [GraphEvents.CHAT_MODEL_END]: {\n handle: (_event, data): void => {\n const usage = (data as t.ModelEndData)?.output?.usage_metadata as\n | Partial<UsageMetadata>\n | undefined;\n if (!usage) {\n return;\n }\n config.tracker.usage.promptTokens += getTokenCount(usage.input_tokens);\n config.tracker.usage.completionTokens += getTokenCount(\n usage.output_tokens\n );\n config.tracker.usage.reasoningTokens += getReasoningTokenCount(usage);\n },\n },\n };\n}\n\nexport async function sendOpenAIFinalChunk(\n config: OpenAIHandlerConfig,\n finishReason?: OpenAIChatCompletionChunkChoice['finish_reason']\n): Promise<void> {\n const resolvedFinishReason =\n finishReason ??\n (config.tracker.lastChunkKind === 'tool_call' ? 'tool_calls' : 'stop');\n const usage: OpenAICompletionUsage = {\n prompt_tokens: config.tracker.usage.promptTokens,\n completion_tokens: config.tracker.usage.completionTokens,\n total_tokens:\n config.tracker.usage.promptTokens + config.tracker.usage.completionTokens,\n };\n if (config.tracker.usage.reasoningTokens > 0) {\n usage.completion_tokens_details = {\n reasoning_tokens: config.tracker.usage.reasoningTokens,\n };\n }\n await emitAssistantRoleChunk(config);\n await writeOpenAISSE(\n config.writer,\n createChatCompletionChunk(config.context, {}, resolvedFinishReason)\n );\n await writeOpenAISSE(\n config.writer,\n createChatCompletionUsageChunk(config.context, usage)\n );\n await writeOpenAISSE(config.writer, '[DONE]');\n}\n"],"names":["GraphEvents"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/responses/index.ts"],"sourcesContent":["import { GraphEvents } from '@/common';\nimport type { UsageMetadata } from '@langchain/core/messages';\nimport type * as t from '@/types';\n\nexport interface ResponsesCompatibleWriter {\n write(data: string): void | Promise<void>;\n}\n\nexport type ResponseStatus =\n | 'in_progress'\n | 'completed'\n | 'failed'\n | 'incomplete';\nexport type ItemStatus = 'in_progress' | 'incomplete' | 'completed';\n\nexport interface ResponseContext {\n responseId: string;\n model: string;\n createdAt: number;\n previousResponseId?: string;\n instructions?: string;\n}\n\nexport interface ResponseOutputTextContent {\n type: 'output_text';\n text: string;\n annotations: [];\n logprobs: [];\n}\n\nexport interface ResponseMessageItem {\n type: 'message';\n id: string;\n role: 'assistant';\n status: ItemStatus;\n content: ResponseOutputTextContent[];\n}\n\nexport interface ResponseFunctionCallItem {\n type: 'function_call';\n id: string;\n call_id: string;\n name: string;\n arguments: string;\n status: ItemStatus;\n}\n\nexport interface ResponseReasoningItem {\n type: 'reasoning';\n id: string;\n status: ItemStatus;\n content: Array<{ type: 'reasoning_text'; text: string }>;\n summary: [];\n}\n\nexport type ResponseOutputItem =\n | ResponseMessageItem\n | ResponseFunctionCallItem\n | ResponseReasoningItem;\n\nexport interface ResponseObject {\n id: string;\n object: 'response';\n created_at: number;\n completed_at: number | null;\n status: ResponseStatus;\n model: string;\n previous_response_id: string | null;\n instructions: string | null;\n output: ResponseOutputItem[];\n error: { type: string; message: string; code?: string } | null;\n usage: {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n } | null;\n}\n\nexport interface ResponseEvent {\n type: string;\n sequence_number: number;\n [key: string]: unknown;\n}\n\nexport interface ResponseTracker {\n sequenceNumber: number;\n items: ResponseOutputItem[];\n message: ResponseMessageItem | undefined;\n reasoning: ResponseReasoningItem | undefined;\n functionCalls: Map<string, ResponseFunctionCallItem>;\n functionCallsByStep: Map<string, Array<ResponseFunctionCallItem | undefined>>;\n responseCreated: boolean;\n usage: {\n inputTokens: number;\n outputTokens: number;\n };\n nextSequence(): number;\n}\n\nexport interface ResponsesHandlerConfig {\n writer: ResponsesCompatibleWriter;\n context: ResponseContext;\n tracker: ResponseTracker;\n}\n\nlet responseItemId = 0;\n\nfunction createItemId(prefix: string): string {\n return `${prefix}_${Date.now().toString(36)}${(responseItemId++).toString(36)}`;\n}\n\nexport function createResponseTracker(): ResponseTracker {\n const tracker: ResponseTracker = {\n sequenceNumber: 0,\n items: [],\n message: undefined,\n reasoning: undefined,\n functionCalls: new Map(),\n functionCallsByStep: new Map(),\n responseCreated: false,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n nextSequence: () => tracker.sequenceNumber++,\n };\n return tracker;\n}\n\nfunction getTokenCount(value: number | null | undefined): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\ninterface ResponseToolCallFragment {\n index?: number;\n id?: string;\n name?: string;\n args?: string | object;\n function?: {\n name?: string;\n arguments?: string | object;\n };\n}\n\nfunction getToolCallIndex(\n toolCall: ResponseToolCallFragment,\n fallbackIndex: number\n): number {\n return typeof toolCall.index === 'number' ? toolCall.index : fallbackIndex;\n}\n\nfunction getToolCallPositionKey(\n stepId: string,\n toolCall: ResponseToolCallFragment,\n fallbackIndex: number\n): string {\n const index = getToolCallIndex(toolCall, fallbackIndex);\n if (stepId !== '') {\n return `${stepId}:${index}`;\n }\n return `tool:${index}`;\n}\n\nfunction getToolCallIdKey(\n toolCall: ResponseToolCallFragment\n): string | undefined {\n return toolCall.id != null && toolCall.id !== '' ? toolCall.id : undefined;\n}\n\nfunction getExistingFunctionCall(\n config: ResponsesHandlerConfig,\n idKey: string | undefined,\n positionKey: string | undefined,\n stepId: string,\n toolCall: ResponseToolCallFragment\n): ResponseFunctionCallItem | undefined {\n const keyed =\n idKey == null\n ? undefined\n : (config.tracker.functionCalls.get(idKey) ??\n (positionKey == null\n ? undefined\n : config.tracker.functionCalls.get(positionKey)));\n if (keyed != null) {\n return keyed;\n }\n const positioned =\n positionKey == null\n ? undefined\n : config.tracker.functionCalls.get(positionKey);\n if (positioned != null) {\n return positioned;\n }\n if (stepId === '') {\n return undefined;\n }\n return findFunctionCallByStep(config, stepId, toolCall);\n}\n\nfunction findFunctionCallByStep(\n config: ResponsesHandlerConfig,\n stepId: string,\n toolCall: ResponseToolCallFragment\n): ResponseFunctionCallItem | undefined {\n const items = config.tracker.functionCallsByStep.get(stepId);\n if (items == null) {\n return undefined;\n }\n const index = typeof toolCall.index === 'number' ? toolCall.index : undefined;\n if (index != null) {\n return items[index];\n }\n const name = getToolCallName(toolCall);\n let fallback: ResponseFunctionCallItem | undefined;\n for (const item of items) {\n if (item == null || item.status === 'completed') {\n continue;\n }\n if (name !== '' && item.name !== name) {\n continue;\n }\n if (fallback != null) {\n return undefined;\n }\n fallback = item;\n }\n return fallback;\n}\n\nfunction trackFunctionCallKeys(\n config: ResponsesHandlerConfig,\n item: ResponseFunctionCallItem,\n idKey: string | undefined,\n positionKey: string\n): void {\n config.tracker.functionCalls.set(positionKey, item);\n if (idKey != null) {\n config.tracker.functionCalls.set(idKey, item);\n }\n}\n\nfunction trackFunctionCallStep(\n config: ResponsesHandlerConfig,\n stepId: string,\n item: ResponseFunctionCallItem,\n fallbackIndex: number\n): void {\n if (stepId === '') {\n return;\n }\n const items = config.tracker.functionCallsByStep.get(stepId) ?? [];\n items[fallbackIndex] = item;\n config.tracker.functionCallsByStep.set(stepId, items);\n}\n\nfunction getToolCallName(toolCall: ResponseToolCallFragment): string {\n return toolCall.name ?? toolCall.function?.name ?? '';\n}\n\nfunction getToolCallArguments(toolCall: ResponseToolCallFragment): string {\n const args = toolCall.args ?? toolCall.function?.arguments;\n if (args == null) {\n return '';\n }\n if (typeof args === 'string') {\n return args;\n }\n return JSON.stringify(args);\n}\n\nasync function ensureFunctionCall(\n config: ResponsesHandlerConfig,\n stepId: string,\n toolCall: ResponseToolCallFragment,\n fallbackIndex: number\n): Promise<ResponseFunctionCallItem> {\n await ensureResponseCreated(config);\n const positionKey = getToolCallPositionKey(stepId, toolCall, fallbackIndex);\n const idKey = getToolCallIdKey(toolCall);\n const existing = getExistingFunctionCall(\n config,\n idKey,\n positionKey,\n stepId,\n toolCall\n );\n const toolCallIndex = getToolCallIndex(toolCall, fallbackIndex);\n const name = getToolCallName(toolCall);\n if (existing) {\n trackFunctionCallKeys(config, existing, idKey, positionKey);\n trackFunctionCallStep(config, stepId, existing, toolCallIndex);\n if (idKey != null) {\n existing.call_id = idKey;\n }\n if (name !== '') {\n existing.name = name;\n }\n return existing;\n }\n const item: ResponseFunctionCallItem = {\n type: 'function_call',\n id: createItemId('fc'),\n call_id: idKey ?? positionKey,\n name,\n arguments: '',\n status: 'in_progress',\n };\n trackFunctionCallKeys(config, item, idKey, positionKey);\n trackFunctionCallStep(config, stepId, item, toolCallIndex);\n config.tracker.items.push(item);\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.added',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.length - 1,\n item,\n });\n return item;\n}\n\nasync function emitFunctionCallArgumentsDelta(params: {\n config: ResponsesHandlerConfig;\n item: ResponseFunctionCallItem;\n delta: string;\n}): Promise<void> {\n if (params.delta === '') {\n return;\n }\n params.item.arguments += params.delta;\n await writeResponseEvent(params.config.writer, {\n type: 'response.function_call_arguments.delta',\n sequence_number: params.config.tracker.nextSequence(),\n item_id: params.item.id,\n output_index: params.config.tracker.items.indexOf(params.item),\n call_id: params.item.call_id,\n delta: params.delta,\n });\n}\n\nasync function emitFunctionCallArgumentsDone(\n config: ResponsesHandlerConfig,\n item: ResponseFunctionCallItem\n): Promise<void> {\n await writeResponseEvent(config.writer, {\n type: 'response.function_call_arguments.done',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: config.tracker.items.indexOf(item),\n call_id: item.call_id,\n name: item.name,\n arguments: item.arguments,\n });\n}\n\nasync function completeFunctionCall(\n config: ResponsesHandlerConfig,\n stepId: string,\n toolCall: ResponseToolCallFragment\n): Promise<void> {\n const fallbackIndex =\n typeof toolCall.index === 'number' ? toolCall.index : undefined;\n const positionKey =\n fallbackIndex == null\n ? undefined\n : getToolCallPositionKey(stepId, toolCall, fallbackIndex);\n const item =\n getExistingFunctionCall(\n config,\n getToolCallIdKey(toolCall),\n positionKey,\n stepId,\n toolCall\n ) ??\n (await ensureFunctionCall(config, stepId, toolCall, fallbackIndex ?? 0));\n if (item.status === 'completed') {\n return;\n }\n const finalArguments = getToolCallArguments(toolCall);\n if (\n finalArguments !== '' &&\n finalArguments !== item.arguments &&\n finalArguments.startsWith(item.arguments)\n ) {\n await emitFunctionCallArgumentsDelta({\n config,\n item,\n delta: finalArguments.slice(item.arguments.length),\n });\n } else if (finalArguments !== '') {\n item.arguments = finalArguments;\n }\n await emitFunctionCallArgumentsDone(config, item);\n item.status = 'completed';\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.done',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.indexOf(item),\n item,\n });\n}\n\nexport function buildResponse(\n context: ResponseContext,\n tracker: ResponseTracker,\n status: ResponseStatus = 'in_progress'\n): ResponseObject {\n const completed = status === 'completed';\n return {\n id: context.responseId,\n object: 'response',\n created_at: context.createdAt,\n completed_at: completed ? Math.floor(Date.now() / 1000) : null,\n status,\n model: context.model,\n previous_response_id: context.previousResponseId ?? null,\n instructions: context.instructions ?? null,\n output: tracker.items,\n error: null,\n usage: completed\n ? {\n input_tokens: tracker.usage.inputTokens,\n output_tokens: tracker.usage.outputTokens,\n total_tokens: tracker.usage.inputTokens + tracker.usage.outputTokens,\n }\n : null,\n };\n}\n\nexport async function writeResponseEvent(\n writer: ResponsesCompatibleWriter,\n event: ResponseEvent\n): Promise<void> {\n await writer.write(`event: ${event.type}\\n`);\n await writer.write(`data: ${JSON.stringify(event)}\\n\\n`);\n}\n\nexport async function writeResponsesDone(\n writer: ResponsesCompatibleWriter\n): Promise<void> {\n await writer.write('data: [DONE]\\n\\n');\n}\n\nexport async function ensureResponseCreated(\n config: ResponsesHandlerConfig\n): Promise<void> {\n if (config.tracker.responseCreated) {\n return;\n }\n config.tracker.responseCreated = true;\n await writeResponseEvent(config.writer, {\n type: 'response.created',\n sequence_number: config.tracker.nextSequence(),\n response: buildResponse(config.context, config.tracker),\n });\n}\n\nasync function emitOutputContentDone(\n config: ResponsesHandlerConfig,\n item: ResponseMessageItem | ResponseReasoningItem\n): Promise<void> {\n const outputIndex = config.tracker.items.indexOf(item);\n if (item.type === 'message') {\n await writeResponseEvent(config.writer, {\n type: 'response.output_text.done',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: outputIndex,\n content_index: 0,\n text: item.content[0].text,\n });\n return;\n }\n await writeResponseEvent(config.writer, {\n type: 'response.reasoning_text.done',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: outputIndex,\n content_index: 0,\n text: item.content[0].text,\n });\n}\n\nasync function ensureMessage(\n config: ResponsesHandlerConfig\n): Promise<ResponseMessageItem> {\n await ensureResponseCreated(config);\n if (config.tracker.message) {\n return config.tracker.message;\n }\n const item: ResponseMessageItem = {\n type: 'message',\n id: createItemId('msg'),\n role: 'assistant',\n status: 'in_progress',\n content: [{ type: 'output_text', text: '', annotations: [], logprobs: [] }],\n };\n config.tracker.message = item;\n config.tracker.items.push(item);\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.added',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.length - 1,\n item,\n });\n return item;\n}\n\nasync function ensureReasoning(\n config: ResponsesHandlerConfig\n): Promise<ResponseReasoningItem> {\n await ensureResponseCreated(config);\n if (config.tracker.reasoning) {\n return config.tracker.reasoning;\n }\n const item: ResponseReasoningItem = {\n type: 'reasoning',\n id: createItemId('reason'),\n status: 'in_progress',\n content: [{ type: 'reasoning_text', text: '' }],\n summary: [],\n };\n config.tracker.reasoning = item;\n config.tracker.items.push(item);\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.added',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.length - 1,\n item,\n });\n return item;\n}\n\nexport function createResponsesEventHandlers(\n config: ResponsesHandlerConfig\n): Record<string, t.EventHandler> {\n return {\n [GraphEvents.ON_MESSAGE_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const item = await ensureMessage(config);\n for (const part of (data as t.MessageDeltaEvent).delta.content ?? []) {\n if (!('text' in part) || typeof part.text !== 'string') {\n continue;\n }\n item.content[0].text += part.text;\n await writeResponseEvent(config.writer, {\n type: 'response.output_text.delta',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: config.tracker.items.indexOf(item),\n content_index: 0,\n delta: part.text,\n });\n }\n },\n },\n [GraphEvents.ON_REASONING_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const item = await ensureReasoning(config);\n for (const part of (data as t.ReasoningDeltaEvent).delta.content ??\n []) {\n let text: string | undefined;\n if ('think' in part && typeof part.think === 'string') {\n text = part.think;\n } else if ('text' in part && typeof part.text === 'string') {\n text = part.text;\n }\n if (typeof text !== 'string') {\n continue;\n }\n item.content[0].text += text;\n await writeResponseEvent(config.writer, {\n type: 'response.reasoning_text.delta',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: config.tracker.items.indexOf(item),\n content_index: 0,\n delta: text,\n });\n }\n },\n },\n [GraphEvents.ON_RUN_STEP]: {\n handle: async (_event, data): Promise<void> => {\n const runStep = data as t.RunStep;\n if (runStep.stepDetails.type !== 'tool_calls') {\n return;\n }\n const toolCalls = runStep.stepDetails.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n await ensureFunctionCall(config, runStep.id, toolCalls[index], index);\n }\n },\n },\n [GraphEvents.ON_RUN_STEP_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const runStepDelta = data as t.RunStepDeltaEvent;\n if (runStepDelta.delta.type !== 'tool_calls') {\n return;\n }\n const toolCalls = runStepDelta.delta.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n const item = await ensureFunctionCall(\n config,\n runStepDelta.id,\n toolCalls[index],\n index\n );\n await emitFunctionCallArgumentsDelta({\n config,\n item,\n delta: getToolCallArguments(toolCalls[index]),\n });\n }\n },\n },\n [GraphEvents.ON_RUN_STEP_COMPLETED]: {\n handle: async (_event, data): Promise<void> => {\n const completed = data as {\n result?: {\n id?: string;\n index?: number;\n type?: string;\n tool_call?: ResponseToolCallFragment;\n };\n };\n if (!completed.result?.tool_call) {\n return;\n }\n await completeFunctionCall(\n config,\n completed.result.id ?? '',\n completed.result.tool_call\n );\n },\n },\n [GraphEvents.CHAT_MODEL_END]: {\n handle: (_event, data): void => {\n const usage = (data as t.ModelEndData)?.output?.usage_metadata as\n | Partial<UsageMetadata>\n | undefined;\n if (!usage) {\n return;\n }\n config.tracker.usage.inputTokens += getTokenCount(usage.input_tokens);\n config.tracker.usage.outputTokens += getTokenCount(usage.output_tokens);\n },\n },\n };\n}\n\nexport async function emitResponseCompleted(\n config: ResponsesHandlerConfig\n): Promise<void> {\n await ensureResponseCreated(config);\n for (const item of config.tracker.items) {\n if (item.status === 'completed') {\n continue;\n }\n if (item.type === 'message' || item.type === 'reasoning') {\n await emitOutputContentDone(config, item);\n } else {\n await emitFunctionCallArgumentsDone(config, item);\n }\n item.status = 'completed';\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.done',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.indexOf(item),\n item,\n });\n }\n await writeResponseEvent(config.writer, {\n type: 'response.completed',\n sequence_number: config.tracker.nextSequence(),\n response: buildResponse(config.context, config.tracker, 'completed'),\n });\n await writeResponsesDone(config.writer);\n}\n"],"names":["GraphEvents"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/responses/index.ts"],"sourcesContent":["import type { UsageMetadata } from '@langchain/core/messages';\nimport type * as t from '@/types';\nimport { GraphEvents } from '@/common';\n\nexport interface ResponsesCompatibleWriter {\n write(data: string): void | Promise<void>;\n}\n\nexport type ResponseStatus =\n | 'in_progress'\n | 'completed'\n | 'failed'\n | 'incomplete';\nexport type ItemStatus = 'in_progress' | 'incomplete' | 'completed';\n\nexport interface ResponseContext {\n responseId: string;\n model: string;\n createdAt: number;\n previousResponseId?: string;\n instructions?: string;\n}\n\nexport interface ResponseOutputTextContent {\n type: 'output_text';\n text: string;\n annotations: [];\n logprobs: [];\n}\n\nexport interface ResponseMessageItem {\n type: 'message';\n id: string;\n role: 'assistant';\n status: ItemStatus;\n content: ResponseOutputTextContent[];\n}\n\nexport interface ResponseFunctionCallItem {\n type: 'function_call';\n id: string;\n call_id: string;\n name: string;\n arguments: string;\n status: ItemStatus;\n}\n\nexport interface ResponseReasoningItem {\n type: 'reasoning';\n id: string;\n status: ItemStatus;\n content: Array<{ type: 'reasoning_text'; text: string }>;\n summary: [];\n}\n\nexport type ResponseOutputItem =\n | ResponseMessageItem\n | ResponseFunctionCallItem\n | ResponseReasoningItem;\n\nexport interface ResponseObject {\n id: string;\n object: 'response';\n created_at: number;\n completed_at: number | null;\n status: ResponseStatus;\n model: string;\n previous_response_id: string | null;\n instructions: string | null;\n output: ResponseOutputItem[];\n error: { type: string; message: string; code?: string } | null;\n usage: {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n } | null;\n}\n\nexport interface ResponseEvent {\n type: string;\n sequence_number: number;\n [key: string]: unknown;\n}\n\nexport interface ResponseTracker {\n sequenceNumber: number;\n items: ResponseOutputItem[];\n message: ResponseMessageItem | undefined;\n reasoning: ResponseReasoningItem | undefined;\n functionCalls: Map<string, ResponseFunctionCallItem>;\n functionCallsByStep: Map<string, Array<ResponseFunctionCallItem | undefined>>;\n responseCreated: boolean;\n usage: {\n inputTokens: number;\n outputTokens: number;\n };\n nextSequence(): number;\n}\n\nexport interface ResponsesHandlerConfig {\n writer: ResponsesCompatibleWriter;\n context: ResponseContext;\n tracker: ResponseTracker;\n}\n\nlet responseItemId = 0;\n\nfunction createItemId(prefix: string): string {\n return `${prefix}_${Date.now().toString(36)}${(responseItemId++).toString(36)}`;\n}\n\nexport function createResponseTracker(): ResponseTracker {\n const tracker: ResponseTracker = {\n sequenceNumber: 0,\n items: [],\n message: undefined,\n reasoning: undefined,\n functionCalls: new Map(),\n functionCallsByStep: new Map(),\n responseCreated: false,\n usage: {\n inputTokens: 0,\n outputTokens: 0,\n },\n nextSequence: () => tracker.sequenceNumber++,\n };\n return tracker;\n}\n\nfunction getTokenCount(value: number | null | undefined): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\ninterface ResponseToolCallFragment {\n index?: number;\n id?: string;\n name?: string;\n args?: string | object;\n function?: {\n name?: string;\n arguments?: string | object;\n };\n}\n\nfunction getToolCallIndex(\n toolCall: ResponseToolCallFragment,\n fallbackIndex: number\n): number {\n return typeof toolCall.index === 'number' ? toolCall.index : fallbackIndex;\n}\n\nfunction getToolCallPositionKey(\n stepId: string,\n toolCall: ResponseToolCallFragment,\n fallbackIndex: number\n): string {\n const index = getToolCallIndex(toolCall, fallbackIndex);\n if (stepId !== '') {\n return `${stepId}:${index}`;\n }\n return `tool:${index}`;\n}\n\nfunction getToolCallIdKey(\n toolCall: ResponseToolCallFragment\n): string | undefined {\n return toolCall.id != null && toolCall.id !== '' ? toolCall.id : undefined;\n}\n\nfunction getExistingFunctionCall(\n config: ResponsesHandlerConfig,\n idKey: string | undefined,\n positionKey: string | undefined,\n stepId: string,\n toolCall: ResponseToolCallFragment\n): ResponseFunctionCallItem | undefined {\n const keyed =\n idKey == null\n ? undefined\n : (config.tracker.functionCalls.get(idKey) ??\n (positionKey == null\n ? undefined\n : config.tracker.functionCalls.get(positionKey)));\n if (keyed != null) {\n return keyed;\n }\n const positioned =\n positionKey == null\n ? undefined\n : config.tracker.functionCalls.get(positionKey);\n if (positioned != null) {\n return positioned;\n }\n if (stepId === '') {\n return undefined;\n }\n return findFunctionCallByStep(config, stepId, toolCall);\n}\n\nfunction findFunctionCallByStep(\n config: ResponsesHandlerConfig,\n stepId: string,\n toolCall: ResponseToolCallFragment\n): ResponseFunctionCallItem | undefined {\n const items = config.tracker.functionCallsByStep.get(stepId);\n if (items == null) {\n return undefined;\n }\n const index = typeof toolCall.index === 'number' ? toolCall.index : undefined;\n if (index != null) {\n return items[index];\n }\n const name = getToolCallName(toolCall);\n let fallback: ResponseFunctionCallItem | undefined;\n for (const item of items) {\n if (item == null || item.status === 'completed') {\n continue;\n }\n if (name !== '' && item.name !== name) {\n continue;\n }\n if (fallback != null) {\n return undefined;\n }\n fallback = item;\n }\n return fallback;\n}\n\nfunction trackFunctionCallKeys(\n config: ResponsesHandlerConfig,\n item: ResponseFunctionCallItem,\n idKey: string | undefined,\n positionKey: string\n): void {\n config.tracker.functionCalls.set(positionKey, item);\n if (idKey != null) {\n config.tracker.functionCalls.set(idKey, item);\n }\n}\n\nfunction trackFunctionCallStep(\n config: ResponsesHandlerConfig,\n stepId: string,\n item: ResponseFunctionCallItem,\n fallbackIndex: number\n): void {\n if (stepId === '') {\n return;\n }\n const items = config.tracker.functionCallsByStep.get(stepId) ?? [];\n items[fallbackIndex] = item;\n config.tracker.functionCallsByStep.set(stepId, items);\n}\n\nfunction getToolCallName(toolCall: ResponseToolCallFragment): string {\n return toolCall.name ?? toolCall.function?.name ?? '';\n}\n\nfunction getToolCallArguments(toolCall: ResponseToolCallFragment): string {\n const args = toolCall.args ?? toolCall.function?.arguments;\n if (args == null) {\n return '';\n }\n if (typeof args === 'string') {\n return args;\n }\n return JSON.stringify(args);\n}\n\nasync function ensureFunctionCall(\n config: ResponsesHandlerConfig,\n stepId: string,\n toolCall: ResponseToolCallFragment,\n fallbackIndex: number\n): Promise<ResponseFunctionCallItem> {\n await ensureResponseCreated(config);\n const positionKey = getToolCallPositionKey(stepId, toolCall, fallbackIndex);\n const idKey = getToolCallIdKey(toolCall);\n const existing = getExistingFunctionCall(\n config,\n idKey,\n positionKey,\n stepId,\n toolCall\n );\n const toolCallIndex = getToolCallIndex(toolCall, fallbackIndex);\n const name = getToolCallName(toolCall);\n if (existing) {\n trackFunctionCallKeys(config, existing, idKey, positionKey);\n trackFunctionCallStep(config, stepId, existing, toolCallIndex);\n if (idKey != null) {\n existing.call_id = idKey;\n }\n if (name !== '') {\n existing.name = name;\n }\n return existing;\n }\n const item: ResponseFunctionCallItem = {\n type: 'function_call',\n id: createItemId('fc'),\n call_id: idKey ?? positionKey,\n name,\n arguments: '',\n status: 'in_progress',\n };\n trackFunctionCallKeys(config, item, idKey, positionKey);\n trackFunctionCallStep(config, stepId, item, toolCallIndex);\n config.tracker.items.push(item);\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.added',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.length - 1,\n item,\n });\n return item;\n}\n\nasync function emitFunctionCallArgumentsDelta(params: {\n config: ResponsesHandlerConfig;\n item: ResponseFunctionCallItem;\n delta: string;\n}): Promise<void> {\n if (params.delta === '') {\n return;\n }\n params.item.arguments += params.delta;\n await writeResponseEvent(params.config.writer, {\n type: 'response.function_call_arguments.delta',\n sequence_number: params.config.tracker.nextSequence(),\n item_id: params.item.id,\n output_index: params.config.tracker.items.indexOf(params.item),\n call_id: params.item.call_id,\n delta: params.delta,\n });\n}\n\nasync function emitFunctionCallArgumentsDone(\n config: ResponsesHandlerConfig,\n item: ResponseFunctionCallItem\n): Promise<void> {\n await writeResponseEvent(config.writer, {\n type: 'response.function_call_arguments.done',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: config.tracker.items.indexOf(item),\n call_id: item.call_id,\n name: item.name,\n arguments: item.arguments,\n });\n}\n\nasync function completeFunctionCall(\n config: ResponsesHandlerConfig,\n stepId: string,\n toolCall: ResponseToolCallFragment\n): Promise<void> {\n const fallbackIndex =\n typeof toolCall.index === 'number' ? toolCall.index : undefined;\n const positionKey =\n fallbackIndex == null\n ? undefined\n : getToolCallPositionKey(stepId, toolCall, fallbackIndex);\n const item =\n getExistingFunctionCall(\n config,\n getToolCallIdKey(toolCall),\n positionKey,\n stepId,\n toolCall\n ) ??\n (await ensureFunctionCall(config, stepId, toolCall, fallbackIndex ?? 0));\n if (item.status === 'completed') {\n return;\n }\n const finalArguments = getToolCallArguments(toolCall);\n if (\n finalArguments !== '' &&\n finalArguments !== item.arguments &&\n finalArguments.startsWith(item.arguments)\n ) {\n await emitFunctionCallArgumentsDelta({\n config,\n item,\n delta: finalArguments.slice(item.arguments.length),\n });\n } else if (finalArguments !== '') {\n item.arguments = finalArguments;\n }\n await emitFunctionCallArgumentsDone(config, item);\n item.status = 'completed';\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.done',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.indexOf(item),\n item,\n });\n}\n\nexport function buildResponse(\n context: ResponseContext,\n tracker: ResponseTracker,\n status: ResponseStatus = 'in_progress'\n): ResponseObject {\n const completed = status === 'completed';\n return {\n id: context.responseId,\n object: 'response',\n created_at: context.createdAt,\n completed_at: completed ? Math.floor(Date.now() / 1000) : null,\n status,\n model: context.model,\n previous_response_id: context.previousResponseId ?? null,\n instructions: context.instructions ?? null,\n output: tracker.items,\n error: null,\n usage: completed\n ? {\n input_tokens: tracker.usage.inputTokens,\n output_tokens: tracker.usage.outputTokens,\n total_tokens: tracker.usage.inputTokens + tracker.usage.outputTokens,\n }\n : null,\n };\n}\n\nexport async function writeResponseEvent(\n writer: ResponsesCompatibleWriter,\n event: ResponseEvent\n): Promise<void> {\n await writer.write(`event: ${event.type}\\n`);\n await writer.write(`data: ${JSON.stringify(event)}\\n\\n`);\n}\n\nexport async function writeResponsesDone(\n writer: ResponsesCompatibleWriter\n): Promise<void> {\n await writer.write('data: [DONE]\\n\\n');\n}\n\nexport async function ensureResponseCreated(\n config: ResponsesHandlerConfig\n): Promise<void> {\n if (config.tracker.responseCreated) {\n return;\n }\n config.tracker.responseCreated = true;\n await writeResponseEvent(config.writer, {\n type: 'response.created',\n sequence_number: config.tracker.nextSequence(),\n response: buildResponse(config.context, config.tracker),\n });\n}\n\nasync function emitOutputContentDone(\n config: ResponsesHandlerConfig,\n item: ResponseMessageItem | ResponseReasoningItem\n): Promise<void> {\n const outputIndex = config.tracker.items.indexOf(item);\n if (item.type === 'message') {\n await writeResponseEvent(config.writer, {\n type: 'response.output_text.done',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: outputIndex,\n content_index: 0,\n text: item.content[0].text,\n });\n return;\n }\n await writeResponseEvent(config.writer, {\n type: 'response.reasoning_text.done',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: outputIndex,\n content_index: 0,\n text: item.content[0].text,\n });\n}\n\nasync function ensureMessage(\n config: ResponsesHandlerConfig\n): Promise<ResponseMessageItem> {\n await ensureResponseCreated(config);\n if (config.tracker.message) {\n return config.tracker.message;\n }\n const item: ResponseMessageItem = {\n type: 'message',\n id: createItemId('msg'),\n role: 'assistant',\n status: 'in_progress',\n content: [{ type: 'output_text', text: '', annotations: [], logprobs: [] }],\n };\n config.tracker.message = item;\n config.tracker.items.push(item);\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.added',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.length - 1,\n item,\n });\n return item;\n}\n\nasync function ensureReasoning(\n config: ResponsesHandlerConfig\n): Promise<ResponseReasoningItem> {\n await ensureResponseCreated(config);\n if (config.tracker.reasoning) {\n return config.tracker.reasoning;\n }\n const item: ResponseReasoningItem = {\n type: 'reasoning',\n id: createItemId('reason'),\n status: 'in_progress',\n content: [{ type: 'reasoning_text', text: '' }],\n summary: [],\n };\n config.tracker.reasoning = item;\n config.tracker.items.push(item);\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.added',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.length - 1,\n item,\n });\n return item;\n}\n\nexport function createResponsesEventHandlers(\n config: ResponsesHandlerConfig\n): Record<string, t.EventHandler> {\n return {\n [GraphEvents.ON_MESSAGE_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const item = await ensureMessage(config);\n for (const part of (data as t.MessageDeltaEvent).delta.content ?? []) {\n if (!('text' in part) || typeof part.text !== 'string') {\n continue;\n }\n item.content[0].text += part.text;\n await writeResponseEvent(config.writer, {\n type: 'response.output_text.delta',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: config.tracker.items.indexOf(item),\n content_index: 0,\n delta: part.text,\n });\n }\n },\n },\n [GraphEvents.ON_REASONING_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const item = await ensureReasoning(config);\n for (const part of (data as t.ReasoningDeltaEvent).delta.content ??\n []) {\n let text: string | undefined;\n if ('think' in part && typeof part.think === 'string') {\n text = part.think;\n } else if ('text' in part && typeof part.text === 'string') {\n text = part.text;\n }\n if (typeof text !== 'string') {\n continue;\n }\n item.content[0].text += text;\n await writeResponseEvent(config.writer, {\n type: 'response.reasoning_text.delta',\n sequence_number: config.tracker.nextSequence(),\n item_id: item.id,\n output_index: config.tracker.items.indexOf(item),\n content_index: 0,\n delta: text,\n });\n }\n },\n },\n [GraphEvents.ON_RUN_STEP]: {\n handle: async (_event, data): Promise<void> => {\n const runStep = data as t.RunStep;\n if (runStep.stepDetails.type !== 'tool_calls') {\n return;\n }\n const toolCalls = runStep.stepDetails.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n await ensureFunctionCall(config, runStep.id, toolCalls[index], index);\n }\n },\n },\n [GraphEvents.ON_RUN_STEP_DELTA]: {\n handle: async (_event, data): Promise<void> => {\n const runStepDelta = data as t.RunStepDeltaEvent;\n if (runStepDelta.delta.type !== 'tool_calls') {\n return;\n }\n const toolCalls = runStepDelta.delta.tool_calls ?? [];\n for (let index = 0; index < toolCalls.length; index++) {\n const item = await ensureFunctionCall(\n config,\n runStepDelta.id,\n toolCalls[index],\n index\n );\n await emitFunctionCallArgumentsDelta({\n config,\n item,\n delta: getToolCallArguments(toolCalls[index]),\n });\n }\n },\n },\n [GraphEvents.ON_RUN_STEP_COMPLETED]: {\n handle: async (_event, data): Promise<void> => {\n const completed = data as {\n result?: {\n id?: string;\n index?: number;\n type?: string;\n tool_call?: ResponseToolCallFragment;\n };\n };\n if (!completed.result?.tool_call) {\n return;\n }\n await completeFunctionCall(\n config,\n completed.result.id ?? '',\n completed.result.tool_call\n );\n },\n },\n [GraphEvents.CHAT_MODEL_END]: {\n handle: (_event, data): void => {\n const usage = (data as t.ModelEndData)?.output?.usage_metadata as\n | Partial<UsageMetadata>\n | undefined;\n if (!usage) {\n return;\n }\n config.tracker.usage.inputTokens += getTokenCount(usage.input_tokens);\n config.tracker.usage.outputTokens += getTokenCount(usage.output_tokens);\n },\n },\n };\n}\n\nexport async function emitResponseCompleted(\n config: ResponsesHandlerConfig\n): Promise<void> {\n await ensureResponseCreated(config);\n for (const item of config.tracker.items) {\n if (item.status === 'completed') {\n continue;\n }\n if (item.type === 'message' || item.type === 'reasoning') {\n await emitOutputContentDone(config, item);\n } else {\n await emitFunctionCallArgumentsDone(config, item);\n }\n item.status = 'completed';\n await writeResponseEvent(config.writer, {\n type: 'response.output_item.done',\n sequence_number: config.tracker.nextSequence(),\n output_index: config.tracker.items.indexOf(item),\n item,\n });\n }\n await writeResponseEvent(config.writer, {\n type: 'response.completed',\n sequence_number: config.tracker.nextSequence(),\n response: buildResponse(config.context, config.tracker, 'completed'),\n });\n await writeResponsesDone(config.writer);\n}\n"],"names":["GraphEvents"],"mappings":"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"}
package/dist/cjs/run.cjs CHANGED
@@ -1,25 +1,25 @@
1
1
  'use strict';
2
2
 
3
- var instrumentation = require('./instrumentation.cjs');
3
+ var messages = require('@langchain/core/messages');
4
4
  var prompts = require('@langchain/core/prompts');
5
5
  var runnables = require('@langchain/core/runnables');
6
6
  var openai = require('@langchain/openai');
7
- var langgraph = require('@langchain/langgraph');
8
- var messages = require('@langchain/core/messages');
9
7
  var base = require('@langchain/core/callbacks/base');
8
+ var langgraph = require('@langchain/langgraph');
9
+ var langfuse = require('./langfuse.cjs');
10
+ var langfuseToolOutputTracing = require('./langfuseToolOutputTracing.cjs');
11
+ var callbacks = require('./utils/callbacks.cjs');
10
12
  var title = require('./utils/title.cjs');
13
+ var instrumentation = require('./instrumentation.cjs');
11
14
  var tokens = require('./utils/tokens.cjs');
12
15
  var _enum = require('./common/enum.cjs');
13
16
  var MultiAgentGraph = require('./graphs/MultiAgentGraph.cjs');
14
17
  var Graph = require('./graphs/Graph.cjs');
15
18
  var init = require('./llm/init.cjs');
16
19
  var events = require('./events.cjs');
20
+ var llm = require('./utils/llm.cjs');
17
21
  var executeHooks = require('./hooks/executeHooks.cjs');
18
22
  require('./hooks/createWorkspacePolicyHook.cjs');
19
- var llm = require('./utils/llm.cjs');
20
- var callbacks = require('./utils/callbacks.cjs');
21
- var langfuse = require('./langfuse.cjs');
22
- var langfuseToolOutputTracing = require('./langfuseToolOutputTracing.cjs');
23
23
 
24
24
  // src/run.ts
25
25
  const defaultOmitOptions = new Set([
@@ -562,6 +562,7 @@ class Run {
562
562
  agentId: graph.defaultAgentId,
563
563
  agentName: primaryContext?.name,
564
564
  });
565
+ const traceName = config.runName ?? langfuse.getLangfuseTraceName(traceMetadata);
565
566
  const streamLangfuseConfig = this.getStreamLangfuseConfig(graph);
566
567
  instrumentation.initializeLangfuseTracing(streamLangfuseConfig);
567
568
  const langfuseHandler = langfuse.createLangfuseHandler({
@@ -572,7 +573,7 @@ class Run {
572
573
  tags: ['librechat', 'agent'],
573
574
  });
574
575
  if (langfuseHandler != null) {
575
- config.runName = config.runName ?? langfuse.getLangfuseTraceName(traceMetadata);
576
+ config.runName = traceName;
576
577
  config.callbacks = callbacks.appendCallbacks(config.callbacks, [langfuseHandler]);
577
578
  }
578
579
  if (!this.id) {
@@ -718,7 +719,14 @@ class Run {
718
719
  // lookup (see SeededTraceIdGenerator in ./instrumentation).
719
720
  await instrumentation.runWithTraceIdSeed(streamLangfuseConfig?.deterministicTraceId === true
720
721
  ? this.id
721
- : undefined, () => langfuseToolOutputTracing.withLangfuseToolOutputTracingConfig(streamLangfuseConfig, consumeStream, this.getStreamToolOutputTracingLangfuseConfig(graph)));
722
+ : undefined, () => langfuseToolOutputTracing.withLangfuseToolOutputTracingConfig(streamLangfuseConfig, () => langfuse.withLangfuseAttributes({
723
+ langfuse: streamLangfuseConfig,
724
+ userId,
725
+ sessionId,
726
+ traceName,
727
+ traceMetadata,
728
+ tags: ['librechat', 'agent'],
729
+ }, consumeStream), this.getStreamToolOutputTracingLangfuseConfig(graph)));
722
730
  }
723
731
  catch (err) {
724
732
  streamThrew = true;
@@ -980,6 +988,9 @@ class Run {
980
988
  }
981
989
  async generateTitle({ provider, inputText, contentParts, titlePrompt, clientOptions, chainOptions, skipLanguage, titleMethod = _enum.TitleMethod.COMPLETION, titlePromptTemplate, }) {
982
990
  let titleLangfuseHandler;
991
+ let titleLangfuseConfig;
992
+ let titleUserId;
993
+ let titleSessionId;
983
994
  const titleContext = this.Graph == null
984
995
  ? undefined
985
996
  : this.Graph.agentContexts.get(this.Graph.defaultAgentId);
@@ -989,18 +1000,20 @@ class Run {
989
1000
  });
990
1001
  const titleRunName = langfuse.getLangfuseTraceName(traceMetadata, 'LibreChat Title');
991
1002
  if (chainOptions != null) {
992
- const userId = typeof chainOptions.configurable?.user_id === 'string'
993
- ? chainOptions.configurable.user_id
994
- : undefined;
995
- const sessionId = typeof chainOptions.configurable?.thread_id === 'string'
996
- ? chainOptions.configurable.thread_id
997
- : undefined;
998
- const titleLangfuseConfig = langfuseToolOutputTracing.resolveLangfuseConfig(this.langfuse, titleContext?.langfuse);
1003
+ titleUserId =
1004
+ typeof chainOptions.configurable?.user_id === 'string'
1005
+ ? chainOptions.configurable.user_id
1006
+ : undefined;
1007
+ titleSessionId =
1008
+ typeof chainOptions.configurable?.thread_id === 'string'
1009
+ ? chainOptions.configurable.thread_id
1010
+ : undefined;
1011
+ titleLangfuseConfig = langfuseToolOutputTracing.resolveLangfuseConfig(this.langfuse, titleContext?.langfuse);
999
1012
  instrumentation.initializeLangfuseTracing(titleLangfuseConfig);
1000
1013
  titleLangfuseHandler = langfuse.createLangfuseHandler({
1001
1014
  langfuse: titleLangfuseConfig,
1002
- userId,
1003
- sessionId,
1015
+ userId: titleUserId,
1016
+ sessionId: titleSessionId,
1004
1017
  traceMetadata,
1005
1018
  tags: ['librechat', 'title'],
1006
1019
  });
@@ -1054,9 +1067,17 @@ class Run {
1054
1067
  runId: this.id,
1055
1068
  runName: chainOptions?.runName ?? titleRunName,
1056
1069
  });
1070
+ const invokeTitleChain = (runtimeConfig) => langfuse.withLangfuseAttributes({
1071
+ langfuse: titleLangfuseConfig,
1072
+ userId: titleUserId,
1073
+ sessionId: titleSessionId,
1074
+ traceName: runtimeConfig.runName ?? titleRunName,
1075
+ traceMetadata,
1076
+ tags: ['librechat', 'title'],
1077
+ }, () => fullChain.invoke({ input: inputText, output: response }, runtimeConfig));
1057
1078
  try {
1058
1079
  try {
1059
- return await langfuseToolOutputTracing.withLangfuseToolOutputTracingConfig(this.langfuse, () => fullChain.invoke({ input: inputText, output: response }, invokeConfig), titleContext?.langfuse);
1080
+ return await langfuseToolOutputTracing.withLangfuseToolOutputTracingConfig(this.langfuse, () => invokeTitleChain(invokeConfig), titleContext?.langfuse);
1060
1081
  }
1061
1082
  catch (_e) {
1062
1083
  // Fallback: strip callbacks to avoid EventStream tracer errors in certain environments
@@ -1066,7 +1087,7 @@ class Run {
1066
1087
  const safeConfig = Object.assign({}, rest, {
1067
1088
  callbacks: langfuseHandler ? [langfuseHandler] : [],
1068
1089
  });
1069
- return await langfuseToolOutputTracing.withLangfuseToolOutputTracingConfig(this.langfuse, () => fullChain.invoke({ input: inputText, output: response }, safeConfig), titleContext?.langfuse);
1090
+ return await langfuseToolOutputTracing.withLangfuseToolOutputTracingConfig(this.langfuse, () => invokeTitleChain(safeConfig), titleContext?.langfuse);
1070
1091
  }
1071
1092
  }
1072
1093
  finally {