@rudderjs/ai 1.17.3 → 1.18.0

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 (377) hide show
  1. package/README.md +19 -1274
  2. package/dist/budget-orm/index.d.ts +1 -95
  3. package/dist/budget-orm/index.d.ts.map +1 -1
  4. package/dist/budget-orm/index.js +4 -176
  5. package/dist/budget-orm/index.js.map +1 -1
  6. package/dist/chat-mentions.d.ts +1 -58
  7. package/dist/chat-mentions.d.ts.map +1 -1
  8. package/dist/chat-mentions.js +4 -80
  9. package/dist/chat-mentions.js.map +1 -1
  10. package/dist/commands/ai-eval.d.ts +1 -92
  11. package/dist/commands/ai-eval.d.ts.map +1 -1
  12. package/dist/commands/ai-eval.js +4 -377
  13. package/dist/commands/ai-eval.js.map +1 -1
  14. package/dist/commands/make-agent.d.ts +1 -2
  15. package/dist/commands/make-agent.d.ts.map +1 -1
  16. package/dist/commands/make-agent.js +4 -22
  17. package/dist/commands/make-agent.js.map +1 -1
  18. package/dist/computer-use/index.d.ts +1 -52
  19. package/dist/computer-use/index.d.ts.map +1 -1
  20. package/dist/computer-use/index.js +4 -50
  21. package/dist/computer-use/index.js.map +1 -1
  22. package/dist/conversation-orm/index.d.ts +1 -108
  23. package/dist/conversation-orm/index.d.ts.map +1 -1
  24. package/dist/conversation-orm/index.js +4 -214
  25. package/dist/conversation-orm/index.js.map +1 -1
  26. package/dist/doctor.d.ts +1 -1
  27. package/dist/doctor.d.ts.map +1 -1
  28. package/dist/doctor.js +4 -65
  29. package/dist/doctor.js.map +1 -1
  30. package/dist/eval/index.d.ts +1 -270
  31. package/dist/eval/index.d.ts.map +1 -1
  32. package/dist/eval/index.js +4 -509
  33. package/dist/eval/index.js.map +1 -1
  34. package/dist/gateway/index.d.ts +1 -10
  35. package/dist/gateway/index.d.ts.map +1 -1
  36. package/dist/gateway/index.js +4 -10
  37. package/dist/gateway/index.js.map +1 -1
  38. package/dist/index.d.ts +1 -66
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +4 -78
  41. package/dist/index.js.map +1 -1
  42. package/dist/mcp/index.d.ts +1 -15
  43. package/dist/mcp/index.d.ts.map +1 -1
  44. package/dist/mcp/index.js +4 -14
  45. package/dist/mcp/index.js.map +1 -1
  46. package/dist/memory-embedding/index.d.ts +1 -120
  47. package/dist/memory-embedding/index.d.ts.map +1 -1
  48. package/dist/memory-embedding/index.js +4 -228
  49. package/dist/memory-embedding/index.js.map +1 -1
  50. package/dist/memory-orm/index.d.ts +1 -117
  51. package/dist/memory-orm/index.d.ts.map +1 -1
  52. package/dist/memory-orm/index.js +4 -186
  53. package/dist/memory-orm/index.js.map +1 -1
  54. package/dist/node/index.d.ts +1 -2
  55. package/dist/node/index.d.ts.map +1 -1
  56. package/dist/node/index.js +4 -2
  57. package/dist/node/index.js.map +1 -1
  58. package/dist/observers.d.ts +1 -129
  59. package/dist/observers.d.ts.map +1 -1
  60. package/dist/observers.js +4 -39
  61. package/dist/observers.js.map +1 -1
  62. package/dist/react/index.d.ts +1 -15
  63. package/dist/react/index.d.ts.map +1 -1
  64. package/dist/react/index.js +4 -15
  65. package/dist/react/index.js.map +1 -1
  66. package/dist/server/index.d.ts +1 -1
  67. package/dist/server/index.d.ts.map +1 -1
  68. package/dist/server/index.js +4 -1
  69. package/dist/server/index.js.map +1 -1
  70. package/package.json +9 -13
  71. package/boost/guidelines.md +0 -260
  72. package/boost/skills/ai-agents/SKILL.md +0 -240
  73. package/boost/skills/ai-tools/SKILL.md +0 -260
  74. package/dist/agent-run-store.d.ts +0 -161
  75. package/dist/agent-run-store.d.ts.map +0 -1
  76. package/dist/agent-run-store.js +0 -98
  77. package/dist/agent-run-store.js.map +0 -1
  78. package/dist/agent-sse.d.ts +0 -153
  79. package/dist/agent-sse.d.ts.map +0 -1
  80. package/dist/agent-sse.js +0 -282
  81. package/dist/agent-sse.js.map +0 -1
  82. package/dist/agent.d.ts +0 -508
  83. package/dist/agent.d.ts.map +0 -1
  84. package/dist/agent.js +0 -1538
  85. package/dist/agent.js.map +0 -1
  86. package/dist/attachment.d.ts +0 -31
  87. package/dist/attachment.d.ts.map +0 -1
  88. package/dist/attachment.js +0 -89
  89. package/dist/attachment.js.map +0 -1
  90. package/dist/audio.d.ts +0 -45
  91. package/dist/audio.d.ts.map +0 -1
  92. package/dist/audio.js +0 -93
  93. package/dist/audio.js.map +0 -1
  94. package/dist/base64.d.ts +0 -7
  95. package/dist/base64.d.ts.map +0 -1
  96. package/dist/base64.js +0 -39
  97. package/dist/base64.js.map +0 -1
  98. package/dist/budget/pricing.d.ts +0 -124
  99. package/dist/budget/pricing.d.ts.map +0 -1
  100. package/dist/budget/pricing.js +0 -175
  101. package/dist/budget/pricing.js.map +0 -1
  102. package/dist/budget/storage.d.ts +0 -104
  103. package/dist/budget/storage.d.ts.map +0 -1
  104. package/dist/budget/storage.js +0 -0
  105. package/dist/budget/storage.js.map +0 -1
  106. package/dist/budget/with-budget.d.ts +0 -119
  107. package/dist/budget/with-budget.d.ts.map +0 -1
  108. package/dist/budget/with-budget.js +0 -175
  109. package/dist/budget/with-budget.js.map +0 -1
  110. package/dist/cached-embedding.d.ts +0 -14
  111. package/dist/cached-embedding.d.ts.map +0 -1
  112. package/dist/cached-embedding.js +0 -44
  113. package/dist/cached-embedding.js.map +0 -1
  114. package/dist/computer-use/actions.d.ts +0 -214
  115. package/dist/computer-use/actions.d.ts.map +0 -1
  116. package/dist/computer-use/actions.js +0 -48
  117. package/dist/computer-use/actions.js.map +0 -1
  118. package/dist/computer-use/errors.d.ts +0 -57
  119. package/dist/computer-use/errors.d.ts.map +0 -1
  120. package/dist/computer-use/errors.js +0 -76
  121. package/dist/computer-use/errors.js.map +0 -1
  122. package/dist/computer-use/playwright.d.ts +0 -76
  123. package/dist/computer-use/playwright.d.ts.map +0 -1
  124. package/dist/computer-use/playwright.js +0 -270
  125. package/dist/computer-use/playwright.js.map +0 -1
  126. package/dist/computer-use/tool.d.ts +0 -154
  127. package/dist/computer-use/tool.d.ts.map +0 -1
  128. package/dist/computer-use/tool.js +0 -210
  129. package/dist/computer-use/tool.js.map +0 -1
  130. package/dist/continuation-validation.d.ts +0 -85
  131. package/dist/continuation-validation.d.ts.map +0 -1
  132. package/dist/continuation-validation.js +0 -166
  133. package/dist/continuation-validation.js.map +0 -1
  134. package/dist/conversation-persistence.d.ts +0 -46
  135. package/dist/conversation-persistence.d.ts.map +0 -1
  136. package/dist/conversation-persistence.js +0 -176
  137. package/dist/conversation-persistence.js.map +0 -1
  138. package/dist/conversation.d.ts +0 -11
  139. package/dist/conversation.d.ts.map +0 -1
  140. package/dist/conversation.js +0 -55
  141. package/dist/conversation.js.map +0 -1
  142. package/dist/eval/fixtures.d.ts +0 -65
  143. package/dist/eval/fixtures.d.ts.map +0 -1
  144. package/dist/eval/fixtures.js +0 -110
  145. package/dist/eval/fixtures.js.map +0 -1
  146. package/dist/eval/html-reporter.d.ts +0 -25
  147. package/dist/eval/html-reporter.d.ts.map +0 -1
  148. package/dist/eval/html-reporter.js +0 -209
  149. package/dist/eval/html-reporter.js.map +0 -1
  150. package/dist/eval/json-reporter.d.ts +0 -43
  151. package/dist/eval/json-reporter.d.ts.map +0 -1
  152. package/dist/eval/json-reporter.js +0 -40
  153. package/dist/eval/json-reporter.js.map +0 -1
  154. package/dist/facade.d.ts +0 -96
  155. package/dist/facade.d.ts.map +0 -1
  156. package/dist/facade.js +0 -146
  157. package/dist/facade.js.map +0 -1
  158. package/dist/fake.d.ts +0 -201
  159. package/dist/fake.d.ts.map +0 -1
  160. package/dist/fake.js +0 -428
  161. package/dist/fake.js.map +0 -1
  162. package/dist/file-search.d.ts +0 -168
  163. package/dist/file-search.d.ts.map +0 -1
  164. package/dist/file-search.js +0 -158
  165. package/dist/file-search.js.map +0 -1
  166. package/dist/files.d.ts +0 -27
  167. package/dist/files.d.ts.map +0 -1
  168. package/dist/files.js +0 -44
  169. package/dist/files.js.map +0 -1
  170. package/dist/gateway/http-gateway-adapter.d.ts +0 -94
  171. package/dist/gateway/http-gateway-adapter.d.ts.map +0 -1
  172. package/dist/gateway/http-gateway-adapter.js +0 -106
  173. package/dist/gateway/http-gateway-adapter.js.map +0 -1
  174. package/dist/gateway/sse.d.ts +0 -28
  175. package/dist/gateway/sse.d.ts.map +0 -1
  176. package/dist/gateway/sse.js +0 -78
  177. package/dist/gateway/sse.js.map +0 -1
  178. package/dist/handoff.d.ts +0 -95
  179. package/dist/handoff.d.ts.map +0 -1
  180. package/dist/handoff.js +0 -78
  181. package/dist/handoff.js.map +0 -1
  182. package/dist/handoffs-driver.d.ts +0 -58
  183. package/dist/handoffs-driver.d.ts.map +0 -1
  184. package/dist/handoffs-driver.js +0 -103
  185. package/dist/handoffs-driver.js.map +0 -1
  186. package/dist/image.d.ts +0 -40
  187. package/dist/image.d.ts.map +0 -1
  188. package/dist/image.js +0 -109
  189. package/dist/image.js.map +0 -1
  190. package/dist/mcp/client-tools.d.ts +0 -39
  191. package/dist/mcp/client-tools.d.ts.map +0 -1
  192. package/dist/mcp/client-tools.js +0 -147
  193. package/dist/mcp/client-tools.js.map +0 -1
  194. package/dist/mcp/server-from-agent.d.ts +0 -24
  195. package/dist/mcp/server-from-agent.d.ts.map +0 -1
  196. package/dist/mcp/server-from-agent.js +0 -113
  197. package/dist/mcp/server-from-agent.js.map +0 -1
  198. package/dist/mcp/types.d.ts +0 -64
  199. package/dist/mcp/types.d.ts.map +0 -1
  200. package/dist/mcp/types.js +0 -6
  201. package/dist/mcp/types.js.map +0 -1
  202. package/dist/memory-extract.d.ts +0 -60
  203. package/dist/memory-extract.d.ts.map +0 -1
  204. package/dist/memory-extract.js +0 -163
  205. package/dist/memory-extract.js.map +0 -1
  206. package/dist/memory-inject.d.ts +0 -39
  207. package/dist/memory-inject.d.ts.map +0 -1
  208. package/dist/memory-inject.js +0 -135
  209. package/dist/memory-inject.js.map +0 -1
  210. package/dist/memory.d.ts +0 -55
  211. package/dist/memory.d.ts.map +0 -1
  212. package/dist/memory.js +0 -132
  213. package/dist/memory.js.map +0 -1
  214. package/dist/middleware.d.ts +0 -18
  215. package/dist/middleware.d.ts.map +0 -1
  216. package/dist/middleware.js +0 -72
  217. package/dist/middleware.js.map +0 -1
  218. package/dist/node/attachment.d.ts +0 -6
  219. package/dist/node/attachment.d.ts.map +0 -1
  220. package/dist/node/attachment.js +0 -35
  221. package/dist/node/attachment.js.map +0 -1
  222. package/dist/node/transcription.d.ts +0 -4
  223. package/dist/node/transcription.d.ts.map +0 -1
  224. package/dist/node/transcription.js +0 -8
  225. package/dist/node/transcription.js.map +0 -1
  226. package/dist/output.d.ts +0 -22
  227. package/dist/output.d.ts.map +0 -1
  228. package/dist/output.js +0 -60
  229. package/dist/output.js.map +0 -1
  230. package/dist/provider-tools.d.ts +0 -87
  231. package/dist/provider-tools.d.ts.map +0 -1
  232. package/dist/provider-tools.js +0 -189
  233. package/dist/provider-tools.js.map +0 -1
  234. package/dist/providers/anthropic.d.ts +0 -24
  235. package/dist/providers/anthropic.d.ts.map +0 -1
  236. package/dist/providers/anthropic.js +0 -405
  237. package/dist/providers/anthropic.js.map +0 -1
  238. package/dist/providers/azure.d.ts +0 -13
  239. package/dist/providers/azure.d.ts.map +0 -1
  240. package/dist/providers/azure.js +0 -15
  241. package/dist/providers/azure.js.map +0 -1
  242. package/dist/providers/bedrock.d.ts +0 -75
  243. package/dist/providers/bedrock.d.ts.map +0 -1
  244. package/dist/providers/bedrock.js +0 -181
  245. package/dist/providers/bedrock.js.map +0 -1
  246. package/dist/providers/cohere.d.ts +0 -13
  247. package/dist/providers/cohere.d.ts.map +0 -1
  248. package/dist/providers/cohere.js +0 -87
  249. package/dist/providers/cohere.js.map +0 -1
  250. package/dist/providers/deepseek.d.ts +0 -12
  251. package/dist/providers/deepseek.d.ts.map +0 -1
  252. package/dist/providers/deepseek.js +0 -15
  253. package/dist/providers/deepseek.js.map +0 -1
  254. package/dist/providers/elevenlabs.d.ts +0 -98
  255. package/dist/providers/elevenlabs.d.ts.map +0 -1
  256. package/dist/providers/elevenlabs.js +0 -229
  257. package/dist/providers/elevenlabs.js.map +0 -1
  258. package/dist/providers/google-cache-registry.d.ts +0 -132
  259. package/dist/providers/google-cache-registry.d.ts.map +0 -1
  260. package/dist/providers/google-cache-registry.js +0 -209
  261. package/dist/providers/google-cache-registry.js.map +0 -1
  262. package/dist/providers/google.d.ts +0 -38
  263. package/dist/providers/google.d.ts.map +0 -1
  264. package/dist/providers/google.js +0 -903
  265. package/dist/providers/google.js.map +0 -1
  266. package/dist/providers/groq.d.ts +0 -12
  267. package/dist/providers/groq.d.ts.map +0 -1
  268. package/dist/providers/groq.js +0 -15
  269. package/dist/providers/groq.js.map +0 -1
  270. package/dist/providers/jina.d.ts +0 -13
  271. package/dist/providers/jina.d.ts.map +0 -1
  272. package/dist/providers/jina.js +0 -90
  273. package/dist/providers/jina.js.map +0 -1
  274. package/dist/providers/mistral.d.ts +0 -13
  275. package/dist/providers/mistral.d.ts.map +0 -1
  276. package/dist/providers/mistral.js +0 -46
  277. package/dist/providers/mistral.js.map +0 -1
  278. package/dist/providers/ollama.d.ts +0 -11
  279. package/dist/providers/ollama.d.ts.map +0 -1
  280. package/dist/providers/ollama.js +0 -15
  281. package/dist/providers/ollama.js.map +0 -1
  282. package/dist/providers/openai.d.ts +0 -79
  283. package/dist/providers/openai.d.ts.map +0 -1
  284. package/dist/providers/openai.js +0 -792
  285. package/dist/providers/openai.js.map +0 -1
  286. package/dist/providers/openrouter.d.ts +0 -43
  287. package/dist/providers/openrouter.d.ts.map +0 -1
  288. package/dist/providers/openrouter.js +0 -21
  289. package/dist/providers/openrouter.js.map +0 -1
  290. package/dist/providers/voyage.d.ts +0 -91
  291. package/dist/providers/voyage.d.ts.map +0 -1
  292. package/dist/providers/voyage.js +0 -166
  293. package/dist/providers/voyage.js.map +0 -1
  294. package/dist/providers/xai.d.ts +0 -12
  295. package/dist/providers/xai.d.ts.map +0 -1
  296. package/dist/providers/xai.js +0 -15
  297. package/dist/providers/xai.js.map +0 -1
  298. package/dist/queue-job.d.ts +0 -100
  299. package/dist/queue-job.d.ts.map +0 -1
  300. package/dist/queue-job.js +0 -185
  301. package/dist/queue-job.js.map +0 -1
  302. package/dist/react/agent-run.d.ts +0 -111
  303. package/dist/react/agent-run.d.ts.map +0 -1
  304. package/dist/react/agent-run.js +0 -107
  305. package/dist/react/agent-run.js.map +0 -1
  306. package/dist/react/useAgentRun.d.ts +0 -68
  307. package/dist/react/useAgentRun.d.ts.map +0 -1
  308. package/dist/react/useAgentRun.js +0 -125
  309. package/dist/react/useAgentRun.js.map +0 -1
  310. package/dist/registry.d.ts +0 -45
  311. package/dist/registry.d.ts.map +0 -1
  312. package/dist/registry.js +0 -131
  313. package/dist/registry.js.map +0 -1
  314. package/dist/rerank.d.ts +0 -20
  315. package/dist/rerank.d.ts.map +0 -1
  316. package/dist/rerank.js +0 -40
  317. package/dist/rerank.js.map +0 -1
  318. package/dist/resume-approval.d.ts +0 -30
  319. package/dist/resume-approval.d.ts.map +0 -1
  320. package/dist/resume-approval.js +0 -147
  321. package/dist/resume-approval.js.map +0 -1
  322. package/dist/sanitize-conversation.d.ts +0 -43
  323. package/dist/sanitize-conversation.d.ts.map +0 -1
  324. package/dist/sanitize-conversation.js +0 -85
  325. package/dist/sanitize-conversation.js.map +0 -1
  326. package/dist/scoped-tool.d.ts +0 -98
  327. package/dist/scoped-tool.d.ts.map +0 -1
  328. package/dist/scoped-tool.js +0 -174
  329. package/dist/scoped-tool.js.map +0 -1
  330. package/dist/server/provider.d.ts +0 -22
  331. package/dist/server/provider.d.ts.map +0 -1
  332. package/dist/server/provider.js +0 -194
  333. package/dist/server/provider.js.map +0 -1
  334. package/dist/similarity-search.d.ts +0 -163
  335. package/dist/similarity-search.d.ts.map +0 -1
  336. package/dist/similarity-search.js +0 -147
  337. package/dist/similarity-search.js.map +0 -1
  338. package/dist/sub-agent-run-store.d.ts +0 -157
  339. package/dist/sub-agent-run-store.d.ts.map +0 -1
  340. package/dist/sub-agent-run-store.js +0 -87
  341. package/dist/sub-agent-run-store.js.map +0 -1
  342. package/dist/tool-execution.d.ts +0 -16
  343. package/dist/tool-execution.d.ts.map +0 -1
  344. package/dist/tool-execution.js +0 -498
  345. package/dist/tool-execution.js.map +0 -1
  346. package/dist/tool-helpers.d.ts +0 -77
  347. package/dist/tool-helpers.d.ts.map +0 -1
  348. package/dist/tool-helpers.js +0 -117
  349. package/dist/tool-helpers.js.map +0 -1
  350. package/dist/tool.d.ts +0 -216
  351. package/dist/tool.d.ts.map +0 -1
  352. package/dist/tool.js +0 -175
  353. package/dist/tool.js.map +0 -1
  354. package/dist/transcription.d.ts +0 -42
  355. package/dist/transcription.d.ts.map +0 -1
  356. package/dist/transcription.js +0 -77
  357. package/dist/transcription.js.map +0 -1
  358. package/dist/types.d.ts +0 -1020
  359. package/dist/types.d.ts.map +0 -1
  360. package/dist/types.js +0 -2
  361. package/dist/types.js.map +0 -1
  362. package/dist/util/hash.d.ts +0 -11
  363. package/dist/util/hash.d.ts.map +0 -1
  364. package/dist/util/hash.js +0 -23
  365. package/dist/util/hash.js.map +0 -1
  366. package/dist/vector-stores/index.d.ts +0 -96
  367. package/dist/vector-stores/index.d.ts.map +0 -1
  368. package/dist/vector-stores/index.js +0 -153
  369. package/dist/vector-stores/index.js.map +0 -1
  370. package/dist/vercel-protocol.d.ts +0 -18
  371. package/dist/vercel-protocol.d.ts.map +0 -1
  372. package/dist/vercel-protocol.js +0 -75
  373. package/dist/vercel-protocol.js.map +0 -1
  374. package/dist/zod-to-json-schema.d.ts +0 -16
  375. package/dist/zod-to-json-schema.d.ts.map +0 -1
  376. package/dist/zod-to-json-schema.js +0 -17
  377. package/dist/zod-to-json-schema.js.map +0 -1
@@ -1,163 +0,0 @@
1
- /**
2
- * `similaritySearch({ model, column, embedWith, ... })` — agent-tool
3
- * factory that wraps an `@rudderjs/orm` Model + a vector column into a
4
- * drop-in `Tool` an agent can call to retrieve semantically similar
5
- * rows (#B7 Phase 2).
6
- *
7
- * Composes B7 Phase 1's ORM primitives (`whereVectorSimilarTo` +
8
- * `selectVectorDistance`) with `AI.embed()`. The model emits a
9
- * natural-language `query`; the tool embeds it, runs a vector search,
10
- * and returns the top-K rows ranked by similarity.
11
- *
12
- * @example
13
- * ```ts
14
- * import { similaritySearch } from '@rudderjs/ai'
15
- * import { Document } from './app/Models/Document.js'
16
- *
17
- * class KnowledgeAgent extends Agent {
18
- * tools() {
19
- * return [
20
- * similaritySearch({
21
- * model: Document,
22
- * column: 'embedding',
23
- * embedWith: 'openai/text-embedding-3-small',
24
- * minSimilarity: 0.7,
25
- * limit: 10,
26
- * }),
27
- * ]
28
- * }
29
- * }
30
- * ```
31
- *
32
- * Phase 2 limitations (lifted in Phase 2.5):
33
- * - **Standalone queries only.** No `scope`/`.where()` chaining yet —
34
- * the underlying `whereVectorSimilarTo` query must run alone. Agents
35
- * see every row in the corpus that matches the vector. Phase 2.5
36
- * adds a `scope: (q) => q.where(...)` callback.
37
- * - **Cosine-centric similarity.** `similarity` is reported as
38
- * `1 - distance` regardless of `metric`. For non-cosine metrics
39
- * (`l2`, `inner-product`) the value is internally consistent with
40
- * the `minSimilarity` filter applied by the adapter but isn't a
41
- * meaningful normalized score on its own.
42
- */
43
- import type { ServerToolBuilder } from './tool.js';
44
- /**
45
- * Structural type for the model class similaritySearch accepts.
46
- *
47
- * Declared locally instead of importing `Model` from `@rudderjs/orm`
48
- * so the main entry stays free of orm runtime — the tool calls
49
- * `model.query()` and never references the `@rudderjs/orm` package
50
- * itself. The user's app brings its own Model class.
51
- */
52
- export interface SimilaritySearchModel<TInstance> {
53
- readonly name: string;
54
- query(): SimilaritySearchQueryBuilder<TInstance>;
55
- }
56
- /**
57
- * WhereOperator strings the `scope` callback may pass to `.where()`.
58
- * Mirrors `@rudderjs/contracts`'s `WhereOperator`. Duplicated here so the
59
- * main entry has no compile-time `@rudderjs/contracts` dep.
60
- */
61
- export type SimilaritySearchWhereOperator = '=' | '!=' | '>' | '>=' | '<' | '<=' | 'LIKE' | 'NOT LIKE' | 'IN' | 'NOT IN';
62
- /**
63
- * Structural type for the QueryBuilder methods similaritySearch needs.
64
- * Mirrors a subset of `@rudderjs/contracts`'s `QueryBuilder<T>` so apps
65
- * writing a `scope` callback get autocomplete on the methods that actually
66
- * compose with `whereVectorSimilarTo` (#B7 Phase 2.5):
67
- *
68
- * - `.where()` / `.orWhere()` chains compose into the SQL with positional
69
- * parameter binding.
70
- * - `.with()` / `.orderBy()` / `.whereGroup()` / `.whereHas()` still throw
71
- * when paired with a vector clause — out of scope for `scope`.
72
- */
73
- export interface SimilaritySearchQueryBuilder<TInstance> {
74
- where(column: string, value: unknown): SimilaritySearchQueryBuilder<TInstance>;
75
- where(column: string, operator: SimilaritySearchWhereOperator, value: unknown): SimilaritySearchQueryBuilder<TInstance>;
76
- orWhere(column: string, value: unknown): SimilaritySearchQueryBuilder<TInstance>;
77
- orWhere(column: string, operator: SimilaritySearchWhereOperator, value: unknown): SimilaritySearchQueryBuilder<TInstance>;
78
- withTrashed?(): SimilaritySearchQueryBuilder<TInstance>;
79
- onlyTrashed?(): SimilaritySearchQueryBuilder<TInstance>;
80
- whereVectorSimilarTo?(column: string, query: number[] | string, opts?: {
81
- metric?: 'cosine' | 'l2' | 'inner-product';
82
- minSimilarity?: number;
83
- embedWith?: string;
84
- }): SimilaritySearchQueryBuilder<TInstance>;
85
- selectVectorDistance?(column: string, query: number[], alias: string): SimilaritySearchQueryBuilder<TInstance>;
86
- limit(n: number): SimilaritySearchQueryBuilder<TInstance>;
87
- get(): Promise<TInstance[]>;
88
- }
89
- export interface SimilarityHit<TInstance> {
90
- readonly row: TInstance;
91
- /**
92
- * Higher = closer. For `metric: 'cosine'` (default) this is
93
- * `1 - distance` ∈ [-1, 1]. For other metrics see the JSDoc on
94
- * {@link similaritySearch}.
95
- */
96
- readonly similarity: number;
97
- }
98
- export interface SimilaritySearchOptions<TInstance> {
99
- /** The Model class whose rows will be searched. */
100
- model: SimilaritySearchModel<TInstance>;
101
- /** The column on `model` declared with the `vector({ dimensions })` cast. */
102
- column: string;
103
- /**
104
- * Embedding model id (`<provider>/<model>`). Required — fails loud
105
- * at factory construction time if missing so apps don't accidentally
106
- * route to whatever `AiRegistry.getDefault()` happens to be.
107
- */
108
- embedWith: string;
109
- /** Default `'cosine'`. */
110
- metric?: 'cosine' | 'l2' | 'inner-product';
111
- /**
112
- * Drops rows whose `1 - distance` falls below this threshold. Cosine
113
- * range is `[-1, 1]` so values near `0.7–0.9` are typical for
114
- * "relevant" documents.
115
- */
116
- minSimilarity?: number;
117
- /** Default `10`. */
118
- limit?: number;
119
- /**
120
- * Pre-filter the query before the vector clause attaches. Receives a
121
- * fresh `model.query()` builder; return the chained builder. Use for
122
- * tenancy (`.where('tenantId', userId)`), publication state
123
- * (`.where('published', true)`), or any flat predicate that should
124
- * narrow the search corpus.
125
- *
126
- * **Phase 2.5 limits:** flat `.where()` / `.orWhere()` chains compose
127
- * into the SQL. `whereGroup` / `whereHas` / `with()` still throw at
128
- * terminal time — keep the scope flat.
129
- *
130
- * @example
131
- * ```ts
132
- * similaritySearch({
133
- * model: KnowledgeArticle,
134
- * column: 'embedding',
135
- * embedWith: 'openai/text-embedding-3-small',
136
- * scope: q => q.where('tenantId', currentTenant).where('published', true),
137
- * })
138
- * ```
139
- */
140
- scope?: (q: SimilaritySearchQueryBuilder<TInstance>) => SimilaritySearchQueryBuilder<TInstance>;
141
- /**
142
- * Override the tool name. Default
143
- * `similarity_search_<model_name_lowercase>`.
144
- */
145
- name?: string;
146
- /** Override the tool description. */
147
- description?: string;
148
- /**
149
- * Custom string projection for each hit, replaces the default
150
- * `(0.87) {"id":1,"content":"..."}` shape that the model sees on its
151
- * next step. The structured array still flows to the UI via the
152
- * `tool-result` chunk.
153
- */
154
- projectResult?: (row: TInstance, similarity: number) => string;
155
- }
156
- /**
157
- * Build a `Tool` that embeds a natural-language query and returns the
158
- * top-K similar rows from `model.column`.
159
- */
160
- export declare function similaritySearch<TInstance>(opts: SimilaritySearchOptions<TInstance>): ServerToolBuilder<{
161
- query: string;
162
- }, SimilarityHit<TInstance>[]>;
163
- //# sourceMappingURL=similarity-search.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"similarity-search.d.ts","sourceRoot":"","sources":["../src/similarity-search.ts"],"names":[],"mappings":"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"}
@@ -1,147 +0,0 @@
1
- /**
2
- * `similaritySearch({ model, column, embedWith, ... })` — agent-tool
3
- * factory that wraps an `@rudderjs/orm` Model + a vector column into a
4
- * drop-in `Tool` an agent can call to retrieve semantically similar
5
- * rows (#B7 Phase 2).
6
- *
7
- * Composes B7 Phase 1's ORM primitives (`whereVectorSimilarTo` +
8
- * `selectVectorDistance`) with `AI.embed()`. The model emits a
9
- * natural-language `query`; the tool embeds it, runs a vector search,
10
- * and returns the top-K rows ranked by similarity.
11
- *
12
- * @example
13
- * ```ts
14
- * import { similaritySearch } from '@rudderjs/ai'
15
- * import { Document } from './app/Models/Document.js'
16
- *
17
- * class KnowledgeAgent extends Agent {
18
- * tools() {
19
- * return [
20
- * similaritySearch({
21
- * model: Document,
22
- * column: 'embedding',
23
- * embedWith: 'openai/text-embedding-3-small',
24
- * minSimilarity: 0.7,
25
- * limit: 10,
26
- * }),
27
- * ]
28
- * }
29
- * }
30
- * ```
31
- *
32
- * Phase 2 limitations (lifted in Phase 2.5):
33
- * - **Standalone queries only.** No `scope`/`.where()` chaining yet —
34
- * the underlying `whereVectorSimilarTo` query must run alone. Agents
35
- * see every row in the corpus that matches the vector. Phase 2.5
36
- * adds a `scope: (q) => q.where(...)` callback.
37
- * - **Cosine-centric similarity.** `similarity` is reported as
38
- * `1 - distance` regardless of `metric`. For non-cosine metrics
39
- * (`l2`, `inner-product`) the value is internally consistent with
40
- * the `minSimilarity` filter applied by the adapter but isn't a
41
- * meaningful normalized score on its own.
42
- */
43
- import { z } from 'zod';
44
- import { toolDefinition } from './tool.js';
45
- import { AI } from './facade.js';
46
- /** Internal alias used to read distance back off each row. */
47
- const SIMILARITY_DISTANCE_ALIAS = '__rudderjs_similarity_distance__';
48
- /**
49
- * Build a `Tool` that embeds a natural-language query and returns the
50
- * top-K similar rows from `model.column`.
51
- */
52
- export function similaritySearch(opts) {
53
- const { model, column, embedWith, metric = 'cosine', minSimilarity, limit = 10, name, description, projectResult, scope, } = opts;
54
- if (!embedWith || typeof embedWith !== 'string') {
55
- throw new Error('[Rudder AI] similaritySearch requires opts.embedWith (e.g. "openai/text-embedding-3-small"). ' +
56
- 'No default — fail loud so embeddings never silently route through whichever provider happens to be the AI default.');
57
- }
58
- if (!column || typeof column !== 'string') {
59
- throw new Error('[Rudder AI] similaritySearch requires opts.column — the Model column declared with vector({ dimensions }).');
60
- }
61
- if (!model || typeof model.query !== 'function') {
62
- throw new Error('[Rudder AI] similaritySearch requires opts.model — a Model class with a static query() method.');
63
- }
64
- if (limit <= 0 || !Number.isFinite(limit)) {
65
- throw new Error(`[Rudder AI] similaritySearch limit must be a positive finite number; got ${String(limit)}.`);
66
- }
67
- const toolName = name ?? `similarity_search_${model.name.toLowerCase()}`;
68
- const toolDescription = description ?? `Semantic search over ${model.name} records. Pass a natural-language \`query\` string; the most similar rows are returned.`;
69
- return toolDefinition({
70
- name: toolName,
71
- description: toolDescription,
72
- inputSchema: z.object({
73
- query: z.string().min(1).describe('Natural-language query to search for.'),
74
- }),
75
- })
76
- .server(async ({ query }) => {
77
- const embedResult = await AI.embed(query, { model: embedWith });
78
- const vector = embedResult.embeddings[0];
79
- if (!vector || vector.length === 0) {
80
- throw new Error(`[Rudder AI] similaritySearch: AI.embed("${query}", { model: "${embedWith}" }) returned no embedding.`);
81
- }
82
- const baseQb = model.query();
83
- const scopedQb = scope ? scope(baseQb) : baseQb;
84
- const whereVec = scopedQb.whereVectorSimilarTo;
85
- const selectDist = scopedQb.selectVectorDistance;
86
- if (typeof whereVec !== 'function' || typeof selectDist !== 'function') {
87
- throw new Error(`[Rudder AI] similaritySearch: ${model.name}'s ORM adapter does not implement vector queries. ` +
88
- 'Use @rudderjs/orm-prisma against a Postgres + pgvector connection.');
89
- }
90
- const vectorOpts = { metric };
91
- if (minSimilarity !== undefined)
92
- vectorOpts.minSimilarity = minSimilarity;
93
- const filtered = whereVec.call(scopedQb, column, vector, vectorOpts);
94
- const projected = selectDist.call(filtered, column, vector, SIMILARITY_DISTANCE_ALIAS);
95
- const rows = await projected.limit(limit).get();
96
- return rows.map((row) => {
97
- const distance = readDistance(row);
98
- return { row, similarity: 1 - distance };
99
- });
100
- })
101
- .modelOutput((results) => {
102
- if (results.length === 0) {
103
- return `No similar ${model.name} records found.`;
104
- }
105
- if (projectResult) {
106
- return results
107
- .map(({ row, similarity }) => projectResult(row, similarity))
108
- .join('\n');
109
- }
110
- return results
111
- .map(({ row, similarity }) => {
112
- const json = serializeRow(row);
113
- return `(${similarity.toFixed(2)}) ${json}`;
114
- })
115
- .join('\n');
116
- });
117
- }
118
- function readDistance(row) {
119
- if (row === null || typeof row !== 'object')
120
- return 0;
121
- const raw = row[SIMILARITY_DISTANCE_ALIAS];
122
- const n = typeof raw === 'number' ? raw : Number(raw);
123
- return Number.isFinite(n) ? n : 0;
124
- }
125
- function serializeRow(row) {
126
- if (row === null || typeof row !== 'object')
127
- return JSON.stringify(row);
128
- const candidate = row;
129
- const toJSON = candidate.toJSON;
130
- const data = typeof toJSON === 'function'
131
- ? toJSON.call(candidate)
132
- : sanitizeRow(row);
133
- return JSON.stringify(data);
134
- }
135
- /**
136
- * Strip the internal distance alias from rows whose `toJSON` we can't
137
- * call (plain objects, fakes). `toJSON()`-bearing Models already
138
- * filter their own internal fields.
139
- */
140
- function sanitizeRow(row) {
141
- if (!(SIMILARITY_DISTANCE_ALIAS in row))
142
- return row;
143
- const { [SIMILARITY_DISTANCE_ALIAS]: _, ...rest } = row;
144
- void _;
145
- return rest;
146
- }
147
- //# sourceMappingURL=similarity-search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"similarity-search.js","sourceRoot":"","sources":["../src/similarity-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAoIhC,8DAA8D;AAC9D,MAAM,yBAAyB,GAAG,kCAAkC,CAAA;AAEpE;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAwC;IAExC,MAAM,EACJ,KAAK,EACL,MAAM,EACN,SAAS,EACT,MAAM,GAAG,QAAQ,EACjB,aAAa,EACb,KAAK,GAAG,EAAE,EACV,IAAI,EACJ,WAAW,EACX,aAAa,EACb,KAAK,GACN,GAAG,IAAI,CAAA;IAER,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,+FAA+F;YAC/F,oHAAoH,CACrH,CAAA;IACH,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,4GAA4G,CAAC,CAAA;IAC/H,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAA;IACnH,CAAC;IACD,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,4EAA4E,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC/G,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,IAAI,qBAAqB,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAA;IACxE,MAAM,eAAe,GAAG,WAAW,IAAI,wBAAwB,KAAK,CAAC,IAAI,yFAAyF,CAAA;IAElK,OAAO,cAAc,CAAC;QACpB,IAAI,EAAS,QAAQ;QACrB,WAAW,EAAE,eAAe;QAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;SAC3E,CAAC;KACH,CAAC;SACC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAuC,EAAE;QAC/D,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QAC/D,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACxC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,2CAA2C,KAAK,gBAAgB,SAAS,6BAA6B,CACvG,CAAA;QACH,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;QAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;QAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,oBAAoB,CAAA;QAC9C,MAAM,UAAU,GAAG,QAAQ,CAAC,oBAAoB,CAAA;QAChD,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;YACvE,MAAM,IAAI,KAAK,CACb,iCAAiC,KAAK,CAAC,IAAI,oDAAoD;gBAC/F,oEAAoE,CACrE,CAAA;QACH,CAAC;QAED,MAAM,UAAU,GAA0E,EAAE,MAAM,EAAE,CAAA;QACpG,IAAI,aAAa,KAAK,SAAS;YAAE,UAAU,CAAC,aAAa,GAAG,aAAa,CAAA;QAEzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAA;QACpE,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB,CAAC,CAAA;QACtF,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAA;QAE/C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAA4B,EAAE;YAChD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;YAClC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAA;QAC1C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC;SACD,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE;QACvB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,cAAc,KAAK,CAAC,IAAI,iBAAiB,CAAA;QAClD,CAAC;QAED,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,OAAO;iBACX,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;iBAC5D,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,CAAC;QAED,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE;YAC3B,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;YAC9B,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAA;QAC7C,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAA;IACf,CAAC,CAAC,CAAA;AACN,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAA;IACrD,MAAM,GAAG,GAAI,GAA+B,CAAC,yBAAyB,CAAC,CAAA;IACvE,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACrD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;IACvE,MAAM,SAAS,GAAG,GAAiC,CAAA;IACnD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAA;IAC/B,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,UAAU;QACvC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC,CAAC,WAAW,CAAC,GAA8B,CAAC,CAAA;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AAC7B,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW,CAAC,GAA4B;IAC/C,IAAI,CAAC,CAAC,yBAAyB,IAAI,GAAG,CAAC;QAAE,OAAO,GAAG,CAAA;IACnD,MAAM,EAAE,CAAC,yBAAyB,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAA;IACvD,KAAK,CAAC,CAAA;IACN,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -1,157 +0,0 @@
1
- import type { AiMessage, ToolCall } from './types.js';
2
- /**
3
- * Discriminator for the kind of pause a snapshot represents. Determines
4
- * what payload `Agent.resumeAsTool` expects on continuation:
5
- *
6
- * - `'client_tool'` — resume must carry one tool-result per id in
7
- * `pendingToolCallIds`. This is the original v1.4 behaviour and the
8
- * default when the field is absent.
9
- * - `'approval'` — resume must carry `approvedToolCallIds` and/or
10
- * `rejectedToolCallIds` covering the single id in `pendingToolCallIds`
11
- * (the inner approval-gated tool call).
12
- */
13
- export type SubAgentPauseKind = 'client_tool' | 'approval';
14
- /**
15
- * Snapshot of a paused sub-agent run, persisted between an
16
- * {@link Agent.asTool} pause and an {@link Agent.resumeAsTool} resume.
17
- *
18
- * The shape is intentionally simple — `messages` is the full inner
19
- * conversation up to the pause point (system prompt + user input +
20
- * every interleaved tool result), so resume only needs to append the
21
- * incoming client-tool results (or inject approval decisions) and
22
- * re-enter the loop in `messages` mode.
23
- */
24
- export interface SubAgentRunSnapshot {
25
- /** Inner-agent message history at suspend time. */
26
- messages: AiMessage[];
27
- /**
28
- * Tool-call ids the sub-agent is waiting on.
29
- *
30
- * - `pauseKind === 'client_tool'` (default): one entry per client tool
31
- * the inner loop surfaced; resume appends one result per id.
32
- * - `pauseKind === 'approval'`: a single entry for the approval-gated
33
- * tool call; resume injects the id into `approvedToolCallIds`
34
- * (or `rejectedToolCallIds`).
35
- */
36
- pendingToolCallIds: string[];
37
- /** Total steps the inner agent has executed across all suspends so far. */
38
- stepsSoFar: number;
39
- /** Total prompt+completion tokens accumulated across all suspends. */
40
- tokensSoFar: number;
41
- /**
42
- * Discriminator for the resume contract. Defaults to `'client_tool'`
43
- * when absent so older v1.4 snapshots remain readable on disk/redis
44
- * after the host upgrades to a version that knows about approval pauses.
45
- */
46
- pauseKind?: SubAgentPauseKind;
47
- /**
48
- * Approval pauses only. The full pending tool-call payload (name + args
49
- * + id) so a renderer can show "approve `delete_user(id=42)`?" without
50
- * round-tripping back to the inner agent. Mirrors the structure of
51
- * `AgentResponse.pendingApprovalToolCall`.
52
- */
53
- pendingApprovalToolCall?: {
54
- toolCall: ToolCall;
55
- isClientTool: boolean;
56
- };
57
- /**
58
- * Opaque metadata the host can pass through. The framework treats
59
- * this as JSON and never reads it — useful for hosts that need to
60
- * rehydrate context (e.g. `{ resourceSlug, recordId, fieldScope, userId }`)
61
- * around the resume call.
62
- */
63
- meta?: unknown;
64
- }
65
- /**
66
- * Pluggable persistence backend for paused sub-agent runs. The framework
67
- * ships two reference implementations:
68
- *
69
- * - {@link InMemorySubAgentRunStore} — a `Map`-backed store. Single-process
70
- * only; fine for unit tests and small dev setups, lossy across worker
71
- * processes and restarts.
72
- * - {@link CachedSubAgentRunStore} — lazy adapter on top of `@rudderjs/cache`.
73
- * Cross-process / cross-restart when the cache is configured with redis
74
- * or any non-memory driver.
75
- *
76
- * Hosts may implement their own (Redis directly, Prisma, etc.) by
77
- * satisfying this interface.
78
- */
79
- export interface SubAgentRunStore {
80
- /** Persist a snapshot under `subRunId`. Implementations MAY apply a TTL. */
81
- store(subRunId: string, snapshot: SubAgentRunSnapshot): Promise<void>;
82
- /**
83
- * Atomic read + delete. Returns `null` if the id is unknown or the
84
- * snapshot has expired. Single-use semantics matter: a forged or
85
- * replayed `subRunId` must not return data twice.
86
- */
87
- consume(subRunId: string): Promise<SubAgentRunSnapshot | null>;
88
- /**
89
- * Non-destructive read. Returns the snapshot without deleting it, or
90
- * `null` if the id is unknown or the snapshot has expired. Optional —
91
- * for hosts that need a **validate-then-resume** pre-flight: inspect a
92
- * paused snapshot's `meta` (ownership, resource-context, tool-result
93
- * coverage) before handing the id to {@link Agent.resumeAsTool} /
94
- * {@link Agent.resumeManyAsTool}, which own the single {@link consume}.
95
- * The resume paths never call this — so a `load` then resume reads the
96
- * snapshot once for validation and consumes it once on resume, with no
97
- * `consume` then re-`store` round-trip. Mirrors {@link AgentRunStore.load}.
98
- */
99
- load?(subRunId: string): Promise<SubAgentRunSnapshot | null>;
100
- }
101
- /**
102
- * `Map`-backed implementation suitable for tests and single-process dev.
103
- * Loses state across restarts and worker processes — for any multi-worker
104
- * deployment, use {@link CachedSubAgentRunStore} or a custom backend.
105
- */
106
- export declare class InMemorySubAgentRunStore implements SubAgentRunStore {
107
- private readonly snapshots;
108
- store(subRunId: string, snapshot: SubAgentRunSnapshot): Promise<void>;
109
- consume(subRunId: string): Promise<SubAgentRunSnapshot | null>;
110
- load(subRunId: string): Promise<SubAgentRunSnapshot | null>;
111
- /** Test helper — clears all snapshots without consuming. */
112
- clear(): void;
113
- }
114
- /**
115
- * Minimal structural shape of a cache adapter (the methods this store
116
- * touches). Mirrors `@rudderjs/cache`'s `CacheAdapter` so the dep stays
117
- * structural — the framework's main entry stays runtime-agnostic.
118
- */
119
- interface CacheStoreLike {
120
- get<T = unknown>(key: string): Promise<T | null>;
121
- set(key: string, value: unknown, ttlSeconds?: number): Promise<void>;
122
- forget(key: string): Promise<void>;
123
- }
124
- export interface CachedSubAgentRunStoreOptions {
125
- /**
126
- * Cache adapter to use. When omitted, the registry tries to load
127
- * `@rudderjs/cache` lazily and falls back to the registered global
128
- * adapter (`CacheRegistry.get()`); throws if neither resolves.
129
- */
130
- cache?: CacheStoreLike;
131
- /** Key namespace prefix. Default `'rudderjs:ai:sub-agent-run:'`. */
132
- keyPrefix?: string;
133
- /** Time-to-live in seconds. Default 5 minutes. */
134
- ttlSeconds?: number;
135
- }
136
- /**
137
- * Sub-agent run store backed by `@rudderjs/cache`. Loads the cache
138
- * adapter lazily so `@rudderjs/ai`'s main entry stays runtime-agnostic
139
- * (no static import on the cache package).
140
- *
141
- * Default TTL is 5 minutes — long enough for a browser to round-trip a
142
- * few client tool calls, short enough that abandoned runs garbage-collect
143
- * promptly and the storage bill stays bounded.
144
- */
145
- export declare class CachedSubAgentRunStore implements SubAgentRunStore {
146
- private readonly explicitCache?;
147
- private readonly keyPrefix;
148
- private readonly ttlSeconds;
149
- private resolvedCache?;
150
- constructor(opts?: CachedSubAgentRunStoreOptions);
151
- private getCache;
152
- store(subRunId: string, snapshot: SubAgentRunSnapshot): Promise<void>;
153
- consume(subRunId: string): Promise<SubAgentRunSnapshot | null>;
154
- load(subRunId: string): Promise<SubAgentRunSnapshot | null>;
155
- }
156
- export {};
157
- //# sourceMappingURL=sub-agent-run-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sub-agent-run-store.d.ts","sourceRoot":"","sources":["../src/sub-agent-run-store.ts"],"names":[],"mappings":"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"}
@@ -1,87 +0,0 @@
1
- // ─── In-memory ─────────────────────────────────────────────
2
- /**
3
- * `Map`-backed implementation suitable for tests and single-process dev.
4
- * Loses state across restarts and worker processes — for any multi-worker
5
- * deployment, use {@link CachedSubAgentRunStore} or a custom backend.
6
- */
7
- export class InMemorySubAgentRunStore {
8
- snapshots = new Map();
9
- async store(subRunId, snapshot) {
10
- this.snapshots.set(subRunId, snapshot);
11
- }
12
- async consume(subRunId) {
13
- const snapshot = this.snapshots.get(subRunId);
14
- if (!snapshot)
15
- return null;
16
- this.snapshots.delete(subRunId);
17
- return snapshot;
18
- }
19
- async load(subRunId) {
20
- return this.snapshots.get(subRunId) ?? null;
21
- }
22
- /** Test helper — clears all snapshots without consuming. */
23
- clear() {
24
- this.snapshots.clear();
25
- }
26
- }
27
- /**
28
- * Sub-agent run store backed by `@rudderjs/cache`. Loads the cache
29
- * adapter lazily so `@rudderjs/ai`'s main entry stays runtime-agnostic
30
- * (no static import on the cache package).
31
- *
32
- * Default TTL is 5 minutes — long enough for a browser to round-trip a
33
- * few client tool calls, short enough that abandoned runs garbage-collect
34
- * promptly and the storage bill stays bounded.
35
- */
36
- export class CachedSubAgentRunStore {
37
- explicitCache;
38
- keyPrefix;
39
- ttlSeconds;
40
- resolvedCache;
41
- constructor(opts = {}) {
42
- if (opts.cache)
43
- this.explicitCache = opts.cache;
44
- this.keyPrefix = opts.keyPrefix ?? 'rudderjs:ai:sub-agent-run:';
45
- this.ttlSeconds = opts.ttlSeconds ?? 5 * 60;
46
- }
47
- async getCache() {
48
- if (this.resolvedCache)
49
- return this.resolvedCache;
50
- if (this.explicitCache) {
51
- this.resolvedCache = this.explicitCache;
52
- return this.resolvedCache;
53
- }
54
- // Lazy-import @rudderjs/cache and ask the registry for the active
55
- // adapter. This keeps the static import surface zero — the import
56
- // only fires when the host actually opts into suspendable sub-agents.
57
- // We dodge static module-resolution by using an indirected specifier
58
- // so `@rudderjs/cache` doesn't need to be a declared dep of
59
- // `@rudderjs/ai` (it stays an optional runtime peer).
60
- const cacheSpecifier = '@rudderjs/cache';
61
- const mod = await import(/* @vite-ignore */ cacheSpecifier);
62
- const adapter = mod.CacheRegistry?.get?.();
63
- if (!adapter) {
64
- throw new Error('[Rudder AI] CachedSubAgentRunStore needs a cache adapter. Install `@rudderjs/cache`, register a driver, or pass `{ cache }` explicitly.');
65
- }
66
- this.resolvedCache = adapter;
67
- return adapter;
68
- }
69
- async store(subRunId, snapshot) {
70
- const cache = await this.getCache();
71
- await cache.set(this.keyPrefix + subRunId, snapshot, this.ttlSeconds);
72
- }
73
- async consume(subRunId) {
74
- const cache = await this.getCache();
75
- const key = this.keyPrefix + subRunId;
76
- const snapshot = await cache.get(key);
77
- if (!snapshot)
78
- return null;
79
- await cache.forget(key);
80
- return snapshot;
81
- }
82
- async load(subRunId) {
83
- const cache = await this.getCache();
84
- return cache.get(this.keyPrefix + subRunId);
85
- }
86
- }
87
- //# sourceMappingURL=sub-agent-run-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sub-agent-run-store.js","sourceRoot":"","sources":["../src/sub-agent-run-store.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import type { LoopContext } from './agent.js';
2
- import type { AiMessage, StreamChunk, ToolCall, ToolResult } from './types.js';
3
- /**
4
- * Execute the tool phase for a single agent step. Yields the same
5
- * `StreamChunk` sequence (`tool-call` → `tool-update*` → `tool-result`) that
6
- * the streaming caller surfaces to consumers. Non-streaming callers iterate
7
- * via `.next()` and discard yields — the side effects (message pushes,
8
- * pending-state mutations on `loopCtx`) are identical regardless of whether
9
- * the chunks reach a consumer.
10
- *
11
- * Returns the step's `ToolResult[]`. The caller passes the assistant message
12
- * to push before iteration so the AgentStep shape (response.message) and the
13
- * final `messages` array stay in sync with the loop variant.
14
- */
15
- export declare function executeToolPhase(loopCtx: LoopContext, toolCalls: ToolCall[], assistantMessage: AiMessage): AsyncGenerator<StreamChunk, ToolResult[], void>;
16
- //# sourceMappingURL=tool-execution.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../src/tool-execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAkB7C,OAAO,KAAK,EAAE,SAAS,EAAW,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvF;;;;;;;;;;;GAWG;AACH,wBAAuB,gBAAgB,CACrC,OAAO,EAAW,WAAW,EAC7B,SAAS,EAAS,QAAQ,EAAE,EAC5B,gBAAgB,EAAE,SAAS,GAC1B,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,IAAI,CAAC,CA8BjD"}