beeai-framework 0.1.10 → 0.1.11

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 (546) hide show
  1. package/README.md +18 -6
  2. package/dist/adapters/amazon-bedrock/backend/chat.cjs.map +1 -1
  3. package/dist/adapters/amazon-bedrock/backend/chat.d.cts +7 -6
  4. package/dist/adapters/amazon-bedrock/backend/chat.d.ts +7 -6
  5. package/dist/adapters/amazon-bedrock/backend/chat.js.map +1 -1
  6. package/dist/adapters/amazon-bedrock/backend/client.cjs.map +1 -1
  7. package/dist/adapters/amazon-bedrock/backend/client.d.cts +1 -1
  8. package/dist/adapters/amazon-bedrock/backend/client.d.ts +1 -1
  9. package/dist/adapters/amazon-bedrock/backend/client.js.map +1 -1
  10. package/dist/adapters/amazon-bedrock/backend/embedding.cjs.map +1 -1
  11. package/dist/adapters/amazon-bedrock/backend/embedding.d.cts +15 -4
  12. package/dist/adapters/amazon-bedrock/backend/embedding.d.ts +15 -4
  13. package/dist/adapters/amazon-bedrock/backend/embedding.js.map +1 -1
  14. package/dist/adapters/anthropic/backend/chat.cjs.map +1 -1
  15. package/dist/adapters/anthropic/backend/chat.d.cts +9 -8
  16. package/dist/adapters/anthropic/backend/chat.d.ts +9 -8
  17. package/dist/adapters/anthropic/backend/chat.js.map +1 -1
  18. package/dist/adapters/anthropic/backend/client.cjs.map +1 -1
  19. package/dist/adapters/anthropic/backend/client.d.cts +1 -1
  20. package/dist/adapters/anthropic/backend/client.d.ts +1 -1
  21. package/dist/adapters/anthropic/backend/client.js.map +1 -1
  22. package/dist/adapters/anthropic/backend/embedding.cjs.map +1 -1
  23. package/dist/adapters/anthropic/backend/embedding.d.cts +15 -4
  24. package/dist/adapters/anthropic/backend/embedding.d.ts +15 -4
  25. package/dist/adapters/anthropic/backend/embedding.js.map +1 -1
  26. package/dist/adapters/azure-openai/backend/chat.cjs.map +1 -1
  27. package/dist/adapters/azure-openai/backend/chat.d.cts +9 -8
  28. package/dist/adapters/azure-openai/backend/chat.d.ts +9 -8
  29. package/dist/adapters/azure-openai/backend/chat.js.map +1 -1
  30. package/dist/adapters/azure-openai/backend/client.cjs.map +1 -1
  31. package/dist/adapters/azure-openai/backend/client.d.cts +1 -1
  32. package/dist/adapters/azure-openai/backend/client.d.ts +1 -1
  33. package/dist/adapters/azure-openai/backend/client.js.map +1 -1
  34. package/dist/adapters/azure-openai/backend/embedding.cjs.map +1 -1
  35. package/dist/adapters/azure-openai/backend/embedding.d.cts +15 -4
  36. package/dist/adapters/azure-openai/backend/embedding.d.ts +15 -4
  37. package/dist/adapters/azure-openai/backend/embedding.js.map +1 -1
  38. package/dist/adapters/dummy/backend/chat.cjs.map +1 -1
  39. package/dist/adapters/dummy/backend/chat.d.cts +12 -7
  40. package/dist/adapters/dummy/backend/chat.d.ts +12 -7
  41. package/dist/adapters/dummy/backend/chat.js.map +1 -1
  42. package/dist/adapters/dummy/backend/embedding.cjs.map +1 -1
  43. package/dist/adapters/dummy/backend/embedding.d.cts +15 -3
  44. package/dist/adapters/dummy/backend/embedding.d.ts +15 -3
  45. package/dist/adapters/dummy/backend/embedding.js.map +1 -1
  46. package/dist/adapters/google-vertex/backend/chat.cjs.map +1 -1
  47. package/dist/adapters/google-vertex/backend/chat.d.cts +9 -8
  48. package/dist/adapters/google-vertex/backend/chat.d.ts +9 -8
  49. package/dist/adapters/google-vertex/backend/chat.js.map +1 -1
  50. package/dist/adapters/google-vertex/backend/client.cjs.map +1 -1
  51. package/dist/adapters/google-vertex/backend/client.d.cts +1 -1
  52. package/dist/adapters/google-vertex/backend/client.d.ts +1 -1
  53. package/dist/adapters/google-vertex/backend/client.js.map +1 -1
  54. package/dist/adapters/google-vertex/backend/embedding.cjs.map +1 -1
  55. package/dist/adapters/google-vertex/backend/embedding.d.cts +15 -4
  56. package/dist/adapters/google-vertex/backend/embedding.d.ts +15 -4
  57. package/dist/adapters/google-vertex/backend/embedding.js.map +1 -1
  58. package/dist/adapters/groq/backend/chat.cjs.map +1 -1
  59. package/dist/adapters/groq/backend/chat.d.cts +9 -8
  60. package/dist/adapters/groq/backend/chat.d.ts +9 -8
  61. package/dist/adapters/groq/backend/chat.js.map +1 -1
  62. package/dist/adapters/groq/backend/client.cjs.map +1 -1
  63. package/dist/adapters/groq/backend/client.d.cts +1 -1
  64. package/dist/adapters/groq/backend/client.d.ts +1 -1
  65. package/dist/adapters/groq/backend/client.js.map +1 -1
  66. package/dist/adapters/groq/backend/embedding.cjs.map +1 -1
  67. package/dist/adapters/groq/backend/embedding.d.cts +15 -4
  68. package/dist/adapters/groq/backend/embedding.d.ts +15 -4
  69. package/dist/adapters/groq/backend/embedding.js.map +1 -1
  70. package/dist/adapters/langchain/backend/chat.cjs +5 -3
  71. package/dist/adapters/langchain/backend/chat.cjs.map +1 -1
  72. package/dist/adapters/langchain/backend/chat.d.cts +12 -7
  73. package/dist/adapters/langchain/backend/chat.d.ts +12 -7
  74. package/dist/adapters/langchain/backend/chat.js +5 -3
  75. package/dist/adapters/langchain/backend/chat.js.map +1 -1
  76. package/dist/adapters/langchain/backend/embedding.cjs.map +1 -1
  77. package/dist/adapters/langchain/backend/embedding.d.cts +15 -3
  78. package/dist/adapters/langchain/backend/embedding.d.ts +15 -3
  79. package/dist/adapters/langchain/backend/embedding.js.map +1 -1
  80. package/dist/adapters/langchain/tools.cjs.map +1 -1
  81. package/dist/adapters/langchain/tools.d.cts +1 -1
  82. package/dist/adapters/langchain/tools.d.ts +1 -1
  83. package/dist/adapters/langchain/tools.js.map +1 -1
  84. package/dist/adapters/ollama/backend/chat.cjs +4 -0
  85. package/dist/adapters/ollama/backend/chat.cjs.map +1 -1
  86. package/dist/adapters/ollama/backend/chat.d.cts +10 -8
  87. package/dist/adapters/ollama/backend/chat.d.ts +10 -8
  88. package/dist/adapters/ollama/backend/chat.js +4 -0
  89. package/dist/adapters/ollama/backend/chat.js.map +1 -1
  90. package/dist/adapters/ollama/backend/client.cjs.map +1 -1
  91. package/dist/adapters/ollama/backend/client.d.cts +1 -1
  92. package/dist/adapters/ollama/backend/client.d.ts +1 -1
  93. package/dist/adapters/ollama/backend/client.js.map +1 -1
  94. package/dist/adapters/ollama/backend/embedding.cjs.map +1 -1
  95. package/dist/adapters/ollama/backend/embedding.d.cts +15 -4
  96. package/dist/adapters/ollama/backend/embedding.d.ts +15 -4
  97. package/dist/adapters/ollama/backend/embedding.js.map +1 -1
  98. package/dist/adapters/openai/backend/chat.cjs.map +1 -1
  99. package/dist/adapters/openai/backend/chat.d.cts +7 -6
  100. package/dist/adapters/openai/backend/chat.d.ts +7 -6
  101. package/dist/adapters/openai/backend/chat.js.map +1 -1
  102. package/dist/adapters/openai/backend/client.cjs.map +1 -1
  103. package/dist/adapters/openai/backend/client.d.cts +1 -1
  104. package/dist/adapters/openai/backend/client.d.ts +1 -1
  105. package/dist/adapters/openai/backend/client.js.map +1 -1
  106. package/dist/adapters/openai/backend/embedding.cjs.map +1 -1
  107. package/dist/adapters/openai/backend/embedding.d.cts +15 -4
  108. package/dist/adapters/openai/backend/embedding.d.ts +15 -4
  109. package/dist/adapters/openai/backend/embedding.js.map +1 -1
  110. package/dist/adapters/vercel/backend/chat.cjs +41 -7
  111. package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
  112. package/dist/adapters/vercel/backend/chat.d.cts +12 -7
  113. package/dist/adapters/vercel/backend/chat.d.ts +12 -7
  114. package/dist/adapters/vercel/backend/chat.js +44 -10
  115. package/dist/adapters/vercel/backend/chat.js.map +1 -1
  116. package/dist/adapters/vercel/backend/embedding.cjs.map +1 -1
  117. package/dist/adapters/vercel/backend/embedding.d.cts +14 -3
  118. package/dist/adapters/vercel/backend/embedding.d.ts +14 -3
  119. package/dist/adapters/vercel/backend/embedding.js.map +1 -1
  120. package/dist/adapters/watsonx/backend/chat.cjs +25 -4
  121. package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
  122. package/dist/adapters/watsonx/backend/chat.d.cts +13 -7
  123. package/dist/adapters/watsonx/backend/chat.d.ts +13 -7
  124. package/dist/adapters/watsonx/backend/chat.js +25 -4
  125. package/dist/adapters/watsonx/backend/chat.js.map +1 -1
  126. package/dist/adapters/watsonx/backend/client.cjs.map +1 -1
  127. package/dist/adapters/watsonx/backend/client.d.cts +1 -1
  128. package/dist/adapters/watsonx/backend/client.d.ts +1 -1
  129. package/dist/adapters/watsonx/backend/client.js.map +1 -1
  130. package/dist/adapters/watsonx/backend/embedding.cjs.map +1 -1
  131. package/dist/adapters/watsonx/backend/embedding.d.cts +15 -3
  132. package/dist/adapters/watsonx/backend/embedding.d.ts +15 -3
  133. package/dist/adapters/watsonx/backend/embedding.js.map +1 -1
  134. package/dist/{agent-COg8SPbf.d.cts → agent-Ca5UE2P1.d.cts} +3 -3
  135. package/dist/{agent-Dv5YSk8H.d.ts → agent-CgsoqVL5.d.ts} +3 -3
  136. package/dist/agents/base.cjs.map +1 -1
  137. package/dist/agents/base.d.cts +2 -2
  138. package/dist/agents/base.d.ts +2 -2
  139. package/dist/agents/base.js.map +1 -1
  140. package/dist/agents/experimental/remote/agent.cjs.map +1 -1
  141. package/dist/agents/experimental/remote/agent.d.cts +2 -2
  142. package/dist/agents/experimental/remote/agent.d.ts +2 -2
  143. package/dist/agents/experimental/remote/agent.js.map +1 -1
  144. package/dist/agents/experimental/replan/agent.cjs.map +1 -1
  145. package/dist/agents/experimental/replan/agent.d.cts +6 -6
  146. package/dist/agents/experimental/replan/agent.d.ts +6 -6
  147. package/dist/agents/experimental/replan/agent.js.map +1 -1
  148. package/dist/agents/experimental/replan/prompts.cjs.map +1 -1
  149. package/dist/agents/experimental/replan/prompts.d.cts +1 -1
  150. package/dist/agents/experimental/replan/prompts.d.ts +1 -1
  151. package/dist/agents/experimental/replan/prompts.js.map +1 -1
  152. package/dist/agents/experimental/streamlit/agent.cjs.map +1 -1
  153. package/dist/agents/experimental/streamlit/agent.d.cts +6 -6
  154. package/dist/agents/experimental/streamlit/agent.d.ts +6 -6
  155. package/dist/agents/experimental/streamlit/agent.js.map +1 -1
  156. package/dist/agents/experimental/streamlit/prompts.cjs.map +1 -1
  157. package/dist/agents/experimental/streamlit/prompts.d.cts +1 -1
  158. package/dist/agents/experimental/streamlit/prompts.d.ts +1 -1
  159. package/dist/agents/experimental/streamlit/prompts.js.map +1 -1
  160. package/dist/agents/react/agent.cjs.map +1 -1
  161. package/dist/agents/react/agent.d.cts +6 -6
  162. package/dist/agents/react/agent.d.ts +6 -6
  163. package/dist/agents/react/agent.js.map +1 -1
  164. package/dist/agents/react/prompts.cjs.map +1 -1
  165. package/dist/agents/react/prompts.d.cts +2 -2
  166. package/dist/agents/react/prompts.d.ts +2 -2
  167. package/dist/agents/react/prompts.js.map +1 -1
  168. package/dist/agents/react/runners/base.cjs.map +1 -1
  169. package/dist/agents/react/runners/base.d.cts +6 -6
  170. package/dist/agents/react/runners/base.d.ts +6 -6
  171. package/dist/agents/react/runners/base.js.map +1 -1
  172. package/dist/agents/react/runners/deep-think/prompts.cjs.map +1 -1
  173. package/dist/agents/react/runners/deep-think/prompts.d.cts +2 -2
  174. package/dist/agents/react/runners/deep-think/prompts.d.ts +2 -2
  175. package/dist/agents/react/runners/deep-think/prompts.js.map +1 -1
  176. package/dist/agents/react/runners/deep-think/runner.cjs.map +1 -1
  177. package/dist/agents/react/runners/deep-think/runner.d.cts +7 -7
  178. package/dist/agents/react/runners/deep-think/runner.d.ts +7 -7
  179. package/dist/agents/react/runners/deep-think/runner.js.map +1 -1
  180. package/dist/agents/react/runners/default/runner.cjs.map +1 -1
  181. package/dist/agents/react/runners/default/runner.d.cts +9 -9
  182. package/dist/agents/react/runners/default/runner.d.ts +9 -9
  183. package/dist/agents/react/runners/default/runner.js.map +1 -1
  184. package/dist/agents/react/runners/default/runner.spec.cjs.map +1 -1
  185. package/dist/agents/react/runners/default/runner.spec.js.map +1 -1
  186. package/dist/agents/react/runners/granite/prompts.cjs.map +1 -1
  187. package/dist/agents/react/runners/granite/prompts.d.cts +2 -2
  188. package/dist/agents/react/runners/granite/prompts.d.ts +2 -2
  189. package/dist/agents/react/runners/granite/prompts.js.map +1 -1
  190. package/dist/agents/react/runners/granite/runner.cjs.map +1 -1
  191. package/dist/agents/react/runners/granite/runner.d.cts +7 -7
  192. package/dist/agents/react/runners/granite/runner.d.ts +7 -7
  193. package/dist/agents/react/runners/granite/runner.js.map +1 -1
  194. package/dist/agents/react/types.d.cts +5 -5
  195. package/dist/agents/react/types.d.ts +5 -5
  196. package/dist/agents/toolCalling/agent.cjs +33 -12
  197. package/dist/agents/toolCalling/agent.cjs.map +1 -1
  198. package/dist/agents/toolCalling/agent.d.cts +7 -6
  199. package/dist/agents/toolCalling/agent.d.ts +7 -6
  200. package/dist/agents/toolCalling/agent.js +35 -14
  201. package/dist/agents/toolCalling/agent.js.map +1 -1
  202. package/dist/agents/toolCalling/prompts.cjs +3 -2
  203. package/dist/agents/toolCalling/prompts.cjs.map +1 -1
  204. package/dist/agents/toolCalling/prompts.d.cts +1 -1
  205. package/dist/agents/toolCalling/prompts.d.ts +1 -1
  206. package/dist/agents/toolCalling/prompts.js +3 -2
  207. package/dist/agents/toolCalling/prompts.js.map +1 -1
  208. package/dist/agents/toolCalling/types.d.cts +2 -2
  209. package/dist/agents/toolCalling/types.d.ts +2 -2
  210. package/dist/agents/types.d.cts +2 -2
  211. package/dist/agents/types.d.ts +2 -2
  212. package/dist/backend/backend.cjs.map +1 -1
  213. package/dist/backend/backend.d.cts +6 -5
  214. package/dist/backend/backend.d.ts +6 -5
  215. package/dist/backend/backend.js.map +1 -1
  216. package/dist/backend/chat.cjs +61 -3
  217. package/dist/backend/chat.cjs.map +1 -1
  218. package/dist/backend/chat.d.cts +17 -138
  219. package/dist/backend/chat.d.ts +17 -138
  220. package/dist/backend/chat.js +64 -6
  221. package/dist/backend/chat.js.map +1 -1
  222. package/dist/backend/client.cjs.map +1 -1
  223. package/dist/backend/client.d.cts +1 -1
  224. package/dist/backend/client.d.ts +1 -1
  225. package/dist/backend/client.js.map +1 -1
  226. package/dist/backend/constants.cjs +5 -0
  227. package/dist/backend/constants.cjs.map +1 -1
  228. package/dist/backend/constants.d.cts +6 -1
  229. package/dist/backend/constants.d.ts +6 -1
  230. package/dist/backend/constants.js +5 -0
  231. package/dist/backend/constants.js.map +1 -1
  232. package/dist/backend/core.d.cts +5 -4
  233. package/dist/backend/core.d.ts +5 -4
  234. package/dist/backend/embedding.cjs.map +1 -1
  235. package/dist/backend/embedding.d.cts +14 -2
  236. package/dist/backend/embedding.d.ts +14 -2
  237. package/dist/backend/embedding.js.map +1 -1
  238. package/dist/backend/errors.cjs.map +1 -1
  239. package/dist/backend/errors.d.cts +1 -1
  240. package/dist/backend/errors.d.ts +1 -1
  241. package/dist/backend/errors.js.map +1 -1
  242. package/dist/backend/message.cjs.map +1 -1
  243. package/dist/backend/message.d.cts +1 -1
  244. package/dist/backend/message.d.ts +1 -1
  245. package/dist/backend/message.js.map +1 -1
  246. package/dist/backend/utils.cjs +35 -0
  247. package/dist/backend/utils.cjs.map +1 -1
  248. package/dist/backend/utils.d.cts +20 -28
  249. package/dist/backend/utils.d.ts +20 -28
  250. package/dist/backend/utils.js +35 -2
  251. package/dist/backend/utils.js.map +1 -1
  252. package/dist/{base-DHhpWHQm.d.ts → base-BOCDDBvG.d.ts} +2 -2
  253. package/dist/{base-Csr9guq2.d.cts → base-szR2Izbt.d.cts} +2 -2
  254. package/dist/cache/base.cjs.map +1 -1
  255. package/dist/cache/base.d.cts +1 -1
  256. package/dist/cache/base.d.ts +1 -1
  257. package/dist/cache/base.js.map +1 -1
  258. package/dist/cache/decoratorCache.cjs.map +1 -1
  259. package/dist/cache/decoratorCache.d.cts +1 -1
  260. package/dist/cache/decoratorCache.d.ts +1 -1
  261. package/dist/cache/decoratorCache.js.map +1 -1
  262. package/dist/cache/fileCache.cjs.map +1 -1
  263. package/dist/cache/fileCache.d.cts +1 -1
  264. package/dist/cache/fileCache.d.ts +1 -1
  265. package/dist/cache/fileCache.js.map +1 -1
  266. package/dist/cache/nullCache.cjs.map +1 -1
  267. package/dist/cache/nullCache.d.cts +1 -1
  268. package/dist/cache/nullCache.d.ts +1 -1
  269. package/dist/cache/nullCache.js.map +1 -1
  270. package/dist/cache/slidingCache.cjs.map +1 -1
  271. package/dist/cache/slidingCache.d.cts +1 -1
  272. package/dist/cache/slidingCache.d.ts +1 -1
  273. package/dist/cache/slidingCache.js.map +1 -1
  274. package/dist/cache/unconstrainedCache.cjs.map +1 -1
  275. package/dist/cache/unconstrainedCache.d.cts +1 -1
  276. package/dist/cache/unconstrainedCache.d.ts +1 -1
  277. package/dist/cache/unconstrainedCache.js.map +1 -1
  278. package/dist/chat-BdN8hGWn.d.ts +174 -0
  279. package/dist/chat-DvMzAHj6.d.cts +174 -0
  280. package/dist/context.cjs.map +1 -1
  281. package/dist/context.d.cts +2 -2
  282. package/dist/context.d.ts +2 -2
  283. package/dist/context.js.map +1 -1
  284. package/dist/emitter/emitter.cjs.map +1 -1
  285. package/dist/emitter/emitter.d.cts +1 -1
  286. package/dist/emitter/emitter.d.ts +1 -1
  287. package/dist/emitter/emitter.js.map +1 -1
  288. package/dist/emitter/errors.cjs.map +1 -1
  289. package/dist/emitter/errors.d.cts +1 -1
  290. package/dist/emitter/errors.d.ts +1 -1
  291. package/dist/emitter/errors.js.map +1 -1
  292. package/dist/emitter/types.d.cts +1 -1
  293. package/dist/emitter/types.d.ts +1 -1
  294. package/dist/emitter/utils.cjs.map +1 -1
  295. package/dist/emitter/utils.d.cts +1 -1
  296. package/dist/emitter/utils.d.ts +1 -1
  297. package/dist/emitter/utils.js.map +1 -1
  298. package/dist/{emitter-l0W9gC1A.d.ts → emitter-C3dO-s2P.d.ts} +3 -3
  299. package/dist/{emitter-BWtGHYn0.d.cts → emitter-D5Mu0EEH.d.cts} +3 -3
  300. package/dist/errors.cjs.map +1 -1
  301. package/dist/errors.d.cts +1 -1
  302. package/dist/errors.d.ts +1 -1
  303. package/dist/errors.js.map +1 -1
  304. package/dist/index.d.cts +4 -6
  305. package/dist/index.d.ts +4 -6
  306. package/dist/internals/env.cjs.map +1 -1
  307. package/dist/internals/env.d.cts +1 -1
  308. package/dist/internals/env.d.ts +1 -1
  309. package/dist/internals/env.js.map +1 -1
  310. package/dist/internals/fetcher.cjs.map +1 -1
  311. package/dist/internals/fetcher.d.cts +2 -2
  312. package/dist/internals/fetcher.d.ts +2 -2
  313. package/dist/internals/fetcher.js.map +1 -1
  314. package/dist/internals/helpers/array.cjs.map +1 -1
  315. package/dist/internals/helpers/array.d.cts +1 -1
  316. package/dist/internals/helpers/array.d.ts +1 -1
  317. package/dist/internals/helpers/array.js.map +1 -1
  318. package/dist/internals/helpers/cancellation.cjs.map +1 -1
  319. package/dist/internals/helpers/cancellation.d.cts +1 -1
  320. package/dist/internals/helpers/cancellation.d.ts +1 -1
  321. package/dist/internals/helpers/cancellation.js.map +1 -1
  322. package/dist/internals/helpers/counter.cjs.map +1 -1
  323. package/dist/internals/helpers/counter.d.cts +1 -1
  324. package/dist/internals/helpers/counter.d.ts +1 -1
  325. package/dist/internals/helpers/counter.js.map +1 -1
  326. package/dist/internals/helpers/general.cjs.map +1 -1
  327. package/dist/internals/helpers/general.d.cts +1 -1
  328. package/dist/internals/helpers/general.d.ts +1 -1
  329. package/dist/internals/helpers/general.js.map +1 -1
  330. package/dist/internals/helpers/guards.cjs.map +1 -1
  331. package/dist/internals/helpers/guards.d.cts +1 -1
  332. package/dist/internals/helpers/guards.d.ts +1 -1
  333. package/dist/internals/helpers/guards.js.map +1 -1
  334. package/dist/internals/helpers/hash.cjs.map +1 -1
  335. package/dist/internals/helpers/hash.d.cts +1 -1
  336. package/dist/internals/helpers/hash.d.ts +1 -1
  337. package/dist/internals/helpers/hash.js.map +1 -1
  338. package/dist/internals/helpers/map.cjs.map +1 -1
  339. package/dist/internals/helpers/map.d.cts +1 -1
  340. package/dist/internals/helpers/map.d.ts +1 -1
  341. package/dist/internals/helpers/map.js.map +1 -1
  342. package/dist/internals/helpers/math.cjs.map +1 -1
  343. package/dist/internals/helpers/math.d.cts +1 -1
  344. package/dist/internals/helpers/math.d.ts +1 -1
  345. package/dist/internals/helpers/math.js.map +1 -1
  346. package/dist/internals/helpers/number.cjs.map +1 -1
  347. package/dist/internals/helpers/number.d.cts +1 -1
  348. package/dist/internals/helpers/number.d.ts +1 -1
  349. package/dist/internals/helpers/number.js.map +1 -1
  350. package/dist/internals/helpers/object.cjs.map +1 -1
  351. package/dist/internals/helpers/object.d.cts +1 -1
  352. package/dist/internals/helpers/object.d.ts +1 -1
  353. package/dist/internals/helpers/object.js.map +1 -1
  354. package/dist/internals/helpers/paginate.cjs.map +1 -1
  355. package/dist/internals/helpers/paginate.d.cts +1 -1
  356. package/dist/internals/helpers/paginate.d.ts +1 -1
  357. package/dist/internals/helpers/paginate.js.map +1 -1
  358. package/dist/internals/helpers/promise.cjs.map +1 -1
  359. package/dist/internals/helpers/promise.d.cts +1 -1
  360. package/dist/internals/helpers/promise.d.ts +1 -1
  361. package/dist/internals/helpers/promise.js.map +1 -1
  362. package/dist/internals/helpers/prototype.cjs.map +1 -1
  363. package/dist/internals/helpers/prototype.d.cts +1 -1
  364. package/dist/internals/helpers/prototype.d.ts +1 -1
  365. package/dist/internals/helpers/prototype.js.map +1 -1
  366. package/dist/internals/helpers/retry.cjs.map +1 -1
  367. package/dist/internals/helpers/retry.d.cts +1 -1
  368. package/dist/internals/helpers/retry.d.ts +1 -1
  369. package/dist/internals/helpers/retry.js.map +1 -1
  370. package/dist/internals/helpers/retryable.cjs.map +1 -1
  371. package/dist/internals/helpers/retryable.d.cts +1 -1
  372. package/dist/internals/helpers/retryable.d.ts +1 -1
  373. package/dist/internals/helpers/retryable.js.map +1 -1
  374. package/dist/internals/helpers/schema.cjs.map +1 -1
  375. package/dist/internals/helpers/schema.d.cts +1 -1
  376. package/dist/internals/helpers/schema.d.ts +1 -1
  377. package/dist/internals/helpers/schema.js.map +1 -1
  378. package/dist/internals/helpers/stream.cjs.map +1 -1
  379. package/dist/internals/helpers/stream.d.cts +1 -1
  380. package/dist/internals/helpers/stream.d.ts +1 -1
  381. package/dist/internals/helpers/stream.js.map +1 -1
  382. package/dist/internals/helpers/string.cjs.map +1 -1
  383. package/dist/internals/helpers/string.d.cts +1 -1
  384. package/dist/internals/helpers/string.d.ts +1 -1
  385. package/dist/internals/helpers/string.js.map +1 -1
  386. package/dist/internals/helpers/weakRef.cjs.map +1 -1
  387. package/dist/internals/helpers/weakRef.d.cts +1 -1
  388. package/dist/internals/helpers/weakRef.d.ts +1 -1
  389. package/dist/internals/helpers/weakRef.js.map +1 -1
  390. package/dist/internals/serializable.cjs.map +1 -1
  391. package/dist/internals/serializable.d.cts +1 -1
  392. package/dist/internals/serializable.d.ts +1 -1
  393. package/dist/internals/serializable.js.map +1 -1
  394. package/dist/internals/types.cjs.map +1 -1
  395. package/dist/internals/types.d.cts +1 -1
  396. package/dist/internals/types.d.ts +1 -1
  397. package/dist/internals/types.js.map +1 -1
  398. package/dist/logger/logger.cjs.map +1 -1
  399. package/dist/logger/logger.js.map +1 -1
  400. package/dist/logger/pretty.cjs.map +1 -1
  401. package/dist/logger/pretty.js.map +1 -1
  402. package/dist/memory/base.cjs.map +1 -1
  403. package/dist/memory/base.js.map +1 -1
  404. package/dist/memory/slidingMemory.cjs.map +1 -1
  405. package/dist/memory/slidingMemory.js.map +1 -1
  406. package/dist/memory/summarizeMemory.cjs.map +1 -1
  407. package/dist/memory/summarizeMemory.d.cts +4 -4
  408. package/dist/memory/summarizeMemory.d.ts +4 -4
  409. package/dist/memory/summarizeMemory.js.map +1 -1
  410. package/dist/memory/tokenMemory.cjs.map +1 -1
  411. package/dist/memory/tokenMemory.js.map +1 -1
  412. package/dist/memory/unconstrainedMemory.cjs.map +1 -1
  413. package/dist/memory/unconstrainedMemory.js.map +1 -1
  414. package/dist/parsers/errors.cjs.map +1 -1
  415. package/dist/parsers/errors.d.cts +1 -1
  416. package/dist/parsers/errors.d.ts +1 -1
  417. package/dist/parsers/errors.js.map +1 -1
  418. package/dist/parsers/field.cjs.map +1 -1
  419. package/dist/parsers/field.js.map +1 -1
  420. package/dist/parsers/linePrefix.cjs.map +1 -1
  421. package/dist/parsers/linePrefix.d.cts +2 -2
  422. package/dist/parsers/linePrefix.d.ts +2 -2
  423. package/dist/parsers/linePrefix.js.map +1 -1
  424. package/dist/serializer/error.cjs.map +1 -1
  425. package/dist/serializer/error.d.cts +1 -1
  426. package/dist/serializer/error.d.ts +1 -1
  427. package/dist/serializer/error.js.map +1 -1
  428. package/dist/serializer/serializer.cjs.map +1 -1
  429. package/dist/serializer/serializer.d.cts +1 -1
  430. package/dist/serializer/serializer.d.ts +1 -1
  431. package/dist/serializer/serializer.js.map +1 -1
  432. package/dist/serializer/utils.cjs.map +1 -1
  433. package/dist/serializer/utils.d.cts +1 -1
  434. package/dist/serializer/utils.d.ts +1 -1
  435. package/dist/serializer/utils.js.map +1 -1
  436. package/dist/{serializer-VYDhdryk.d.ts → serializer-BswFRdT8.d.ts} +2 -2
  437. package/dist/{serializer-CJx5ZpUx.d.cts → serializer-Dz4AIM2O.d.cts} +2 -2
  438. package/dist/template.cjs.map +1 -1
  439. package/dist/template.d.cts +1 -1
  440. package/dist/template.d.ts +1 -1
  441. package/dist/template.js.map +1 -1
  442. package/dist/tools/arxiv.cjs.map +1 -1
  443. package/dist/tools/arxiv.d.cts +2 -2
  444. package/dist/tools/arxiv.d.ts +2 -2
  445. package/dist/tools/arxiv.js.map +1 -1
  446. package/dist/tools/base.cjs.map +1 -1
  447. package/dist/tools/base.d.cts +1 -1
  448. package/dist/tools/base.d.ts +1 -1
  449. package/dist/tools/base.js.map +1 -1
  450. package/dist/tools/calculator.cjs.map +1 -1
  451. package/dist/tools/calculator.d.cts +2 -2
  452. package/dist/tools/calculator.d.ts +2 -2
  453. package/dist/tools/calculator.js.map +1 -1
  454. package/dist/tools/custom.cjs.map +1 -1
  455. package/dist/tools/custom.d.cts +5 -5
  456. package/dist/tools/custom.d.ts +5 -5
  457. package/dist/tools/custom.js.map +1 -1
  458. package/dist/tools/database/elasticsearch.cjs.map +1 -1
  459. package/dist/tools/database/elasticsearch.d.cts +2 -2
  460. package/dist/tools/database/elasticsearch.d.ts +2 -2
  461. package/dist/tools/database/elasticsearch.js.map +1 -1
  462. package/dist/tools/database/metadata.cjs.map +1 -1
  463. package/dist/tools/database/metadata.d.cts +1 -1
  464. package/dist/tools/database/metadata.d.ts +1 -1
  465. package/dist/tools/database/metadata.js.map +1 -1
  466. package/dist/tools/database/milvus.cjs.map +1 -1
  467. package/dist/tools/database/milvus.d.cts +2 -2
  468. package/dist/tools/database/milvus.d.ts +2 -2
  469. package/dist/tools/database/milvus.js.map +1 -1
  470. package/dist/tools/database/sql.cjs.map +1 -1
  471. package/dist/tools/database/sql.d.cts +2 -2
  472. package/dist/tools/database/sql.d.ts +2 -2
  473. package/dist/tools/database/sql.js.map +1 -1
  474. package/dist/tools/llm.cjs.map +1 -1
  475. package/dist/tools/llm.d.cts +5 -5
  476. package/dist/tools/llm.d.ts +5 -5
  477. package/dist/tools/llm.js.map +1 -1
  478. package/dist/tools/mcp.cjs.map +1 -1
  479. package/dist/tools/mcp.d.cts +2 -2
  480. package/dist/tools/mcp.d.ts +2 -2
  481. package/dist/tools/mcp.js.map +1 -1
  482. package/dist/tools/openapi.cjs.map +1 -1
  483. package/dist/tools/openapi.d.cts +1 -1
  484. package/dist/tools/openapi.d.ts +1 -1
  485. package/dist/tools/openapi.js.map +1 -1
  486. package/dist/tools/python/output.cjs.map +1 -1
  487. package/dist/tools/python/output.d.cts +2 -2
  488. package/dist/tools/python/output.d.ts +2 -2
  489. package/dist/tools/python/output.js.map +1 -1
  490. package/dist/tools/python/python.cjs +3 -3
  491. package/dist/tools/python/python.cjs.map +1 -1
  492. package/dist/tools/python/python.d.cts +4 -4
  493. package/dist/tools/python/python.d.ts +4 -4
  494. package/dist/tools/python/python.js +3 -3
  495. package/dist/tools/python/python.js.map +1 -1
  496. package/dist/tools/python/storage.cjs.map +1 -1
  497. package/dist/tools/python/storage.d.cts +1 -1
  498. package/dist/tools/python/storage.d.ts +1 -1
  499. package/dist/tools/python/storage.js.map +1 -1
  500. package/dist/tools/search/base.cjs.map +1 -1
  501. package/dist/tools/search/base.d.cts +2 -2
  502. package/dist/tools/search/base.d.ts +2 -2
  503. package/dist/tools/search/base.js.map +1 -1
  504. package/dist/tools/search/duckDuckGoSearch.cjs.map +1 -1
  505. package/dist/tools/search/duckDuckGoSearch.d.cts +2 -2
  506. package/dist/tools/search/duckDuckGoSearch.d.ts +2 -2
  507. package/dist/tools/search/duckDuckGoSearch.js.map +1 -1
  508. package/dist/tools/search/googleSearch.cjs.map +1 -1
  509. package/dist/tools/search/googleSearch.d.cts +1 -1
  510. package/dist/tools/search/googleSearch.d.ts +1 -1
  511. package/dist/tools/search/googleSearch.js.map +1 -1
  512. package/dist/tools/search/searXNGSearch.cjs.map +1 -1
  513. package/dist/tools/search/searXNGSearch.d.cts +2 -2
  514. package/dist/tools/search/searXNGSearch.d.ts +2 -2
  515. package/dist/tools/search/searXNGSearch.js.map +1 -1
  516. package/dist/tools/search/wikipedia.cjs.map +1 -1
  517. package/dist/tools/search/wikipedia.d.cts +1 -1
  518. package/dist/tools/search/wikipedia.d.ts +1 -1
  519. package/dist/tools/search/wikipedia.js.map +1 -1
  520. package/dist/tools/similarity.cjs.map +1 -1
  521. package/dist/tools/similarity.d.cts +2 -2
  522. package/dist/tools/similarity.d.ts +2 -2
  523. package/dist/tools/similarity.js.map +1 -1
  524. package/dist/tools/weather/openMeteo.cjs.map +1 -1
  525. package/dist/tools/weather/openMeteo.d.cts +2 -2
  526. package/dist/tools/weather/openMeteo.d.ts +2 -2
  527. package/dist/tools/weather/openMeteo.js.map +1 -1
  528. package/dist/tools/web/webCrawler.cjs.map +1 -1
  529. package/dist/tools/web/webCrawler.d.cts +1 -1
  530. package/dist/tools/web/webCrawler.d.ts +1 -1
  531. package/dist/tools/web/webCrawler.js.map +1 -1
  532. package/dist/version.cjs +1 -1
  533. package/dist/version.cjs.map +1 -1
  534. package/dist/version.d.cts +1 -1
  535. package/dist/version.d.ts +1 -1
  536. package/dist/version.js +1 -1
  537. package/dist/version.js.map +1 -1
  538. package/dist/workflows/agent.cjs.map +1 -1
  539. package/dist/workflows/agent.d.cts +6 -6
  540. package/dist/workflows/agent.d.ts +6 -6
  541. package/dist/workflows/agent.js.map +1 -1
  542. package/dist/workflows/workflow.cjs.map +1 -1
  543. package/dist/workflows/workflow.d.cts +1 -1
  544. package/dist/workflows/workflow.d.ts +1 -1
  545. package/dist/workflows/workflow.js.map +1 -1
  546. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"sources":["googleSearch.ts"],"names":["GoogleSearchToolOutput","SearchToolOutput","constructor","results","register","createSnapshot","loadSnapshot","snapshot","Object","assign","GoogleSearchTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","z","object","query","string","min","max","apiKey","cseId","options","maxResults","parseEnv","ValueError","join","ValidationError","message","propertyName","client","GoogleSearchAPI","Customsearch","auth","_run","input","_options","run","paginate","size","handler","cursor","limit","maxChunkSize","data","items","cse","list","cx","q","start","num","Math","safe","signal","nextCursor","length","undefined","map","result","title","snippet","url","link"],"mappings":"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","file":"googleSearch.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { customsearch_v1 as GoogleSearchAPI } from \"@googleapis/customsearch\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"./base.js\";\nimport { ToolEmitter, Tool, ToolInput } from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { parseEnv } from \"@/internals/env.js\";\nimport { RunContext } from \"@/context.js\";\nimport { paginate } from \"@/internals/helpers/paginate.js\";\nimport { ValidationError } from \"ajv\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nexport interface GoogleSearchToolOptions extends SearchToolOptions {\n apiKey?: string;\n cseId?: string;\n maxResults: number;\n}\n\ntype GoogleSearchToolRunOptions = SearchToolRunOptions;\n\nexport interface GoogleSearchToolResult extends SearchToolResult {}\n\nexport class GoogleSearchToolOutput extends SearchToolOutput<GoogleSearchToolResult> {\n constructor(public readonly results: GoogleSearchToolResult[]) {\n super(results);\n }\n\n static {\n this.register();\n }\n\n createSnapshot() {\n return {\n results: this.results,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\nexport class GoogleSearchTool extends Tool<\n GoogleSearchToolOutput,\n GoogleSearchToolOptions,\n GoogleSearchToolRunOptions\n> {\n name = \"GoogleSearch\";\n description = `Search for online trends, news, current events, real-time information, or research topics.`;\n\n public readonly emitter: ToolEmitter<ToolInput<this>, GoogleSearchToolOutput> =\n Emitter.root.child({\n namespace: [\"tool\", \"search\", \"google\"],\n creator: this,\n });\n\n @Cache()\n inputSchema() {\n return z.object({\n query: z.string({ description: `Search query` }).min(1).max(2048),\n });\n }\n\n protected apiKey: string;\n protected cseId: string;\n\n public constructor(options: GoogleSearchToolOptions = { maxResults: 10 }) {\n super(options);\n\n this.apiKey = options.apiKey || parseEnv(\"GOOGLE_API_KEY\", z.string());\n this.cseId = options.cseId || parseEnv(\"GOOGLE_CSE_ID\", z.string());\n\n if (!this.apiKey || !this.cseId) {\n throw new ValueError(\n [\n `\"apiKey\" or \"cseId\" must both be provided.`,\n `Either set them directly or put them in ENV (\"GOOGLE_API_KEY\" / \"GOOGLE_CSE_ID\")`,\n ].join(\"\\n\"),\n );\n }\n\n if (options.maxResults < 1 || options.maxResults > 100) {\n throw new ValidationError([\n {\n message: \"Property 'maxResults' must be between 1 and 100\",\n propertyName: \"options.maxResults\",\n },\n ]);\n }\n }\n\n @Cache()\n protected get client(): GoogleSearchAPI.Customsearch {\n return new GoogleSearchAPI.Customsearch({\n auth: this.apiKey,\n });\n }\n\n static {\n this.register();\n }\n\n protected async _run(\n { query: input }: ToolInput<this>,\n _options: Partial<GoogleSearchToolRunOptions>,\n run: RunContext<this>,\n ) {\n const results = await paginate({\n size: this.options.maxResults,\n handler: async ({ cursor = 0, limit }) => {\n const maxChunkSize = 10;\n\n const {\n data: { items = [] },\n } = await this.client.cse.list(\n {\n cx: this.cseId,\n q: input,\n start: cursor,\n num: Math.min(limit, maxChunkSize),\n safe: \"active\",\n },\n {\n signal: run.signal,\n },\n );\n\n return {\n data: items,\n nextCursor: items.length < maxChunkSize ? undefined : cursor + items.length,\n };\n },\n });\n\n return new GoogleSearchToolOutput(\n results.map((result) => ({\n title: result.title || \"\",\n description: result.snippet || \"\",\n url: result.link || \"\",\n })),\n );\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n apiKey: this.apiKey,\n cseId: this.cseId,\n };\n }\n\n loadSnapshot({ apiKey, cseId, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n super.loadSnapshot(snapshot);\n Object.assign(this, {\n apiKey,\n cseId,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["googleSearch.ts"],"names":["GoogleSearchToolOutput","SearchToolOutput","constructor","results","register","createSnapshot","loadSnapshot","snapshot","Object","assign","GoogleSearchTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","z","object","query","string","min","max","apiKey","cseId","options","maxResults","parseEnv","ValueError","join","ValidationError","message","propertyName","client","GoogleSearchAPI","Customsearch","auth","_run","input","_options","run","paginate","size","handler","cursor","limit","maxChunkSize","data","items","cse","list","cx","q","start","num","Math","safe","signal","nextCursor","length","undefined","map","result","title","snippet","url","link"],"mappings":"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","file":"googleSearch.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { customsearch_v1 as GoogleSearchAPI } from \"@googleapis/customsearch\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"./base.js\";\nimport { ToolEmitter, Tool, ToolInput } from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { parseEnv } from \"@/internals/env.js\";\nimport { RunContext } from \"@/context.js\";\nimport { paginate } from \"@/internals/helpers/paginate.js\";\nimport { ValidationError } from \"ajv\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nexport interface GoogleSearchToolOptions extends SearchToolOptions {\n apiKey?: string;\n cseId?: string;\n maxResults: number;\n}\n\ntype GoogleSearchToolRunOptions = SearchToolRunOptions;\n\nexport interface GoogleSearchToolResult extends SearchToolResult {}\n\nexport class GoogleSearchToolOutput extends SearchToolOutput<GoogleSearchToolResult> {\n constructor(public readonly results: GoogleSearchToolResult[]) {\n super(results);\n }\n\n static {\n this.register();\n }\n\n createSnapshot() {\n return {\n results: this.results,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\nexport class GoogleSearchTool extends Tool<\n GoogleSearchToolOutput,\n GoogleSearchToolOptions,\n GoogleSearchToolRunOptions\n> {\n name = \"GoogleSearch\";\n description = `Search for online trends, news, current events, real-time information, or research topics.`;\n\n public readonly emitter: ToolEmitter<ToolInput<this>, GoogleSearchToolOutput> =\n Emitter.root.child({\n namespace: [\"tool\", \"search\", \"google\"],\n creator: this,\n });\n\n @Cache()\n inputSchema() {\n return z.object({\n query: z.string({ description: `Search query` }).min(1).max(2048),\n });\n }\n\n protected apiKey: string;\n protected cseId: string;\n\n public constructor(options: GoogleSearchToolOptions = { maxResults: 10 }) {\n super(options);\n\n this.apiKey = options.apiKey || parseEnv(\"GOOGLE_API_KEY\", z.string());\n this.cseId = options.cseId || parseEnv(\"GOOGLE_CSE_ID\", z.string());\n\n if (!this.apiKey || !this.cseId) {\n throw new ValueError(\n [\n `\"apiKey\" or \"cseId\" must both be provided.`,\n `Either set them directly or put them in ENV (\"GOOGLE_API_KEY\" / \"GOOGLE_CSE_ID\")`,\n ].join(\"\\n\"),\n );\n }\n\n if (options.maxResults < 1 || options.maxResults > 100) {\n throw new ValidationError([\n {\n message: \"Property 'maxResults' must be between 1 and 100\",\n propertyName: \"options.maxResults\",\n },\n ]);\n }\n }\n\n @Cache()\n protected get client(): GoogleSearchAPI.Customsearch {\n return new GoogleSearchAPI.Customsearch({\n auth: this.apiKey,\n });\n }\n\n static {\n this.register();\n }\n\n protected async _run(\n { query: input }: ToolInput<this>,\n _options: Partial<GoogleSearchToolRunOptions>,\n run: RunContext<this>,\n ) {\n const results = await paginate({\n size: this.options.maxResults,\n handler: async ({ cursor = 0, limit }) => {\n const maxChunkSize = 10;\n\n const {\n data: { items = [] },\n } = await this.client.cse.list(\n {\n cx: this.cseId,\n q: input,\n start: cursor,\n num: Math.min(limit, maxChunkSize),\n safe: \"active\",\n },\n {\n signal: run.signal,\n },\n );\n\n return {\n data: items,\n nextCursor: items.length < maxChunkSize ? undefined : cursor + items.length,\n };\n },\n });\n\n return new GoogleSearchToolOutput(\n results.map((result) => ({\n title: result.title || \"\",\n description: result.snippet || \"\",\n url: result.link || \"\",\n })),\n );\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n apiKey: this.apiKey,\n cseId: this.cseId,\n };\n }\n\n loadSnapshot({ apiKey, cseId, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n super.loadSnapshot(snapshot);\n Object.assign(this, {\n apiKey,\n cseId,\n });\n }\n}\n"]}
@@ -5,7 +5,7 @@ import { SearchToolOptions, SearchToolResult, SearchToolOutput, SearchToolRunOpt
5
5
  import { Tool, ToolEmitter, ToolInput } from '../base.cjs';
6
6
  import { z } from 'zod';
7
7
  import { RunContext } from '../../context.cjs';
8
- import { E as Emitter } from '../../emitter-BWtGHYn0.cjs';
8
+ import { E as Emitter } from '../../emitter-D5Mu0EEH.cjs';
9
9
  import '../../internals/serializable.cjs';
10
10
  import '../../internals/types.cjs';
11
11
  import '../../internals/helpers/guards.cjs';
@@ -5,7 +5,7 @@ import { SearchToolOptions, SearchToolResult, SearchToolOutput, SearchToolRunOpt
5
5
  import { Tool, ToolEmitter, ToolInput } from '../base.js';
6
6
  import { z } from 'zod';
7
7
  import { RunContext } from '../../context.js';
8
- import { E as Emitter } from '../../emitter-l0W9gC1A.js';
8
+ import { E as Emitter } from '../../emitter-C3dO-s2P.js';
9
9
  import '../../internals/serializable.js';
10
10
  import '../../internals/types.js';
11
11
  import '../../internals/helpers/guards.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["googleSearch.ts"],"names":["GoogleSearchToolOutput","SearchToolOutput","constructor","results","register","createSnapshot","loadSnapshot","snapshot","Object","assign","GoogleSearchTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","z","object","query","string","min","max","apiKey","cseId","options","maxResults","parseEnv","ValueError","join","ValidationError","message","propertyName","client","GoogleSearchAPI","Customsearch","auth","_run","input","_options","run","paginate","size","handler","cursor","limit","maxChunkSize","data","items","cse","list","cx","q","start","num","Math","safe","signal","nextCursor","length","undefined","map","result","title","snippet","url","link"],"mappings":"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","file":"googleSearch.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { customsearch_v1 as GoogleSearchAPI } from \"@googleapis/customsearch\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"./base.js\";\nimport { ToolEmitter, Tool, ToolInput } from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { parseEnv } from \"@/internals/env.js\";\nimport { RunContext } from \"@/context.js\";\nimport { paginate } from \"@/internals/helpers/paginate.js\";\nimport { ValidationError } from \"ajv\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nexport interface GoogleSearchToolOptions extends SearchToolOptions {\n apiKey?: string;\n cseId?: string;\n maxResults: number;\n}\n\ntype GoogleSearchToolRunOptions = SearchToolRunOptions;\n\nexport interface GoogleSearchToolResult extends SearchToolResult {}\n\nexport class GoogleSearchToolOutput extends SearchToolOutput<GoogleSearchToolResult> {\n constructor(public readonly results: GoogleSearchToolResult[]) {\n super(results);\n }\n\n static {\n this.register();\n }\n\n createSnapshot() {\n return {\n results: this.results,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\nexport class GoogleSearchTool extends Tool<\n GoogleSearchToolOutput,\n GoogleSearchToolOptions,\n GoogleSearchToolRunOptions\n> {\n name = \"GoogleSearch\";\n description = `Search for online trends, news, current events, real-time information, or research topics.`;\n\n public readonly emitter: ToolEmitter<ToolInput<this>, GoogleSearchToolOutput> =\n Emitter.root.child({\n namespace: [\"tool\", \"search\", \"google\"],\n creator: this,\n });\n\n @Cache()\n inputSchema() {\n return z.object({\n query: z.string({ description: `Search query` }).min(1).max(2048),\n });\n }\n\n protected apiKey: string;\n protected cseId: string;\n\n public constructor(options: GoogleSearchToolOptions = { maxResults: 10 }) {\n super(options);\n\n this.apiKey = options.apiKey || parseEnv(\"GOOGLE_API_KEY\", z.string());\n this.cseId = options.cseId || parseEnv(\"GOOGLE_CSE_ID\", z.string());\n\n if (!this.apiKey || !this.cseId) {\n throw new ValueError(\n [\n `\"apiKey\" or \"cseId\" must both be provided.`,\n `Either set them directly or put them in ENV (\"GOOGLE_API_KEY\" / \"GOOGLE_CSE_ID\")`,\n ].join(\"\\n\"),\n );\n }\n\n if (options.maxResults < 1 || options.maxResults > 100) {\n throw new ValidationError([\n {\n message: \"Property 'maxResults' must be between 1 and 100\",\n propertyName: \"options.maxResults\",\n },\n ]);\n }\n }\n\n @Cache()\n protected get client(): GoogleSearchAPI.Customsearch {\n return new GoogleSearchAPI.Customsearch({\n auth: this.apiKey,\n });\n }\n\n static {\n this.register();\n }\n\n protected async _run(\n { query: input }: ToolInput<this>,\n _options: Partial<GoogleSearchToolRunOptions>,\n run: RunContext<this>,\n ) {\n const results = await paginate({\n size: this.options.maxResults,\n handler: async ({ cursor = 0, limit }) => {\n const maxChunkSize = 10;\n\n const {\n data: { items = [] },\n } = await this.client.cse.list(\n {\n cx: this.cseId,\n q: input,\n start: cursor,\n num: Math.min(limit, maxChunkSize),\n safe: \"active\",\n },\n {\n signal: run.signal,\n },\n );\n\n return {\n data: items,\n nextCursor: items.length < maxChunkSize ? undefined : cursor + items.length,\n };\n },\n });\n\n return new GoogleSearchToolOutput(\n results.map((result) => ({\n title: result.title || \"\",\n description: result.snippet || \"\",\n url: result.link || \"\",\n })),\n );\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n apiKey: this.apiKey,\n cseId: this.cseId,\n };\n }\n\n loadSnapshot({ apiKey, cseId, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n super.loadSnapshot(snapshot);\n Object.assign(this, {\n apiKey,\n cseId,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["googleSearch.ts"],"names":["GoogleSearchToolOutput","SearchToolOutput","constructor","results","register","createSnapshot","loadSnapshot","snapshot","Object","assign","GoogleSearchTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","z","object","query","string","min","max","apiKey","cseId","options","maxResults","parseEnv","ValueError","join","ValidationError","message","propertyName","client","GoogleSearchAPI","Customsearch","auth","_run","input","_options","run","paginate","size","handler","cursor","limit","maxChunkSize","data","items","cse","list","cx","q","start","num","Math","safe","signal","nextCursor","length","undefined","map","result","title","snippet","url","link"],"mappings":"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","file":"googleSearch.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { customsearch_v1 as GoogleSearchAPI } from \"@googleapis/customsearch\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"./base.js\";\nimport { ToolEmitter, Tool, ToolInput } from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { parseEnv } from \"@/internals/env.js\";\nimport { RunContext } from \"@/context.js\";\nimport { paginate } from \"@/internals/helpers/paginate.js\";\nimport { ValidationError } from \"ajv\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nexport interface GoogleSearchToolOptions extends SearchToolOptions {\n apiKey?: string;\n cseId?: string;\n maxResults: number;\n}\n\ntype GoogleSearchToolRunOptions = SearchToolRunOptions;\n\nexport interface GoogleSearchToolResult extends SearchToolResult {}\n\nexport class GoogleSearchToolOutput extends SearchToolOutput<GoogleSearchToolResult> {\n constructor(public readonly results: GoogleSearchToolResult[]) {\n super(results);\n }\n\n static {\n this.register();\n }\n\n createSnapshot() {\n return {\n results: this.results,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\nexport class GoogleSearchTool extends Tool<\n GoogleSearchToolOutput,\n GoogleSearchToolOptions,\n GoogleSearchToolRunOptions\n> {\n name = \"GoogleSearch\";\n description = `Search for online trends, news, current events, real-time information, or research topics.`;\n\n public readonly emitter: ToolEmitter<ToolInput<this>, GoogleSearchToolOutput> =\n Emitter.root.child({\n namespace: [\"tool\", \"search\", \"google\"],\n creator: this,\n });\n\n @Cache()\n inputSchema() {\n return z.object({\n query: z.string({ description: `Search query` }).min(1).max(2048),\n });\n }\n\n protected apiKey: string;\n protected cseId: string;\n\n public constructor(options: GoogleSearchToolOptions = { maxResults: 10 }) {\n super(options);\n\n this.apiKey = options.apiKey || parseEnv(\"GOOGLE_API_KEY\", z.string());\n this.cseId = options.cseId || parseEnv(\"GOOGLE_CSE_ID\", z.string());\n\n if (!this.apiKey || !this.cseId) {\n throw new ValueError(\n [\n `\"apiKey\" or \"cseId\" must both be provided.`,\n `Either set them directly or put them in ENV (\"GOOGLE_API_KEY\" / \"GOOGLE_CSE_ID\")`,\n ].join(\"\\n\"),\n );\n }\n\n if (options.maxResults < 1 || options.maxResults > 100) {\n throw new ValidationError([\n {\n message: \"Property 'maxResults' must be between 1 and 100\",\n propertyName: \"options.maxResults\",\n },\n ]);\n }\n }\n\n @Cache()\n protected get client(): GoogleSearchAPI.Customsearch {\n return new GoogleSearchAPI.Customsearch({\n auth: this.apiKey,\n });\n }\n\n static {\n this.register();\n }\n\n protected async _run(\n { query: input }: ToolInput<this>,\n _options: Partial<GoogleSearchToolRunOptions>,\n run: RunContext<this>,\n ) {\n const results = await paginate({\n size: this.options.maxResults,\n handler: async ({ cursor = 0, limit }) => {\n const maxChunkSize = 10;\n\n const {\n data: { items = [] },\n } = await this.client.cse.list(\n {\n cx: this.cseId,\n q: input,\n start: cursor,\n num: Math.min(limit, maxChunkSize),\n safe: \"active\",\n },\n {\n signal: run.signal,\n },\n );\n\n return {\n data: items,\n nextCursor: items.length < maxChunkSize ? undefined : cursor + items.length,\n };\n },\n });\n\n return new GoogleSearchToolOutput(\n results.map((result) => ({\n title: result.title || \"\",\n description: result.snippet || \"\",\n url: result.link || \"\",\n })),\n );\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n apiKey: this.apiKey,\n cseId: this.cseId,\n };\n }\n\n loadSnapshot({ apiKey, cseId, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n super.loadSnapshot(snapshot);\n Object.assign(this, {\n apiKey,\n cseId,\n });\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["searXNGSearch.ts"],"names":["SearXNGToolOutput","SearchToolOutput","register","createSnapshot","results","loadSnapshot","snapshot","Object","assign","SearXNGTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","z","object","query","string","min","describe","options","maxResults","ValidationError","message","propertyName","_run","input","_options","run","params","createURLParams","q","format","baseUrl","parseEnv","url","decodeURIComponent","toString","response","fetch","signal","ok","Error","text","data","json","slice","map","result","title","content"],"mappings":";;;;;;;;;;;;AAuCO,MAAMA,0BAA0BC,yBAAAA,CAAAA;EAvCvC;;;EAwCE;AACE,IAAA,IAAA,CAAKC,QAAQ,EAAA;AACf;EAEAC,cAAiB,GAAA;AACf,IAAO,OAAA;AACLC,MAAAA,OAAAA,EAAS,IAAKA,CAAAA;AAChB,KAAA;AACF;AAEAC,EAAAA,YAAAA,CAAaC,QAAkD,EAAA;AAC7DC,IAAOC,MAAAA,CAAAA,MAAAA,CAAO,MAAMF,QAAAA,CAAAA;AACtB;AACF;AAEO,MAAMG,oBAAoBC,eAAAA,CAAAA;EAvDjC;;;EA4DEC,IAAO,GAAA,YAAA;EACPC,WAAc,GAAA,CAAA,0FAAA,CAAA;EAEEC,OACdC,GAAAA,mBAAAA,CAAQC,KAAKC,KAAM,CAAA;IACjBC,SAAW,EAAA;AAAC,MAAA,MAAA;AAAQ,MAAA,QAAA;AAAU,MAAA;;IAC9BC,OAAS,EAAA;GACX,CAAA;EAEFC,WAAc,GAAA;AACZ,IAAA,OAAOC,MAAEC,MAAO,CAAA;AACdC,MAAAA,KAAAA,EAAOF,MAAEG,MAAM,EAAA,CAAGC,IAAI,CAAA,CAAA,CAAGC,SAAS,CAAmB,iBAAA,CAAA;KACvD,CAAA;AACF;AAEA,EAAA,WAAA,CAAmBC,OAA8B,GAAA;IAAEC,UAAY,EAAA;GAAM,EAAA;AACnE,IAAA,KAAA,CAAMD,OAAAA,CAAAA;AAEN,IAAA,IAAIA,OAAQC,CAAAA,UAAAA,GAAa,CAAKD,IAAAA,OAAAA,CAAQC,aAAa,GAAK,EAAA;AACtD,MAAA,MAAM,IAAIC,mBAAgB,CAAA;AACxB,QAAA;UACEC,OAAS,EAAA,iDAAA;UACTC,YAAc,EAAA;AAChB;AACD,OAAA,CAAA;AACH;AACF;EAEA,MAAgBC,IAAAA,CACdC,KACAC,EAAAA,QAAAA,EACAC,GACA,EAAA;AACA,IAAA,MAAMC,SAASC,2BAAgB,CAAA;AAC7BC,MAAAA,CAAAA,EAAGL,KAAMV,CAAAA,KAAAA;MACTgB,MAAQ,EAAA;KACV,CAAA;AAEA,IAAMC,MAAAA,OAAAA,GAAU,KAAKb,OAAQa,CAAAA,OAAAA,IAAWC,iBAAS,kBAAoBpB,EAAAA,KAAAA,CAAEG,QAAM,CAAA;AAC7E,IAAMkB,MAAAA,GAAAA,GAAM,GAAGF,OAAAA,CAAAA,CAAAA,EAAWG,mBAAmBP,MAAOQ,CAAAA,QAAAA,EAAQ,CAAA,CAAA,CAAA;AAC5D,IAAMC,MAAAA,QAAAA,GAAW,MAAMC,KAAAA,CAAMJ,GAAK,EAAA;AAChCK,MAAAA,MAAAA,EAAQZ,GAAIY,CAAAA;KACd,CAAA;AAEA,IAAI,IAAA,CAACF,SAASG,EAAI,EAAA;AAChB,MAAA,MAAM,IAAIC,KAAAA,CAAM,MAAMJ,QAAAA,CAASK,MAAI,CAAA;AACrC;AAEA,IAAMC,MAAAA,IAAAA,GAAO,MAAMN,QAAAA,CAASO,IAAI,EAAA;AAEhC,IAAA,OAAO,IAAInD,iBAAAA,CACTkD,IAAK9C,CAAAA,OAAAA,CACFgD,KAAM,CAAA,CAAA,EAAG,IAAK1B,CAAAA,OAAAA,CAAQC,UAAU,CAAA,CAChC0B,GAAI,CAAA,CAACC,MAA6D,MAAA;AACjEb,MAAAA,GAAAA,EAAKa,OAAOb,GAAO,IAAA,EAAA;AACnBc,MAAAA,KAAAA,EAAOD,OAAOC,KAAS,IAAA,EAAA;AACvB3C,MAAAA,WAAAA,EAAa0C,OAAOE,OAAW,IAAA;AACjC,KAAA,CAAA,CAAA,CAAA;AAEN;AACF","file":"searXNGSearch.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ToolEmitter, Tool, ToolInput } from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { createURLParams } from \"@/internals/fetcher.js\";\nimport { RunContext } from \"@/context.js\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"@/tools/search/base.js\";\nimport { ValidationError } from \"ajv\";\nimport { parseEnv } from \"@/internals/env.js\";\n\nexport interface SearXNGToolOptions extends SearchToolOptions {\n baseUrl?: string;\n maxResults: number;\n}\n\ntype SearXNGToolRunOptions = SearchToolRunOptions;\n\nexport interface SearXNGToolResult extends SearchToolResult {}\n\nexport class SearXNGToolOutput extends SearchToolOutput<SearXNGToolResult> {\n static {\n this.register();\n }\n\n createSnapshot() {\n return {\n results: this.results,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\nexport class SearXNGTool extends Tool<\n SearXNGToolOutput,\n SearXNGToolOptions,\n SearXNGToolRunOptions\n> {\n name = \"Web Search\";\n description = `Search for online trends, news, current events, real-time information, or research topics.`;\n\n public readonly emitter: ToolEmitter<ToolInput<this>, SearchToolOutput<SearXNGToolResult>> =\n Emitter.root.child({\n namespace: [\"tool\", \"search\", \"searXNG\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({\n query: z.string().min(1).describe(`Web search query.`),\n });\n }\n\n public constructor(options: SearXNGToolOptions = { maxResults: 10 }) {\n super(options);\n\n if (options.maxResults < 1 || options.maxResults > 100) {\n throw new ValidationError([\n {\n message: \"Property 'maxResults' must be between 1 and 100\",\n propertyName: \"options.maxResults\",\n },\n ]);\n }\n }\n\n protected async _run(\n input: ToolInput<this>,\n _options: Partial<SearchToolRunOptions>,\n run: RunContext<this>,\n ) {\n const params = createURLParams({\n q: input.query,\n format: \"json\",\n });\n\n const baseUrl = this.options.baseUrl || parseEnv(\"SEARXNG_BASE_URL\", z.string());\n const url = `${baseUrl}?${decodeURIComponent(params.toString())}`;\n const response = await fetch(url, {\n signal: run.signal,\n });\n\n if (!response.ok) {\n throw new Error(await response.text());\n }\n\n const data = await response.json();\n\n return new SearXNGToolOutput(\n data.results\n .slice(0, this.options.maxResults)\n .map((result: { url: string; title: string; content: string }) => ({\n url: result.url || \"\",\n title: result.title || \"\",\n description: result.content || \"\",\n })),\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["searXNGSearch.ts"],"names":["SearXNGToolOutput","SearchToolOutput","register","createSnapshot","results","loadSnapshot","snapshot","Object","assign","SearXNGTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","z","object","query","string","min","describe","options","maxResults","ValidationError","message","propertyName","_run","input","_options","run","params","createURLParams","q","format","baseUrl","parseEnv","url","decodeURIComponent","toString","response","fetch","signal","ok","Error","text","data","json","slice","map","result","title","content"],"mappings":";;;;;;;;;;;;AAuCO,MAAMA,0BAA0BC,yBAAAA,CAAAA;EAvCvC;;;EAwCE;AACE,IAAA,IAAA,CAAKC,QAAQ,EAAA;AACf;EAEAC,cAAiB,GAAA;AACf,IAAO,OAAA;AACLC,MAAAA,OAAAA,EAAS,IAAKA,CAAAA;AAChB,KAAA;AACF;AAEAC,EAAAA,YAAAA,CAAaC,QAAkD,EAAA;AAC7DC,IAAOC,MAAAA,CAAAA,MAAAA,CAAO,MAAMF,QAAAA,CAAAA;AACtB;AACF;AAEO,MAAMG,oBAAoBC,eAAAA,CAAAA;EAvDjC;;;EA4DEC,IAAO,GAAA,YAAA;EACPC,WAAc,GAAA,CAAA,0FAAA,CAAA;EAEEC,OACdC,GAAAA,mBAAAA,CAAQC,KAAKC,KAAM,CAAA;IACjBC,SAAW,EAAA;AAAC,MAAA,MAAA;AAAQ,MAAA,QAAA;AAAU,MAAA;;IAC9BC,OAAS,EAAA;GACX,CAAA;EAEFC,WAAc,GAAA;AACZ,IAAA,OAAOC,MAAEC,MAAO,CAAA;AACdC,MAAAA,KAAAA,EAAOF,MAAEG,MAAM,EAAA,CAAGC,IAAI,CAAA,CAAA,CAAGC,SAAS,CAAmB,iBAAA,CAAA;KACvD,CAAA;AACF;AAEA,EAAA,WAAA,CAAmBC,OAA8B,GAAA;IAAEC,UAAY,EAAA;GAAM,EAAA;AACnE,IAAA,KAAA,CAAMD,OAAAA,CAAAA;AAEN,IAAA,IAAIA,OAAQC,CAAAA,UAAAA,GAAa,CAAKD,IAAAA,OAAAA,CAAQC,aAAa,GAAK,EAAA;AACtD,MAAA,MAAM,IAAIC,mBAAgB,CAAA;AACxB,QAAA;UACEC,OAAS,EAAA,iDAAA;UACTC,YAAc,EAAA;AAChB;AACD,OAAA,CAAA;AACH;AACF;EAEA,MAAgBC,IAAAA,CACdC,KACAC,EAAAA,QAAAA,EACAC,GACA,EAAA;AACA,IAAA,MAAMC,SAASC,2BAAgB,CAAA;AAC7BC,MAAAA,CAAAA,EAAGL,KAAMV,CAAAA,KAAAA;MACTgB,MAAQ,EAAA;KACV,CAAA;AAEA,IAAMC,MAAAA,OAAAA,GAAU,KAAKb,OAAQa,CAAAA,OAAAA,IAAWC,iBAAS,kBAAoBpB,EAAAA,KAAAA,CAAEG,QAAM,CAAA;AAC7E,IAAMkB,MAAAA,GAAAA,GAAM,GAAGF,OAAAA,CAAAA,CAAAA,EAAWG,mBAAmBP,MAAOQ,CAAAA,QAAAA,EAAQ,CAAA,CAAA,CAAA;AAC5D,IAAMC,MAAAA,QAAAA,GAAW,MAAMC,KAAAA,CAAMJ,GAAK,EAAA;AAChCK,MAAAA,MAAAA,EAAQZ,GAAIY,CAAAA;KACd,CAAA;AAEA,IAAI,IAAA,CAACF,SAASG,EAAI,EAAA;AAChB,MAAA,MAAM,IAAIC,KAAAA,CAAM,MAAMJ,QAAAA,CAASK,MAAI,CAAA;AACrC;AAEA,IAAMC,MAAAA,IAAAA,GAAO,MAAMN,QAAAA,CAASO,IAAI,EAAA;AAEhC,IAAA,OAAO,IAAInD,iBAAAA,CACTkD,IAAK9C,CAAAA,OAAAA,CACFgD,KAAM,CAAA,CAAA,EAAG,IAAK1B,CAAAA,OAAAA,CAAQC,UAAU,CAAA,CAChC0B,GAAI,CAAA,CAACC,MAA6D,MAAA;AACjEb,MAAAA,GAAAA,EAAKa,OAAOb,GAAO,IAAA,EAAA;AACnBc,MAAAA,KAAAA,EAAOD,OAAOC,KAAS,IAAA,EAAA;AACvB3C,MAAAA,WAAAA,EAAa0C,OAAOE,OAAW,IAAA;AACjC,KAAA,CAAA,CAAA,CAAA;AAEN;AACF","file":"searXNGSearch.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ToolEmitter, Tool, ToolInput } from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { createURLParams } from \"@/internals/fetcher.js\";\nimport { RunContext } from \"@/context.js\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"@/tools/search/base.js\";\nimport { ValidationError } from \"ajv\";\nimport { parseEnv } from \"@/internals/env.js\";\n\nexport interface SearXNGToolOptions extends SearchToolOptions {\n baseUrl?: string;\n maxResults: number;\n}\n\ntype SearXNGToolRunOptions = SearchToolRunOptions;\n\nexport interface SearXNGToolResult extends SearchToolResult {}\n\nexport class SearXNGToolOutput extends SearchToolOutput<SearXNGToolResult> {\n static {\n this.register();\n }\n\n createSnapshot() {\n return {\n results: this.results,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\nexport class SearXNGTool extends Tool<\n SearXNGToolOutput,\n SearXNGToolOptions,\n SearXNGToolRunOptions\n> {\n name = \"Web Search\";\n description = `Search for online trends, news, current events, real-time information, or research topics.`;\n\n public readonly emitter: ToolEmitter<ToolInput<this>, SearchToolOutput<SearXNGToolResult>> =\n Emitter.root.child({\n namespace: [\"tool\", \"search\", \"searXNG\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({\n query: z.string().min(1).describe(`Web search query.`),\n });\n }\n\n public constructor(options: SearXNGToolOptions = { maxResults: 10 }) {\n super(options);\n\n if (options.maxResults < 1 || options.maxResults > 100) {\n throw new ValidationError([\n {\n message: \"Property 'maxResults' must be between 1 and 100\",\n propertyName: \"options.maxResults\",\n },\n ]);\n }\n }\n\n protected async _run(\n input: ToolInput<this>,\n _options: Partial<SearchToolRunOptions>,\n run: RunContext<this>,\n ) {\n const params = createURLParams({\n q: input.query,\n format: \"json\",\n });\n\n const baseUrl = this.options.baseUrl || parseEnv(\"SEARXNG_BASE_URL\", z.string());\n const url = `${baseUrl}?${decodeURIComponent(params.toString())}`;\n const response = await fetch(url, {\n signal: run.signal,\n });\n\n if (!response.ok) {\n throw new Error(await response.text());\n }\n\n const data = await response.json();\n\n return new SearXNGToolOutput(\n data.results\n .slice(0, this.options.maxResults)\n .map((result: { url: string; title: string; content: string }) => ({\n url: result.url || \"\",\n title: result.title || \"\",\n description: result.content || \"\",\n })),\n );\n }\n}\n"]}
@@ -11,11 +11,11 @@ import 'promise-based-task';
11
11
  import '../../cache/base.cjs';
12
12
  import '../../internals/helpers/schema.cjs';
13
13
  import 'zod-to-json-schema';
14
- import '../../emitter-BWtGHYn0.cjs';
14
+ import '../../emitter-D5Mu0EEH.cjs';
15
15
  import '../../internals/helpers/promise.cjs';
16
16
 
17
17
  /**
18
- * Copyright 2025 IBM Corp.
18
+ * Copyright 2025 © BeeAI a Series of LF Projects, LLC
19
19
  *
20
20
  * Licensed under the Apache License, Version 2.0 (the "License");
21
21
  * you may not use this file except in compliance with the License.
@@ -11,11 +11,11 @@ import 'promise-based-task';
11
11
  import '../../cache/base.js';
12
12
  import '../../internals/helpers/schema.js';
13
13
  import 'zod-to-json-schema';
14
- import '../../emitter-l0W9gC1A.js';
14
+ import '../../emitter-C3dO-s2P.js';
15
15
  import '../../internals/helpers/promise.js';
16
16
 
17
17
  /**
18
- * Copyright 2025 IBM Corp.
18
+ * Copyright 2025 © BeeAI a Series of LF Projects, LLC
19
19
  *
20
20
  * Licensed under the Apache License, Version 2.0 (the "License");
21
21
  * you may not use this file except in compliance with the License.
@@ -1 +1 @@
1
- {"version":3,"sources":["searXNGSearch.ts"],"names":["SearXNGToolOutput","SearchToolOutput","register","createSnapshot","results","loadSnapshot","snapshot","Object","assign","SearXNGTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","z","object","query","string","min","describe","options","maxResults","ValidationError","message","propertyName","_run","input","_options","run","params","createURLParams","q","format","baseUrl","parseEnv","url","decodeURIComponent","toString","response","fetch","signal","ok","Error","text","data","json","slice","map","result","title","content"],"mappings":";;;;;;;;;;AAuCO,MAAMA,0BAA0BC,gBAAAA,CAAAA;EAvCvC;;;EAwCE;AACE,IAAA,IAAA,CAAKC,QAAQ,EAAA;AACf;EAEAC,cAAiB,GAAA;AACf,IAAO,OAAA;AACLC,MAAAA,OAAAA,EAAS,IAAKA,CAAAA;AAChB,KAAA;AACF;AAEAC,EAAAA,YAAAA,CAAaC,QAAkD,EAAA;AAC7DC,IAAOC,MAAAA,CAAAA,MAAAA,CAAO,MAAMF,QAAAA,CAAAA;AACtB;AACF;AAEO,MAAMG,oBAAoBC,IAAAA,CAAAA;EAvDjC;;;EA4DEC,IAAO,GAAA,YAAA;EACPC,WAAc,GAAA,CAAA,0FAAA,CAAA;EAEEC,OACdC,GAAAA,OAAAA,CAAQC,KAAKC,KAAM,CAAA;IACjBC,SAAW,EAAA;AAAC,MAAA,MAAA;AAAQ,MAAA,QAAA;AAAU,MAAA;;IAC9BC,OAAS,EAAA;GACX,CAAA;EAEFC,WAAc,GAAA;AACZ,IAAA,OAAOC,EAAEC,MAAO,CAAA;AACdC,MAAAA,KAAAA,EAAOF,EAAEG,MAAM,EAAA,CAAGC,IAAI,CAAA,CAAA,CAAGC,SAAS,CAAmB,iBAAA,CAAA;KACvD,CAAA;AACF;AAEA,EAAA,WAAA,CAAmBC,OAA8B,GAAA;IAAEC,UAAY,EAAA;GAAM,EAAA;AACnE,IAAA,KAAA,CAAMD,OAAAA,CAAAA;AAEN,IAAA,IAAIA,OAAQC,CAAAA,UAAAA,GAAa,CAAKD,IAAAA,OAAAA,CAAQC,aAAa,GAAK,EAAA;AACtD,MAAA,MAAM,IAAIC,eAAgB,CAAA;AACxB,QAAA;UACEC,OAAS,EAAA,iDAAA;UACTC,YAAc,EAAA;AAChB;AACD,OAAA,CAAA;AACH;AACF;EAEA,MAAgBC,IAAAA,CACdC,KACAC,EAAAA,QAAAA,EACAC,GACA,EAAA;AACA,IAAA,MAAMC,SAASC,eAAgB,CAAA;AAC7BC,MAAAA,CAAAA,EAAGL,KAAMV,CAAAA,KAAAA;MACTgB,MAAQ,EAAA;KACV,CAAA;AAEA,IAAMC,MAAAA,OAAAA,GAAU,KAAKb,OAAQa,CAAAA,OAAAA,IAAWC,SAAS,kBAAoBpB,EAAAA,CAAAA,CAAEG,QAAM,CAAA;AAC7E,IAAMkB,MAAAA,GAAAA,GAAM,GAAGF,OAAAA,CAAAA,CAAAA,EAAWG,mBAAmBP,MAAOQ,CAAAA,QAAAA,EAAQ,CAAA,CAAA,CAAA;AAC5D,IAAMC,MAAAA,QAAAA,GAAW,MAAMC,KAAAA,CAAMJ,GAAK,EAAA;AAChCK,MAAAA,MAAAA,EAAQZ,GAAIY,CAAAA;KACd,CAAA;AAEA,IAAI,IAAA,CAACF,SAASG,EAAI,EAAA;AAChB,MAAA,MAAM,IAAIC,KAAAA,CAAM,MAAMJ,QAAAA,CAASK,MAAI,CAAA;AACrC;AAEA,IAAMC,MAAAA,IAAAA,GAAO,MAAMN,QAAAA,CAASO,IAAI,EAAA;AAEhC,IAAA,OAAO,IAAInD,iBAAAA,CACTkD,IAAK9C,CAAAA,OAAAA,CACFgD,KAAM,CAAA,CAAA,EAAG,IAAK1B,CAAAA,OAAAA,CAAQC,UAAU,CAAA,CAChC0B,GAAI,CAAA,CAACC,MAA6D,MAAA;AACjEb,MAAAA,GAAAA,EAAKa,OAAOb,GAAO,IAAA,EAAA;AACnBc,MAAAA,KAAAA,EAAOD,OAAOC,KAAS,IAAA,EAAA;AACvB3C,MAAAA,WAAAA,EAAa0C,OAAOE,OAAW,IAAA;AACjC,KAAA,CAAA,CAAA,CAAA;AAEN;AACF","file":"searXNGSearch.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ToolEmitter, Tool, ToolInput } from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { createURLParams } from \"@/internals/fetcher.js\";\nimport { RunContext } from \"@/context.js\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"@/tools/search/base.js\";\nimport { ValidationError } from \"ajv\";\nimport { parseEnv } from \"@/internals/env.js\";\n\nexport interface SearXNGToolOptions extends SearchToolOptions {\n baseUrl?: string;\n maxResults: number;\n}\n\ntype SearXNGToolRunOptions = SearchToolRunOptions;\n\nexport interface SearXNGToolResult extends SearchToolResult {}\n\nexport class SearXNGToolOutput extends SearchToolOutput<SearXNGToolResult> {\n static {\n this.register();\n }\n\n createSnapshot() {\n return {\n results: this.results,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\nexport class SearXNGTool extends Tool<\n SearXNGToolOutput,\n SearXNGToolOptions,\n SearXNGToolRunOptions\n> {\n name = \"Web Search\";\n description = `Search for online trends, news, current events, real-time information, or research topics.`;\n\n public readonly emitter: ToolEmitter<ToolInput<this>, SearchToolOutput<SearXNGToolResult>> =\n Emitter.root.child({\n namespace: [\"tool\", \"search\", \"searXNG\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({\n query: z.string().min(1).describe(`Web search query.`),\n });\n }\n\n public constructor(options: SearXNGToolOptions = { maxResults: 10 }) {\n super(options);\n\n if (options.maxResults < 1 || options.maxResults > 100) {\n throw new ValidationError([\n {\n message: \"Property 'maxResults' must be between 1 and 100\",\n propertyName: \"options.maxResults\",\n },\n ]);\n }\n }\n\n protected async _run(\n input: ToolInput<this>,\n _options: Partial<SearchToolRunOptions>,\n run: RunContext<this>,\n ) {\n const params = createURLParams({\n q: input.query,\n format: \"json\",\n });\n\n const baseUrl = this.options.baseUrl || parseEnv(\"SEARXNG_BASE_URL\", z.string());\n const url = `${baseUrl}?${decodeURIComponent(params.toString())}`;\n const response = await fetch(url, {\n signal: run.signal,\n });\n\n if (!response.ok) {\n throw new Error(await response.text());\n }\n\n const data = await response.json();\n\n return new SearXNGToolOutput(\n data.results\n .slice(0, this.options.maxResults)\n .map((result: { url: string; title: string; content: string }) => ({\n url: result.url || \"\",\n title: result.title || \"\",\n description: result.content || \"\",\n })),\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["searXNGSearch.ts"],"names":["SearXNGToolOutput","SearchToolOutput","register","createSnapshot","results","loadSnapshot","snapshot","Object","assign","SearXNGTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","z","object","query","string","min","describe","options","maxResults","ValidationError","message","propertyName","_run","input","_options","run","params","createURLParams","q","format","baseUrl","parseEnv","url","decodeURIComponent","toString","response","fetch","signal","ok","Error","text","data","json","slice","map","result","title","content"],"mappings":";;;;;;;;;;AAuCO,MAAMA,0BAA0BC,gBAAAA,CAAAA;EAvCvC;;;EAwCE;AACE,IAAA,IAAA,CAAKC,QAAQ,EAAA;AACf;EAEAC,cAAiB,GAAA;AACf,IAAO,OAAA;AACLC,MAAAA,OAAAA,EAAS,IAAKA,CAAAA;AAChB,KAAA;AACF;AAEAC,EAAAA,YAAAA,CAAaC,QAAkD,EAAA;AAC7DC,IAAOC,MAAAA,CAAAA,MAAAA,CAAO,MAAMF,QAAAA,CAAAA;AACtB;AACF;AAEO,MAAMG,oBAAoBC,IAAAA,CAAAA;EAvDjC;;;EA4DEC,IAAO,GAAA,YAAA;EACPC,WAAc,GAAA,CAAA,0FAAA,CAAA;EAEEC,OACdC,GAAAA,OAAAA,CAAQC,KAAKC,KAAM,CAAA;IACjBC,SAAW,EAAA;AAAC,MAAA,MAAA;AAAQ,MAAA,QAAA;AAAU,MAAA;;IAC9BC,OAAS,EAAA;GACX,CAAA;EAEFC,WAAc,GAAA;AACZ,IAAA,OAAOC,EAAEC,MAAO,CAAA;AACdC,MAAAA,KAAAA,EAAOF,EAAEG,MAAM,EAAA,CAAGC,IAAI,CAAA,CAAA,CAAGC,SAAS,CAAmB,iBAAA,CAAA;KACvD,CAAA;AACF;AAEA,EAAA,WAAA,CAAmBC,OAA8B,GAAA;IAAEC,UAAY,EAAA;GAAM,EAAA;AACnE,IAAA,KAAA,CAAMD,OAAAA,CAAAA;AAEN,IAAA,IAAIA,OAAQC,CAAAA,UAAAA,GAAa,CAAKD,IAAAA,OAAAA,CAAQC,aAAa,GAAK,EAAA;AACtD,MAAA,MAAM,IAAIC,eAAgB,CAAA;AACxB,QAAA;UACEC,OAAS,EAAA,iDAAA;UACTC,YAAc,EAAA;AAChB;AACD,OAAA,CAAA;AACH;AACF;EAEA,MAAgBC,IAAAA,CACdC,KACAC,EAAAA,QAAAA,EACAC,GACA,EAAA;AACA,IAAA,MAAMC,SAASC,eAAgB,CAAA;AAC7BC,MAAAA,CAAAA,EAAGL,KAAMV,CAAAA,KAAAA;MACTgB,MAAQ,EAAA;KACV,CAAA;AAEA,IAAMC,MAAAA,OAAAA,GAAU,KAAKb,OAAQa,CAAAA,OAAAA,IAAWC,SAAS,kBAAoBpB,EAAAA,CAAAA,CAAEG,QAAM,CAAA;AAC7E,IAAMkB,MAAAA,GAAAA,GAAM,GAAGF,OAAAA,CAAAA,CAAAA,EAAWG,mBAAmBP,MAAOQ,CAAAA,QAAAA,EAAQ,CAAA,CAAA,CAAA;AAC5D,IAAMC,MAAAA,QAAAA,GAAW,MAAMC,KAAAA,CAAMJ,GAAK,EAAA;AAChCK,MAAAA,MAAAA,EAAQZ,GAAIY,CAAAA;KACd,CAAA;AAEA,IAAI,IAAA,CAACF,SAASG,EAAI,EAAA;AAChB,MAAA,MAAM,IAAIC,KAAAA,CAAM,MAAMJ,QAAAA,CAASK,MAAI,CAAA;AACrC;AAEA,IAAMC,MAAAA,IAAAA,GAAO,MAAMN,QAAAA,CAASO,IAAI,EAAA;AAEhC,IAAA,OAAO,IAAInD,iBAAAA,CACTkD,IAAK9C,CAAAA,OAAAA,CACFgD,KAAM,CAAA,CAAA,EAAG,IAAK1B,CAAAA,OAAAA,CAAQC,UAAU,CAAA,CAChC0B,GAAI,CAAA,CAACC,MAA6D,MAAA;AACjEb,MAAAA,GAAAA,EAAKa,OAAOb,GAAO,IAAA,EAAA;AACnBc,MAAAA,KAAAA,EAAOD,OAAOC,KAAS,IAAA,EAAA;AACvB3C,MAAAA,WAAAA,EAAa0C,OAAOE,OAAW,IAAA;AACjC,KAAA,CAAA,CAAA,CAAA;AAEN;AACF","file":"searXNGSearch.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ToolEmitter, Tool, ToolInput } from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { createURLParams } from \"@/internals/fetcher.js\";\nimport { RunContext } from \"@/context.js\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"@/tools/search/base.js\";\nimport { ValidationError } from \"ajv\";\nimport { parseEnv } from \"@/internals/env.js\";\n\nexport interface SearXNGToolOptions extends SearchToolOptions {\n baseUrl?: string;\n maxResults: number;\n}\n\ntype SearXNGToolRunOptions = SearchToolRunOptions;\n\nexport interface SearXNGToolResult extends SearchToolResult {}\n\nexport class SearXNGToolOutput extends SearchToolOutput<SearXNGToolResult> {\n static {\n this.register();\n }\n\n createSnapshot() {\n return {\n results: this.results,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\nexport class SearXNGTool extends Tool<\n SearXNGToolOutput,\n SearXNGToolOptions,\n SearXNGToolRunOptions\n> {\n name = \"Web Search\";\n description = `Search for online trends, news, current events, real-time information, or research topics.`;\n\n public readonly emitter: ToolEmitter<ToolInput<this>, SearchToolOutput<SearXNGToolResult>> =\n Emitter.root.child({\n namespace: [\"tool\", \"search\", \"searXNG\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({\n query: z.string().min(1).describe(`Web search query.`),\n });\n }\n\n public constructor(options: SearXNGToolOptions = { maxResults: 10 }) {\n super(options);\n\n if (options.maxResults < 1 || options.maxResults > 100) {\n throw new ValidationError([\n {\n message: \"Property 'maxResults' must be between 1 and 100\",\n propertyName: \"options.maxResults\",\n },\n ]);\n }\n }\n\n protected async _run(\n input: ToolInput<this>,\n _options: Partial<SearchToolRunOptions>,\n run: RunContext<this>,\n ) {\n const params = createURLParams({\n q: input.query,\n format: \"json\",\n });\n\n const baseUrl = this.options.baseUrl || parseEnv(\"SEARXNG_BASE_URL\", z.string());\n const url = `${baseUrl}?${decodeURIComponent(params.toString())}`;\n const response = await fetch(url, {\n signal: run.signal,\n });\n\n if (!response.ok) {\n throw new Error(await response.text());\n }\n\n const data = await response.json();\n\n return new SearXNGToolOutput(\n data.results\n .slice(0, this.options.maxResults)\n .map((result: { url: string; title: string; content: string }) => ({\n url: result.url || \"\",\n title: result.title || \"\",\n description: result.content || \"\",\n })),\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["wikipedia.ts"],"names":["wiki","default","setLang","WikipediaToolOutput","SearchToolOutput","constructor","results","maxSerializedLength","register","getTextContent","isEmpty","target","length","response","JSON","stringify","Infinity","substring","createSnapshot","loadSnapshot","snapshot","Object","assign","WikipediaTool","Tool","name","description","emitter","inputSchema","z","object","query","string","min","max","config","Emitter","root","child","namespace","creator","_mappers","categories","page","content","html","markdown","runOptions","then","result","url","URL","fullurl","base","protocol","hostname","port","filter","Boolean","join","replace","service","Turndown","use","turndownPlugin","gfm","remove","node","extraction","fields","turndown","images","intro","infobox","links","coordinates","langLinks","references","related","summary","tables","_defaultRunOptions","unwrapTags","Set","unwrapTagsSelector","Array","from","values","ignoredTags","ignoredClasses","ignoredRoles","ignoredSelector","map","cls","role","transform","output","tagName","toLowerCase","has","className","trim","split","table","querySelectorAll","colspan","parseInt","getAttribute","insertAdjacentHTML","removeAttribute","ignoredTargets","childNode","unwrapTargets","reverse","push","outerHTML","innerHTML","filters","minPageNameSimilarity","excludeOthersOnExactMatch","search","limit","suggestion","maxDescriptionLength","_createRunOptions","overrides","baseKeys","R","pipe","mergeDeep","pick","options","_run","input","_options","searchRawResults","bestCandidates","extractBestCandidates","Promise","all","pageId","redirect","preload","keys","key","asyncProperties","title","resolve","mapValues","value","catch","undefined","candidates","normalize","text","stringComparison","jaccardIndex","sortMatch","candidate","index","pageid","score","rating","sort","a","b","at","enumerable"],"mappings":"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","file":"wikipedia.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Page, pageFunctions, searchOptions } from \"wikipedia\";\nimport wiki from \"wikipedia\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport * as R from \"remeda\";\nimport { keys, mapValues } from \"remeda\";\nimport { ArrayKeys, Common } from \"@/internals/types.js\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"./base.js\";\nimport { asyncProperties } from \"@/internals/helpers/promise.js\";\nimport { z } from \"zod\";\nimport { Tool, ToolEmitter, ToolInput } from \"@/tools/base.js\";\nimport Turndown from \"turndown\";\n// @ts-expect-error missing types\nimport turndownPlugin from \"joplin-turndown-plugin-gfm\";\nimport stringComparison from \"string-comparison\";\nimport { pageResult } from \"wikipedia/dist/resultTypes.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nwiki.default.setLang(\"en\");\n\nexport interface SearchOptions extends searchOptions {}\n\nexport interface FilterOptions {\n excludeOthersOnExactMatch?: boolean;\n minPageNameSimilarity?: number;\n}\n\nexport type PageFunctions = Record<\n pageFunctions,\n {\n transform?: <T>(output: T) => T;\n }\n> & {\n markdown: {\n transform?: (output: string) => string;\n filter?: (node: HTMLElement) => boolean;\n };\n};\n\nexport interface ExtractionOptions {\n fields?: Partial<PageFunctions>;\n}\n\nexport interface OutputOptions {\n maxSerializedLength?: number;\n maxDescriptionLength?: number;\n}\n\nexport interface WikipediaToolOptions extends SearchToolOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\nexport interface WikipediaToolRunOptions extends SearchToolRunOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\ntype PageWithMarkdown = Page & { markdown: () => Promise<string> };\n\ntype ResultFields = { [K in keyof PageFunctions]: Awaited<ReturnType<PageWithMarkdown[K]>> };\n\nexport interface WikipediaToolResult extends SearchToolResult {\n fields: Partial<ResultFields>;\n}\n\nexport class WikipediaToolOutput extends SearchToolOutput<WikipediaToolResult> {\n constructor(\n public readonly results: WikipediaToolResult[],\n protected readonly maxSerializedLength: number,\n ) {\n super(results);\n }\n\n static {\n this.register();\n }\n\n @Cache()\n getTextContent(): string {\n if (this.isEmpty()) {\n return `No results were found. Try to reformat your query.`;\n }\n\n const target = this.results.length === 1 ? this.results[0] : this.results;\n const response = JSON.stringify(target);\n\n return this.maxSerializedLength < Infinity\n ? response.substring(0, this.maxSerializedLength)\n : response;\n }\n\n createSnapshot() {\n return {\n results: this.results,\n maxSerializedLength: this.maxSerializedLength,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\ninterface SearchResponse {\n results: Pick<pageResult, \"title\" | \"pageid\">[];\n suggestion: string;\n}\n\nexport class WikipediaTool extends Tool<\n WikipediaToolOutput,\n WikipediaToolOptions,\n WikipediaToolRunOptions\n> {\n name = \"Wikipedia\";\n description =\n \"Search factual and historical information, including biography, history, politics, geography, society, culture, science, technology, people, animal species, mathematics, and other subjects.\";\n\n public readonly emitter: ToolEmitter<ToolInput<this>, WikipediaToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"search\", \"wikipedia\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({\n query: z\n .string({ description: `Name of the wikipedia page, for example 'New York'` })\n .min(1)\n .max(128),\n });\n }\n\n public constructor(public readonly config: WikipediaToolOptions = {}) {\n super(config);\n }\n\n static {\n this.register();\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _mappers(): Record<\n keyof PageFunctions,\n (page: Page, runOptions: WikipediaToolRunOptions) => Promise<any>\n > {\n return {\n categories: (page) => page.categories(),\n content: (page) => page.content(),\n html: (page) => page.html(),\n markdown: async (page, runOptions) => {\n const html = await page.html().then((result) => {\n const url = new URL(page.fullurl);\n const base = `${url.protocol}//${[url.hostname, url.port].filter(Boolean).join(\":\")}`;\n return (\n result\n // Missing a protocol\n .replace(/(<img .*src=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n .replace(/(<a .*href=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n\n // Missing a hostname\n .replace(/(<img .*src=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n .replace(/(<a .*href=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n );\n });\n\n const service = new Turndown();\n service.use(turndownPlugin.gfm);\n return service\n .remove((node) => runOptions.extraction?.fields?.markdown?.filter?.(node) === false)\n .turndown(html);\n },\n images: (page) => page.images(),\n intro: (page) => page.intro(),\n infobox: (page) => page.infobox(),\n links: (page) => page.links(),\n coordinates: (page) => page.coordinates(),\n langLinks: (page) => page.langLinks(),\n references: (page) => page.references(),\n related: (page) => page.related(),\n summary: (page) => page.summary(),\n tables: (page) => page.tables(),\n };\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _defaultRunOptions(): WikipediaToolRunOptions {\n const unwrapTags = new Set([\"a\", \"small\", \"sup\"]);\n const unwrapTagsSelector = Array.from(unwrapTags.values()).join(\",\");\n\n const ignoredTags = new Set([\n \"img\",\n \"link\",\n \"style\",\n \"abbr\",\n \"cite\",\n \"input\",\n \"sup\",\n \"bdi\",\n \"q\",\n \"figure\",\n \"audio\",\n \"track\",\n \"figcaption\",\n ]);\n const ignoredClasses = new Set([\n \"toc\",\n \"reflist\",\n \"mw-references-wrap\",\n \"box-More_footnotes_needed\",\n \"navbox\",\n \"navbox-styles\",\n \"mw-editsection\",\n \"sistersitebox\",\n \"navbox-inner\",\n \"refbegin\",\n \"notpageimage\",\n \"mw-file-element\",\n \"box-Unreferenced_section\",\n \"navigation-not-searchable\",\n \"noexcerpt\",\n \"infobox-image\",\n \"mw-tmh-player\",\n \"printfooter\",\n \"ambox\",\n \"infobox\",\n ]);\n const ignoredRoles = new Set([\"navigation\"]);\n\n const ignoredSelector = [\n ...ignoredTags.values(),\n Array.from(ignoredClasses.values()).map((cls) => `.${cls}`),\n Array.from(ignoredRoles.values()).map((role) => `[role=\"${role}\"]`),\n \"table>caption\",\n ].join(\",\");\n\n return {\n extraction: {\n fields: {\n markdown: {\n transform: (output: string) => output.replace(/([^\\\\])(\\$)/g, `$1\\\\$2`),\n filter: (node) => {\n const tagName = node.tagName.toLowerCase();\n if (ignoredTags.has(tagName) || ignoredRoles.has(node.role ?? \"\")) {\n return false;\n }\n\n for (const cls of node.className.trim().split(\" \").filter(Boolean)) {\n if (ignoredClasses.has(cls)) {\n return false;\n }\n }\n\n for (const table of Array.from(node.querySelectorAll(\"table tr>th\"))) {\n let colspan = parseInt(table.getAttribute(\"colspan\") || \"1\");\n while (colspan > 1) {\n table.insertAdjacentHTML(\"afterend\", `<th>&nbsp;</th>`);\n colspan--;\n }\n table.removeAttribute(\"colspan\");\n }\n\n const ignoredTargets = Array.from(\n ignoredSelector ? node.querySelectorAll(ignoredSelector) : [],\n );\n for (const childNode of ignoredTargets) {\n childNode.remove();\n }\n\n const unwrapTargets = Array.from(\n unwrapTagsSelector ? node.querySelectorAll(unwrapTagsSelector) : [],\n ).reverse();\n if (unwrapTags.has(tagName)) {\n unwrapTargets.push(node);\n }\n for (const childNode of unwrapTargets) {\n childNode.outerHTML = childNode.innerHTML;\n }\n\n return true;\n },\n },\n },\n },\n filters: {\n minPageNameSimilarity: 0.5,\n excludeOthersOnExactMatch: true,\n },\n search: {\n limit: 3,\n suggestion: true,\n },\n output: {\n maxSerializedLength: 25_000,\n maxDescriptionLength: 250,\n },\n };\n }\n\n protected _createRunOptions(overrides?: WikipediaToolRunOptions): WikipediaToolRunOptions {\n const baseKeys: ArrayKeys<Common<WikipediaToolRunOptions, WikipediaToolOptions>> = [\n \"filters\",\n \"search\",\n \"extraction\",\n \"retryOptions\",\n \"output\",\n ];\n\n return R.pipe(\n { ...this._defaultRunOptions },\n R.mergeDeep(R.pick(this.options ?? {}, baseKeys)),\n R.mergeDeep({ ...overrides }),\n );\n }\n\n protected async _run(\n { query: input }: ToolInput<WikipediaTool>,\n _options?: WikipediaToolRunOptions,\n ): Promise<WikipediaToolOutput> {\n const runOptions = this._createRunOptions(_options);\n\n const { results: searchRawResults, suggestion }: SearchResponse = await wiki.default.search(\n input,\n {\n suggestion: Boolean(_options?.search?.suggestion),\n ...runOptions.search,\n },\n );\n\n if (searchRawResults.length === 0 && suggestion && runOptions.search?.suggestion) {\n return await this._run({ query: suggestion }, _options);\n }\n\n const bestCandidates = this.extractBestCandidates(\n input,\n searchRawResults,\n runOptions?.filters ?? {},\n );\n\n const results = await Promise.all(\n bestCandidates.map(async ({ pageId }) => {\n // @ts-expect-error wrong library's typing, passing a string would lead to a classic text search instead of a concrete page retrieval\n const page = await wiki.default.page(pageId, {\n redirect: true,\n preload: false,\n fields: keys(runOptions.extraction?.fields ?? {}).filter((key) => key !== \"markdown\"),\n });\n\n return asyncProperties({\n title: page.title,\n description: ((): Promise<string> => {\n const length = runOptions?.output?.maxDescriptionLength ?? 0;\n return length <= 0\n ? Promise.resolve(\"\")\n : page.content().then((content) => content.substring(0, length));\n })(),\n url: page.fullurl,\n fields: asyncProperties(\n mapValues(runOptions?.extraction?.fields ?? {}, (value, key) =>\n this._mappers[key](page, runOptions)\n .then((response) => (value.transform ? value.transform(response) : response))\n .catch(() => undefined),\n ),\n ),\n });\n }),\n );\n return new WikipediaToolOutput(results, runOptions.output?.maxSerializedLength ?? Infinity);\n }\n\n protected extractBestCandidates(\n query: string,\n candidates: SearchResponse[\"results\"],\n options: FilterOptions,\n ) {\n const normalize = (text: string) =>\n text\n .normalize(\"NFKD\")\n .replace(/[^\\w| ]/g, \"\") // remove diacritics and special characters (except whitespace)\n .replace(/\\s\\s+/g, \" \") // collapse multiple whitespaces into one\n .trim();\n\n const bestCandidates = stringComparison.jaccardIndex\n .sortMatch(\n normalize(query),\n candidates.map((candidate) => normalize(candidate.title)),\n )\n .map((result) => ({\n pageId: candidates[result.index].pageid,\n score: result.rating,\n }))\n .filter((result) => result.score >= (options.minPageNameSimilarity ?? 0))\n .sort((a, b) => b.score - a.score);\n\n if (bestCandidates.at(0)?.score === 1 && options.excludeOthersOnExactMatch) {\n bestCandidates.length = 1;\n }\n\n return bestCandidates;\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n config: this.config,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n super.loadSnapshot(snapshot);\n }\n}\n"]}
1
+ {"version":3,"sources":["wikipedia.ts"],"names":["wiki","default","setLang","WikipediaToolOutput","SearchToolOutput","constructor","results","maxSerializedLength","register","getTextContent","isEmpty","target","length","response","JSON","stringify","Infinity","substring","createSnapshot","loadSnapshot","snapshot","Object","assign","WikipediaTool","Tool","name","description","emitter","inputSchema","z","object","query","string","min","max","config","Emitter","root","child","namespace","creator","_mappers","categories","page","content","html","markdown","runOptions","then","result","url","URL","fullurl","base","protocol","hostname","port","filter","Boolean","join","replace","service","Turndown","use","turndownPlugin","gfm","remove","node","extraction","fields","turndown","images","intro","infobox","links","coordinates","langLinks","references","related","summary","tables","_defaultRunOptions","unwrapTags","Set","unwrapTagsSelector","Array","from","values","ignoredTags","ignoredClasses","ignoredRoles","ignoredSelector","map","cls","role","transform","output","tagName","toLowerCase","has","className","trim","split","table","querySelectorAll","colspan","parseInt","getAttribute","insertAdjacentHTML","removeAttribute","ignoredTargets","childNode","unwrapTargets","reverse","push","outerHTML","innerHTML","filters","minPageNameSimilarity","excludeOthersOnExactMatch","search","limit","suggestion","maxDescriptionLength","_createRunOptions","overrides","baseKeys","R","pipe","mergeDeep","pick","options","_run","input","_options","searchRawResults","bestCandidates","extractBestCandidates","Promise","all","pageId","redirect","preload","keys","key","asyncProperties","title","resolve","mapValues","value","catch","undefined","candidates","normalize","text","stringComparison","jaccardIndex","sortMatch","candidate","index","pageid","score","rating","sort","a","b","at","enumerable"],"mappings":"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","file":"wikipedia.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Page, pageFunctions, searchOptions } from \"wikipedia\";\nimport wiki from \"wikipedia\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport * as R from \"remeda\";\nimport { keys, mapValues } from \"remeda\";\nimport { ArrayKeys, Common } from \"@/internals/types.js\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"./base.js\";\nimport { asyncProperties } from \"@/internals/helpers/promise.js\";\nimport { z } from \"zod\";\nimport { Tool, ToolEmitter, ToolInput } from \"@/tools/base.js\";\nimport Turndown from \"turndown\";\n// @ts-expect-error missing types\nimport turndownPlugin from \"joplin-turndown-plugin-gfm\";\nimport stringComparison from \"string-comparison\";\nimport { pageResult } from \"wikipedia/dist/resultTypes.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nwiki.default.setLang(\"en\");\n\nexport interface SearchOptions extends searchOptions {}\n\nexport interface FilterOptions {\n excludeOthersOnExactMatch?: boolean;\n minPageNameSimilarity?: number;\n}\n\nexport type PageFunctions = Record<\n pageFunctions,\n {\n transform?: <T>(output: T) => T;\n }\n> & {\n markdown: {\n transform?: (output: string) => string;\n filter?: (node: HTMLElement) => boolean;\n };\n};\n\nexport interface ExtractionOptions {\n fields?: Partial<PageFunctions>;\n}\n\nexport interface OutputOptions {\n maxSerializedLength?: number;\n maxDescriptionLength?: number;\n}\n\nexport interface WikipediaToolOptions extends SearchToolOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\nexport interface WikipediaToolRunOptions extends SearchToolRunOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\ntype PageWithMarkdown = Page & { markdown: () => Promise<string> };\n\ntype ResultFields = { [K in keyof PageFunctions]: Awaited<ReturnType<PageWithMarkdown[K]>> };\n\nexport interface WikipediaToolResult extends SearchToolResult {\n fields: Partial<ResultFields>;\n}\n\nexport class WikipediaToolOutput extends SearchToolOutput<WikipediaToolResult> {\n constructor(\n public readonly results: WikipediaToolResult[],\n protected readonly maxSerializedLength: number,\n ) {\n super(results);\n }\n\n static {\n this.register();\n }\n\n @Cache()\n getTextContent(): string {\n if (this.isEmpty()) {\n return `No results were found. Try to reformat your query.`;\n }\n\n const target = this.results.length === 1 ? this.results[0] : this.results;\n const response = JSON.stringify(target);\n\n return this.maxSerializedLength < Infinity\n ? response.substring(0, this.maxSerializedLength)\n : response;\n }\n\n createSnapshot() {\n return {\n results: this.results,\n maxSerializedLength: this.maxSerializedLength,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\ninterface SearchResponse {\n results: Pick<pageResult, \"title\" | \"pageid\">[];\n suggestion: string;\n}\n\nexport class WikipediaTool extends Tool<\n WikipediaToolOutput,\n WikipediaToolOptions,\n WikipediaToolRunOptions\n> {\n name = \"Wikipedia\";\n description =\n \"Search factual and historical information, including biography, history, politics, geography, society, culture, science, technology, people, animal species, mathematics, and other subjects.\";\n\n public readonly emitter: ToolEmitter<ToolInput<this>, WikipediaToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"search\", \"wikipedia\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({\n query: z\n .string({ description: `Name of the wikipedia page, for example 'New York'` })\n .min(1)\n .max(128),\n });\n }\n\n public constructor(public readonly config: WikipediaToolOptions = {}) {\n super(config);\n }\n\n static {\n this.register();\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _mappers(): Record<\n keyof PageFunctions,\n (page: Page, runOptions: WikipediaToolRunOptions) => Promise<any>\n > {\n return {\n categories: (page) => page.categories(),\n content: (page) => page.content(),\n html: (page) => page.html(),\n markdown: async (page, runOptions) => {\n const html = await page.html().then((result) => {\n const url = new URL(page.fullurl);\n const base = `${url.protocol}//${[url.hostname, url.port].filter(Boolean).join(\":\")}`;\n return (\n result\n // Missing a protocol\n .replace(/(<img .*src=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n .replace(/(<a .*href=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n\n // Missing a hostname\n .replace(/(<img .*src=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n .replace(/(<a .*href=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n );\n });\n\n const service = new Turndown();\n service.use(turndownPlugin.gfm);\n return service\n .remove((node) => runOptions.extraction?.fields?.markdown?.filter?.(node) === false)\n .turndown(html);\n },\n images: (page) => page.images(),\n intro: (page) => page.intro(),\n infobox: (page) => page.infobox(),\n links: (page) => page.links(),\n coordinates: (page) => page.coordinates(),\n langLinks: (page) => page.langLinks(),\n references: (page) => page.references(),\n related: (page) => page.related(),\n summary: (page) => page.summary(),\n tables: (page) => page.tables(),\n };\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _defaultRunOptions(): WikipediaToolRunOptions {\n const unwrapTags = new Set([\"a\", \"small\", \"sup\"]);\n const unwrapTagsSelector = Array.from(unwrapTags.values()).join(\",\");\n\n const ignoredTags = new Set([\n \"img\",\n \"link\",\n \"style\",\n \"abbr\",\n \"cite\",\n \"input\",\n \"sup\",\n \"bdi\",\n \"q\",\n \"figure\",\n \"audio\",\n \"track\",\n \"figcaption\",\n ]);\n const ignoredClasses = new Set([\n \"toc\",\n \"reflist\",\n \"mw-references-wrap\",\n \"box-More_footnotes_needed\",\n \"navbox\",\n \"navbox-styles\",\n \"mw-editsection\",\n \"sistersitebox\",\n \"navbox-inner\",\n \"refbegin\",\n \"notpageimage\",\n \"mw-file-element\",\n \"box-Unreferenced_section\",\n \"navigation-not-searchable\",\n \"noexcerpt\",\n \"infobox-image\",\n \"mw-tmh-player\",\n \"printfooter\",\n \"ambox\",\n \"infobox\",\n ]);\n const ignoredRoles = new Set([\"navigation\"]);\n\n const ignoredSelector = [\n ...ignoredTags.values(),\n Array.from(ignoredClasses.values()).map((cls) => `.${cls}`),\n Array.from(ignoredRoles.values()).map((role) => `[role=\"${role}\"]`),\n \"table>caption\",\n ].join(\",\");\n\n return {\n extraction: {\n fields: {\n markdown: {\n transform: (output: string) => output.replace(/([^\\\\])(\\$)/g, `$1\\\\$2`),\n filter: (node) => {\n const tagName = node.tagName.toLowerCase();\n if (ignoredTags.has(tagName) || ignoredRoles.has(node.role ?? \"\")) {\n return false;\n }\n\n for (const cls of node.className.trim().split(\" \").filter(Boolean)) {\n if (ignoredClasses.has(cls)) {\n return false;\n }\n }\n\n for (const table of Array.from(node.querySelectorAll(\"table tr>th\"))) {\n let colspan = parseInt(table.getAttribute(\"colspan\") || \"1\");\n while (colspan > 1) {\n table.insertAdjacentHTML(\"afterend\", `<th>&nbsp;</th>`);\n colspan--;\n }\n table.removeAttribute(\"colspan\");\n }\n\n const ignoredTargets = Array.from(\n ignoredSelector ? node.querySelectorAll(ignoredSelector) : [],\n );\n for (const childNode of ignoredTargets) {\n childNode.remove();\n }\n\n const unwrapTargets = Array.from(\n unwrapTagsSelector ? node.querySelectorAll(unwrapTagsSelector) : [],\n ).reverse();\n if (unwrapTags.has(tagName)) {\n unwrapTargets.push(node);\n }\n for (const childNode of unwrapTargets) {\n childNode.outerHTML = childNode.innerHTML;\n }\n\n return true;\n },\n },\n },\n },\n filters: {\n minPageNameSimilarity: 0.5,\n excludeOthersOnExactMatch: true,\n },\n search: {\n limit: 3,\n suggestion: true,\n },\n output: {\n maxSerializedLength: 25_000,\n maxDescriptionLength: 250,\n },\n };\n }\n\n protected _createRunOptions(overrides?: WikipediaToolRunOptions): WikipediaToolRunOptions {\n const baseKeys: ArrayKeys<Common<WikipediaToolRunOptions, WikipediaToolOptions>> = [\n \"filters\",\n \"search\",\n \"extraction\",\n \"retryOptions\",\n \"output\",\n ];\n\n return R.pipe(\n { ...this._defaultRunOptions },\n R.mergeDeep(R.pick(this.options ?? {}, baseKeys)),\n R.mergeDeep({ ...overrides }),\n );\n }\n\n protected async _run(\n { query: input }: ToolInput<WikipediaTool>,\n _options?: WikipediaToolRunOptions,\n ): Promise<WikipediaToolOutput> {\n const runOptions = this._createRunOptions(_options);\n\n const { results: searchRawResults, suggestion }: SearchResponse = await wiki.default.search(\n input,\n {\n suggestion: Boolean(_options?.search?.suggestion),\n ...runOptions.search,\n },\n );\n\n if (searchRawResults.length === 0 && suggestion && runOptions.search?.suggestion) {\n return await this._run({ query: suggestion }, _options);\n }\n\n const bestCandidates = this.extractBestCandidates(\n input,\n searchRawResults,\n runOptions?.filters ?? {},\n );\n\n const results = await Promise.all(\n bestCandidates.map(async ({ pageId }) => {\n // @ts-expect-error wrong library's typing, passing a string would lead to a classic text search instead of a concrete page retrieval\n const page = await wiki.default.page(pageId, {\n redirect: true,\n preload: false,\n fields: keys(runOptions.extraction?.fields ?? {}).filter((key) => key !== \"markdown\"),\n });\n\n return asyncProperties({\n title: page.title,\n description: ((): Promise<string> => {\n const length = runOptions?.output?.maxDescriptionLength ?? 0;\n return length <= 0\n ? Promise.resolve(\"\")\n : page.content().then((content) => content.substring(0, length));\n })(),\n url: page.fullurl,\n fields: asyncProperties(\n mapValues(runOptions?.extraction?.fields ?? {}, (value, key) =>\n this._mappers[key](page, runOptions)\n .then((response) => (value.transform ? value.transform(response) : response))\n .catch(() => undefined),\n ),\n ),\n });\n }),\n );\n return new WikipediaToolOutput(results, runOptions.output?.maxSerializedLength ?? Infinity);\n }\n\n protected extractBestCandidates(\n query: string,\n candidates: SearchResponse[\"results\"],\n options: FilterOptions,\n ) {\n const normalize = (text: string) =>\n text\n .normalize(\"NFKD\")\n .replace(/[^\\w| ]/g, \"\") // remove diacritics and special characters (except whitespace)\n .replace(/\\s\\s+/g, \" \") // collapse multiple whitespaces into one\n .trim();\n\n const bestCandidates = stringComparison.jaccardIndex\n .sortMatch(\n normalize(query),\n candidates.map((candidate) => normalize(candidate.title)),\n )\n .map((result) => ({\n pageId: candidates[result.index].pageid,\n score: result.rating,\n }))\n .filter((result) => result.score >= (options.minPageNameSimilarity ?? 0))\n .sort((a, b) => b.score - a.score);\n\n if (bestCandidates.at(0)?.score === 1 && options.excludeOthersOnExactMatch) {\n bestCandidates.length = 1;\n }\n\n return bestCandidates;\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n config: this.config,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n super.loadSnapshot(snapshot);\n }\n}\n"]}
@@ -5,7 +5,7 @@ import { SearchToolOptions, SearchToolRunOptions, SearchToolResult, SearchToolOu
5
5
  import { z } from 'zod';
6
6
  import { Tool, ToolEmitter, ToolInput } from '../base.cjs';
7
7
  import { pageResult } from 'wikipedia/dist/resultTypes.js';
8
- import { E as Emitter } from '../../emitter-BWtGHYn0.cjs';
8
+ import { E as Emitter } from '../../emitter-D5Mu0EEH.cjs';
9
9
  import '../../internals/serializable.cjs';
10
10
  import '../../internals/types.cjs';
11
11
  import '../../internals/helpers/guards.cjs';
@@ -5,7 +5,7 @@ import { SearchToolOptions, SearchToolRunOptions, SearchToolResult, SearchToolOu
5
5
  import { z } from 'zod';
6
6
  import { Tool, ToolEmitter, ToolInput } from '../base.js';
7
7
  import { pageResult } from 'wikipedia/dist/resultTypes.js';
8
- import { E as Emitter } from '../../emitter-l0W9gC1A.js';
8
+ import { E as Emitter } from '../../emitter-C3dO-s2P.js';
9
9
  import '../../internals/serializable.js';
10
10
  import '../../internals/types.js';
11
11
  import '../../internals/helpers/guards.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["wikipedia.ts"],"names":["wiki","default","setLang","WikipediaToolOutput","SearchToolOutput","constructor","results","maxSerializedLength","register","getTextContent","isEmpty","target","length","response","JSON","stringify","Infinity","substring","createSnapshot","loadSnapshot","snapshot","Object","assign","WikipediaTool","Tool","name","description","emitter","inputSchema","z","object","query","string","min","max","config","Emitter","root","child","namespace","creator","_mappers","categories","page","content","html","markdown","runOptions","then","result","url","URL","fullurl","base","protocol","hostname","port","filter","Boolean","join","replace","service","Turndown","use","turndownPlugin","gfm","remove","node","extraction","fields","turndown","images","intro","infobox","links","coordinates","langLinks","references","related","summary","tables","_defaultRunOptions","unwrapTags","Set","unwrapTagsSelector","Array","from","values","ignoredTags","ignoredClasses","ignoredRoles","ignoredSelector","map","cls","role","transform","output","tagName","toLowerCase","has","className","trim","split","table","querySelectorAll","colspan","parseInt","getAttribute","insertAdjacentHTML","removeAttribute","ignoredTargets","childNode","unwrapTargets","reverse","push","outerHTML","innerHTML","filters","minPageNameSimilarity","excludeOthersOnExactMatch","search","limit","suggestion","maxDescriptionLength","_createRunOptions","overrides","baseKeys","R","pipe","mergeDeep","pick","options","_run","input","_options","searchRawResults","bestCandidates","extractBestCandidates","Promise","all","pageId","redirect","preload","keys","key","asyncProperties","title","resolve","mapValues","value","catch","undefined","candidates","normalize","text","stringComparison","jaccardIndex","sortMatch","candidate","index","pageid","score","rating","sort","a","b","at","enumerable"],"mappings":"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","file":"wikipedia.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Page, pageFunctions, searchOptions } from \"wikipedia\";\nimport wiki from \"wikipedia\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport * as R from \"remeda\";\nimport { keys, mapValues } from \"remeda\";\nimport { ArrayKeys, Common } from \"@/internals/types.js\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"./base.js\";\nimport { asyncProperties } from \"@/internals/helpers/promise.js\";\nimport { z } from \"zod\";\nimport { Tool, ToolEmitter, ToolInput } from \"@/tools/base.js\";\nimport Turndown from \"turndown\";\n// @ts-expect-error missing types\nimport turndownPlugin from \"joplin-turndown-plugin-gfm\";\nimport stringComparison from \"string-comparison\";\nimport { pageResult } from \"wikipedia/dist/resultTypes.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nwiki.default.setLang(\"en\");\n\nexport interface SearchOptions extends searchOptions {}\n\nexport interface FilterOptions {\n excludeOthersOnExactMatch?: boolean;\n minPageNameSimilarity?: number;\n}\n\nexport type PageFunctions = Record<\n pageFunctions,\n {\n transform?: <T>(output: T) => T;\n }\n> & {\n markdown: {\n transform?: (output: string) => string;\n filter?: (node: HTMLElement) => boolean;\n };\n};\n\nexport interface ExtractionOptions {\n fields?: Partial<PageFunctions>;\n}\n\nexport interface OutputOptions {\n maxSerializedLength?: number;\n maxDescriptionLength?: number;\n}\n\nexport interface WikipediaToolOptions extends SearchToolOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\nexport interface WikipediaToolRunOptions extends SearchToolRunOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\ntype PageWithMarkdown = Page & { markdown: () => Promise<string> };\n\ntype ResultFields = { [K in keyof PageFunctions]: Awaited<ReturnType<PageWithMarkdown[K]>> };\n\nexport interface WikipediaToolResult extends SearchToolResult {\n fields: Partial<ResultFields>;\n}\n\nexport class WikipediaToolOutput extends SearchToolOutput<WikipediaToolResult> {\n constructor(\n public readonly results: WikipediaToolResult[],\n protected readonly maxSerializedLength: number,\n ) {\n super(results);\n }\n\n static {\n this.register();\n }\n\n @Cache()\n getTextContent(): string {\n if (this.isEmpty()) {\n return `No results were found. Try to reformat your query.`;\n }\n\n const target = this.results.length === 1 ? this.results[0] : this.results;\n const response = JSON.stringify(target);\n\n return this.maxSerializedLength < Infinity\n ? response.substring(0, this.maxSerializedLength)\n : response;\n }\n\n createSnapshot() {\n return {\n results: this.results,\n maxSerializedLength: this.maxSerializedLength,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\ninterface SearchResponse {\n results: Pick<pageResult, \"title\" | \"pageid\">[];\n suggestion: string;\n}\n\nexport class WikipediaTool extends Tool<\n WikipediaToolOutput,\n WikipediaToolOptions,\n WikipediaToolRunOptions\n> {\n name = \"Wikipedia\";\n description =\n \"Search factual and historical information, including biography, history, politics, geography, society, culture, science, technology, people, animal species, mathematics, and other subjects.\";\n\n public readonly emitter: ToolEmitter<ToolInput<this>, WikipediaToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"search\", \"wikipedia\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({\n query: z\n .string({ description: `Name of the wikipedia page, for example 'New York'` })\n .min(1)\n .max(128),\n });\n }\n\n public constructor(public readonly config: WikipediaToolOptions = {}) {\n super(config);\n }\n\n static {\n this.register();\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _mappers(): Record<\n keyof PageFunctions,\n (page: Page, runOptions: WikipediaToolRunOptions) => Promise<any>\n > {\n return {\n categories: (page) => page.categories(),\n content: (page) => page.content(),\n html: (page) => page.html(),\n markdown: async (page, runOptions) => {\n const html = await page.html().then((result) => {\n const url = new URL(page.fullurl);\n const base = `${url.protocol}//${[url.hostname, url.port].filter(Boolean).join(\":\")}`;\n return (\n result\n // Missing a protocol\n .replace(/(<img .*src=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n .replace(/(<a .*href=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n\n // Missing a hostname\n .replace(/(<img .*src=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n .replace(/(<a .*href=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n );\n });\n\n const service = new Turndown();\n service.use(turndownPlugin.gfm);\n return service\n .remove((node) => runOptions.extraction?.fields?.markdown?.filter?.(node) === false)\n .turndown(html);\n },\n images: (page) => page.images(),\n intro: (page) => page.intro(),\n infobox: (page) => page.infobox(),\n links: (page) => page.links(),\n coordinates: (page) => page.coordinates(),\n langLinks: (page) => page.langLinks(),\n references: (page) => page.references(),\n related: (page) => page.related(),\n summary: (page) => page.summary(),\n tables: (page) => page.tables(),\n };\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _defaultRunOptions(): WikipediaToolRunOptions {\n const unwrapTags = new Set([\"a\", \"small\", \"sup\"]);\n const unwrapTagsSelector = Array.from(unwrapTags.values()).join(\",\");\n\n const ignoredTags = new Set([\n \"img\",\n \"link\",\n \"style\",\n \"abbr\",\n \"cite\",\n \"input\",\n \"sup\",\n \"bdi\",\n \"q\",\n \"figure\",\n \"audio\",\n \"track\",\n \"figcaption\",\n ]);\n const ignoredClasses = new Set([\n \"toc\",\n \"reflist\",\n \"mw-references-wrap\",\n \"box-More_footnotes_needed\",\n \"navbox\",\n \"navbox-styles\",\n \"mw-editsection\",\n \"sistersitebox\",\n \"navbox-inner\",\n \"refbegin\",\n \"notpageimage\",\n \"mw-file-element\",\n \"box-Unreferenced_section\",\n \"navigation-not-searchable\",\n \"noexcerpt\",\n \"infobox-image\",\n \"mw-tmh-player\",\n \"printfooter\",\n \"ambox\",\n \"infobox\",\n ]);\n const ignoredRoles = new Set([\"navigation\"]);\n\n const ignoredSelector = [\n ...ignoredTags.values(),\n Array.from(ignoredClasses.values()).map((cls) => `.${cls}`),\n Array.from(ignoredRoles.values()).map((role) => `[role=\"${role}\"]`),\n \"table>caption\",\n ].join(\",\");\n\n return {\n extraction: {\n fields: {\n markdown: {\n transform: (output: string) => output.replace(/([^\\\\])(\\$)/g, `$1\\\\$2`),\n filter: (node) => {\n const tagName = node.tagName.toLowerCase();\n if (ignoredTags.has(tagName) || ignoredRoles.has(node.role ?? \"\")) {\n return false;\n }\n\n for (const cls of node.className.trim().split(\" \").filter(Boolean)) {\n if (ignoredClasses.has(cls)) {\n return false;\n }\n }\n\n for (const table of Array.from(node.querySelectorAll(\"table tr>th\"))) {\n let colspan = parseInt(table.getAttribute(\"colspan\") || \"1\");\n while (colspan > 1) {\n table.insertAdjacentHTML(\"afterend\", `<th>&nbsp;</th>`);\n colspan--;\n }\n table.removeAttribute(\"colspan\");\n }\n\n const ignoredTargets = Array.from(\n ignoredSelector ? node.querySelectorAll(ignoredSelector) : [],\n );\n for (const childNode of ignoredTargets) {\n childNode.remove();\n }\n\n const unwrapTargets = Array.from(\n unwrapTagsSelector ? node.querySelectorAll(unwrapTagsSelector) : [],\n ).reverse();\n if (unwrapTags.has(tagName)) {\n unwrapTargets.push(node);\n }\n for (const childNode of unwrapTargets) {\n childNode.outerHTML = childNode.innerHTML;\n }\n\n return true;\n },\n },\n },\n },\n filters: {\n minPageNameSimilarity: 0.5,\n excludeOthersOnExactMatch: true,\n },\n search: {\n limit: 3,\n suggestion: true,\n },\n output: {\n maxSerializedLength: 25_000,\n maxDescriptionLength: 250,\n },\n };\n }\n\n protected _createRunOptions(overrides?: WikipediaToolRunOptions): WikipediaToolRunOptions {\n const baseKeys: ArrayKeys<Common<WikipediaToolRunOptions, WikipediaToolOptions>> = [\n \"filters\",\n \"search\",\n \"extraction\",\n \"retryOptions\",\n \"output\",\n ];\n\n return R.pipe(\n { ...this._defaultRunOptions },\n R.mergeDeep(R.pick(this.options ?? {}, baseKeys)),\n R.mergeDeep({ ...overrides }),\n );\n }\n\n protected async _run(\n { query: input }: ToolInput<WikipediaTool>,\n _options?: WikipediaToolRunOptions,\n ): Promise<WikipediaToolOutput> {\n const runOptions = this._createRunOptions(_options);\n\n const { results: searchRawResults, suggestion }: SearchResponse = await wiki.default.search(\n input,\n {\n suggestion: Boolean(_options?.search?.suggestion),\n ...runOptions.search,\n },\n );\n\n if (searchRawResults.length === 0 && suggestion && runOptions.search?.suggestion) {\n return await this._run({ query: suggestion }, _options);\n }\n\n const bestCandidates = this.extractBestCandidates(\n input,\n searchRawResults,\n runOptions?.filters ?? {},\n );\n\n const results = await Promise.all(\n bestCandidates.map(async ({ pageId }) => {\n // @ts-expect-error wrong library's typing, passing a string would lead to a classic text search instead of a concrete page retrieval\n const page = await wiki.default.page(pageId, {\n redirect: true,\n preload: false,\n fields: keys(runOptions.extraction?.fields ?? {}).filter((key) => key !== \"markdown\"),\n });\n\n return asyncProperties({\n title: page.title,\n description: ((): Promise<string> => {\n const length = runOptions?.output?.maxDescriptionLength ?? 0;\n return length <= 0\n ? Promise.resolve(\"\")\n : page.content().then((content) => content.substring(0, length));\n })(),\n url: page.fullurl,\n fields: asyncProperties(\n mapValues(runOptions?.extraction?.fields ?? {}, (value, key) =>\n this._mappers[key](page, runOptions)\n .then((response) => (value.transform ? value.transform(response) : response))\n .catch(() => undefined),\n ),\n ),\n });\n }),\n );\n return new WikipediaToolOutput(results, runOptions.output?.maxSerializedLength ?? Infinity);\n }\n\n protected extractBestCandidates(\n query: string,\n candidates: SearchResponse[\"results\"],\n options: FilterOptions,\n ) {\n const normalize = (text: string) =>\n text\n .normalize(\"NFKD\")\n .replace(/[^\\w| ]/g, \"\") // remove diacritics and special characters (except whitespace)\n .replace(/\\s\\s+/g, \" \") // collapse multiple whitespaces into one\n .trim();\n\n const bestCandidates = stringComparison.jaccardIndex\n .sortMatch(\n normalize(query),\n candidates.map((candidate) => normalize(candidate.title)),\n )\n .map((result) => ({\n pageId: candidates[result.index].pageid,\n score: result.rating,\n }))\n .filter((result) => result.score >= (options.minPageNameSimilarity ?? 0))\n .sort((a, b) => b.score - a.score);\n\n if (bestCandidates.at(0)?.score === 1 && options.excludeOthersOnExactMatch) {\n bestCandidates.length = 1;\n }\n\n return bestCandidates;\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n config: this.config,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n super.loadSnapshot(snapshot);\n }\n}\n"]}
1
+ {"version":3,"sources":["wikipedia.ts"],"names":["wiki","default","setLang","WikipediaToolOutput","SearchToolOutput","constructor","results","maxSerializedLength","register","getTextContent","isEmpty","target","length","response","JSON","stringify","Infinity","substring","createSnapshot","loadSnapshot","snapshot","Object","assign","WikipediaTool","Tool","name","description","emitter","inputSchema","z","object","query","string","min","max","config","Emitter","root","child","namespace","creator","_mappers","categories","page","content","html","markdown","runOptions","then","result","url","URL","fullurl","base","protocol","hostname","port","filter","Boolean","join","replace","service","Turndown","use","turndownPlugin","gfm","remove","node","extraction","fields","turndown","images","intro","infobox","links","coordinates","langLinks","references","related","summary","tables","_defaultRunOptions","unwrapTags","Set","unwrapTagsSelector","Array","from","values","ignoredTags","ignoredClasses","ignoredRoles","ignoredSelector","map","cls","role","transform","output","tagName","toLowerCase","has","className","trim","split","table","querySelectorAll","colspan","parseInt","getAttribute","insertAdjacentHTML","removeAttribute","ignoredTargets","childNode","unwrapTargets","reverse","push","outerHTML","innerHTML","filters","minPageNameSimilarity","excludeOthersOnExactMatch","search","limit","suggestion","maxDescriptionLength","_createRunOptions","overrides","baseKeys","R","pipe","mergeDeep","pick","options","_run","input","_options","searchRawResults","bestCandidates","extractBestCandidates","Promise","all","pageId","redirect","preload","keys","key","asyncProperties","title","resolve","mapValues","value","catch","undefined","candidates","normalize","text","stringComparison","jaccardIndex","sortMatch","candidate","index","pageid","score","rating","sort","a","b","at","enumerable"],"mappings":"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","file":"wikipedia.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { Page, pageFunctions, searchOptions } from \"wikipedia\";\nimport wiki from \"wikipedia\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport * as R from \"remeda\";\nimport { keys, mapValues } from \"remeda\";\nimport { ArrayKeys, Common } from \"@/internals/types.js\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"./base.js\";\nimport { asyncProperties } from \"@/internals/helpers/promise.js\";\nimport { z } from \"zod\";\nimport { Tool, ToolEmitter, ToolInput } from \"@/tools/base.js\";\nimport Turndown from \"turndown\";\n// @ts-expect-error missing types\nimport turndownPlugin from \"joplin-turndown-plugin-gfm\";\nimport stringComparison from \"string-comparison\";\nimport { pageResult } from \"wikipedia/dist/resultTypes.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nwiki.default.setLang(\"en\");\n\nexport interface SearchOptions extends searchOptions {}\n\nexport interface FilterOptions {\n excludeOthersOnExactMatch?: boolean;\n minPageNameSimilarity?: number;\n}\n\nexport type PageFunctions = Record<\n pageFunctions,\n {\n transform?: <T>(output: T) => T;\n }\n> & {\n markdown: {\n transform?: (output: string) => string;\n filter?: (node: HTMLElement) => boolean;\n };\n};\n\nexport interface ExtractionOptions {\n fields?: Partial<PageFunctions>;\n}\n\nexport interface OutputOptions {\n maxSerializedLength?: number;\n maxDescriptionLength?: number;\n}\n\nexport interface WikipediaToolOptions extends SearchToolOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\nexport interface WikipediaToolRunOptions extends SearchToolRunOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\ntype PageWithMarkdown = Page & { markdown: () => Promise<string> };\n\ntype ResultFields = { [K in keyof PageFunctions]: Awaited<ReturnType<PageWithMarkdown[K]>> };\n\nexport interface WikipediaToolResult extends SearchToolResult {\n fields: Partial<ResultFields>;\n}\n\nexport class WikipediaToolOutput extends SearchToolOutput<WikipediaToolResult> {\n constructor(\n public readonly results: WikipediaToolResult[],\n protected readonly maxSerializedLength: number,\n ) {\n super(results);\n }\n\n static {\n this.register();\n }\n\n @Cache()\n getTextContent(): string {\n if (this.isEmpty()) {\n return `No results were found. Try to reformat your query.`;\n }\n\n const target = this.results.length === 1 ? this.results[0] : this.results;\n const response = JSON.stringify(target);\n\n return this.maxSerializedLength < Infinity\n ? response.substring(0, this.maxSerializedLength)\n : response;\n }\n\n createSnapshot() {\n return {\n results: this.results,\n maxSerializedLength: this.maxSerializedLength,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\ninterface SearchResponse {\n results: Pick<pageResult, \"title\" | \"pageid\">[];\n suggestion: string;\n}\n\nexport class WikipediaTool extends Tool<\n WikipediaToolOutput,\n WikipediaToolOptions,\n WikipediaToolRunOptions\n> {\n name = \"Wikipedia\";\n description =\n \"Search factual and historical information, including biography, history, politics, geography, society, culture, science, technology, people, animal species, mathematics, and other subjects.\";\n\n public readonly emitter: ToolEmitter<ToolInput<this>, WikipediaToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"search\", \"wikipedia\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({\n query: z\n .string({ description: `Name of the wikipedia page, for example 'New York'` })\n .min(1)\n .max(128),\n });\n }\n\n public constructor(public readonly config: WikipediaToolOptions = {}) {\n super(config);\n }\n\n static {\n this.register();\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _mappers(): Record<\n keyof PageFunctions,\n (page: Page, runOptions: WikipediaToolRunOptions) => Promise<any>\n > {\n return {\n categories: (page) => page.categories(),\n content: (page) => page.content(),\n html: (page) => page.html(),\n markdown: async (page, runOptions) => {\n const html = await page.html().then((result) => {\n const url = new URL(page.fullurl);\n const base = `${url.protocol}//${[url.hostname, url.port].filter(Boolean).join(\":\")}`;\n return (\n result\n // Missing a protocol\n .replace(/(<img .*src=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n .replace(/(<a .*href=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n\n // Missing a hostname\n .replace(/(<img .*src=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n .replace(/(<a .*href=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n );\n });\n\n const service = new Turndown();\n service.use(turndownPlugin.gfm);\n return service\n .remove((node) => runOptions.extraction?.fields?.markdown?.filter?.(node) === false)\n .turndown(html);\n },\n images: (page) => page.images(),\n intro: (page) => page.intro(),\n infobox: (page) => page.infobox(),\n links: (page) => page.links(),\n coordinates: (page) => page.coordinates(),\n langLinks: (page) => page.langLinks(),\n references: (page) => page.references(),\n related: (page) => page.related(),\n summary: (page) => page.summary(),\n tables: (page) => page.tables(),\n };\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _defaultRunOptions(): WikipediaToolRunOptions {\n const unwrapTags = new Set([\"a\", \"small\", \"sup\"]);\n const unwrapTagsSelector = Array.from(unwrapTags.values()).join(\",\");\n\n const ignoredTags = new Set([\n \"img\",\n \"link\",\n \"style\",\n \"abbr\",\n \"cite\",\n \"input\",\n \"sup\",\n \"bdi\",\n \"q\",\n \"figure\",\n \"audio\",\n \"track\",\n \"figcaption\",\n ]);\n const ignoredClasses = new Set([\n \"toc\",\n \"reflist\",\n \"mw-references-wrap\",\n \"box-More_footnotes_needed\",\n \"navbox\",\n \"navbox-styles\",\n \"mw-editsection\",\n \"sistersitebox\",\n \"navbox-inner\",\n \"refbegin\",\n \"notpageimage\",\n \"mw-file-element\",\n \"box-Unreferenced_section\",\n \"navigation-not-searchable\",\n \"noexcerpt\",\n \"infobox-image\",\n \"mw-tmh-player\",\n \"printfooter\",\n \"ambox\",\n \"infobox\",\n ]);\n const ignoredRoles = new Set([\"navigation\"]);\n\n const ignoredSelector = [\n ...ignoredTags.values(),\n Array.from(ignoredClasses.values()).map((cls) => `.${cls}`),\n Array.from(ignoredRoles.values()).map((role) => `[role=\"${role}\"]`),\n \"table>caption\",\n ].join(\",\");\n\n return {\n extraction: {\n fields: {\n markdown: {\n transform: (output: string) => output.replace(/([^\\\\])(\\$)/g, `$1\\\\$2`),\n filter: (node) => {\n const tagName = node.tagName.toLowerCase();\n if (ignoredTags.has(tagName) || ignoredRoles.has(node.role ?? \"\")) {\n return false;\n }\n\n for (const cls of node.className.trim().split(\" \").filter(Boolean)) {\n if (ignoredClasses.has(cls)) {\n return false;\n }\n }\n\n for (const table of Array.from(node.querySelectorAll(\"table tr>th\"))) {\n let colspan = parseInt(table.getAttribute(\"colspan\") || \"1\");\n while (colspan > 1) {\n table.insertAdjacentHTML(\"afterend\", `<th>&nbsp;</th>`);\n colspan--;\n }\n table.removeAttribute(\"colspan\");\n }\n\n const ignoredTargets = Array.from(\n ignoredSelector ? node.querySelectorAll(ignoredSelector) : [],\n );\n for (const childNode of ignoredTargets) {\n childNode.remove();\n }\n\n const unwrapTargets = Array.from(\n unwrapTagsSelector ? node.querySelectorAll(unwrapTagsSelector) : [],\n ).reverse();\n if (unwrapTags.has(tagName)) {\n unwrapTargets.push(node);\n }\n for (const childNode of unwrapTargets) {\n childNode.outerHTML = childNode.innerHTML;\n }\n\n return true;\n },\n },\n },\n },\n filters: {\n minPageNameSimilarity: 0.5,\n excludeOthersOnExactMatch: true,\n },\n search: {\n limit: 3,\n suggestion: true,\n },\n output: {\n maxSerializedLength: 25_000,\n maxDescriptionLength: 250,\n },\n };\n }\n\n protected _createRunOptions(overrides?: WikipediaToolRunOptions): WikipediaToolRunOptions {\n const baseKeys: ArrayKeys<Common<WikipediaToolRunOptions, WikipediaToolOptions>> = [\n \"filters\",\n \"search\",\n \"extraction\",\n \"retryOptions\",\n \"output\",\n ];\n\n return R.pipe(\n { ...this._defaultRunOptions },\n R.mergeDeep(R.pick(this.options ?? {}, baseKeys)),\n R.mergeDeep({ ...overrides }),\n );\n }\n\n protected async _run(\n { query: input }: ToolInput<WikipediaTool>,\n _options?: WikipediaToolRunOptions,\n ): Promise<WikipediaToolOutput> {\n const runOptions = this._createRunOptions(_options);\n\n const { results: searchRawResults, suggestion }: SearchResponse = await wiki.default.search(\n input,\n {\n suggestion: Boolean(_options?.search?.suggestion),\n ...runOptions.search,\n },\n );\n\n if (searchRawResults.length === 0 && suggestion && runOptions.search?.suggestion) {\n return await this._run({ query: suggestion }, _options);\n }\n\n const bestCandidates = this.extractBestCandidates(\n input,\n searchRawResults,\n runOptions?.filters ?? {},\n );\n\n const results = await Promise.all(\n bestCandidates.map(async ({ pageId }) => {\n // @ts-expect-error wrong library's typing, passing a string would lead to a classic text search instead of a concrete page retrieval\n const page = await wiki.default.page(pageId, {\n redirect: true,\n preload: false,\n fields: keys(runOptions.extraction?.fields ?? {}).filter((key) => key !== \"markdown\"),\n });\n\n return asyncProperties({\n title: page.title,\n description: ((): Promise<string> => {\n const length = runOptions?.output?.maxDescriptionLength ?? 0;\n return length <= 0\n ? Promise.resolve(\"\")\n : page.content().then((content) => content.substring(0, length));\n })(),\n url: page.fullurl,\n fields: asyncProperties(\n mapValues(runOptions?.extraction?.fields ?? {}, (value, key) =>\n this._mappers[key](page, runOptions)\n .then((response) => (value.transform ? value.transform(response) : response))\n .catch(() => undefined),\n ),\n ),\n });\n }),\n );\n return new WikipediaToolOutput(results, runOptions.output?.maxSerializedLength ?? Infinity);\n }\n\n protected extractBestCandidates(\n query: string,\n candidates: SearchResponse[\"results\"],\n options: FilterOptions,\n ) {\n const normalize = (text: string) =>\n text\n .normalize(\"NFKD\")\n .replace(/[^\\w| ]/g, \"\") // remove diacritics and special characters (except whitespace)\n .replace(/\\s\\s+/g, \" \") // collapse multiple whitespaces into one\n .trim();\n\n const bestCandidates = stringComparison.jaccardIndex\n .sortMatch(\n normalize(query),\n candidates.map((candidate) => normalize(candidate.title)),\n )\n .map((result) => ({\n pageId: candidates[result.index].pageid,\n score: result.rating,\n }))\n .filter((result) => result.score >= (options.minPageNameSimilarity ?? 0))\n .sort((a, b) => b.score - a.score);\n\n if (bestCandidates.at(0)?.score === 1 && options.excludeOthersOnExactMatch) {\n bestCandidates.length = 1;\n }\n\n return bestCandidates;\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n config: this.config,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n super.loadSnapshot(snapshot);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["similarity.ts"],"names":["documentSchema","z","object","text","string","passthrough","SimilarityToolOutput","JSONToolOutput","SimilarityTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","query","documents","array","register","_run","options","run","pipe","provider","map","score","idx","documentIndex","filter","minScore","sortBy","prop","take","maxResults","Infinity","data","document","index"],"mappings":";;;;;;;;;AA6BA,MAAMA,cAAAA,GAAiBC,MAAEC,MAAO,CAAA;AAAEC,EAAAA,IAAAA,EAAMC,UAAAA;AAAS,CAAA,EAAGC,WAAW,EAAA;AAgCxD,MAAMC,6BAA6BC,uBAAAA,CAAAA;EA7D1C;;;AA6DkF;AAE3E,MAAMC,uBAAyCC,aAAAA,CAAAA;EA/DtD;;;EAoEEC,IAAO,GAAA,YAAA;EACPC,WAAc,GAAA,8CAAA;EAEEC,OAA8DC,GAAAA,mBAAAA,CAAQC,KAAKC,KAAM,CAAA;IAC/FC,SAAW,EAAA;AAAC,MAAA,MAAA;AAAQ,MAAA;;IACpBC,OAAS,EAAA;GACX,CAAA;EAEAC,WAAc,GAAA;AACZ,IAAA,OAAOjB,MAAEC,MAAO,CAAA;AAAEiB,MAAAA,KAAAA,EAAOlB,MAAEG,MAAM,EAAA;MAAIgB,SAAWnB,EAAAA,KAAAA,CAAEoB,MAAMrB,cAAAA;KAAgB,CAAA;AAC1E;EAEA;AACE,IAAA,IAAA,CAAKsB,QAAQ,EAAA;AACf;AAEA,EAAA,MAAgBC,KACd,EAAEJ,KAAAA,EAAOC,SAAS,EAAA,EAClBI,SACAC,GACA,EAAA;AACA,IAAA,OAAOC,WACL,CAAA,MAAM,IAAKF,CAAAA,OAAAA,CAAQG,QACjB,CAAA;AACER,MAAAA,KAAAA;AACAC,MAAAA;KAEFI,EAAAA,OAAAA,EAASG,UACTF,GAAAA,CAAAA,EAEFG,WAAI,CAAC,EAAEC,KAAK,EAAA,EAAIC,GAAS,MAAA;MACvBC,aAAeD,EAAAA,GAAAA;AACfD,MAAAA;KACF,CAAA,CAAA,EACAG,aAAO,CAAA,CAAC,EAAEH,KAAAA,EAAYA,KAAAA,KAAAA,KAAUL,OAAQS,CAAAA,QAAAA,IAAY,CAAQ,QAAA,CAAA,CAAA,EAC5DC,aAAO,CAAA;AAACC,MAAAA,WAAAA,CAAK,OAAA,CAAA;AAAU,MAAA;AAAO,KAAA,CAAA,EAC9BC,YAAKZ,OAASa,EAAAA,UAAAA,IAAc,KAAKb,OAAQa,CAAAA,UAAAA,IAAcC,QAAAA,CACvD,EAAA,CAACC,IACC,KAAA,IAAIjC,qBACFiC,IAAKX,CAAAA,GAAAA,CAAI,CAAC,EAAEG,aAAAA,EAAeF,OAAa,MAAA;AACtCW,MAAAA,QAAAA,EAAUpB,UAAUW,aAAAA,CAAAA;MACpBU,KAAOV,EAAAA,aAAAA;AACPF,MAAAA;AACF,KAAA,CAAA,CAAA,CAAA,CAAA;AAGR;AACF","file":"similarity.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n ToolEmitter,\n JSONToolOutput,\n Tool,\n ToolInput,\n} from \"./base.js\";\nimport { string, z } from \"zod\";\nimport { RunContext } from \"@/context.js\";\nimport { filter, map, pipe, prop, sortBy, take } from \"remeda\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nconst documentSchema = z.object({ text: string() }).passthrough();\n\ntype Document = z.infer<typeof documentSchema>;\n\ninterface ProviderInput {\n query: string;\n documents: Document[];\n}\n\ntype Provider<TProviderOptions> = (\n input: ProviderInput,\n options: TProviderOptions | undefined,\n run: RunContext<SimilarityTool<TProviderOptions>>,\n) => Promise<{ score: number }[]>;\n\nexport interface SimilarityToolOptions<TProviderOptions = unknown> extends BaseToolOptions {\n provider: Provider<TProviderOptions>;\n maxResults?: number;\n}\n\nexport interface SimilarityToolRunOptions<TProviderOptions = unknown> extends BaseToolRunOptions {\n provider?: TProviderOptions;\n maxResults?: number;\n minScore?: number;\n}\n\nexport interface SimilarityToolResult {\n document: Document;\n index: number;\n score: number;\n}\n\nexport class SimilarityToolOutput extends JSONToolOutput<SimilarityToolResult[]> {}\n\nexport class SimilarityTool<TProviderOptions> extends Tool<\n SimilarityToolOutput,\n SimilarityToolOptions<TProviderOptions>,\n SimilarityToolRunOptions<TProviderOptions>\n> {\n name = \"Similarity\";\n description = \"Extract relevant information from documents.\";\n\n public readonly emitter: ToolEmitter<ToolInput<this>, SimilarityToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"similarity\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({ query: z.string(), documents: z.array(documentSchema) });\n }\n\n static {\n this.register();\n }\n\n protected async _run(\n { query, documents }: ToolInput<this>,\n options: Partial<SimilarityToolRunOptions<TProviderOptions>>,\n run: RunContext<this>,\n ) {\n return pipe(\n await this.options.provider(\n {\n query,\n documents,\n },\n options?.provider,\n run,\n ),\n map(({ score }, idx) => ({\n documentIndex: idx,\n score,\n })),\n filter(({ score }) => score >= (options.minScore ?? -Infinity)),\n sortBy([prop(\"score\"), \"desc\"]),\n take(options?.maxResults ?? this.options.maxResults ?? Infinity),\n (data) =>\n new SimilarityToolOutput(\n data.map(({ documentIndex, score }) => ({\n document: documents[documentIndex],\n index: documentIndex,\n score,\n })),\n ),\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["similarity.ts"],"names":["documentSchema","z","object","text","string","passthrough","SimilarityToolOutput","JSONToolOutput","SimilarityTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","query","documents","array","register","_run","options","run","pipe","provider","map","score","idx","documentIndex","filter","minScore","sortBy","prop","take","maxResults","Infinity","data","document","index"],"mappings":";;;;;;;;;AA6BA,MAAMA,cAAAA,GAAiBC,MAAEC,MAAO,CAAA;AAAEC,EAAAA,IAAAA,EAAMC,UAAAA;AAAS,CAAA,EAAGC,WAAW,EAAA;AAgCxD,MAAMC,6BAA6BC,uBAAAA,CAAAA;EA7D1C;;;AA6DkF;AAE3E,MAAMC,uBAAyCC,aAAAA,CAAAA;EA/DtD;;;EAoEEC,IAAO,GAAA,YAAA;EACPC,WAAc,GAAA,8CAAA;EAEEC,OAA8DC,GAAAA,mBAAAA,CAAQC,KAAKC,KAAM,CAAA;IAC/FC,SAAW,EAAA;AAAC,MAAA,MAAA;AAAQ,MAAA;;IACpBC,OAAS,EAAA;GACX,CAAA;EAEAC,WAAc,GAAA;AACZ,IAAA,OAAOjB,MAAEC,MAAO,CAAA;AAAEiB,MAAAA,KAAAA,EAAOlB,MAAEG,MAAM,EAAA;MAAIgB,SAAWnB,EAAAA,KAAAA,CAAEoB,MAAMrB,cAAAA;KAAgB,CAAA;AAC1E;EAEA;AACE,IAAA,IAAA,CAAKsB,QAAQ,EAAA;AACf;AAEA,EAAA,MAAgBC,KACd,EAAEJ,KAAAA,EAAOC,SAAS,EAAA,EAClBI,SACAC,GACA,EAAA;AACA,IAAA,OAAOC,WACL,CAAA,MAAM,IAAKF,CAAAA,OAAAA,CAAQG,QACjB,CAAA;AACER,MAAAA,KAAAA;AACAC,MAAAA;KAEFI,EAAAA,OAAAA,EAASG,UACTF,GAAAA,CAAAA,EAEFG,WAAI,CAAC,EAAEC,KAAK,EAAA,EAAIC,GAAS,MAAA;MACvBC,aAAeD,EAAAA,GAAAA;AACfD,MAAAA;KACF,CAAA,CAAA,EACAG,aAAO,CAAA,CAAC,EAAEH,KAAAA,EAAYA,KAAAA,KAAAA,KAAUL,OAAQS,CAAAA,QAAAA,IAAY,CAAQ,QAAA,CAAA,CAAA,EAC5DC,aAAO,CAAA;AAACC,MAAAA,WAAAA,CAAK,OAAA,CAAA;AAAU,MAAA;AAAO,KAAA,CAAA,EAC9BC,YAAKZ,OAASa,EAAAA,UAAAA,IAAc,KAAKb,OAAQa,CAAAA,UAAAA,IAAcC,QAAAA,CACvD,EAAA,CAACC,IACC,KAAA,IAAIjC,qBACFiC,IAAKX,CAAAA,GAAAA,CAAI,CAAC,EAAEG,aAAAA,EAAeF,OAAa,MAAA;AACtCW,MAAAA,QAAAA,EAAUpB,UAAUW,aAAAA,CAAAA;MACpBU,KAAOV,EAAAA,aAAAA;AACPF,MAAAA;AACF,KAAA,CAAA,CAAA,CAAA,CAAA;AAGR;AACF","file":"similarity.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n ToolEmitter,\n JSONToolOutput,\n Tool,\n ToolInput,\n} from \"./base.js\";\nimport { string, z } from \"zod\";\nimport { RunContext } from \"@/context.js\";\nimport { filter, map, pipe, prop, sortBy, take } from \"remeda\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nconst documentSchema = z.object({ text: string() }).passthrough();\n\ntype Document = z.infer<typeof documentSchema>;\n\ninterface ProviderInput {\n query: string;\n documents: Document[];\n}\n\ntype Provider<TProviderOptions> = (\n input: ProviderInput,\n options: TProviderOptions | undefined,\n run: RunContext<SimilarityTool<TProviderOptions>>,\n) => Promise<{ score: number }[]>;\n\nexport interface SimilarityToolOptions<TProviderOptions = unknown> extends BaseToolOptions {\n provider: Provider<TProviderOptions>;\n maxResults?: number;\n}\n\nexport interface SimilarityToolRunOptions<TProviderOptions = unknown> extends BaseToolRunOptions {\n provider?: TProviderOptions;\n maxResults?: number;\n minScore?: number;\n}\n\nexport interface SimilarityToolResult {\n document: Document;\n index: number;\n score: number;\n}\n\nexport class SimilarityToolOutput extends JSONToolOutput<SimilarityToolResult[]> {}\n\nexport class SimilarityTool<TProviderOptions> extends Tool<\n SimilarityToolOutput,\n SimilarityToolOptions<TProviderOptions>,\n SimilarityToolRunOptions<TProviderOptions>\n> {\n name = \"Similarity\";\n description = \"Extract relevant information from documents.\";\n\n public readonly emitter: ToolEmitter<ToolInput<this>, SimilarityToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"similarity\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({ query: z.string(), documents: z.array(documentSchema) });\n }\n\n static {\n this.register();\n }\n\n protected async _run(\n { query, documents }: ToolInput<this>,\n options: Partial<SimilarityToolRunOptions<TProviderOptions>>,\n run: RunContext<this>,\n ) {\n return pipe(\n await this.options.provider(\n {\n query,\n documents,\n },\n options?.provider,\n run,\n ),\n map(({ score }, idx) => ({\n documentIndex: idx,\n score,\n })),\n filter(({ score }) => score >= (options.minScore ?? -Infinity)),\n sortBy([prop(\"score\"), \"desc\"]),\n take(options?.maxResults ?? this.options.maxResults ?? Infinity),\n (data) =>\n new SimilarityToolOutput(\n data.map(({ documentIndex, score }) => ({\n document: documents[documentIndex],\n index: documentIndex,\n score,\n })),\n ),\n );\n }\n}\n"]}
@@ -10,11 +10,11 @@ import 'promise-based-task';
10
10
  import '../cache/base.cjs';
11
11
  import '../internals/helpers/schema.cjs';
12
12
  import 'zod-to-json-schema';
13
- import '../emitter-BWtGHYn0.cjs';
13
+ import '../emitter-D5Mu0EEH.cjs';
14
14
  import '../internals/helpers/promise.cjs';
15
15
 
16
16
  /**
17
- * Copyright 2025 IBM Corp.
17
+ * Copyright 2025 © BeeAI a Series of LF Projects, LLC
18
18
  *
19
19
  * Licensed under the Apache License, Version 2.0 (the "License");
20
20
  * you may not use this file except in compliance with the License.
@@ -10,11 +10,11 @@ import 'promise-based-task';
10
10
  import '../cache/base.js';
11
11
  import '../internals/helpers/schema.js';
12
12
  import 'zod-to-json-schema';
13
- import '../emitter-l0W9gC1A.js';
13
+ import '../emitter-C3dO-s2P.js';
14
14
  import '../internals/helpers/promise.js';
15
15
 
16
16
  /**
17
- * Copyright 2025 IBM Corp.
17
+ * Copyright 2025 © BeeAI a Series of LF Projects, LLC
18
18
  *
19
19
  * Licensed under the Apache License, Version 2.0 (the "License");
20
20
  * you may not use this file except in compliance with the License.