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,202 @@
1
+ import fs from 'fs/promises';
2
+ import { pull } from 'langchain/hub';
3
+ import { ChatOpenAI } from '@langchain/openai';
4
+ import type { ChatPromptTemplate } from '@langchain/core/prompts';
5
+ import { AgentExecutor, createOpenAIFunctionsAgent, AgentStep } from 'langchain/agents';
6
+ import { TavilySearchResults } from '@langchain/community/tools/tavily_search';
7
+ import type { RunLogPatch } from '@langchain/core/tracers/log_stream';
8
+ import dotenv from 'dotenv';
9
+
10
+ type ExtractedJSONPatchOperation = Pick<RunLogPatch, 'ops'>;
11
+ type OperationType = ExtractedJSONPatchOperation extends { ops: (infer T)[] } ? T : never;
12
+
13
+ // Load environment variables from .env file
14
+ dotenv.config();
15
+
16
+ // Define the tools the agent will have access to.
17
+ const tools = [new TavilySearchResults({})];
18
+
19
+ const llm = new ChatOpenAI({
20
+ model: 'gpt-3.5-turbo-1106',
21
+ temperature: 0,
22
+ streaming: true,
23
+ });
24
+
25
+ // Get the prompt to use - you can modify this!
26
+ // If you want to see the prompt in full, you can at:
27
+ // https://smith.langchain.com/hub/hwchase17/openai-functions-agent
28
+ const prompt = await pull<ChatPromptTemplate>(
29
+ 'hwchase17/openai-functions-agent'
30
+ );
31
+
32
+ const agent = await createOpenAIFunctionsAgent({
33
+ llm,
34
+ tools,
35
+ prompt,
36
+ });
37
+
38
+ const agentExecutor = new AgentExecutor({
39
+ agent,
40
+ tools,
41
+ });
42
+
43
+ const logStream = await agentExecutor.streamLog({
44
+ input: 'what are the current US election polls 2024. today is 7/6/24',
45
+ });
46
+
47
+ const finalState: RunLogPatch[] = [];
48
+ const outputs: RunLogPatch[] = [];
49
+ let accumulatedOutput = '';
50
+ let accumulatedArguments = '';
51
+
52
+ let functionName: string | undefined = undefined;
53
+
54
+ function processStreamedOutput(op: any) {
55
+ let output = '';
56
+ if (op.value.text !== undefined) {
57
+ output += op.value.text;
58
+ }
59
+ if (op.value.message && op.value.message.kwargs) {
60
+ const kwargs = op.value.message.kwargs;
61
+ if (kwargs.content) {
62
+ output += kwargs.content;
63
+ }
64
+ }
65
+ if (output) {
66
+ accumulatedOutput += output;
67
+ process.stdout.write(output);
68
+ }
69
+ }
70
+
71
+ // A helper function to handle the event pattern for logged arguments
72
+ function handleLoggedArgument(loggedArgument: any) {
73
+ if (loggedArgument.value?.message?.additional_kwargs?.function_call) {
74
+ const functionCall = loggedArgument.value.message.additional_kwargs.function_call;
75
+
76
+ if (functionCall.name) {
77
+ functionName = functionCall.name;
78
+ process.stdout.write(`Logged Function Name:
79
+ ${JSON.stringify(functionCall, null, 2)}
80
+ `);
81
+ }
82
+
83
+ if (functionCall.arguments) {
84
+ accumulatedArguments += functionCall.arguments;
85
+ // Print the part of the argument as it comes
86
+ // process.stdout.write(`Logged Argument: { "arguments": "${functionCall.arguments}" }\n`);
87
+ process.stdout.write(`Logged Argument:\n${JSON.stringify(functionCall, null, 2)}`);
88
+ }
89
+
90
+ // Check if the full arguments string has been accumulated
91
+ if (accumulatedArguments.startsWith('{') && accumulatedArguments.endsWith('}')) {
92
+ // Build the final logged argument string
93
+ const completeArguments = accumulatedArguments;
94
+ const namePart = functionName ? `"name": "${functionName}", ` : '';
95
+
96
+ console.log(`\nLogged Argument: {\n ${namePart}"arguments": ${completeArguments}\n}\n`);
97
+
98
+ // Reset accumulators
99
+ accumulatedArguments = '';
100
+ functionName = undefined;
101
+ }
102
+ }
103
+ }
104
+
105
+ for await (const chunk of logStream) {
106
+ finalState.push(chunk);
107
+ outputs.push(chunk);
108
+
109
+ if (!chunk.ops) continue;
110
+
111
+ for (const op of chunk.ops) {
112
+ if (isStreamedOutput(op)) {
113
+ processStreamedOutput(op);
114
+ if (hasFunctionCall(op)) {
115
+ handleLoggedArgument(op);
116
+ }
117
+ } else if (isFinalOutput(op)) {
118
+ printFinalOutput(op);
119
+ }
120
+ }
121
+ }
122
+
123
+ function isStreamedOutput(op: OperationType) {
124
+ return op.op === 'add' && (
125
+ op.path.includes('/streamed_output/-') ||
126
+ op.path.includes('/streamed_output_str/-')
127
+ );
128
+ }
129
+
130
+ function hasFunctionCall(op: OperationType) {
131
+ return (op as any)?.value?.message?.additional_kwargs?.function_call;
132
+ }
133
+
134
+ function isFinalOutput(op: OperationType) {
135
+ return op.op === 'add' &&
136
+ op.value?.output &&
137
+ op.path?.startsWith('/logs/') &&
138
+ op.path?.endsWith('final_output') &&
139
+ !op.path?.includes('Runnable');
140
+ }
141
+
142
+ function printFinalOutput(op: OperationType) {
143
+ process.stdout.write(JSON.stringify(op, null, 2));
144
+ process.stdout.write(`
145
+
146
+ ########################_START_##########################
147
+ ${JSON.stringify((op as any)?.value?.output, null, 2)}
148
+ ########################__END__##########################
149
+
150
+ `);
151
+ }
152
+
153
+ // Define types for the final output structure
154
+ interface FinalOutput {
155
+ id: string;
156
+ streamed_output: Array<{
157
+ intermediateSteps?: AgentStep[];
158
+ output?: string;
159
+ }>;
160
+ final_output?: {
161
+ output: string;
162
+ };
163
+ logs: Record<string, any>;
164
+ }
165
+
166
+ // Process finalState to create FinalOutput
167
+ const finalOutput: FinalOutput = {
168
+ id: '',
169
+ streamed_output: [],
170
+ logs: {},
171
+ };
172
+
173
+ for (const patch of finalState) {
174
+ if (patch.ops) {
175
+ for (const op of patch.ops) {
176
+ if (op.op === 'add' || op.op === 'replace') {
177
+ if (op.path === '/id') {
178
+ finalOutput.id = op.value;
179
+ } else if (op.path === '/streamed_output/-') {
180
+ finalOutput.streamed_output.push(op.value);
181
+ } else if (op.path === '/final_output') {
182
+ finalOutput.final_output = op.value;
183
+ } else if (op.path.startsWith('/logs/')) {
184
+ const logKey = op.path.split('/')[2];
185
+ finalOutput.logs[logKey] = op.value;
186
+ }
187
+ }
188
+ }
189
+ }
190
+ }
191
+
192
+ // Save outputs to a JSON file
193
+ await fs.writeFile('outputs.json', JSON.stringify(outputs, null, 2));
194
+ console.log('\n\nOutputs have been saved to outputs.json');
195
+
196
+ // Save the final state separately
197
+ await fs.writeFile('final_output.json', JSON.stringify(finalOutput, null, 2));
198
+ console.log('\n\nFinal output has been saved to final_output.json');
199
+
200
+ // Save the cleaned-up accumulated output
201
+ await fs.writeFile('cleaned_output.txt', accumulatedOutput);
202
+ console.log('\n\nCleaned output has been saved to cleaned_output.txt');
@@ -0,0 +1,133 @@
1
+ // src/main_collab_community_event.ts
2
+ import dotenv from 'dotenv';
3
+ import { HumanMessage } from '@langchain/core/messages';
4
+ import type * as t from '@/types';
5
+ import {
6
+ ChatModelStreamHandler,
7
+ LLMStreamHandler,
8
+ } from '@/stream';
9
+ import { CollaborativeProcessor, Member } from '@/collab_design_v5';
10
+ import { tavilyTool, chartTool } from '@/tools/example';
11
+ import { supervisorPrompt } from '@/prompts/collab';
12
+ import { GraphEvents, Providers } from '@/common';
13
+ import fs from 'fs';
14
+ import util from 'util';
15
+
16
+ dotenv.config();
17
+
18
+ // Create a write stream
19
+ const logFile = fs.createWriteStream('event_log.log', { flags: 'a' });
20
+
21
+ // Redirect console.log and console.error
22
+ const originalConsoleLog = console.log;
23
+ const originalConsoleError = console.error;
24
+
25
+ console.log = function(...args) {
26
+ logFile.write(util.format.apply(null, args) + '\n');
27
+ originalConsoleLog.apply(console, args);
28
+ };
29
+
30
+ console.error = function(...args) {
31
+ logFile.write(util.format.apply(null, args) + '\n');
32
+ originalConsoleError.apply(console, args);
33
+ };
34
+
35
+ // Redirect process.stdout.write
36
+ const originalStdoutWrite = process.stdout.write;
37
+ process.stdout.write = function(chunk: string | Uint8Array, encoding?: BufferEncoding, callback?: (error: Error | null | undefined) => void): boolean {
38
+ logFile.write(chunk, encoding);
39
+ return originalStdoutWrite.apply(process.stdout, [chunk, encoding, callback]);
40
+ } as any;
41
+
42
+ // Redirect process.stderr.write
43
+ const originalStderrWrite = process.stderr.write;
44
+ process.stderr.write = function(chunk: string | Uint8Array, encoding?: BufferEncoding, callback?: (error: Error | null | undefined) => void): boolean {
45
+ logFile.write(chunk, encoding);
46
+ return originalStderrWrite.apply(process.stderr, [chunk, encoding, callback]);
47
+ } as any;
48
+
49
+ async function testCollaborativeCommunityEvent() {
50
+ const customHandlers = {
51
+ [GraphEvents.LLM_STREAM]: new LLMStreamHandler(),
52
+ [GraphEvents.CHAT_MODEL_STREAM]: new ChatModelStreamHandler(),
53
+ [GraphEvents.LLM_START]: {
54
+ handle: (event: string, data: t.StreamEventData) => {
55
+ console.log('LLM Start:', event);
56
+ }
57
+ },
58
+ [GraphEvents.LLM_END]: {
59
+ handle: (event: string, data: t.StreamEventData) => {
60
+ console.log('LLM End:', event);
61
+ }
62
+ },
63
+ [GraphEvents.CHAT_MODEL_END]: {
64
+ handle: (event: string, data: t.StreamEventData) => {
65
+ console.log('Chat Model End:', event);
66
+ }
67
+ },
68
+ [GraphEvents.TOOL_END]: {
69
+ handle: (event: string, data: t.StreamEventData) => {
70
+ console.log('Tool End:', event);
71
+ console.dir(data, { depth: null });
72
+ }
73
+ },
74
+ };
75
+
76
+ // Define the collaborative members
77
+ const members: Member[] = [
78
+ {
79
+ name: 'resource_finder',
80
+ systemPrompt: 'You are a resource finder. You utilize the Tavily search engine to gather necessary resources and contacts needed for the community event.',
81
+ tools: [tavilyTool],
82
+ llmConfig: {
83
+ provider: Providers.OPENAI,
84
+ modelName: 'gpt-4o',
85
+ temperature: 0,
86
+ },
87
+ },
88
+ {
89
+ name: 'event_scheduler',
90
+ systemPrompt: 'You are an event scheduler. You manage the timeline of the event activities using the Chart Generator to visualize the schedule.',
91
+ tools: [chartTool],
92
+ llmConfig: {
93
+ provider: Providers.OPENAI,
94
+ modelName: 'gpt-4o',
95
+ temperature: 0.2,
96
+ },
97
+ },
98
+ ];
99
+
100
+ const supervisorConfig = {
101
+ systemPrompt: supervisorPrompt,
102
+ llmConfig: {
103
+ provider: Providers.OPENAI,
104
+ modelName: 'gpt-4o',
105
+ temperature: 0,
106
+ },
107
+ };
108
+
109
+ const collaborativeProcessor = new CollaborativeProcessor(members, supervisorConfig, customHandlers);
110
+ await collaborativeProcessor.initialize();
111
+
112
+ const config = {
113
+ configurable: { thread_id: 'collaborative-event-planning-1' },
114
+ streamMode: 'events',
115
+ version: 'v2',
116
+ };
117
+
118
+ console.log('\nCollaborative Test: Plan a community event');
119
+
120
+ const input = {
121
+ messages: [new HumanMessage('Plan a community fair including activities for all ages, food vendors, and a performance stage.')],
122
+ };
123
+
124
+ await collaborativeProcessor.processStream(input, config);
125
+ }
126
+
127
+ async function main() {
128
+ await testCollaborativeCommunityEvent();
129
+ }
130
+
131
+ main().catch(console.error).finally(() => {
132
+ logFile.end();
133
+ });
@@ -0,0 +1,96 @@
1
+ // src/collaborative_main.ts
2
+ import dotenv from 'dotenv';
3
+ import { HumanMessage } from '@langchain/core/messages';
4
+ import type * as t from '@/types';
5
+ import {
6
+ ChatModelStreamHandler,
7
+ LLMStreamHandler,
8
+ } from '@/stream';
9
+ import { CollaborativeProcessor, Member } from '@/collab_design_v5';
10
+ import { tavilyTool, chartTool } from '@/tools/example';
11
+ import { GraphEvents, Providers } from '@/common';
12
+
13
+ dotenv.config();
14
+
15
+ async function testCollaborativeStreaming() {
16
+ const customHandlers = {
17
+ [GraphEvents.LLM_STREAM]: new LLMStreamHandler(),
18
+ [GraphEvents.CHAT_MODEL_STREAM]: new ChatModelStreamHandler(),
19
+ [GraphEvents.LLM_START]: {
20
+ handle: (event: string, data: t.StreamEventData) => {
21
+ console.log('LLM Start:', event);
22
+ // console.dir(data, { depth: null });
23
+ }
24
+ },
25
+ [GraphEvents.LLM_END]: {
26
+ handle: (event: string, data: t.StreamEventData) => {
27
+ console.log('LLM End:', event);
28
+ // console.dir(data, { depth: null });
29
+ }
30
+ },
31
+ [GraphEvents.CHAT_MODEL_END]: {
32
+ handle: (event: string, data: t.StreamEventData) => {
33
+ console.log('Chat Model End:', event);
34
+ // console.dir(data, { depth: null });
35
+ }
36
+ },
37
+ [GraphEvents.TOOL_END]: {
38
+ handle: (event: string, data: t.StreamEventData) => {
39
+ console.log('Tool End:', event);
40
+ // console.dir(data, { depth: null });
41
+ }
42
+ },
43
+ };
44
+
45
+ const members: Member[] = [
46
+ {
47
+ name: 'researcher',
48
+ systemPrompt: 'You are a web researcher. You may use the Tavily search engine to search the web for important information, so the Chart Generator in your team can make useful plots.',
49
+ tools: [tavilyTool],
50
+ llmConfig: {
51
+ provider: Providers.OPENAI,
52
+ modelName: 'gpt-4o',
53
+ temperature: 0,
54
+ },
55
+ },
56
+ {
57
+ name: 'chart_generator',
58
+ systemPrompt: 'You excel at generating bar charts. Use the researcher\'s information to generate the charts.',
59
+ tools: [chartTool],
60
+ llmConfig: {
61
+ provider: Providers.OPENAI,
62
+ modelName: 'gpt-4o',
63
+ temperature: 0.2,
64
+ },
65
+ },
66
+ ];
67
+
68
+ const collaborativeProcessor = new CollaborativeProcessor(members, {
69
+ llmConfig: {
70
+ provider: Providers.OPENAI,
71
+ modelName: 'gpt-4o',
72
+ temperature: 0.5,
73
+ },
74
+ }, customHandlers);
75
+ await collaborativeProcessor.initialize();
76
+
77
+ const config = {
78
+ configurable: { thread_id: 'collaborative-conversation-1' },
79
+ streamMode: 'values',
80
+ version: 'v2' as const,
81
+ };
82
+
83
+ console.log('\nCollaborative Test: Create a chart');
84
+
85
+ const input = {
86
+ messages: [new HumanMessage('Create a chart showing the population growth of the top 5 most populous countries over the last 50 years.')],
87
+ };
88
+
89
+ await collaborativeProcessor.processStream(input, config);
90
+ }
91
+
92
+ async function main() {
93
+ await testCollaborativeStreaming();
94
+ }
95
+
96
+ main().catch(console.error);
@@ -0,0 +1,100 @@
1
+ // src/collaborative_main.ts
2
+ import dotenv from 'dotenv';
3
+ import { HumanMessage } from '@langchain/core/messages';
4
+ import type * as t from '@/types';
5
+ import {
6
+ ChatModelStreamHandler,
7
+ LLMStreamHandler,
8
+ } from '@/stream';
9
+ import { CollaborativeProcessor, Member } from '@/collab_design_v4';
10
+ import { tavilyTool, chartTool } from '@/tools/example';
11
+ import { supervisorPrompt } from '@/prompts/collab';
12
+ import { GraphEvents, Providers } from '@/common';
13
+
14
+ dotenv.config();
15
+
16
+ async function testCollaborativeStreaming() {
17
+ const customHandlers = {
18
+ [GraphEvents.LLM_STREAM]: new LLMStreamHandler(),
19
+ [GraphEvents.CHAT_MODEL_STREAM]: new ChatModelStreamHandler(),
20
+ [GraphEvents.LLM_START]: {
21
+ handle: (event: string, data: t.StreamEventData) => {
22
+ console.log('LLM Start:', event);
23
+ // console.dir(data, { depth: null });
24
+ }
25
+ },
26
+ [GraphEvents.LLM_END]: {
27
+ handle: (event: string, data: t.StreamEventData) => {
28
+ console.log('LLM End:', event);
29
+ // console.dir(data, { depth: null });
30
+ }
31
+ },
32
+ [GraphEvents.CHAT_MODEL_END]: {
33
+ handle: (event: string, data: t.StreamEventData) => {
34
+ console.log('Chat Model End:', event);
35
+ // console.dir(data, { depth: null });
36
+ }
37
+ },
38
+ [GraphEvents.TOOL_END]: {
39
+ handle: (event: string, data: t.StreamEventData) => {
40
+ console.log('Tool End:', event);
41
+ console.dir(data, { depth: null });
42
+ }
43
+ },
44
+ };
45
+
46
+ const members: Member[] = [
47
+ {
48
+ name: 'researcher',
49
+ systemPrompt: 'You are a web researcher. You may use the Tavily search engine to search the web for important information, so the Chart Generator in your team can make useful plots.',
50
+ tools: [tavilyTool],
51
+ llmConfig: {
52
+ provider: Providers.OPENAI,
53
+ modelName: 'gpt-4o',
54
+ temperature: 0,
55
+ },
56
+ },
57
+ {
58
+ name: 'chart_generator',
59
+ systemPrompt: 'You excel at generating bar charts. Use the researcher\'s information to generate the charts.',
60
+ tools: [chartTool],
61
+ llmConfig: {
62
+ provider: Providers.OPENAI,
63
+ modelName: 'gpt-4o',
64
+ temperature: 0.2,
65
+ },
66
+ },
67
+ ];
68
+
69
+ const supervisorConfig = {
70
+ systemPrompt: supervisorPrompt,
71
+ llmConfig: {
72
+ provider: Providers.OPENAI,
73
+ modelName: 'gpt-4o',
74
+ temperature: 0,
75
+ },
76
+ };
77
+
78
+ const collaborativeProcessor = new CollaborativeProcessor(members, supervisorConfig, customHandlers);
79
+ await collaborativeProcessor.initialize();
80
+
81
+ const config = {
82
+ configurable: { thread_id: 'collaborative-conversation-1' },
83
+ streamMode: 'values',
84
+ version: 'v2' as const,
85
+ };
86
+
87
+ console.log('\nCollaborative Test: Create a chart');
88
+
89
+ const input = {
90
+ messages: [new HumanMessage('Create a chart showing the population growth of the top 5 most populous countries over the last 50 years.')],
91
+ };
92
+
93
+ await collaborativeProcessor.processStream(input, config);
94
+ }
95
+
96
+ async function main() {
97
+ await testCollaborativeStreaming();
98
+ }
99
+
100
+ main().catch(console.error);
@@ -0,0 +1,135 @@
1
+ // src/main_collab_design_v5.ts
2
+ import dotenv from 'dotenv';
3
+ import { HumanMessage } from '@langchain/core/messages';
4
+ import type * as t from '@/types';
5
+ import {
6
+ ChatModelStreamHandler,
7
+ LLMStreamHandler,
8
+ } from '@/stream';
9
+ import { CollaborativeProcessor, Member } from '@/collab_design_v5';
10
+ import { tavilyTool, chartTool } from '@/tools/example';
11
+ import { supervisorPrompt } from '@/prompts/collab';
12
+ import { GraphEvents, Providers } from '@/common';
13
+ import fs from 'fs';
14
+ import util from 'util';
15
+
16
+ dotenv.config();
17
+
18
+ // Create a write stream
19
+ const logFile = fs.createWriteStream('output.log', { flags: 'a' });
20
+
21
+ // Redirect console.log and console.error
22
+ const originalConsoleLog = console.log;
23
+ const originalConsoleError = console.error;
24
+
25
+ console.log = function(...args) {
26
+ logFile.write(util.format.apply(null, args) + '\n');
27
+ originalConsoleLog.apply(console, args);
28
+ };
29
+
30
+ console.error = function(...args) {
31
+ logFile.write(util.format.apply(null, args) + '\n');
32
+ originalConsoleError.apply(console, args);
33
+ };
34
+
35
+ // Redirect process.stdout.write
36
+ const originalStdoutWrite = process.stdout.write;
37
+ process.stdout.write = function(chunk: string | Uint8Array, encoding?: BufferEncoding, callback?: (error: Error | null | undefined) => void): boolean {
38
+ logFile.write(chunk, encoding);
39
+ return originalStdoutWrite.apply(process.stdout, [chunk, encoding, callback]);
40
+ } as any;
41
+
42
+ // Redirect process.stderr.write
43
+ const originalStderrWrite = process.stderr.write;
44
+ process.stderr.write = function(chunk: string | Uint8Array, encoding?: BufferEncoding, callback?: (error: Error | null | undefined) => void): boolean {
45
+ logFile.write(chunk, encoding);
46
+ return originalStderrWrite.apply(process.stderr, [chunk, encoding, callback]);
47
+ } as any;
48
+
49
+ async function testCollaborativeStreaming() {
50
+ const customHandlers = {
51
+ [GraphEvents.LLM_STREAM]: new LLMStreamHandler(),
52
+ [GraphEvents.CHAT_MODEL_STREAM]: new ChatModelStreamHandler(),
53
+ [GraphEvents.LLM_START]: {
54
+ handle: (event: string, data: t.StreamEventData) => {
55
+ console.log('LLM Start:', event);
56
+ // console.dir(data, { depth: null });
57
+ }
58
+ },
59
+ [GraphEvents.LLM_END]: {
60
+ handle: (event: string, data: t.StreamEventData) => {
61
+ console.log('LLM End:', event);
62
+ // console.dir(data, { depth: null });
63
+ }
64
+ },
65
+ [GraphEvents.CHAT_MODEL_END]: {
66
+ handle: (event: string, data: t.StreamEventData) => {
67
+ console.log('Chat Model End:', event);
68
+ // console.dir(data, { depth: null });
69
+ }
70
+ },
71
+ [GraphEvents.TOOL_END]: {
72
+ handle: (event: string, data: t.StreamEventData) => {
73
+ console.log('Tool End:', event);
74
+ console.dir(data, { depth: null });
75
+ }
76
+ },
77
+ };
78
+
79
+ const members: Member[] = [
80
+ {
81
+ name: 'researcher',
82
+ systemPrompt: 'You are a web researcher. You may use the Tavily search engine to search the web for important information, so the Chart Generator in your team can make useful plots.',
83
+ tools: [tavilyTool],
84
+ llmConfig: {
85
+ provider: Providers.OPENAI,
86
+ modelName: 'gpt-4o',
87
+ temperature: 0,
88
+ },
89
+ },
90
+ {
91
+ name: 'chart_generator',
92
+ systemPrompt: 'You excel at generating bar charts. Use the researcher\'s information to generate the charts.',
93
+ tools: [chartTool],
94
+ llmConfig: {
95
+ provider: Providers.OPENAI,
96
+ modelName: 'gpt-4o',
97
+ temperature: 0.2,
98
+ },
99
+ },
100
+ ];
101
+
102
+ const supervisorConfig = {
103
+ systemPrompt: supervisorPrompt,
104
+ llmConfig: {
105
+ provider: Providers.OPENAI,
106
+ modelName: 'gpt-4o',
107
+ temperature: 0,
108
+ },
109
+ };
110
+
111
+ const collaborativeProcessor = new CollaborativeProcessor(members, supervisorConfig, customHandlers);
112
+ await collaborativeProcessor.initialize();
113
+
114
+ const config = {
115
+ configurable: { thread_id: 'collaborative-conversation-1' },
116
+ streamMode: 'values',
117
+ version: 'v2' as const,
118
+ };
119
+
120
+ console.log('\nCollaborative Test: Create a chart');
121
+
122
+ const input = {
123
+ messages: [new HumanMessage('Create a chart showing the population growth of the top 5 most populous countries over the last 50 years.')],
124
+ };
125
+
126
+ await collaborativeProcessor.processStream(input, config);
127
+ }
128
+
129
+ async function main() {
130
+ await testCollaborativeStreaming();
131
+ }
132
+
133
+ main().catch(console.error).finally(() => {
134
+ logFile.end();
135
+ });