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,218 @@
1
+ 'use strict';
2
+
3
+ var messages = require('@langchain/core/messages');
4
+ require('@langchain/core/output_parsers');
5
+ require('@langchain/core/utils/types');
6
+
7
+ function _makeMessageChunkFromAnthropicEvent(data, fields) {
8
+ if (data.type === 'message_start') {
9
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
10
+ const { content, usage, ...additionalKwargs } = data.message;
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ const filteredAdditionalKwargs = {};
13
+ for (const [key, value] of Object.entries(additionalKwargs)) {
14
+ if (value !== undefined && value !== null) {
15
+ filteredAdditionalKwargs[key] = value;
16
+ }
17
+ }
18
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+ const { input_tokens, output_tokens, ...rest } = usage ?? {};
20
+ const usageMetadata = {
21
+ input_tokens,
22
+ output_tokens,
23
+ total_tokens: input_tokens + output_tokens,
24
+ input_token_details: {
25
+ cache_creation: rest.cache_creation_input_tokens,
26
+ cache_read: rest.cache_read_input_tokens,
27
+ },
28
+ };
29
+ return {
30
+ chunk: new messages.AIMessageChunk({
31
+ content: fields.coerceContentToString ? '' : [],
32
+ additional_kwargs: filteredAdditionalKwargs,
33
+ usage_metadata: fields.streamUsage ? usageMetadata : undefined,
34
+ response_metadata: {
35
+ usage: {
36
+ ...rest,
37
+ },
38
+ },
39
+ id: data.message.id,
40
+ }),
41
+ };
42
+ }
43
+ else if (data.type === 'message_delta') {
44
+ const usageMetadata = {
45
+ input_tokens: 0,
46
+ output_tokens: data.usage.output_tokens,
47
+ total_tokens: data.usage.output_tokens,
48
+ input_token_details: {
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ cache_creation: data.usage.cache_creation_input_tokens,
51
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
52
+ cache_read: data.usage.cache_read_input_tokens,
53
+ },
54
+ };
55
+ return {
56
+ chunk: new messages.AIMessageChunk({
57
+ content: fields.coerceContentToString ? '' : [],
58
+ additional_kwargs: { ...data.delta },
59
+ usage_metadata: fields.streamUsage ? usageMetadata : undefined,
60
+ }),
61
+ };
62
+ }
63
+ else if (data.type === 'content_block_start' &&
64
+ [
65
+ 'tool_use',
66
+ 'document',
67
+ 'server_tool_use',
68
+ 'web_search_tool_result',
69
+ ].includes(data.content_block.type)) {
70
+ const contentBlock = data.content_block;
71
+ let toolCallChunks;
72
+ if (contentBlock.type === 'tool_use') {
73
+ toolCallChunks = [
74
+ {
75
+ id: contentBlock.id,
76
+ index: data.index,
77
+ name: contentBlock.name,
78
+ args: '',
79
+ },
80
+ ];
81
+ }
82
+ else if (contentBlock.type === 'server_tool_use') {
83
+ // Handle anthropic built-in server tool use (like web search)
84
+ toolCallChunks = [
85
+ {
86
+ id: contentBlock.id,
87
+ index: data.index,
88
+ name: contentBlock.name,
89
+ args: '',
90
+ },
91
+ ];
92
+ }
93
+ else {
94
+ toolCallChunks = [];
95
+ }
96
+ return {
97
+ chunk: new messages.AIMessageChunk({
98
+ content: fields.coerceContentToString
99
+ ? ''
100
+ : [
101
+ {
102
+ index: data.index,
103
+ ...data.content_block,
104
+ input: contentBlock.type === 'server_tool_use' ||
105
+ contentBlock.type === 'tool_use'
106
+ ? ''
107
+ : undefined,
108
+ },
109
+ ],
110
+ additional_kwargs: {},
111
+ tool_call_chunks: toolCallChunks,
112
+ }),
113
+ };
114
+ }
115
+ else if (data.type === 'content_block_delta' &&
116
+ [
117
+ 'text_delta',
118
+ 'citations_delta',
119
+ 'thinking_delta',
120
+ 'signature_delta',
121
+ ].includes(data.delta.type)) {
122
+ if (fields.coerceContentToString && 'text' in data.delta) {
123
+ return {
124
+ chunk: new messages.AIMessageChunk({
125
+ content: data.delta.text,
126
+ }),
127
+ };
128
+ }
129
+ else {
130
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
131
+ const contentBlock = data.delta;
132
+ if ('citation' in contentBlock) {
133
+ contentBlock.citations = [contentBlock.citation];
134
+ delete contentBlock.citation;
135
+ }
136
+ if (contentBlock.type === 'thinking_delta' ||
137
+ contentBlock.type === 'signature_delta') {
138
+ return {
139
+ chunk: new messages.AIMessageChunk({
140
+ content: [{ index: data.index, ...contentBlock, type: 'thinking' }],
141
+ }),
142
+ };
143
+ }
144
+ return {
145
+ chunk: new messages.AIMessageChunk({
146
+ content: [{ index: data.index, ...contentBlock, type: 'text' }],
147
+ }),
148
+ };
149
+ }
150
+ }
151
+ else if (data.type === 'content_block_delta' &&
152
+ data.delta.type === 'input_json_delta') {
153
+ return {
154
+ chunk: new messages.AIMessageChunk({
155
+ content: fields.coerceContentToString
156
+ ? ''
157
+ : [
158
+ {
159
+ index: data.index,
160
+ input: data.delta.partial_json,
161
+ type: data.delta.type,
162
+ },
163
+ ],
164
+ additional_kwargs: {},
165
+ tool_call_chunks: [
166
+ {
167
+ index: data.index,
168
+ args: data.delta.partial_json,
169
+ },
170
+ ],
171
+ }),
172
+ };
173
+ }
174
+ else if (data.type === 'content_block_start' &&
175
+ data.content_block.type === 'text') {
176
+ const content = data.content_block.text;
177
+ if (content !== undefined) {
178
+ return {
179
+ chunk: new messages.AIMessageChunk({
180
+ content: fields.coerceContentToString
181
+ ? content
182
+ : [
183
+ {
184
+ index: data.index,
185
+ ...data.content_block,
186
+ },
187
+ ],
188
+ additional_kwargs: {},
189
+ }),
190
+ };
191
+ }
192
+ }
193
+ else if (data.type === 'content_block_start' &&
194
+ data.content_block.type === 'redacted_thinking') {
195
+ return {
196
+ chunk: new messages.AIMessageChunk({
197
+ content: fields.coerceContentToString
198
+ ? ''
199
+ : [{ index: data.index, ...data.content_block }],
200
+ }),
201
+ };
202
+ }
203
+ else if (data.type === 'content_block_start' &&
204
+ data.content_block.type === 'thinking') {
205
+ const content = data.content_block.thinking;
206
+ return {
207
+ chunk: new messages.AIMessageChunk({
208
+ content: fields.coerceContentToString
209
+ ? content
210
+ : [{ index: data.index, ...data.content_block }],
211
+ }),
212
+ };
213
+ }
214
+ return null;
215
+ }
216
+
217
+ exports._makeMessageChunkFromAnthropicEvent = _makeMessageChunkFromAnthropicEvent;
218
+ //# sourceMappingURL=message_outputs.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message_outputs.cjs","sources":["../../../../../src/llm/anthropic/utils/message_outputs.ts"],"sourcesContent":["/**\r\n * This util file contains functions for converting Anthropic messages to LangChain messages.\r\n */\r\nimport Anthropic from '@anthropic-ai/sdk';\r\nimport {\r\n AIMessage,\r\n AIMessageChunk,\r\n UsageMetadata,\r\n} from '@langchain/core/messages';\r\nimport type { ToolCallChunk } from '@langchain/core/messages/tool';\r\nimport { ChatGeneration } from '@langchain/core/outputs';\r\nimport { extractToolCalls } from './output_parsers';\r\nimport { AnthropicMessageResponse } from '../types';\r\n\r\nexport function _makeMessageChunkFromAnthropicEvent(\r\n data: Anthropic.Messages.RawMessageStreamEvent,\r\n fields: {\r\n streamUsage: boolean;\r\n coerceContentToString: boolean;\r\n }\r\n): {\r\n chunk: AIMessageChunk;\r\n} | null {\r\n if (data.type === 'message_start') {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const { content, usage, ...additionalKwargs } = data.message;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const filteredAdditionalKwargs: Record<string, any> = {};\r\n for (const [key, value] of Object.entries(additionalKwargs)) {\r\n if (value !== undefined && value !== null) {\r\n filteredAdditionalKwargs[key] = value;\r\n }\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const { input_tokens, output_tokens, ...rest }: Record<string, any> =\r\n usage ?? {};\r\n const usageMetadata: UsageMetadata = {\r\n input_tokens,\r\n output_tokens,\r\n total_tokens: input_tokens + output_tokens,\r\n input_token_details: {\r\n cache_creation: rest.cache_creation_input_tokens,\r\n cache_read: rest.cache_read_input_tokens,\r\n },\r\n };\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: fields.coerceContentToString ? '' : [],\r\n additional_kwargs: filteredAdditionalKwargs,\r\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\r\n response_metadata: {\r\n usage: {\r\n ...rest,\r\n },\r\n },\r\n id: data.message.id,\r\n }),\r\n };\r\n } else if (data.type === 'message_delta') {\r\n const usageMetadata: UsageMetadata = {\r\n input_tokens: 0,\r\n output_tokens: data.usage.output_tokens,\r\n total_tokens: data.usage.output_tokens,\r\n input_token_details: {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cache_creation: (data.usage as any).cache_creation_input_tokens,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n cache_read: (data.usage as any).cache_read_input_tokens,\r\n },\r\n };\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: fields.coerceContentToString ? '' : [],\r\n additional_kwargs: { ...data.delta },\r\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\r\n }),\r\n };\r\n } else if (\r\n data.type === 'content_block_start' &&\r\n [\r\n 'tool_use',\r\n 'document',\r\n 'server_tool_use',\r\n 'web_search_tool_result',\r\n ].includes(data.content_block.type)\r\n ) {\r\n const contentBlock = data.content_block;\r\n let toolCallChunks: ToolCallChunk[];\r\n if (contentBlock.type === 'tool_use') {\r\n toolCallChunks = [\r\n {\r\n id: contentBlock.id,\r\n index: data.index,\r\n name: contentBlock.name,\r\n args: '',\r\n },\r\n ];\r\n } else if (contentBlock.type === 'server_tool_use') {\r\n // Handle anthropic built-in server tool use (like web search)\r\n toolCallChunks = [\r\n {\r\n id: contentBlock.id,\r\n index: data.index,\r\n name: contentBlock.name,\r\n args: '',\r\n },\r\n ];\r\n } else {\r\n toolCallChunks = [];\r\n }\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: fields.coerceContentToString\r\n ? ''\r\n : [\r\n {\r\n index: data.index,\r\n ...data.content_block,\r\n input:\r\n contentBlock.type === 'server_tool_use' ||\r\n contentBlock.type === 'tool_use'\r\n ? ''\r\n : undefined,\r\n },\r\n ],\r\n additional_kwargs: {},\r\n tool_call_chunks: toolCallChunks,\r\n }),\r\n };\r\n } else if (\r\n data.type === 'content_block_delta' &&\r\n [\r\n 'text_delta',\r\n 'citations_delta',\r\n 'thinking_delta',\r\n 'signature_delta',\r\n ].includes(data.delta.type)\r\n ) {\r\n if (fields.coerceContentToString && 'text' in data.delta) {\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: data.delta.text,\r\n }),\r\n };\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const contentBlock: Record<string, any> = data.delta;\r\n if ('citation' in contentBlock) {\r\n contentBlock.citations = [contentBlock.citation];\r\n delete contentBlock.citation;\r\n }\r\n if (\r\n contentBlock.type === 'thinking_delta' ||\r\n contentBlock.type === 'signature_delta'\r\n ) {\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: [{ index: data.index, ...contentBlock, type: 'thinking' }],\r\n }),\r\n };\r\n }\r\n\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: [{ index: data.index, ...contentBlock, type: 'text' }],\r\n }),\r\n };\r\n }\r\n } else if (\r\n data.type === 'content_block_delta' &&\r\n data.delta.type === 'input_json_delta'\r\n ) {\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: fields.coerceContentToString\r\n ? ''\r\n : [\r\n {\r\n index: data.index,\r\n input: data.delta.partial_json,\r\n type: data.delta.type,\r\n },\r\n ],\r\n additional_kwargs: {},\r\n tool_call_chunks: [\r\n {\r\n index: data.index,\r\n args: data.delta.partial_json,\r\n },\r\n ],\r\n }),\r\n };\r\n } else if (\r\n data.type === 'content_block_start' &&\r\n data.content_block.type === 'text'\r\n ) {\r\n const content = data.content_block.text;\r\n if (content !== undefined) {\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: fields.coerceContentToString\r\n ? content\r\n : [\r\n {\r\n index: data.index,\r\n ...data.content_block,\r\n },\r\n ],\r\n additional_kwargs: {},\r\n }),\r\n };\r\n }\r\n } else if (\r\n data.type === 'content_block_start' &&\r\n data.content_block.type === 'redacted_thinking'\r\n ) {\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: fields.coerceContentToString\r\n ? ''\r\n : [{ index: data.index, ...data.content_block }],\r\n }),\r\n };\r\n } else if (\r\n data.type === 'content_block_start' &&\r\n data.content_block.type === 'thinking'\r\n ) {\r\n const content = data.content_block.thinking;\r\n return {\r\n chunk: new AIMessageChunk({\r\n content: fields.coerceContentToString\r\n ? content\r\n : [{ index: data.index, ...data.content_block }],\r\n }),\r\n };\r\n }\r\n return null;\r\n}\r\n\r\nexport function anthropicResponseToChatMessages(\r\n messages: AnthropicMessageResponse[],\r\n additionalKwargs: Record<string, unknown>\r\n): ChatGeneration[] {\r\n const usage: Record<string, number> | null | undefined =\r\n additionalKwargs.usage as Record<string, number> | null | undefined;\r\n const usageMetadata =\r\n usage != null\r\n ? {\r\n input_tokens: usage.input_tokens ?? 0,\r\n output_tokens: usage.output_tokens ?? 0,\r\n total_tokens: (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\r\n input_token_details: {\r\n cache_creation: usage.cache_creation_input_tokens,\r\n cache_read: usage.cache_read_input_tokens,\r\n },\r\n }\r\n : undefined;\r\n if (messages.length === 1 && messages[0].type === 'text') {\r\n return [\r\n {\r\n text: messages[0].text,\r\n message: new AIMessage({\r\n content: messages[0].text,\r\n additional_kwargs: additionalKwargs,\r\n usage_metadata: usageMetadata,\r\n response_metadata: additionalKwargs,\r\n id: additionalKwargs.id as string,\r\n }),\r\n },\r\n ];\r\n } else {\r\n const toolCalls = extractToolCalls(messages);\r\n const generations: ChatGeneration[] = [\r\n {\r\n text: '',\r\n message: new AIMessage({\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n content: messages as any,\r\n additional_kwargs: additionalKwargs,\r\n tool_calls: toolCalls,\r\n usage_metadata: usageMetadata,\r\n response_metadata: additionalKwargs,\r\n id: additionalKwargs.id as string,\r\n }),\r\n },\r\n ];\r\n return generations;\r\n }\r\n}\r\n"],"names":["AIMessageChunk"],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ function handleToolChoice(toolChoice) {
4
+ if (toolChoice == null) {
5
+ return undefined;
6
+ }
7
+ else if (toolChoice === 'any') {
8
+ return {
9
+ type: 'any',
10
+ };
11
+ }
12
+ else if (toolChoice === 'auto') {
13
+ return {
14
+ type: 'auto',
15
+ };
16
+ }
17
+ else if (typeof toolChoice === 'string') {
18
+ return {
19
+ type: 'tool',
20
+ name: toolChoice,
21
+ };
22
+ }
23
+ else {
24
+ return toolChoice;
25
+ }
26
+ }
27
+
28
+ exports.handleToolChoice = handleToolChoice;
29
+ //# sourceMappingURL=tools.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.cjs","sources":["../../../../../src/llm/anthropic/utils/tools.ts"],"sourcesContent":["import type { Anthropic } from '@anthropic-ai/sdk';\r\nimport { AnthropicToolChoice } from '../types.js';\r\n\r\nexport function handleToolChoice(\r\n toolChoice?: AnthropicToolChoice\r\n):\r\n | Anthropic.Messages.ToolChoiceAuto\r\n | Anthropic.Messages.ToolChoiceAny\r\n | Anthropic.Messages.ToolChoiceTool\r\n | undefined {\r\n if (toolChoice == null) {\r\n return undefined;\r\n } else if (toolChoice === 'any') {\r\n return {\r\n type: 'any',\r\n };\r\n } else if (toolChoice === 'auto') {\r\n return {\r\n type: 'auto',\r\n };\r\n } else if (typeof toolChoice === 'string') {\r\n return {\r\n type: 'tool',\r\n name: toolChoice,\r\n };\r\n } else {\r\n return toolChoice;\r\n }\r\n}\r\n"],"names":[],"mappings":";;AAGM,SAAU,gBAAgB,CAC9B,UAAgC,EAAA;AAMhC,IAAA,IAAI,UAAU,IAAI,IAAI,EAAE;AACtB,QAAA,OAAO,SAAS;;AACX,SAAA,IAAI,UAAU,KAAK,KAAK,EAAE;QAC/B,OAAO;AACL,YAAA,IAAI,EAAE,KAAK;SACZ;;AACI,SAAA,IAAI,UAAU,KAAK,MAAM,EAAE;QAChC,OAAO;AACL,YAAA,IAAI,EAAE,MAAM;SACb;;AACI,SAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;QACzC,OAAO;AACL,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,IAAI,EAAE,UAAU;SACjB;;SACI;AACL,QAAA,OAAO,UAAU;;AAErB;;;;"}
@@ -0,0 +1,97 @@
1
+ 'use strict';
2
+
3
+ var outputs = require('@langchain/core/outputs');
4
+ var messages = require('@langchain/core/messages');
5
+ var testing = require('@langchain/core/utils/testing');
6
+
7
+ class FakeChatModel extends testing.FakeListChatModel {
8
+ splitStrategy;
9
+ toolCalls = [];
10
+ addedToolCalls = false;
11
+ constructor({ responses, sleep, emitCustomEvent, splitStrategy = { type: 'regex', value: /(?<=\s+)|(?=\s+)/ }, toolCalls = [] }) {
12
+ super({ responses, sleep, emitCustomEvent });
13
+ this.splitStrategy = splitStrategy;
14
+ this.toolCalls = toolCalls;
15
+ }
16
+ splitText(text) {
17
+ if (this.splitStrategy.type === 'regex') {
18
+ return text.split(this.splitStrategy.value);
19
+ }
20
+ else {
21
+ const chunkSize = this.splitStrategy.value;
22
+ const chunks = [];
23
+ for (let i = 0; i < text.length; i += chunkSize) {
24
+ chunks.push(text.slice(i, i + chunkSize));
25
+ }
26
+ return chunks;
27
+ }
28
+ }
29
+ _createResponseChunk(text, tool_call_chunks) {
30
+ return new outputs.ChatGenerationChunk({
31
+ text,
32
+ generationInfo: {},
33
+ message: new messages.AIMessageChunk({
34
+ content: text,
35
+ tool_call_chunks,
36
+ additional_kwargs: tool_call_chunks ? {
37
+ tool_calls: tool_call_chunks.map((toolCall) => ({
38
+ index: toolCall.index ?? 0,
39
+ id: toolCall.id ?? '',
40
+ type: 'function',
41
+ function: {
42
+ name: toolCall.name ?? '',
43
+ arguments: toolCall.args ?? '',
44
+ },
45
+ })),
46
+ } : undefined,
47
+ })
48
+ });
49
+ }
50
+ async *_streamResponseChunks(_messages, options, runManager) {
51
+ const response = this._currentResponse();
52
+ this._incrementResponse();
53
+ if (this.emitCustomEvent) {
54
+ await runManager?.handleCustomEvent('some_test_event', {
55
+ someval: true,
56
+ });
57
+ }
58
+ const chunks = this.splitText(response);
59
+ for await (const chunk of chunks) {
60
+ await this._sleepIfRequested();
61
+ if (options.thrownErrorString != null && options.thrownErrorString) {
62
+ throw new Error(options.thrownErrorString);
63
+ }
64
+ const responseChunk = super._createResponseChunk(chunk);
65
+ yield responseChunk;
66
+ void runManager?.handleLLMNewToken(chunk);
67
+ }
68
+ await this._sleepIfRequested();
69
+ if (this.toolCalls.length > 0 && !this.addedToolCalls) {
70
+ this.addedToolCalls = true;
71
+ const toolCallChunks = this.toolCalls.map((toolCall) => {
72
+ return {
73
+ name: toolCall.name,
74
+ args: JSON.stringify(toolCall.args),
75
+ id: toolCall.id,
76
+ type: 'tool_call_chunk',
77
+ };
78
+ });
79
+ const responseChunk = this._createResponseChunk('', toolCallChunks);
80
+ yield responseChunk;
81
+ void runManager?.handleLLMNewToken('');
82
+ }
83
+ }
84
+ }
85
+ function createFakeStreamingLLM({ responses, sleep, splitStrategy, toolCalls, }) {
86
+ return new FakeChatModel({
87
+ sleep,
88
+ responses,
89
+ emitCustomEvent: true,
90
+ splitStrategy,
91
+ toolCalls,
92
+ });
93
+ }
94
+
95
+ exports.FakeChatModel = FakeChatModel;
96
+ exports.createFakeStreamingLLM = createFakeStreamingLLM;
97
+ //# sourceMappingURL=fake.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake.cjs","sources":["../../../src/llm/fake.ts"],"sourcesContent":["import { ChatGenerationChunk } from '@langchain/core/outputs';\r\nimport { AIMessageChunk } from '@langchain/core/messages';\r\nimport type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\r\nimport type { BaseMessage } from '@langchain/core/messages';\r\nimport { FakeListChatModel } from '@langchain/core/utils/testing';\r\nimport { ToolCall, ToolCallChunk } from '@langchain/core/messages/tool';\r\n\r\ntype SplitStrategy = {\r\n type: 'regex' | 'fixed';\r\n value: RegExp | number;\r\n};\r\n\r\nexport class FakeChatModel extends FakeListChatModel {\r\n private splitStrategy: SplitStrategy;\r\n private toolCalls: ToolCall[] = [];\r\n private addedToolCalls: boolean = false;\r\n\r\n constructor({\r\n responses,\r\n sleep,\r\n emitCustomEvent,\r\n splitStrategy = { type: 'regex', value: /(?<=\\s+)|(?=\\s+)/ },\r\n toolCalls = []\r\n }: {\r\n responses: string[];\r\n sleep?: number;\r\n emitCustomEvent?: boolean;\r\n splitStrategy?: SplitStrategy;\r\n toolCalls?: ToolCall[];\r\n }) {\r\n super({ responses, sleep, emitCustomEvent });\r\n this.splitStrategy = splitStrategy;\r\n this.toolCalls = toolCalls;\r\n }\r\n\r\n private splitText(text: string): string[] {\r\n if (this.splitStrategy.type === 'regex') {\r\n return text.split(this.splitStrategy.value as RegExp);\r\n } else {\r\n const chunkSize = this.splitStrategy.value as number;\r\n const chunks: string[] = [];\r\n for (let i = 0; i < text.length; i += chunkSize) {\r\n chunks.push(text.slice(i, i + chunkSize));\r\n }\r\n return chunks;\r\n }\r\n }\r\n _createResponseChunk(text: string, tool_call_chunks?: ToolCallChunk[]): ChatGenerationChunk {\r\n return new ChatGenerationChunk({\r\n text,\r\n generationInfo: {},\r\n message: new AIMessageChunk({\r\n content: text,\r\n tool_call_chunks,\r\n additional_kwargs: tool_call_chunks ? {\r\n tool_calls: tool_call_chunks.map((toolCall) => ({\r\n index: toolCall.index ?? 0,\r\n id: toolCall.id ?? '',\r\n type: 'function',\r\n function: {\r\n name: toolCall.name ?? '',\r\n arguments: toolCall.args ?? '',\r\n },\r\n })),\r\n } : undefined,\r\n })});\r\n }\r\n\r\n async *_streamResponseChunks(\r\n _messages: BaseMessage[],\r\n options: this['ParsedCallOptions'],\r\n runManager?: CallbackManagerForLLMRun\r\n ): AsyncGenerator<ChatGenerationChunk> {\r\n const response = this._currentResponse();\r\n this._incrementResponse();\r\n\r\n if (this.emitCustomEvent) {\r\n await runManager?.handleCustomEvent('some_test_event', {\r\n someval: true,\r\n });\r\n }\r\n\r\n const chunks = this.splitText(response);\r\n for await (const chunk of chunks) {\r\n await this._sleepIfRequested();\r\n\r\n if (options.thrownErrorString != null && options.thrownErrorString) {\r\n throw new Error(options.thrownErrorString);\r\n }\r\n\r\n const responseChunk = super._createResponseChunk(chunk);\r\n yield responseChunk;\r\n void runManager?.handleLLMNewToken(chunk);\r\n }\r\n\r\n await this._sleepIfRequested();\r\n if (this.toolCalls.length > 0 && !this.addedToolCalls) {\r\n this.addedToolCalls = true;\r\n const toolCallChunks = this.toolCalls.map((toolCall) => {;\r\n return {\r\n name: toolCall.name,\r\n args: JSON.stringify(toolCall.args),\r\n id: toolCall.id,\r\n type: 'tool_call_chunk',\r\n } as ToolCallChunk;\r\n });\r\n const responseChunk = this._createResponseChunk('', toolCallChunks);\r\n yield responseChunk;\r\n void runManager?.handleLLMNewToken('');\r\n }\r\n }\r\n}\r\n\r\nexport function createFakeStreamingLLM({\r\n responses,\r\n sleep,\r\n splitStrategy,\r\n toolCalls,\r\n} : {\r\n responses: string[],\r\n sleep?: number,\r\n splitStrategy?: SplitStrategy,\r\n toolCalls?: ToolCall[]\r\n}\r\n): FakeChatModel {\r\n return new FakeChatModel({\r\n sleep,\r\n responses,\r\n emitCustomEvent: true,\r\n splitStrategy,\r\n toolCalls,\r\n });\r\n}\r\n"],"names":["FakeListChatModel","ChatGenerationChunk","AIMessageChunk"],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ 'use strict';
2
+
3
+ var messages = require('@langchain/core/messages');
4
+ var outputs = require('@langchain/core/outputs');
5
+ var googleGenai = require('@langchain/google-genai');
6
+ var env = require('@langchain/core/utils/env');
7
+ var generativeAi = require('@google/generative-ai');
8
+ var common = require('./utils/common.cjs');
9
+
10
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
11
+ class CustomChatGoogleGenerativeAI extends googleGenai.ChatGoogleGenerativeAI {
12
+ thinkingConfig;
13
+ constructor(fields) {
14
+ super(fields);
15
+ this.model = fields.model.replace(/^models\//, '');
16
+ this.maxOutputTokens = fields.maxOutputTokens ?? this.maxOutputTokens;
17
+ if (this.maxOutputTokens != null && this.maxOutputTokens < 0) {
18
+ throw new Error('`maxOutputTokens` must be a positive integer');
19
+ }
20
+ this.temperature = fields.temperature ?? this.temperature;
21
+ if (this.temperature != null &&
22
+ (this.temperature < 0 || this.temperature > 2)) {
23
+ throw new Error('`temperature` must be in the range of [0.0,2.0]');
24
+ }
25
+ this.topP = fields.topP ?? this.topP;
26
+ if (this.topP != null && this.topP < 0) {
27
+ throw new Error('`topP` must be a positive integer');
28
+ }
29
+ if (this.topP != null && this.topP > 1) {
30
+ throw new Error('`topP` must be below 1.');
31
+ }
32
+ this.topK = fields.topK ?? this.topK;
33
+ if (this.topK != null && this.topK < 0) {
34
+ throw new Error('`topK` must be a positive integer');
35
+ }
36
+ this.stopSequences = fields.stopSequences ?? this.stopSequences;
37
+ this.apiKey = fields.apiKey ?? env.getEnvironmentVariable('GOOGLE_API_KEY');
38
+ if (this.apiKey == null || this.apiKey === '') {
39
+ throw new Error('Please set an API key for Google GenerativeAI ' +
40
+ 'in the environment variable GOOGLE_API_KEY ' +
41
+ 'or in the `apiKey` field of the ' +
42
+ 'ChatGoogleGenerativeAI constructor');
43
+ }
44
+ this.safetySettings = fields.safetySettings ?? this.safetySettings;
45
+ if (this.safetySettings && this.safetySettings.length > 0) {
46
+ const safetySettingsSet = new Set(this.safetySettings.map((s) => s.category));
47
+ if (safetySettingsSet.size !== this.safetySettings.length) {
48
+ throw new Error('The categories in `safetySettings` array must be unique');
49
+ }
50
+ }
51
+ this.thinkingConfig = fields.thinkingConfig ?? this.thinkingConfig;
52
+ this.streaming = fields.streaming ?? this.streaming;
53
+ this.json = fields.json;
54
+ // @ts-ignore - Accessing private property from parent class
55
+ this.client = new generativeAi.GoogleGenerativeAI(this.apiKey).getGenerativeModel({
56
+ model: this.model,
57
+ safetySettings: this.safetySettings,
58
+ generationConfig: {
59
+ stopSequences: this.stopSequences,
60
+ maxOutputTokens: this.maxOutputTokens,
61
+ temperature: this.temperature,
62
+ topP: this.topP,
63
+ topK: this.topK,
64
+ ...(this.json != null
65
+ ? { responseMimeType: 'application/json' }
66
+ : {}),
67
+ },
68
+ }, {
69
+ apiVersion: fields.apiVersion,
70
+ baseUrl: fields.baseUrl,
71
+ customHeaders: fields.customHeaders,
72
+ });
73
+ this.streamUsage = fields.streamUsage ?? this.streamUsage;
74
+ }
75
+ static lc_name() {
76
+ return 'IllumaGoogleGenerativeAI';
77
+ }
78
+ invocationParams(options) {
79
+ const params = super.invocationParams(options);
80
+ if (this.thinkingConfig) {
81
+ /** @ts-ignore */
82
+ this.client.generationConfig = {
83
+ /** @ts-ignore */
84
+ ...this.client.generationConfig,
85
+ /** @ts-ignore */
86
+ thinkingConfig: this.thinkingConfig,
87
+ };
88
+ }
89
+ return params;
90
+ }
91
+ async *_streamResponseChunks(messages$1, options, runManager) {
92
+ const prompt = common.convertBaseMessagesToContent(messages$1, this._isMultimodalModel, this.useSystemInstruction);
93
+ let actualPrompt = prompt;
94
+ if (prompt?.[0].role === 'system') {
95
+ const [systemInstruction] = prompt;
96
+ /** @ts-ignore */
97
+ this.client.systemInstruction = systemInstruction;
98
+ actualPrompt = prompt.slice(1);
99
+ }
100
+ const parameters = this.invocationParams(options);
101
+ const request = {
102
+ ...parameters,
103
+ contents: actualPrompt,
104
+ };
105
+ const stream = await this.caller.callWithOptions({ signal: options.signal }, async () => {
106
+ /** @ts-ignore */
107
+ const { stream } = await this.client.generateContentStream(request);
108
+ return stream;
109
+ });
110
+ let lastUsageMetadata;
111
+ for await (const response of stream) {
112
+ if ('usageMetadata' in response &&
113
+ this.streamUsage !== false &&
114
+ options.streamUsage !== false) {
115
+ const genAIUsageMetadata = response.usageMetadata;
116
+ const output_tokens = (genAIUsageMetadata?.candidatesTokenCount ?? 0) +
117
+ (genAIUsageMetadata?.thoughtsTokenCount ?? 0);
118
+ lastUsageMetadata = {
119
+ input_tokens: genAIUsageMetadata?.promptTokenCount ?? 0,
120
+ output_tokens,
121
+ total_tokens: genAIUsageMetadata?.totalTokenCount ?? 0,
122
+ };
123
+ }
124
+ const chunk = common.convertResponseContentToChatGenerationChunk(response, {
125
+ usageMetadata: undefined});
126
+ if (!chunk) {
127
+ continue;
128
+ }
129
+ yield chunk;
130
+ await runManager?.handleLLMNewToken(chunk.text || '', undefined, undefined, undefined, undefined, { chunk });
131
+ }
132
+ if (lastUsageMetadata) {
133
+ const finalChunk = new outputs.ChatGenerationChunk({
134
+ text: '',
135
+ message: new messages.AIMessageChunk({
136
+ content: '',
137
+ usage_metadata: lastUsageMetadata,
138
+ }),
139
+ });
140
+ yield finalChunk;
141
+ await runManager?.handleLLMNewToken(finalChunk.text || '', undefined, undefined, undefined, undefined, { chunk: finalChunk });
142
+ }
143
+ }
144
+ }
145
+
146
+ exports.CustomChatGoogleGenerativeAI = CustomChatGoogleGenerativeAI;
147
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/llm/google/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\r\nimport { AIMessageChunk } from '@langchain/core/messages';\r\nimport { ChatGenerationChunk } from '@langchain/core/outputs';\r\nimport { ChatGoogleGenerativeAI } from '@langchain/google-genai';\r\nimport { getEnvironmentVariable } from '@langchain/core/utils/env';\r\nimport { GoogleGenerativeAI as GenerativeAI } from '@google/generative-ai';\r\nimport type {\r\n GenerateContentRequest,\r\n SafetySetting,\r\n} from '@google/generative-ai';\r\nimport type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\r\nimport type { BaseMessage, UsageMetadata } from '@langchain/core/messages';\r\nimport type { GeminiGenerationConfig } from '@langchain/google-common';\r\nimport type { GeminiApiUsageMetadata } from './types';\r\nimport type { GoogleClientOptions } from '@/types';\r\nimport {\r\n convertResponseContentToChatGenerationChunk,\r\n convertBaseMessagesToContent,\r\n} from './utils/common';\r\n\r\nexport class CustomChatGoogleGenerativeAI extends ChatGoogleGenerativeAI {\r\n thinkingConfig?: GeminiGenerationConfig['thinkingConfig'];\r\n constructor(fields: GoogleClientOptions) {\r\n super(fields);\r\n\r\n this.model = fields.model.replace(/^models\\//, '');\r\n\r\n this.maxOutputTokens = fields.maxOutputTokens ?? this.maxOutputTokens;\r\n\r\n if (this.maxOutputTokens != null && this.maxOutputTokens < 0) {\r\n throw new Error('`maxOutputTokens` must be a positive integer');\r\n }\r\n\r\n this.temperature = fields.temperature ?? this.temperature;\r\n if (\r\n this.temperature != null &&\r\n (this.temperature < 0 || this.temperature > 2)\r\n ) {\r\n throw new Error('`temperature` must be in the range of [0.0,2.0]');\r\n }\r\n\r\n this.topP = fields.topP ?? this.topP;\r\n if (this.topP != null && this.topP < 0) {\r\n throw new Error('`topP` must be a positive integer');\r\n }\r\n\r\n if (this.topP != null && this.topP > 1) {\r\n throw new Error('`topP` must be below 1.');\r\n }\r\n\r\n this.topK = fields.topK ?? this.topK;\r\n if (this.topK != null && this.topK < 0) {\r\n throw new Error('`topK` must be a positive integer');\r\n }\r\n\r\n this.stopSequences = fields.stopSequences ?? this.stopSequences;\r\n\r\n this.apiKey = fields.apiKey ?? getEnvironmentVariable('GOOGLE_API_KEY');\r\n if (this.apiKey == null || this.apiKey === '') {\r\n throw new Error(\r\n 'Please set an API key for Google GenerativeAI ' +\r\n 'in the environment variable GOOGLE_API_KEY ' +\r\n 'or in the `apiKey` field of the ' +\r\n 'ChatGoogleGenerativeAI constructor'\r\n );\r\n }\r\n\r\n this.safetySettings = fields.safetySettings ?? this.safetySettings;\r\n if (this.safetySettings && this.safetySettings.length > 0) {\r\n const safetySettingsSet = new Set(\r\n this.safetySettings.map((s) => s.category)\r\n );\r\n if (safetySettingsSet.size !== this.safetySettings.length) {\r\n throw new Error(\r\n 'The categories in `safetySettings` array must be unique'\r\n );\r\n }\r\n }\r\n\r\n this.thinkingConfig = fields.thinkingConfig ?? this.thinkingConfig;\r\n\r\n this.streaming = fields.streaming ?? this.streaming;\r\n this.json = fields.json;\r\n\r\n // @ts-ignore - Accessing private property from parent class\r\n this.client = new GenerativeAI(this.apiKey).getGenerativeModel(\r\n {\r\n model: this.model,\r\n safetySettings: this.safetySettings as SafetySetting[],\r\n generationConfig: {\r\n stopSequences: this.stopSequences,\r\n maxOutputTokens: this.maxOutputTokens,\r\n temperature: this.temperature,\r\n topP: this.topP,\r\n topK: this.topK,\r\n ...(this.json != null\r\n ? { responseMimeType: 'application/json' }\r\n : {}),\r\n },\r\n },\r\n {\r\n apiVersion: fields.apiVersion,\r\n baseUrl: fields.baseUrl,\r\n customHeaders: fields.customHeaders,\r\n }\r\n );\r\n this.streamUsage = fields.streamUsage ?? this.streamUsage;\r\n }\r\n\r\n static lc_name(): 'IllumaGoogleGenerativeAI' {\r\n return 'IllumaGoogleGenerativeAI';\r\n }\r\n\r\n invocationParams(\r\n options?: this['ParsedCallOptions']\r\n ): Omit<GenerateContentRequest, 'contents'> {\r\n const params = super.invocationParams(options);\r\n if (this.thinkingConfig) {\r\n /** @ts-ignore */\r\n this.client.generationConfig = {\r\n /** @ts-ignore */\r\n ...this.client.generationConfig,\r\n /** @ts-ignore */\r\n thinkingConfig: this.thinkingConfig,\r\n };\r\n }\r\n return params;\r\n }\r\n\r\n async *_streamResponseChunks(\r\n messages: BaseMessage[],\r\n options: this['ParsedCallOptions'],\r\n runManager?: CallbackManagerForLLMRun\r\n ): AsyncGenerator<ChatGenerationChunk> {\r\n const prompt = convertBaseMessagesToContent(\r\n messages,\r\n this._isMultimodalModel,\r\n this.useSystemInstruction\r\n );\r\n let actualPrompt = prompt;\r\n if (prompt?.[0].role === 'system') {\r\n const [systemInstruction] = prompt;\r\n /** @ts-ignore */\r\n this.client.systemInstruction = systemInstruction;\r\n actualPrompt = prompt.slice(1);\r\n }\r\n const parameters = this.invocationParams(options);\r\n const request = {\r\n ...parameters,\r\n contents: actualPrompt,\r\n };\r\n const stream = await this.caller.callWithOptions(\r\n { signal: options.signal },\r\n async () => {\r\n /** @ts-ignore */\r\n const { stream } = await this.client.generateContentStream(request);\r\n return stream;\r\n }\r\n );\r\n\r\n let index = 0;\r\n let lastUsageMetadata: UsageMetadata | undefined;\r\n for await (const response of stream) {\r\n if (\r\n 'usageMetadata' in response &&\r\n this.streamUsage !== false &&\r\n options.streamUsage !== false\r\n ) {\r\n const genAIUsageMetadata = response.usageMetadata as\r\n | GeminiApiUsageMetadata\r\n | undefined;\r\n\r\n const output_tokens =\r\n (genAIUsageMetadata?.candidatesTokenCount ?? 0) +\r\n (genAIUsageMetadata?.thoughtsTokenCount ?? 0);\r\n lastUsageMetadata = {\r\n input_tokens: genAIUsageMetadata?.promptTokenCount ?? 0,\r\n output_tokens,\r\n total_tokens: genAIUsageMetadata?.totalTokenCount ?? 0,\r\n };\r\n }\r\n\r\n const chunk = convertResponseContentToChatGenerationChunk(response, {\r\n usageMetadata: undefined,\r\n index,\r\n });\r\n index += 1;\r\n if (!chunk) {\r\n continue;\r\n }\r\n\r\n yield chunk;\r\n await runManager?.handleLLMNewToken(\r\n chunk.text || '',\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n { chunk }\r\n );\r\n }\r\n\r\n if (lastUsageMetadata) {\r\n const finalChunk = new ChatGenerationChunk({\r\n text: '',\r\n message: new AIMessageChunk({\r\n content: '',\r\n usage_metadata: lastUsageMetadata,\r\n }),\r\n });\r\n yield finalChunk;\r\n await runManager?.handleLLMNewToken(\r\n finalChunk.text || '',\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n { chunk: finalChunk }\r\n );\r\n }\r\n }\r\n}\r\n"],"names":["ChatGoogleGenerativeAI","getEnvironmentVariable","GenerativeAI","messages","convertBaseMessagesToContent","convertResponseContentToChatGenerationChunk","ChatGenerationChunk","AIMessageChunk"],"mappings":"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"}