illuma-agents 1.0.2

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 (437) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/common/enum.cjs +163 -0
  3. package/dist/cjs/common/enum.cjs.map +1 -0
  4. package/dist/cjs/events.cjs +143 -0
  5. package/dist/cjs/events.cjs.map +1 -0
  6. package/dist/cjs/graphs/Graph.cjs +581 -0
  7. package/dist/cjs/graphs/Graph.cjs.map +1 -0
  8. package/dist/cjs/instrumentation.cjs +21 -0
  9. package/dist/cjs/instrumentation.cjs.map +1 -0
  10. package/dist/cjs/llm/anthropic/index.cjs +292 -0
  11. package/dist/cjs/llm/anthropic/index.cjs.map +1 -0
  12. package/dist/cjs/llm/anthropic/types.cjs +50 -0
  13. package/dist/cjs/llm/anthropic/types.cjs.map +1 -0
  14. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +553 -0
  15. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -0
  16. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +218 -0
  17. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -0
  18. package/dist/cjs/llm/anthropic/utils/tools.cjs +29 -0
  19. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -0
  20. package/dist/cjs/llm/fake.cjs +97 -0
  21. package/dist/cjs/llm/fake.cjs.map +1 -0
  22. package/dist/cjs/llm/google/index.cjs +147 -0
  23. package/dist/cjs/llm/google/index.cjs.map +1 -0
  24. package/dist/cjs/llm/google/utils/common.cjs +490 -0
  25. package/dist/cjs/llm/google/utils/common.cjs.map +1 -0
  26. package/dist/cjs/llm/ollama/index.cjs +70 -0
  27. package/dist/cjs/llm/ollama/index.cjs.map +1 -0
  28. package/dist/cjs/llm/ollama/utils.cjs +158 -0
  29. package/dist/cjs/llm/ollama/utils.cjs.map +1 -0
  30. package/dist/cjs/llm/openai/index.cjs +613 -0
  31. package/dist/cjs/llm/openai/index.cjs.map +1 -0
  32. package/dist/cjs/llm/openai/utils/index.cjs +677 -0
  33. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -0
  34. package/dist/cjs/llm/openrouter/index.cjs +29 -0
  35. package/dist/cjs/llm/openrouter/index.cjs.map +1 -0
  36. package/dist/cjs/llm/providers.cjs +47 -0
  37. package/dist/cjs/llm/providers.cjs.map +1 -0
  38. package/dist/cjs/llm/text.cjs +69 -0
  39. package/dist/cjs/llm/text.cjs.map +1 -0
  40. package/dist/cjs/llm/vertexai/index.cjs +330 -0
  41. package/dist/cjs/llm/vertexai/index.cjs.map +1 -0
  42. package/dist/cjs/main.cjs +127 -0
  43. package/dist/cjs/main.cjs.map +1 -0
  44. package/dist/cjs/messages/core.cjs +359 -0
  45. package/dist/cjs/messages/core.cjs.map +1 -0
  46. package/dist/cjs/messages/format.cjs +455 -0
  47. package/dist/cjs/messages/format.cjs.map +1 -0
  48. package/dist/cjs/messages/ids.cjs +23 -0
  49. package/dist/cjs/messages/ids.cjs.map +1 -0
  50. package/dist/cjs/messages/prune.cjs +398 -0
  51. package/dist/cjs/messages/prune.cjs.map +1 -0
  52. package/dist/cjs/run.cjs +264 -0
  53. package/dist/cjs/run.cjs.map +1 -0
  54. package/dist/cjs/splitStream.cjs +210 -0
  55. package/dist/cjs/splitStream.cjs.map +1 -0
  56. package/dist/cjs/stream.cjs +504 -0
  57. package/dist/cjs/stream.cjs.map +1 -0
  58. package/dist/cjs/tools/CodeExecutor.cjs +192 -0
  59. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -0
  60. package/dist/cjs/tools/ToolNode.cjs +125 -0
  61. package/dist/cjs/tools/ToolNode.cjs.map +1 -0
  62. package/dist/cjs/tools/handlers.cjs +250 -0
  63. package/dist/cjs/tools/handlers.cjs.map +1 -0
  64. package/dist/cjs/tools/search/anthropic.cjs +40 -0
  65. package/dist/cjs/tools/search/anthropic.cjs.map +1 -0
  66. package/dist/cjs/tools/search/content.cjs +140 -0
  67. package/dist/cjs/tools/search/content.cjs.map +1 -0
  68. package/dist/cjs/tools/search/firecrawl.cjs +179 -0
  69. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -0
  70. package/dist/cjs/tools/search/format.cjs +203 -0
  71. package/dist/cjs/tools/search/format.cjs.map +1 -0
  72. package/dist/cjs/tools/search/highlights.cjs +245 -0
  73. package/dist/cjs/tools/search/highlights.cjs.map +1 -0
  74. package/dist/cjs/tools/search/rerankers.cjs +174 -0
  75. package/dist/cjs/tools/search/rerankers.cjs.map +1 -0
  76. package/dist/cjs/tools/search/schema.cjs +70 -0
  77. package/dist/cjs/tools/search/schema.cjs.map +1 -0
  78. package/dist/cjs/tools/search/search.cjs +561 -0
  79. package/dist/cjs/tools/search/search.cjs.map +1 -0
  80. package/dist/cjs/tools/search/serper-scraper.cjs +132 -0
  81. package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -0
  82. package/dist/cjs/tools/search/tool.cjs +331 -0
  83. package/dist/cjs/tools/search/tool.cjs.map +1 -0
  84. package/dist/cjs/tools/search/utils.cjs +66 -0
  85. package/dist/cjs/tools/search/utils.cjs.map +1 -0
  86. package/dist/cjs/utils/graph.cjs +16 -0
  87. package/dist/cjs/utils/graph.cjs.map +1 -0
  88. package/dist/cjs/utils/llm.cjs +28 -0
  89. package/dist/cjs/utils/llm.cjs.map +1 -0
  90. package/dist/cjs/utils/misc.cjs +56 -0
  91. package/dist/cjs/utils/misc.cjs.map +1 -0
  92. package/dist/cjs/utils/run.cjs +69 -0
  93. package/dist/cjs/utils/run.cjs.map +1 -0
  94. package/dist/cjs/utils/title.cjs +111 -0
  95. package/dist/cjs/utils/title.cjs.map +1 -0
  96. package/dist/cjs/utils/tokens.cjs +65 -0
  97. package/dist/cjs/utils/tokens.cjs.map +1 -0
  98. package/dist/esm/common/enum.mjs +163 -0
  99. package/dist/esm/common/enum.mjs.map +1 -0
  100. package/dist/esm/events.mjs +135 -0
  101. package/dist/esm/events.mjs.map +1 -0
  102. package/dist/esm/graphs/Graph.mjs +578 -0
  103. package/dist/esm/graphs/Graph.mjs.map +1 -0
  104. package/dist/esm/instrumentation.mjs +19 -0
  105. package/dist/esm/instrumentation.mjs.map +1 -0
  106. package/dist/esm/llm/anthropic/index.mjs +290 -0
  107. package/dist/esm/llm/anthropic/index.mjs.map +1 -0
  108. package/dist/esm/llm/anthropic/types.mjs +48 -0
  109. package/dist/esm/llm/anthropic/types.mjs.map +1 -0
  110. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +550 -0
  111. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -0
  112. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +216 -0
  113. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -0
  114. package/dist/esm/llm/anthropic/utils/tools.mjs +27 -0
  115. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -0
  116. package/dist/esm/llm/fake.mjs +94 -0
  117. package/dist/esm/llm/fake.mjs.map +1 -0
  118. package/dist/esm/llm/google/index.mjs +145 -0
  119. package/dist/esm/llm/google/index.mjs.map +1 -0
  120. package/dist/esm/llm/google/utils/common.mjs +484 -0
  121. package/dist/esm/llm/google/utils/common.mjs.map +1 -0
  122. package/dist/esm/llm/ollama/index.mjs +68 -0
  123. package/dist/esm/llm/ollama/index.mjs.map +1 -0
  124. package/dist/esm/llm/ollama/utils.mjs +155 -0
  125. package/dist/esm/llm/ollama/utils.mjs.map +1 -0
  126. package/dist/esm/llm/openai/index.mjs +604 -0
  127. package/dist/esm/llm/openai/index.mjs.map +1 -0
  128. package/dist/esm/llm/openai/utils/index.mjs +671 -0
  129. package/dist/esm/llm/openai/utils/index.mjs.map +1 -0
  130. package/dist/esm/llm/openrouter/index.mjs +27 -0
  131. package/dist/esm/llm/openrouter/index.mjs.map +1 -0
  132. package/dist/esm/llm/providers.mjs +43 -0
  133. package/dist/esm/llm/providers.mjs.map +1 -0
  134. package/dist/esm/llm/text.mjs +67 -0
  135. package/dist/esm/llm/text.mjs.map +1 -0
  136. package/dist/esm/llm/vertexai/index.mjs +328 -0
  137. package/dist/esm/llm/vertexai/index.mjs.map +1 -0
  138. package/dist/esm/main.mjs +20 -0
  139. package/dist/esm/main.mjs.map +1 -0
  140. package/dist/esm/messages/core.mjs +351 -0
  141. package/dist/esm/messages/core.mjs.map +1 -0
  142. package/dist/esm/messages/format.mjs +447 -0
  143. package/dist/esm/messages/format.mjs.map +1 -0
  144. package/dist/esm/messages/ids.mjs +21 -0
  145. package/dist/esm/messages/ids.mjs.map +1 -0
  146. package/dist/esm/messages/prune.mjs +393 -0
  147. package/dist/esm/messages/prune.mjs.map +1 -0
  148. package/dist/esm/run.mjs +261 -0
  149. package/dist/esm/run.mjs.map +1 -0
  150. package/dist/esm/splitStream.mjs +207 -0
  151. package/dist/esm/splitStream.mjs.map +1 -0
  152. package/dist/esm/stream.mjs +500 -0
  153. package/dist/esm/stream.mjs.map +1 -0
  154. package/dist/esm/tools/CodeExecutor.mjs +188 -0
  155. package/dist/esm/tools/CodeExecutor.mjs.map +1 -0
  156. package/dist/esm/tools/ToolNode.mjs +122 -0
  157. package/dist/esm/tools/ToolNode.mjs.map +1 -0
  158. package/dist/esm/tools/handlers.mjs +245 -0
  159. package/dist/esm/tools/handlers.mjs.map +1 -0
  160. package/dist/esm/tools/search/anthropic.mjs +37 -0
  161. package/dist/esm/tools/search/anthropic.mjs.map +1 -0
  162. package/dist/esm/tools/search/content.mjs +119 -0
  163. package/dist/esm/tools/search/content.mjs.map +1 -0
  164. package/dist/esm/tools/search/firecrawl.mjs +176 -0
  165. package/dist/esm/tools/search/firecrawl.mjs.map +1 -0
  166. package/dist/esm/tools/search/format.mjs +201 -0
  167. package/dist/esm/tools/search/format.mjs.map +1 -0
  168. package/dist/esm/tools/search/highlights.mjs +243 -0
  169. package/dist/esm/tools/search/highlights.mjs.map +1 -0
  170. package/dist/esm/tools/search/rerankers.mjs +168 -0
  171. package/dist/esm/tools/search/rerankers.mjs.map +1 -0
  172. package/dist/esm/tools/search/schema.mjs +61 -0
  173. package/dist/esm/tools/search/schema.mjs.map +1 -0
  174. package/dist/esm/tools/search/search.mjs +558 -0
  175. package/dist/esm/tools/search/search.mjs.map +1 -0
  176. package/dist/esm/tools/search/serper-scraper.mjs +129 -0
  177. package/dist/esm/tools/search/serper-scraper.mjs.map +1 -0
  178. package/dist/esm/tools/search/tool.mjs +329 -0
  179. package/dist/esm/tools/search/tool.mjs.map +1 -0
  180. package/dist/esm/tools/search/utils.mjs +61 -0
  181. package/dist/esm/tools/search/utils.mjs.map +1 -0
  182. package/dist/esm/utils/graph.mjs +13 -0
  183. package/dist/esm/utils/graph.mjs.map +1 -0
  184. package/dist/esm/utils/llm.mjs +25 -0
  185. package/dist/esm/utils/llm.mjs.map +1 -0
  186. package/dist/esm/utils/misc.mjs +53 -0
  187. package/dist/esm/utils/misc.mjs.map +1 -0
  188. package/dist/esm/utils/run.mjs +66 -0
  189. package/dist/esm/utils/run.mjs.map +1 -0
  190. package/dist/esm/utils/title.mjs +108 -0
  191. package/dist/esm/utils/title.mjs.map +1 -0
  192. package/dist/esm/utils/tokens.mjs +62 -0
  193. package/dist/esm/utils/tokens.mjs.map +1 -0
  194. package/dist/types/common/enum.d.ts +128 -0
  195. package/dist/types/common/index.d.ts +1 -0
  196. package/dist/types/events.d.ts +29 -0
  197. package/dist/types/graphs/Graph.d.ts +122 -0
  198. package/dist/types/graphs/index.d.ts +1 -0
  199. package/dist/types/index.d.ts +13 -0
  200. package/dist/types/instrumentation.d.ts +1 -0
  201. package/dist/types/llm/anthropic/index.d.ts +39 -0
  202. package/dist/types/llm/anthropic/types.d.ts +37 -0
  203. package/dist/types/llm/anthropic/utils/message_inputs.d.ts +14 -0
  204. package/dist/types/llm/anthropic/utils/message_outputs.d.ts +14 -0
  205. package/dist/types/llm/anthropic/utils/output_parsers.d.ts +22 -0
  206. package/dist/types/llm/anthropic/utils/tools.d.ts +3 -0
  207. package/dist/types/llm/fake.d.ts +31 -0
  208. package/dist/types/llm/google/index.d.ts +14 -0
  209. package/dist/types/llm/google/types.d.ts +32 -0
  210. package/dist/types/llm/google/utils/common.d.ts +19 -0
  211. package/dist/types/llm/google/utils/tools.d.ts +10 -0
  212. package/dist/types/llm/google/utils/zod_to_genai_parameters.d.ts +14 -0
  213. package/dist/types/llm/ollama/index.d.ts +8 -0
  214. package/dist/types/llm/ollama/utils.d.ts +7 -0
  215. package/dist/types/llm/openai/index.d.ts +103 -0
  216. package/dist/types/llm/openai/types.d.ts +10 -0
  217. package/dist/types/llm/openai/utils/index.d.ts +20 -0
  218. package/dist/types/llm/openrouter/index.d.ts +12 -0
  219. package/dist/types/llm/providers.d.ts +5 -0
  220. package/dist/types/llm/text.d.ts +21 -0
  221. package/dist/types/llm/vertexai/index.d.ts +293 -0
  222. package/dist/types/messages/core.d.ts +14 -0
  223. package/dist/types/messages/format.d.ts +113 -0
  224. package/dist/types/messages/ids.d.ts +3 -0
  225. package/dist/types/messages/index.d.ts +4 -0
  226. package/dist/types/messages/prune.d.ts +51 -0
  227. package/dist/types/mockStream.d.ts +32 -0
  228. package/dist/types/prompts/collab.d.ts +1 -0
  229. package/dist/types/prompts/index.d.ts +2 -0
  230. package/dist/types/prompts/taskmanager.d.ts +41 -0
  231. package/dist/types/run.d.ts +30 -0
  232. package/dist/types/scripts/abort.d.ts +1 -0
  233. package/dist/types/scripts/ant_web_search.d.ts +1 -0
  234. package/dist/types/scripts/args.d.ts +7 -0
  235. package/dist/types/scripts/caching.d.ts +1 -0
  236. package/dist/types/scripts/cli.d.ts +1 -0
  237. package/dist/types/scripts/cli2.d.ts +1 -0
  238. package/dist/types/scripts/cli3.d.ts +1 -0
  239. package/dist/types/scripts/cli4.d.ts +1 -0
  240. package/dist/types/scripts/cli5.d.ts +1 -0
  241. package/dist/types/scripts/code_exec.d.ts +1 -0
  242. package/dist/types/scripts/code_exec_files.d.ts +1 -0
  243. package/dist/types/scripts/code_exec_simple.d.ts +1 -0
  244. package/dist/types/scripts/content.d.ts +1 -0
  245. package/dist/types/scripts/empty_input.d.ts +1 -0
  246. package/dist/types/scripts/image.d.ts +1 -0
  247. package/dist/types/scripts/memory.d.ts +1 -0
  248. package/dist/types/scripts/search.d.ts +1 -0
  249. package/dist/types/scripts/simple.d.ts +1 -0
  250. package/dist/types/scripts/stream.d.ts +1 -0
  251. package/dist/types/scripts/thinking.d.ts +1 -0
  252. package/dist/types/scripts/tools.d.ts +1 -0
  253. package/dist/types/specs/spec.utils.d.ts +1 -0
  254. package/dist/types/splitStream.d.ts +37 -0
  255. package/dist/types/stream.d.ts +14 -0
  256. package/dist/types/tools/CodeExecutor.d.ts +23 -0
  257. package/dist/types/tools/ToolNode.d.ts +22 -0
  258. package/dist/types/tools/example.d.ts +78 -0
  259. package/dist/types/tools/handlers.d.ts +19 -0
  260. package/dist/types/tools/search/anthropic.d.ts +16 -0
  261. package/dist/types/tools/search/content.d.ts +4 -0
  262. package/dist/types/tools/search/firecrawl.d.ts +54 -0
  263. package/dist/types/tools/search/format.d.ts +5 -0
  264. package/dist/types/tools/search/highlights.d.ts +13 -0
  265. package/dist/types/tools/search/index.d.ts +2 -0
  266. package/dist/types/tools/search/rerankers.d.ts +38 -0
  267. package/dist/types/tools/search/schema.d.ts +16 -0
  268. package/dist/types/tools/search/search.d.ts +8 -0
  269. package/dist/types/tools/search/serper-scraper.d.ts +59 -0
  270. package/dist/types/tools/search/test.d.ts +1 -0
  271. package/dist/types/tools/search/tool.d.ts +54 -0
  272. package/dist/types/tools/search/types.d.ts +591 -0
  273. package/dist/types/tools/search/utils.d.ts +10 -0
  274. package/dist/types/types/graph.d.ts +138 -0
  275. package/dist/types/types/index.d.ts +5 -0
  276. package/dist/types/types/llm.d.ts +102 -0
  277. package/dist/types/types/run.d.ts +74 -0
  278. package/dist/types/types/stream.d.ts +293 -0
  279. package/dist/types/types/tools.d.ts +61 -0
  280. package/dist/types/utils/graph.d.ts +2 -0
  281. package/dist/types/utils/index.d.ts +5 -0
  282. package/dist/types/utils/llm.d.ts +3 -0
  283. package/dist/types/utils/llmConfig.d.ts +3 -0
  284. package/dist/types/utils/logging.d.ts +1 -0
  285. package/dist/types/utils/misc.d.ts +7 -0
  286. package/dist/types/utils/run.d.ts +27 -0
  287. package/dist/types/utils/title.d.ts +4 -0
  288. package/dist/types/utils/tokens.d.ts +3 -0
  289. package/package.json +145 -0
  290. package/src/common/enum.ts +176 -0
  291. package/src/common/index.ts +2 -0
  292. package/src/events.ts +191 -0
  293. package/src/graphs/Graph.ts +846 -0
  294. package/src/graphs/index.ts +1 -0
  295. package/src/index.ts +24 -0
  296. package/src/instrumentation.ts +22 -0
  297. package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
  298. package/src/llm/anthropic/index.ts +413 -0
  299. package/src/llm/anthropic/llm.spec.ts +1442 -0
  300. package/src/llm/anthropic/types.ts +140 -0
  301. package/src/llm/anthropic/utils/message_inputs.ts +660 -0
  302. package/src/llm/anthropic/utils/message_outputs.ts +289 -0
  303. package/src/llm/anthropic/utils/output_parsers.ts +133 -0
  304. package/src/llm/anthropic/utils/tools.ts +29 -0
  305. package/src/llm/fake.ts +133 -0
  306. package/src/llm/google/index.ts +222 -0
  307. package/src/llm/google/types.ts +43 -0
  308. package/src/llm/google/utils/common.ts +660 -0
  309. package/src/llm/google/utils/tools.ts +160 -0
  310. package/src/llm/google/utils/zod_to_genai_parameters.ts +88 -0
  311. package/src/llm/ollama/index.ts +92 -0
  312. package/src/llm/ollama/utils.ts +193 -0
  313. package/src/llm/openai/index.ts +853 -0
  314. package/src/llm/openai/types.ts +24 -0
  315. package/src/llm/openai/utils/index.ts +918 -0
  316. package/src/llm/openai/utils/isReasoningModel.test.ts +90 -0
  317. package/src/llm/openrouter/index.ts +60 -0
  318. package/src/llm/providers.ts +57 -0
  319. package/src/llm/text.ts +94 -0
  320. package/src/llm/vertexai/index.ts +360 -0
  321. package/src/messages/core.ts +463 -0
  322. package/src/messages/format.ts +625 -0
  323. package/src/messages/formatAgentMessages.test.ts +917 -0
  324. package/src/messages/formatAgentMessages.tools.test.ts +400 -0
  325. package/src/messages/formatMessage.test.ts +693 -0
  326. package/src/messages/ids.ts +26 -0
  327. package/src/messages/index.ts +4 -0
  328. package/src/messages/prune.ts +567 -0
  329. package/src/messages/shiftIndexTokenCountMap.test.ts +81 -0
  330. package/src/mockStream.ts +99 -0
  331. package/src/prompts/collab.ts +6 -0
  332. package/src/prompts/index.ts +2 -0
  333. package/src/prompts/taskmanager.ts +61 -0
  334. package/src/proto/CollabGraph.ts +269 -0
  335. package/src/proto/TaskManager.ts +243 -0
  336. package/src/proto/collab.ts +200 -0
  337. package/src/proto/collab_design.ts +184 -0
  338. package/src/proto/collab_design_v2.ts +224 -0
  339. package/src/proto/collab_design_v3.ts +255 -0
  340. package/src/proto/collab_design_v4.ts +220 -0
  341. package/src/proto/collab_design_v5.ts +251 -0
  342. package/src/proto/collab_graph.ts +181 -0
  343. package/src/proto/collab_original.ts +123 -0
  344. package/src/proto/example.ts +93 -0
  345. package/src/proto/example_new.ts +68 -0
  346. package/src/proto/example_old.ts +201 -0
  347. package/src/proto/example_test.ts +152 -0
  348. package/src/proto/example_test_anthropic.ts +100 -0
  349. package/src/proto/log_stream.ts +202 -0
  350. package/src/proto/main_collab_community_event.ts +133 -0
  351. package/src/proto/main_collab_design_v2.ts +96 -0
  352. package/src/proto/main_collab_design_v4.ts +100 -0
  353. package/src/proto/main_collab_design_v5.ts +135 -0
  354. package/src/proto/main_collab_global_analysis.ts +122 -0
  355. package/src/proto/main_collab_hackathon_event.ts +153 -0
  356. package/src/proto/main_collab_space_mission.ts +153 -0
  357. package/src/proto/main_philosophy.ts +210 -0
  358. package/src/proto/original_script.ts +126 -0
  359. package/src/proto/standard.ts +100 -0
  360. package/src/proto/stream.ts +56 -0
  361. package/src/proto/tasks.ts +118 -0
  362. package/src/proto/tools/global_analysis_tools.ts +86 -0
  363. package/src/proto/tools/space_mission_tools.ts +60 -0
  364. package/src/proto/vertexai.ts +54 -0
  365. package/src/run.ts +381 -0
  366. package/src/scripts/abort.ts +138 -0
  367. package/src/scripts/ant_web_search.ts +158 -0
  368. package/src/scripts/args.ts +48 -0
  369. package/src/scripts/caching.ts +124 -0
  370. package/src/scripts/cli.ts +167 -0
  371. package/src/scripts/cli2.ts +125 -0
  372. package/src/scripts/cli3.ts +178 -0
  373. package/src/scripts/cli4.ts +184 -0
  374. package/src/scripts/cli5.ts +184 -0
  375. package/src/scripts/code_exec.ts +214 -0
  376. package/src/scripts/code_exec_files.ts +193 -0
  377. package/src/scripts/code_exec_simple.ts +129 -0
  378. package/src/scripts/content.ts +120 -0
  379. package/src/scripts/empty_input.ts +137 -0
  380. package/src/scripts/image.ts +178 -0
  381. package/src/scripts/memory.ts +97 -0
  382. package/src/scripts/search.ts +150 -0
  383. package/src/scripts/simple.ts +225 -0
  384. package/src/scripts/stream.ts +122 -0
  385. package/src/scripts/thinking.ts +150 -0
  386. package/src/scripts/tools.ts +155 -0
  387. package/src/specs/anthropic.simple.test.ts +317 -0
  388. package/src/specs/azure.simple.test.ts +316 -0
  389. package/src/specs/openai.simple.test.ts +316 -0
  390. package/src/specs/prune.test.ts +763 -0
  391. package/src/specs/reasoning.test.ts +165 -0
  392. package/src/specs/spec.utils.ts +3 -0
  393. package/src/specs/thinking-prune.test.ts +703 -0
  394. package/src/specs/token-distribution-edge-case.test.ts +316 -0
  395. package/src/specs/tool-error.test.ts +193 -0
  396. package/src/splitStream.test.ts +691 -0
  397. package/src/splitStream.ts +234 -0
  398. package/src/stream.test.ts +94 -0
  399. package/src/stream.ts +651 -0
  400. package/src/tools/CodeExecutor.ts +220 -0
  401. package/src/tools/ToolNode.ts +170 -0
  402. package/src/tools/example.ts +129 -0
  403. package/src/tools/handlers.ts +336 -0
  404. package/src/tools/search/anthropic.ts +51 -0
  405. package/src/tools/search/content.test.ts +173 -0
  406. package/src/tools/search/content.ts +147 -0
  407. package/src/tools/search/firecrawl.ts +210 -0
  408. package/src/tools/search/format.ts +250 -0
  409. package/src/tools/search/highlights.ts +320 -0
  410. package/src/tools/search/index.ts +2 -0
  411. package/src/tools/search/jina-reranker.test.ts +126 -0
  412. package/src/tools/search/output.md +2775 -0
  413. package/src/tools/search/rerankers.ts +242 -0
  414. package/src/tools/search/schema.ts +63 -0
  415. package/src/tools/search/search.ts +759 -0
  416. package/src/tools/search/serper-scraper.ts +155 -0
  417. package/src/tools/search/test.html +884 -0
  418. package/src/tools/search/test.md +643 -0
  419. package/src/tools/search/test.ts +159 -0
  420. package/src/tools/search/tool.ts +471 -0
  421. package/src/tools/search/types.ts +687 -0
  422. package/src/tools/search/utils.ts +79 -0
  423. package/src/types/graph.ts +185 -0
  424. package/src/types/index.ts +6 -0
  425. package/src/types/llm.ts +140 -0
  426. package/src/types/run.ts +89 -0
  427. package/src/types/stream.ts +400 -0
  428. package/src/types/tools.ts +80 -0
  429. package/src/utils/graph.ts +11 -0
  430. package/src/utils/index.ts +5 -0
  431. package/src/utils/llm.ts +27 -0
  432. package/src/utils/llmConfig.ts +183 -0
  433. package/src/utils/logging.ts +48 -0
  434. package/src/utils/misc.ts +57 -0
  435. package/src/utils/run.ts +101 -0
  436. package/src/utils/title.ts +165 -0
  437. package/src/utils/tokens.ts +70 -0
@@ -0,0 +1,500 @@
1
+ import { Providers, StepTypes, ContentTypes, GraphEvents, ToolCallTypes } from './common/enum.mjs';
2
+ import { handleServerToolResult, handleToolCalls, handleToolCallChunks } from './tools/handlers.mjs';
3
+ import './messages/core.mjs';
4
+ import { getMessageId } from './messages/ids.mjs';
5
+ import '@langchain/core/messages';
6
+
7
+ /**
8
+ * Parses content to extract thinking sections enclosed in <think> tags using string operations
9
+ * @param content The content to parse
10
+ * @returns An object with separated text and thinking content
11
+ */
12
+ function parseThinkingContent(content) {
13
+ // If no think tags, return the original content as text
14
+ if (!content.includes('<think>')) {
15
+ return { text: content, thinking: '' };
16
+ }
17
+ let textResult = '';
18
+ const thinkingResult = [];
19
+ let position = 0;
20
+ while (position < content.length) {
21
+ const thinkStart = content.indexOf('<think>', position);
22
+ if (thinkStart === -1) {
23
+ // No more think tags, add the rest and break
24
+ textResult += content.slice(position);
25
+ break;
26
+ }
27
+ // Add text before the think tag
28
+ textResult += content.slice(position, thinkStart);
29
+ const thinkEnd = content.indexOf('</think>', thinkStart);
30
+ if (thinkEnd === -1) {
31
+ // Malformed input, no closing tag
32
+ textResult += content.slice(thinkStart);
33
+ break;
34
+ }
35
+ // Add the thinking content
36
+ const thinkContent = content.slice(thinkStart + 7, thinkEnd);
37
+ thinkingResult.push(thinkContent);
38
+ // Move position to after the think tag
39
+ position = thinkEnd + 8; // 8 is the length of '</think>'
40
+ }
41
+ return {
42
+ text: textResult.trim(),
43
+ thinking: thinkingResult.join('\n').trim(),
44
+ };
45
+ }
46
+ function getNonEmptyValue(possibleValues) {
47
+ for (const value of possibleValues) {
48
+ if (value && value.trim() !== '') {
49
+ return value;
50
+ }
51
+ }
52
+ return undefined;
53
+ }
54
+ function getChunkContent({ chunk, provider, reasoningKey, }) {
55
+ if ((provider === Providers.OPENAI || provider === Providers.AZURE) &&
56
+ chunk?.additional_kwargs?.reasoning?.summary?.[0]?.text != null &&
57
+ (chunk?.additional_kwargs?.reasoning?.summary?.[0]?.text?.length ?? 0) > 0) {
58
+ return chunk?.additional_kwargs?.reasoning?.summary?.[0]?.text;
59
+ }
60
+ return ((chunk?.additional_kwargs?.[reasoningKey] ?? '') ||
61
+ chunk?.content);
62
+ }
63
+ class ChatModelStreamHandler {
64
+ handle(event, data, metadata, graph) {
65
+ if (!graph) {
66
+ throw new Error('Graph not found');
67
+ }
68
+ if (!graph.config) {
69
+ throw new Error('Config not found in graph');
70
+ }
71
+ if (!data.chunk) {
72
+ console.warn(`No chunk found in ${event} event`);
73
+ return;
74
+ }
75
+ const chunk = data.chunk;
76
+ const content = getChunkContent({
77
+ chunk,
78
+ reasoningKey: graph.reasoningKey,
79
+ provider: metadata?.provider,
80
+ });
81
+ const skipHandling = handleServerToolResult({
82
+ content,
83
+ metadata,
84
+ graph,
85
+ });
86
+ if (skipHandling) {
87
+ return;
88
+ }
89
+ this.handleReasoning(chunk, graph, metadata?.provider);
90
+ let hasToolCalls = false;
91
+ if (chunk.tool_calls &&
92
+ chunk.tool_calls.length > 0 &&
93
+ chunk.tool_calls.every((tc) => tc.id != null && tc.id !== '')) {
94
+ hasToolCalls = true;
95
+ handleToolCalls(chunk.tool_calls, metadata, graph);
96
+ }
97
+ const hasToolCallChunks = (chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0) ?? false;
98
+ const isEmptyContent = typeof content === 'undefined' ||
99
+ !content.length ||
100
+ (typeof content === 'string' && !content);
101
+ const isEmptyChunk = isEmptyContent && !hasToolCallChunks;
102
+ const chunkId = chunk.id ?? '';
103
+ if (isEmptyChunk && chunkId && chunkId.startsWith('msg')) {
104
+ if (graph.messageIdsByStepKey.has(chunkId)) {
105
+ return;
106
+ }
107
+ else if (graph.prelimMessageIdsByStepKey.has(chunkId)) {
108
+ return;
109
+ }
110
+ const stepKey = graph.getStepKey(metadata);
111
+ graph.prelimMessageIdsByStepKey.set(stepKey, chunkId);
112
+ return;
113
+ }
114
+ else if (isEmptyChunk) {
115
+ return;
116
+ }
117
+ const stepKey = graph.getStepKey(metadata);
118
+ if (hasToolCallChunks &&
119
+ chunk.tool_call_chunks &&
120
+ chunk.tool_call_chunks.length &&
121
+ typeof chunk.tool_call_chunks[0]?.index === 'number') {
122
+ handleToolCallChunks({
123
+ graph,
124
+ stepKey,
125
+ toolCallChunks: chunk.tool_call_chunks,
126
+ });
127
+ }
128
+ if (isEmptyContent) {
129
+ return;
130
+ }
131
+ const message_id = getMessageId(stepKey, graph) ?? '';
132
+ if (message_id) {
133
+ graph.dispatchRunStep(stepKey, {
134
+ type: StepTypes.MESSAGE_CREATION,
135
+ message_creation: {
136
+ message_id,
137
+ },
138
+ });
139
+ }
140
+ const stepId = graph.getStepIdByKey(stepKey);
141
+ const runStep = graph.getRunStep(stepId);
142
+ if (!runStep) {
143
+ console.warn(`\n
144
+ ==============================================================
145
+
146
+
147
+ Run step for ${stepId} does not exist, cannot dispatch delta event.
148
+
149
+ event: ${event}
150
+ stepId: ${stepId}
151
+ stepKey: ${stepKey}
152
+ message_id: ${message_id}
153
+ hasToolCalls: ${hasToolCalls}
154
+ hasToolCallChunks: ${hasToolCallChunks}
155
+
156
+ ==============================================================
157
+ \n`);
158
+ return;
159
+ }
160
+ /* Note: tool call chunks may have non-empty content that matches the current tool chunk generation */
161
+ if (typeof content === 'string' && runStep.type === StepTypes.TOOL_CALLS) {
162
+ return;
163
+ }
164
+ else if (hasToolCallChunks &&
165
+ (chunk.tool_call_chunks?.some((tc) => tc.args === content) ?? false)) {
166
+ return;
167
+ }
168
+ else if (typeof content === 'string') {
169
+ if (graph.currentTokenType === ContentTypes.TEXT) {
170
+ graph.dispatchMessageDelta(stepId, {
171
+ content: [
172
+ {
173
+ type: ContentTypes.TEXT,
174
+ text: content,
175
+ },
176
+ ],
177
+ });
178
+ }
179
+ else if (graph.currentTokenType === 'think_and_text') {
180
+ const { text, thinking } = parseThinkingContent(content);
181
+ if (thinking) {
182
+ graph.dispatchReasoningDelta(stepId, {
183
+ content: [
184
+ {
185
+ type: ContentTypes.THINK,
186
+ think: thinking,
187
+ },
188
+ ],
189
+ });
190
+ }
191
+ if (text) {
192
+ graph.currentTokenType = ContentTypes.TEXT;
193
+ graph.tokenTypeSwitch = 'content';
194
+ const newStepKey = graph.getStepKey(metadata);
195
+ const message_id = getMessageId(newStepKey, graph) ?? '';
196
+ graph.dispatchRunStep(newStepKey, {
197
+ type: StepTypes.MESSAGE_CREATION,
198
+ message_creation: {
199
+ message_id,
200
+ },
201
+ });
202
+ const newStepId = graph.getStepIdByKey(newStepKey);
203
+ graph.dispatchMessageDelta(newStepId, {
204
+ content: [
205
+ {
206
+ type: ContentTypes.TEXT,
207
+ text: text,
208
+ },
209
+ ],
210
+ });
211
+ }
212
+ }
213
+ else {
214
+ graph.dispatchReasoningDelta(stepId, {
215
+ content: [
216
+ {
217
+ type: ContentTypes.THINK,
218
+ think: content,
219
+ },
220
+ ],
221
+ });
222
+ }
223
+ }
224
+ else if (content.every((c) => c.type?.startsWith(ContentTypes.TEXT) ?? false)) {
225
+ graph.dispatchMessageDelta(stepId, {
226
+ content,
227
+ });
228
+ }
229
+ else if (content.every((c) => (c.type?.startsWith(ContentTypes.THINKING) ?? false) ||
230
+ (c.type?.startsWith(ContentTypes.REASONING) ?? false) ||
231
+ (c.type?.startsWith(ContentTypes.REASONING_CONTENT) ?? false))) {
232
+ graph.dispatchReasoningDelta(stepId, {
233
+ content: content.map((c) => ({
234
+ type: ContentTypes.THINK,
235
+ think: c.thinking ??
236
+ c.reasoning ??
237
+ c.reasoningText?.text ??
238
+ '',
239
+ })),
240
+ });
241
+ }
242
+ }
243
+ handleReasoning(chunk, graph, provider) {
244
+ let reasoning_content = chunk.additional_kwargs?.[graph.reasoningKey];
245
+ if (Array.isArray(chunk.content) &&
246
+ (chunk.content[0]?.type === ContentTypes.THINKING ||
247
+ chunk.content[0]?.type === ContentTypes.REASONING ||
248
+ chunk.content[0]?.type === ContentTypes.REASONING_CONTENT)) {
249
+ reasoning_content = 'valid';
250
+ }
251
+ else if ((provider === Providers.OPENAI || provider === Providers.AZURE) &&
252
+ reasoning_content != null &&
253
+ typeof reasoning_content !== 'string' &&
254
+ reasoning_content.summary?.[0]?.text != null &&
255
+ reasoning_content.summary[0].text) {
256
+ reasoning_content = 'valid';
257
+ }
258
+ if (reasoning_content != null &&
259
+ reasoning_content !== '' &&
260
+ (chunk.content == null ||
261
+ chunk.content === '' ||
262
+ reasoning_content === 'valid')) {
263
+ graph.currentTokenType = ContentTypes.THINK;
264
+ graph.tokenTypeSwitch = 'reasoning';
265
+ return;
266
+ }
267
+ else if (graph.tokenTypeSwitch === 'reasoning' &&
268
+ graph.currentTokenType !== ContentTypes.TEXT &&
269
+ ((chunk.content != null && chunk.content !== '') ||
270
+ (chunk.tool_calls?.length ?? 0) > 0)) {
271
+ graph.currentTokenType = ContentTypes.TEXT;
272
+ graph.tokenTypeSwitch = 'content';
273
+ }
274
+ else if (chunk.content != null &&
275
+ typeof chunk.content === 'string' &&
276
+ chunk.content.includes('<think>') &&
277
+ chunk.content.includes('</think>')) {
278
+ graph.currentTokenType = 'think_and_text';
279
+ graph.tokenTypeSwitch = 'content';
280
+ }
281
+ else if (chunk.content != null &&
282
+ typeof chunk.content === 'string' &&
283
+ chunk.content.includes('<think>')) {
284
+ graph.currentTokenType = ContentTypes.THINK;
285
+ graph.tokenTypeSwitch = 'content';
286
+ }
287
+ else if (graph.lastToken != null &&
288
+ graph.lastToken.includes('</think>')) {
289
+ graph.currentTokenType = ContentTypes.TEXT;
290
+ graph.tokenTypeSwitch = 'content';
291
+ }
292
+ if (typeof chunk.content !== 'string') {
293
+ return;
294
+ }
295
+ graph.lastToken = chunk.content;
296
+ }
297
+ }
298
+ function createContentAggregator() {
299
+ const contentParts = [];
300
+ const stepMap = new Map();
301
+ const toolCallIdMap = new Map();
302
+ const updateContent = (index, contentPart, finalUpdate = false) => {
303
+ if (!contentPart) {
304
+ console.warn('No content part found in \'updateContent\'');
305
+ return;
306
+ }
307
+ const partType = contentPart.type ?? '';
308
+ if (!partType) {
309
+ console.warn('No content type found in content part');
310
+ return;
311
+ }
312
+ if (!contentParts[index]) {
313
+ contentParts[index] = { type: partType };
314
+ }
315
+ if (!partType.startsWith(contentParts[index]?.type ?? '')) {
316
+ console.warn('Content type mismatch');
317
+ return;
318
+ }
319
+ if (partType.startsWith(ContentTypes.TEXT) &&
320
+ ContentTypes.TEXT in contentPart &&
321
+ typeof contentPart.text === 'string') {
322
+ // TODO: update this!!
323
+ const currentContent = contentParts[index];
324
+ const update = {
325
+ type: ContentTypes.TEXT,
326
+ text: (currentContent.text || '') + contentPart.text,
327
+ };
328
+ if (contentPart.tool_call_ids) {
329
+ update.tool_call_ids = contentPart.tool_call_ids;
330
+ }
331
+ contentParts[index] = update;
332
+ }
333
+ else if (partType.startsWith(ContentTypes.THINK) &&
334
+ ContentTypes.THINK in contentPart &&
335
+ typeof contentPart.think === 'string') {
336
+ const currentContent = contentParts[index];
337
+ const update = {
338
+ type: ContentTypes.THINK,
339
+ think: (currentContent.think || '') + contentPart.think,
340
+ };
341
+ contentParts[index] = update;
342
+ }
343
+ else if (partType.startsWith(ContentTypes.AGENT_UPDATE) &&
344
+ ContentTypes.AGENT_UPDATE in contentPart &&
345
+ contentPart.agent_update != null) {
346
+ const update = {
347
+ type: ContentTypes.AGENT_UPDATE,
348
+ agent_update: contentPart.agent_update,
349
+ };
350
+ contentParts[index] = update;
351
+ }
352
+ else if (partType === ContentTypes.IMAGE_URL &&
353
+ 'image_url' in contentPart) {
354
+ const currentContent = contentParts[index];
355
+ contentParts[index] = {
356
+ ...currentContent,
357
+ };
358
+ }
359
+ else if (partType === ContentTypes.TOOL_CALL &&
360
+ 'tool_call' in contentPart) {
361
+ const existingContent = contentParts[index];
362
+ const toolCallArgs = contentPart.tool_call.args;
363
+ /** When args are a valid object, they are likely already invoked */
364
+ let args = finalUpdate ||
365
+ typeof existingContent?.tool_call?.args === 'object' ||
366
+ typeof toolCallArgs === 'object'
367
+ ? contentPart.tool_call.args
368
+ : (existingContent?.tool_call?.args ?? '') + (toolCallArgs ?? '');
369
+ if (finalUpdate &&
370
+ args == null &&
371
+ existingContent?.tool_call?.args != null) {
372
+ args = existingContent.tool_call.args;
373
+ }
374
+ const id = getNonEmptyValue([
375
+ contentPart.tool_call.id,
376
+ existingContent?.tool_call?.id,
377
+ ]) ?? '';
378
+ const name = getNonEmptyValue([
379
+ contentPart.tool_call.name,
380
+ existingContent?.tool_call?.name,
381
+ ]) ?? '';
382
+ const newToolCall = {
383
+ id,
384
+ name,
385
+ args,
386
+ type: ToolCallTypes.TOOL_CALL,
387
+ };
388
+ if (finalUpdate) {
389
+ newToolCall.progress = 1;
390
+ newToolCall.output = contentPart.tool_call.output;
391
+ }
392
+ contentParts[index] = {
393
+ type: ContentTypes.TOOL_CALL,
394
+ tool_call: newToolCall,
395
+ };
396
+ }
397
+ };
398
+ const aggregateContent = ({ event, data, }) => {
399
+ if (event === GraphEvents.ON_RUN_STEP) {
400
+ const runStep = data;
401
+ stepMap.set(runStep.id, runStep);
402
+ // Store tool call IDs if present
403
+ if (runStep.stepDetails.type === StepTypes.TOOL_CALLS &&
404
+ runStep.stepDetails.tool_calls) {
405
+ runStep.stepDetails.tool_calls.forEach((toolCall) => {
406
+ const toolCallId = toolCall.id ?? '';
407
+ if ('id' in toolCall && toolCallId) {
408
+ toolCallIdMap.set(runStep.id, toolCallId);
409
+ }
410
+ const contentPart = {
411
+ type: ContentTypes.TOOL_CALL,
412
+ tool_call: {
413
+ args: toolCall.args,
414
+ name: toolCall.name,
415
+ id: toolCallId,
416
+ },
417
+ };
418
+ updateContent(runStep.index, contentPart);
419
+ });
420
+ }
421
+ }
422
+ else if (event === GraphEvents.ON_MESSAGE_DELTA) {
423
+ const messageDelta = data;
424
+ const runStep = stepMap.get(messageDelta.id);
425
+ if (!runStep) {
426
+ console.warn('No run step or runId found for message delta event');
427
+ return;
428
+ }
429
+ if (messageDelta.delta.content) {
430
+ const contentPart = Array.isArray(messageDelta.delta.content)
431
+ ? messageDelta.delta.content[0]
432
+ : messageDelta.delta.content;
433
+ updateContent(runStep.index, contentPart);
434
+ }
435
+ }
436
+ else if (event === GraphEvents.ON_AGENT_UPDATE &&
437
+ data?.agent_update) {
438
+ const contentPart = data;
439
+ if (!contentPart) {
440
+ return;
441
+ }
442
+ updateContent(contentPart.agent_update.index, contentPart);
443
+ }
444
+ else if (event === GraphEvents.ON_REASONING_DELTA) {
445
+ const reasoningDelta = data;
446
+ const runStep = stepMap.get(reasoningDelta.id);
447
+ if (!runStep) {
448
+ console.warn('No run step or runId found for reasoning delta event');
449
+ return;
450
+ }
451
+ if (reasoningDelta.delta.content) {
452
+ const contentPart = Array.isArray(reasoningDelta.delta.content)
453
+ ? reasoningDelta.delta.content[0]
454
+ : reasoningDelta.delta.content;
455
+ updateContent(runStep.index, contentPart);
456
+ }
457
+ }
458
+ else if (event === GraphEvents.ON_RUN_STEP_DELTA) {
459
+ const runStepDelta = data;
460
+ const runStep = stepMap.get(runStepDelta.id);
461
+ if (!runStep) {
462
+ console.warn('No run step or runId found for run step delta event');
463
+ return;
464
+ }
465
+ if (runStepDelta.delta.type === StepTypes.TOOL_CALLS &&
466
+ runStepDelta.delta.tool_calls) {
467
+ runStepDelta.delta.tool_calls.forEach((toolCallDelta) => {
468
+ const toolCallId = toolCallIdMap.get(runStepDelta.id);
469
+ const contentPart = {
470
+ type: ContentTypes.TOOL_CALL,
471
+ tool_call: {
472
+ args: toolCallDelta.args ?? '',
473
+ name: toolCallDelta.name,
474
+ id: toolCallId,
475
+ },
476
+ };
477
+ updateContent(runStep.index, contentPart);
478
+ });
479
+ }
480
+ }
481
+ else if (event === GraphEvents.ON_RUN_STEP_COMPLETED) {
482
+ const { result } = data;
483
+ const { id: stepId } = result;
484
+ const runStep = stepMap.get(stepId);
485
+ if (!runStep) {
486
+ console.warn('No run step or runId found for completed tool call event');
487
+ return;
488
+ }
489
+ const contentPart = {
490
+ type: ContentTypes.TOOL_CALL,
491
+ tool_call: result.tool_call,
492
+ };
493
+ updateContent(runStep.index, contentPart, true);
494
+ }
495
+ };
496
+ return { contentParts, aggregateContent, stepMap };
497
+ }
498
+
499
+ export { ChatModelStreamHandler, createContentAggregator, getChunkContent };
500
+ //# sourceMappingURL=stream.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.mjs","sources":["../../src/stream.ts"],"sourcesContent":["// src/stream.ts\r\nimport type { ChatOpenAIReasoningSummary } from '@langchain/openai';\r\nimport type { AIMessageChunk } from '@langchain/core/messages';\r\nimport type { ToolCall } from '@langchain/core/messages/tool';\r\nimport type { Graph } from '@/graphs';\r\nimport type * as t from '@/types';\r\nimport {\r\n ToolCallTypes,\r\n ContentTypes,\r\n GraphEvents,\r\n StepTypes,\r\n Providers,\r\n} from '@/common';\r\nimport {\r\n handleServerToolResult,\r\n handleToolCallChunks,\r\n handleToolCalls,\r\n} from '@/tools/handlers';\r\nimport { getMessageId } from '@/messages';\r\n\r\n/**\r\n * Parses content to extract thinking sections enclosed in <think> tags using string operations\r\n * @param content The content to parse\r\n * @returns An object with separated text and thinking content\r\n */\r\nfunction parseThinkingContent(content: string): {\r\n text: string;\r\n thinking: string;\r\n} {\r\n // If no think tags, return the original content as text\r\n if (!content.includes('<think>')) {\r\n return { text: content, thinking: '' };\r\n }\r\n\r\n let textResult = '';\r\n const thinkingResult: string[] = [];\r\n let position = 0;\r\n\r\n while (position < content.length) {\r\n const thinkStart = content.indexOf('<think>', position);\r\n\r\n if (thinkStart === -1) {\r\n // No more think tags, add the rest and break\r\n textResult += content.slice(position);\r\n break;\r\n }\r\n\r\n // Add text before the think tag\r\n textResult += content.slice(position, thinkStart);\r\n\r\n const thinkEnd = content.indexOf('</think>', thinkStart);\r\n if (thinkEnd === -1) {\r\n // Malformed input, no closing tag\r\n textResult += content.slice(thinkStart);\r\n break;\r\n }\r\n\r\n // Add the thinking content\r\n const thinkContent = content.slice(thinkStart + 7, thinkEnd);\r\n thinkingResult.push(thinkContent);\r\n\r\n // Move position to after the think tag\r\n position = thinkEnd + 8; // 8 is the length of '</think>'\r\n }\r\n\r\n return {\r\n text: textResult.trim(),\r\n thinking: thinkingResult.join('\\n').trim(),\r\n };\r\n}\r\n\r\nfunction getNonEmptyValue(possibleValues: string[]): string | undefined {\r\n for (const value of possibleValues) {\r\n if (value && value.trim() !== '') {\r\n return value;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\nexport function getChunkContent({\r\n chunk,\r\n provider,\r\n reasoningKey,\r\n}: {\r\n chunk?: Partial<AIMessageChunk>;\r\n provider?: Providers;\r\n reasoningKey: 'reasoning_content' | 'reasoning';\r\n}): string | t.MessageContentComplex[] | undefined {\r\n if (\r\n (provider === Providers.OPENAI || provider === Providers.AZURE) &&\r\n (\r\n chunk?.additional_kwargs?.reasoning as\r\n | Partial<ChatOpenAIReasoningSummary>\r\n | undefined\r\n )?.summary?.[0]?.text != null &&\r\n ((\r\n chunk?.additional_kwargs?.reasoning as\r\n | Partial<ChatOpenAIReasoningSummary>\r\n | undefined\r\n )?.summary?.[0]?.text?.length ?? 0) > 0\r\n ) {\r\n return (\r\n chunk?.additional_kwargs?.reasoning as\r\n | Partial<ChatOpenAIReasoningSummary>\r\n | undefined\r\n )?.summary?.[0]?.text;\r\n }\r\n return (\r\n ((chunk?.additional_kwargs?.[reasoningKey] as string | undefined) ?? '') ||\r\n chunk?.content\r\n );\r\n}\r\n\r\nexport class ChatModelStreamHandler implements t.EventHandler {\r\n handle(\r\n event: string,\r\n data: t.StreamEventData,\r\n metadata?: Record<string, unknown>,\r\n graph?: Graph\r\n ): void {\r\n if (!graph) {\r\n throw new Error('Graph not found');\r\n }\r\n if (!graph.config) {\r\n throw new Error('Config not found in graph');\r\n }\r\n if (!data.chunk) {\r\n console.warn(`No chunk found in ${event} event`);\r\n return;\r\n }\r\n\r\n const chunk = data.chunk as Partial<AIMessageChunk>;\r\n const content = getChunkContent({\r\n chunk,\r\n reasoningKey: graph.reasoningKey,\r\n provider: metadata?.provider as Providers,\r\n });\r\n const skipHandling = handleServerToolResult({\r\n content,\r\n metadata,\r\n graph,\r\n });\r\n if (skipHandling) {\r\n return;\r\n }\r\n this.handleReasoning(chunk, graph, metadata?.provider as Providers);\r\n let hasToolCalls = false;\r\n if (\r\n chunk.tool_calls &&\r\n chunk.tool_calls.length > 0 &&\r\n chunk.tool_calls.every((tc) => tc.id != null && tc.id !== '')\r\n ) {\r\n hasToolCalls = true;\r\n handleToolCalls(chunk.tool_calls, metadata, graph);\r\n }\r\n\r\n const hasToolCallChunks =\r\n (chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0) ?? false;\r\n const isEmptyContent =\r\n typeof content === 'undefined' ||\r\n !content.length ||\r\n (typeof content === 'string' && !content);\r\n const isEmptyChunk = isEmptyContent && !hasToolCallChunks;\r\n const chunkId = chunk.id ?? '';\r\n if (isEmptyChunk && chunkId && chunkId.startsWith('msg')) {\r\n if (graph.messageIdsByStepKey.has(chunkId)) {\r\n return;\r\n } else if (graph.prelimMessageIdsByStepKey.has(chunkId)) {\r\n return;\r\n }\r\n\r\n const stepKey = graph.getStepKey(metadata);\r\n graph.prelimMessageIdsByStepKey.set(stepKey, chunkId);\r\n return;\r\n } else if (isEmptyChunk) {\r\n return;\r\n }\r\n\r\n const stepKey = graph.getStepKey(metadata);\r\n\r\n if (\r\n hasToolCallChunks &&\r\n chunk.tool_call_chunks &&\r\n chunk.tool_call_chunks.length &&\r\n typeof chunk.tool_call_chunks[0]?.index === 'number'\r\n ) {\r\n handleToolCallChunks({\r\n graph,\r\n stepKey,\r\n toolCallChunks: chunk.tool_call_chunks,\r\n });\r\n }\r\n\r\n if (isEmptyContent) {\r\n return;\r\n }\r\n\r\n const message_id = getMessageId(stepKey, graph) ?? '';\r\n if (message_id) {\r\n graph.dispatchRunStep(stepKey, {\r\n type: StepTypes.MESSAGE_CREATION,\r\n message_creation: {\r\n message_id,\r\n },\r\n });\r\n }\r\n\r\n const stepId = graph.getStepIdByKey(stepKey);\r\n const runStep = graph.getRunStep(stepId);\r\n if (!runStep) {\r\n console.warn(`\\n\r\n==============================================================\r\n\r\n\r\nRun step for ${stepId} does not exist, cannot dispatch delta event.\r\n\r\nevent: ${event}\r\nstepId: ${stepId}\r\nstepKey: ${stepKey}\r\nmessage_id: ${message_id}\r\nhasToolCalls: ${hasToolCalls}\r\nhasToolCallChunks: ${hasToolCallChunks}\r\n\r\n==============================================================\r\n\\n`);\r\n return;\r\n }\r\n\r\n /* Note: tool call chunks may have non-empty content that matches the current tool chunk generation */\r\n if (typeof content === 'string' && runStep.type === StepTypes.TOOL_CALLS) {\r\n return;\r\n } else if (\r\n hasToolCallChunks &&\r\n (chunk.tool_call_chunks?.some((tc) => tc.args === content) ?? false)\r\n ) {\r\n return;\r\n } else if (typeof content === 'string') {\r\n if (graph.currentTokenType === ContentTypes.TEXT) {\r\n graph.dispatchMessageDelta(stepId, {\r\n content: [\r\n {\r\n type: ContentTypes.TEXT,\r\n text: content,\r\n },\r\n ],\r\n });\r\n } else if (graph.currentTokenType === 'think_and_text') {\r\n const { text, thinking } = parseThinkingContent(content);\r\n if (thinking) {\r\n graph.dispatchReasoningDelta(stepId, {\r\n content: [\r\n {\r\n type: ContentTypes.THINK,\r\n think: thinking,\r\n },\r\n ],\r\n });\r\n }\r\n if (text) {\r\n graph.currentTokenType = ContentTypes.TEXT;\r\n graph.tokenTypeSwitch = 'content';\r\n const newStepKey = graph.getStepKey(metadata);\r\n const message_id = getMessageId(newStepKey, graph) ?? '';\r\n graph.dispatchRunStep(newStepKey, {\r\n type: StepTypes.MESSAGE_CREATION,\r\n message_creation: {\r\n message_id,\r\n },\r\n });\r\n\r\n const newStepId = graph.getStepIdByKey(newStepKey);\r\n graph.dispatchMessageDelta(newStepId, {\r\n content: [\r\n {\r\n type: ContentTypes.TEXT,\r\n text: text,\r\n },\r\n ],\r\n });\r\n }\r\n } else {\r\n graph.dispatchReasoningDelta(stepId, {\r\n content: [\r\n {\r\n type: ContentTypes.THINK,\r\n think: content,\r\n },\r\n ],\r\n });\r\n }\r\n } else if (\r\n content.every((c) => c.type?.startsWith(ContentTypes.TEXT) ?? false)\r\n ) {\r\n graph.dispatchMessageDelta(stepId, {\r\n content,\r\n });\r\n } else if (\r\n content.every(\r\n (c) =>\r\n (c.type?.startsWith(ContentTypes.THINKING) ?? false) ||\r\n (c.type?.startsWith(ContentTypes.REASONING) ?? false) ||\r\n (c.type?.startsWith(ContentTypes.REASONING_CONTENT) ?? false)\r\n )\r\n ) {\r\n graph.dispatchReasoningDelta(stepId, {\r\n content: content.map((c) => ({\r\n type: ContentTypes.THINK,\r\n think:\r\n (c as t.ThinkingContentText).thinking ??\r\n (c as Partial<t.GoogleReasoningContentText>).reasoning ??\r\n (c as Partial<t.BedrockReasoningContentText>).reasoningText?.text ??\r\n '',\r\n })),\r\n });\r\n }\r\n }\r\n handleReasoning(\r\n chunk: Partial<AIMessageChunk>,\r\n graph: Graph,\r\n provider?: Providers\r\n ): void {\r\n let reasoning_content = chunk.additional_kwargs?.[graph.reasoningKey] as\r\n | string\r\n | Partial<ChatOpenAIReasoningSummary>\r\n | undefined;\r\n if (\r\n Array.isArray(chunk.content) &&\r\n (chunk.content[0]?.type === ContentTypes.THINKING ||\r\n chunk.content[0]?.type === ContentTypes.REASONING ||\r\n chunk.content[0]?.type === ContentTypes.REASONING_CONTENT)\r\n ) {\r\n reasoning_content = 'valid';\r\n } else if (\r\n (provider === Providers.OPENAI || provider === Providers.AZURE) &&\r\n reasoning_content != null &&\r\n typeof reasoning_content !== 'string' &&\r\n reasoning_content.summary?.[0]?.text != null &&\r\n reasoning_content.summary[0].text\r\n ) {\r\n reasoning_content = 'valid';\r\n }\r\n if (\r\n reasoning_content != null &&\r\n reasoning_content !== '' &&\r\n (chunk.content == null ||\r\n chunk.content === '' ||\r\n reasoning_content === 'valid')\r\n ) {\r\n graph.currentTokenType = ContentTypes.THINK;\r\n graph.tokenTypeSwitch = 'reasoning';\r\n return;\r\n } else if (\r\n graph.tokenTypeSwitch === 'reasoning' &&\r\n graph.currentTokenType !== ContentTypes.TEXT &&\r\n ((chunk.content != null && chunk.content !== '') ||\r\n (chunk.tool_calls?.length ?? 0) > 0)\r\n ) {\r\n graph.currentTokenType = ContentTypes.TEXT;\r\n graph.tokenTypeSwitch = 'content';\r\n } else if (\r\n chunk.content != null &&\r\n typeof chunk.content === 'string' &&\r\n chunk.content.includes('<think>') &&\r\n chunk.content.includes('</think>')\r\n ) {\r\n graph.currentTokenType = 'think_and_text';\r\n graph.tokenTypeSwitch = 'content';\r\n } else if (\r\n chunk.content != null &&\r\n typeof chunk.content === 'string' &&\r\n chunk.content.includes('<think>')\r\n ) {\r\n graph.currentTokenType = ContentTypes.THINK;\r\n graph.tokenTypeSwitch = 'content';\r\n } else if (\r\n graph.lastToken != null &&\r\n graph.lastToken.includes('</think>')\r\n ) {\r\n graph.currentTokenType = ContentTypes.TEXT;\r\n graph.tokenTypeSwitch = 'content';\r\n }\r\n if (typeof chunk.content !== 'string') {\r\n return;\r\n }\r\n graph.lastToken = chunk.content;\r\n }\r\n}\r\n\r\nexport function createContentAggregator(): t.ContentAggregatorResult {\r\n const contentParts: Array<t.MessageContentComplex | undefined> = [];\r\n const stepMap = new Map<string, t.RunStep>();\r\n const toolCallIdMap = new Map<string, string>();\r\n\r\n const updateContent = (\r\n index: number,\r\n contentPart?: t.MessageContentComplex,\r\n finalUpdate = false\r\n ): void => {\r\n if (!contentPart) {\r\n console.warn('No content part found in \\'updateContent\\'');\r\n return;\r\n }\r\n const partType = contentPart.type ?? '';\r\n if (!partType) {\r\n console.warn('No content type found in content part');\r\n return;\r\n }\r\n\r\n if (!contentParts[index]) {\r\n contentParts[index] = { type: partType };\r\n }\r\n\r\n if (!partType.startsWith(contentParts[index]?.type ?? '')) {\r\n console.warn('Content type mismatch');\r\n return;\r\n }\r\n\r\n if (\r\n partType.startsWith(ContentTypes.TEXT) &&\r\n ContentTypes.TEXT in contentPart &&\r\n typeof contentPart.text === 'string'\r\n ) {\r\n // TODO: update this!!\r\n const currentContent = contentParts[index] as t.MessageDeltaUpdate;\r\n const update: t.MessageDeltaUpdate = {\r\n type: ContentTypes.TEXT,\r\n text: (currentContent.text || '') + contentPart.text,\r\n };\r\n\r\n if (contentPart.tool_call_ids) {\r\n update.tool_call_ids = contentPart.tool_call_ids;\r\n }\r\n contentParts[index] = update;\r\n } else if (\r\n partType.startsWith(ContentTypes.THINK) &&\r\n ContentTypes.THINK in contentPart &&\r\n typeof contentPart.think === 'string'\r\n ) {\r\n const currentContent = contentParts[index] as t.ReasoningDeltaUpdate;\r\n const update: t.ReasoningDeltaUpdate = {\r\n type: ContentTypes.THINK,\r\n think: (currentContent.think || '') + contentPart.think,\r\n };\r\n contentParts[index] = update;\r\n } else if (\r\n partType.startsWith(ContentTypes.AGENT_UPDATE) &&\r\n ContentTypes.AGENT_UPDATE in contentPart &&\r\n contentPart.agent_update != null\r\n ) {\r\n const update: t.AgentUpdate = {\r\n type: ContentTypes.AGENT_UPDATE,\r\n agent_update: contentPart.agent_update,\r\n };\r\n\r\n contentParts[index] = update;\r\n } else if (\r\n partType === ContentTypes.IMAGE_URL &&\r\n 'image_url' in contentPart\r\n ) {\r\n const currentContent = contentParts[index] as {\r\n type: 'image_url';\r\n image_url: string;\r\n };\r\n contentParts[index] = {\r\n ...currentContent,\r\n };\r\n } else if (\r\n partType === ContentTypes.TOOL_CALL &&\r\n 'tool_call' in contentPart\r\n ) {\r\n const existingContent = contentParts[index] as\r\n | (Omit<t.ToolCallContent, 'tool_call'> & {\r\n tool_call?: t.ToolCallPart;\r\n })\r\n | undefined;\r\n\r\n const toolCallArgs = (contentPart.tool_call as t.ToolCallPart).args;\r\n /** When args are a valid object, they are likely already invoked */\r\n let args =\r\n finalUpdate ||\r\n typeof existingContent?.tool_call?.args === 'object' ||\r\n typeof toolCallArgs === 'object'\r\n ? contentPart.tool_call.args\r\n : (existingContent?.tool_call?.args ?? '') + (toolCallArgs ?? '');\r\n if (\r\n finalUpdate &&\r\n args == null &&\r\n existingContent?.tool_call?.args != null\r\n ) {\r\n args = existingContent.tool_call.args;\r\n }\r\n\r\n const id =\r\n getNonEmptyValue([\r\n contentPart.tool_call.id,\r\n existingContent?.tool_call?.id,\r\n ]) ?? '';\r\n const name =\r\n getNonEmptyValue([\r\n contentPart.tool_call.name,\r\n existingContent?.tool_call?.name,\r\n ]) ?? '';\r\n\r\n const newToolCall: ToolCall & t.PartMetadata = {\r\n id,\r\n name,\r\n args,\r\n type: ToolCallTypes.TOOL_CALL,\r\n };\r\n\r\n if (finalUpdate) {\r\n newToolCall.progress = 1;\r\n newToolCall.output = contentPart.tool_call.output;\r\n }\r\n\r\n contentParts[index] = {\r\n type: ContentTypes.TOOL_CALL,\r\n tool_call: newToolCall,\r\n };\r\n }\r\n };\r\n\r\n const aggregateContent = ({\r\n event,\r\n data,\r\n }: {\r\n event: GraphEvents;\r\n data:\r\n | t.RunStep\r\n | t.AgentUpdate\r\n | t.MessageDeltaEvent\r\n | t.RunStepDeltaEvent\r\n | { result: t.ToolEndEvent };\r\n }): void => {\r\n if (event === GraphEvents.ON_RUN_STEP) {\r\n const runStep = data as t.RunStep;\r\n stepMap.set(runStep.id, runStep);\r\n\r\n // Store tool call IDs if present\r\n if (\r\n runStep.stepDetails.type === StepTypes.TOOL_CALLS &&\r\n runStep.stepDetails.tool_calls\r\n ) {\r\n (runStep.stepDetails.tool_calls as ToolCall[]).forEach((toolCall) => {\r\n const toolCallId = toolCall.id ?? '';\r\n if ('id' in toolCall && toolCallId) {\r\n toolCallIdMap.set(runStep.id, toolCallId);\r\n }\r\n const contentPart: t.MessageContentComplex = {\r\n type: ContentTypes.TOOL_CALL,\r\n tool_call: {\r\n args: toolCall.args,\r\n name: toolCall.name,\r\n id: toolCallId,\r\n },\r\n };\r\n\r\n updateContent(runStep.index, contentPart);\r\n });\r\n }\r\n } else if (event === GraphEvents.ON_MESSAGE_DELTA) {\r\n const messageDelta = data as t.MessageDeltaEvent;\r\n const runStep = stepMap.get(messageDelta.id);\r\n if (!runStep) {\r\n console.warn('No run step or runId found for message delta event');\r\n return;\r\n }\r\n\r\n if (messageDelta.delta.content) {\r\n const contentPart = Array.isArray(messageDelta.delta.content)\r\n ? messageDelta.delta.content[0]\r\n : messageDelta.delta.content;\r\n\r\n updateContent(runStep.index, contentPart);\r\n }\r\n } else if (\r\n event === GraphEvents.ON_AGENT_UPDATE &&\r\n (data as t.AgentUpdate | undefined)?.agent_update\r\n ) {\r\n const contentPart = data as t.AgentUpdate | undefined;\r\n if (!contentPart) {\r\n return;\r\n }\r\n updateContent(contentPart.agent_update.index, contentPart);\r\n } else if (event === GraphEvents.ON_REASONING_DELTA) {\r\n const reasoningDelta = data as t.ReasoningDeltaEvent;\r\n const runStep = stepMap.get(reasoningDelta.id);\r\n if (!runStep) {\r\n console.warn('No run step or runId found for reasoning delta event');\r\n return;\r\n }\r\n\r\n if (reasoningDelta.delta.content) {\r\n const contentPart = Array.isArray(reasoningDelta.delta.content)\r\n ? reasoningDelta.delta.content[0]\r\n : reasoningDelta.delta.content;\r\n\r\n updateContent(runStep.index, contentPart);\r\n }\r\n } else if (event === GraphEvents.ON_RUN_STEP_DELTA) {\r\n const runStepDelta = data as t.RunStepDeltaEvent;\r\n const runStep = stepMap.get(runStepDelta.id);\r\n if (!runStep) {\r\n console.warn('No run step or runId found for run step delta event');\r\n return;\r\n }\r\n\r\n if (\r\n runStepDelta.delta.type === StepTypes.TOOL_CALLS &&\r\n runStepDelta.delta.tool_calls\r\n ) {\r\n runStepDelta.delta.tool_calls.forEach((toolCallDelta) => {\r\n const toolCallId = toolCallIdMap.get(runStepDelta.id);\r\n\r\n const contentPart: t.MessageContentComplex = {\r\n type: ContentTypes.TOOL_CALL,\r\n tool_call: {\r\n args: toolCallDelta.args ?? '',\r\n name: toolCallDelta.name,\r\n id: toolCallId,\r\n },\r\n };\r\n\r\n updateContent(runStep.index, contentPart);\r\n });\r\n }\r\n } else if (event === GraphEvents.ON_RUN_STEP_COMPLETED) {\r\n const { result } = data as unknown as { result: t.ToolEndEvent };\r\n\r\n const { id: stepId } = result;\r\n\r\n const runStep = stepMap.get(stepId);\r\n if (!runStep) {\r\n console.warn(\r\n 'No run step or runId found for completed tool call event'\r\n );\r\n return;\r\n }\r\n\r\n const contentPart: t.MessageContentComplex = {\r\n type: ContentTypes.TOOL_CALL,\r\n tool_call: result.tool_call,\r\n };\r\n\r\n updateContent(runStep.index, contentPart, true);\r\n }\r\n };\r\n\r\n return { contentParts, aggregateContent, stepMap };\r\n}\r\n"],"names":[],"mappings":"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"}