@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
package/dist/facade.js DELETED
@@ -1,146 +0,0 @@
1
- import { AiRegistry, _onAiRegistryReset } from './registry.js';
2
- import { agent as agentHelper } from './agent.js';
3
- import { ImageGenerator } from './image.js';
4
- import { AudioGenerator } from './audio.js';
5
- import { Transcription } from './transcription.js';
6
- import { Reranker } from './rerank.js';
7
- import { FileManager } from './files.js';
8
- import { CachedEmbeddingAdapter } from './cached-embedding.js';
9
- /**
10
- * AI facade — static entry point for quick prompts, embeddings, and image generation.
11
- *
12
- * @example
13
- * const response = await AI.prompt('Hello')
14
- * const a = AI.agent('You are helpful.')
15
- * const result = await AI.embed('Some text')
16
- * const image = await AI.image('A sunset').generate()
17
- */
18
- export class AI {
19
- /** Quick prompt with default model */
20
- static async prompt(input, options) {
21
- const opts = {
22
- instructions: 'You are a helpful assistant.',
23
- };
24
- if (options?.model)
25
- opts.model = options.model;
26
- return agentHelper(opts).prompt(input);
27
- }
28
- /** Create an anonymous agent */
29
- static agent(instructionsOrOptions) {
30
- return agentHelper(instructionsOrOptions);
31
- }
32
- /** Create an image generator with a fluent API */
33
- static image(prompt) {
34
- return ImageGenerator.of(prompt);
35
- }
36
- /** Create a text-to-speech audio generator */
37
- static audio(text) {
38
- return AudioGenerator.of(text);
39
- }
40
- /**
41
- * Create a speech-to-text transcription from raw audio bytes.
42
- *
43
- * For Node-only path-based loading, use `transcribeFromPath` from `@rudderjs/ai/node`.
44
- */
45
- static transcribe(bytes) {
46
- return Transcription.fromBytes(bytes);
47
- }
48
- static rerank(query, documents, options) {
49
- const builder = Reranker.of(query, documents);
50
- if (!options)
51
- return builder;
52
- if (options.model)
53
- builder.model(options.model);
54
- if (options.topK)
55
- builder.topK(options.topK);
56
- return builder.rank();
57
- }
58
- /**
59
- * Get a file manager for a provider.
60
- *
61
- * @example
62
- * const files = AI.files('openai')
63
- * const uploaded = await files.upload('./report.pdf', { purpose: 'assistants' })
64
- * const list = await files.list()
65
- * await files.delete(uploaded.id)
66
- */
67
- static files(provider) {
68
- const providerName = provider ?? AiRegistry.parseModelString(AiRegistry.getDefault())[0];
69
- return FileManager.for(providerName);
70
- }
71
- /**
72
- * Generate embeddings for text.
73
- *
74
- * Large arrays (100+ items) are automatically chunked into batches.
75
- * Pass `cache: true` to enable in-memory caching of embeddings.
76
- *
77
- * @example
78
- * const result = await AI.embed('Hello world')
79
- * const result = await AI.embed(['text1', 'text2'])
80
- * const result = await AI.embed('text', { model: 'openai/text-embedding-3-small' })
81
- * const result = await AI.embed('text', { cache: true })
82
- */
83
- static async embed(input, options) {
84
- const modelString = options?.model ?? AiRegistry.getDefault();
85
- const [providerName, modelId] = AiRegistry.parseModelString(modelString);
86
- const factory = AiRegistry.getFactory(providerName);
87
- if (!factory.createEmbedding) {
88
- throw new Error(`[Rudder AI] Provider "${providerName}" does not support embeddings. ` +
89
- `Use a provider that implements createEmbedding() (e.g. openai, google, mistral).`);
90
- }
91
- let adapter;
92
- if (options?.cache) {
93
- adapter = AI.getCachedAdapter(providerName, modelId, () => factory.createEmbedding(modelId));
94
- }
95
- else {
96
- adapter = factory.createEmbedding(modelId);
97
- }
98
- // Batch chunking for large arrays
99
- const inputs = Array.isArray(input) ? input : [input];
100
- if (inputs.length > 100) {
101
- const batches = [];
102
- for (let i = 0; i < inputs.length; i += 100) {
103
- batches.push(inputs.slice(i, i + 100));
104
- }
105
- const results = [];
106
- for (const batch of batches) {
107
- results.push(await adapter.embed(batch, modelId));
108
- }
109
- return {
110
- embeddings: results.flatMap(r => r.embeddings),
111
- usage: {
112
- promptTokens: results.reduce((sum, r) => sum + r.usage.promptTokens, 0),
113
- totalTokens: results.reduce((sum, r) => sum + r.usage.totalTokens, 0),
114
- },
115
- };
116
- }
117
- return adapter.embed(inputs.length === 1 ? inputs[0] : inputs, modelId);
118
- }
119
- /**
120
- * Cache `CachedEmbeddingAdapter` instances keyed by `<provider>::<model>` so
121
- * the in-memory cache persists across `AI.embed(..., { cache: true })` calls.
122
- *
123
- * The earlier `WeakMap<EmbeddingAdapter, CachedEmbeddingAdapter>` keyed on
124
- * adapter identity, but every `embed()` call constructed a fresh inner
125
- * adapter via `factory.createEmbedding(modelId)` — so the WeakMap lookup
126
- * always missed and `{ cache: true }` was a silent no-op. Keying by
127
- * `(provider, model)` is the only stable identity we have at this layer.
128
- *
129
- * Tied to `AiRegistry.reset()` so tests that swap fakes between resets
130
- * don't bind to a stale inner adapter.
131
- */
132
- static cachedAdapters = new Map();
133
- static getCachedAdapter(provider, model, create) {
134
- const key = `${provider}::${model}`;
135
- let cached = AI.cachedAdapters.get(key);
136
- if (!cached) {
137
- cached = new CachedEmbeddingAdapter(create());
138
- AI.cachedAdapters.set(key, cached);
139
- }
140
- return cached;
141
- }
142
- /** @internal — exposed for the reset-listener subscription below. */
143
- static _clearEmbeddingCache() { AI.cachedAdapters.clear(); }
144
- }
145
- _onAiRegistryReset(() => AI._clearEmbeddingCache());
146
- //# sourceMappingURL=facade.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"facade.js","sourceRoot":"","sources":["../src/facade.ts"],"names":[],"mappings":"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"}
package/dist/fake.d.ts DELETED
@@ -1,201 +0,0 @@
1
- import type { ProviderRequestOptions, ImageGenerationOptions, TextToSpeechOptions, SpeechToTextOptions, RerankingOptions, RerankingResult, FileUploadResult, ToolCall, FinishReason, TokenUsage } from './types.js';
2
- /**
3
- * One scripted provider response in a multi-step agent loop.
4
- *
5
- * Pass an array of these to {@link AiFake.respondWithSequence} to script a
6
- * multi-turn run end-to-end (e.g. step 0 returns tool calls, step 1 returns
7
- * the final assistant text). Step indices are 0-based and align 1:1 with
8
- * provider `generate`/`stream` calls.
9
- *
10
- * - `text` — assistant message content (default: empty string)
11
- * - `toolCalls` — present when the assistant wants to call tools; the loop
12
- * will execute them and feed results into the next step
13
- * - `finishReason` — defaults to `'tool_calls'` when `toolCalls` is set,
14
- * otherwise `'stop'`
15
- */
16
- export interface AiFakeStep {
17
- text?: string;
18
- toolCalls?: ToolCall[];
19
- finishReason?: FinishReason;
20
- /**
21
- * Token usage to surface on the `'usage'` / `'finish'` chunks. Defaults
22
- * to all zeros — fine for most tests, but middlewares that depend on
23
- * realistic usage (e.g. budget enforcement) need this set.
24
- */
25
- usage?: TokenUsage;
26
- }
27
- /**
28
- * Testing fake for @rudderjs/ai.
29
- *
30
- * @example Single-response shorthand
31
- * const fake = AiFake.fake()
32
- * fake.respondWith('Mocked response')
33
- *
34
- * const response = await AI.prompt('Hello')
35
- * assert.strictEqual(response.text, 'Mocked response')
36
- *
37
- * fake.assertPrompted(input => input.includes('Hello'))
38
- * fake.restore()
39
- *
40
- * @example Multi-step sequence
41
- * const fake = AiFake.fake()
42
- * fake.respondWithSequence([
43
- * { toolCalls: [{ id: 't1', name: 'lookup', arguments: { q: 'a' } }] },
44
- * { text: 'Done.' },
45
- * ])
46
- *
47
- * @example Forced failure
48
- * const fake = AiFake.fake()
49
- * fake.failOnStep(0, new Error('Rate limited'))
50
- * // first provider call throws; useful for testing onError middleware
51
- */
52
- export declare class AiFake {
53
- private readonly calls;
54
- private readonly imageCalls;
55
- private readonly ttsCalls;
56
- private readonly sttCalls;
57
- private readonly embedCalls;
58
- private readonly rerankCalls;
59
- private readonly fileCalls;
60
- private _response;
61
- private _sequence;
62
- private readonly _failures;
63
- private _preventStray;
64
- private _imageResponse;
65
- private _ttsResponse;
66
- private _sttResponse;
67
- private _embedResponse;
68
- private _rerankResponse;
69
- private _fileUploadResponse;
70
- /** Set the text response the fake will return */
71
- respondWith(text: string): void;
72
- /**
73
- * Strict mode — throw when the agent makes a prompt the fake doesn't have a
74
- * scripted response for.
75
- *
76
- * Without this, an unscripted prompt silently falls back to the ambient
77
- * `respondWith` default (`'fake response'` if untouched). That behavior
78
- * makes tests pass even when they accidentally trigger an extra prompt the
79
- * test never asserted on.
80
- *
81
- * Under strict mode, only entries from {@link respondWithSequence} count
82
- * as valid responses; the ambient `respondWith` default is **not used**.
83
- * Force a single-step script via `respondWithSequence([{ text: '...' }])`
84
- * if you need an exact-one-prompt test that still returns content.
85
- *
86
- * @example
87
- * const fake = AiFake.fake().preventStrayPrompts()
88
- * fake.respondWithSequence([{ text: 'expected reply' }])
89
- *
90
- * await new ChatAgent().prompt('hello') // OK
91
- * await new ChatAgent().prompt('again') // throws — no second script entry
92
- */
93
- preventStrayPrompts(): this;
94
- /**
95
- * Script a multi-step provider response. Each entry in `steps` corresponds
96
- * to one provider call (the Nth `generate`/`stream` invocation consumes
97
- * `steps[N]`). When the sequence is exhausted, subsequent calls fall back
98
- * to {@link respondWith} (default: `'fake response'`).
99
- *
100
- * Pair with `tools` on an agent to drive a complete tool-call loop:
101
- * step 0 emits `toolCalls`, step 1 returns the final assistant text.
102
- *
103
- * Calling this resets the sequence and the provider-call counter so
104
- * scripted step indices are relative to this call. Registered failures
105
- * (see {@link failOnStep}) are left intact, so the order in which you
106
- * call `respondWithSequence` and `failOnStep` does not matter.
107
- */
108
- respondWithSequence(steps: AiFakeStep[]): void;
109
- /**
110
- * Force the Nth provider call to throw. Useful for testing failover
111
- * (paired with multiple registered factories), error middleware, and
112
- * `onError` hooks without a real network failure.
113
- *
114
- * The step index is 0-based and counts every `generate`/`stream` call
115
- * the fake adapter receives. Failures take precedence over any scripted
116
- * sequence at the same index — the sequence step is NOT consumed.
117
- */
118
- failOnStep(stepIndex: number, error: Error): void;
119
- /** Set the base64 image the fake will return */
120
- respondWithImage(base64: string): void;
121
- /** Set the audio buffer the TTS fake will return */
122
- respondWithAudio(audio: Buffer): void;
123
- /** Set the transcription text the STT fake will return */
124
- respondWithTranscription(text: string): void;
125
- /** Set the embeddings the fake will return */
126
- respondWithEmbedding(embeddings: number[][]): void;
127
- /** Set the reranking results the fake will return */
128
- respondWithRanking(results: RerankingResult['results']): void;
129
- /** Set the file upload result the fake will return */
130
- respondWithFileUpload(result: FileUploadResult): void;
131
- /**
132
- * Stub a `fileSearch` interaction. The hosted-OpenAI path runs the
133
- * search server-side and the result lands in the assistant message —
134
- * no agent-loop tool round-trip — so the simplest fake is a single
135
- * scripted response carrying the synthesized text.
136
- *
137
- * Pass `hits` to auto-format the text or pass `text` to control the
138
- * exact assistant reply. `usage` flows through to budget middleware.
139
- *
140
- * @example
141
- * fake.respondWithFileSearchResults({ text: 'The policy expires in 2027.' })
142
- *
143
- * @example
144
- * fake.respondWithFileSearchResults({
145
- * hits: [
146
- * { text: 'Policies are reviewed annually.', source: 'policy.pdf', score: 0.92 },
147
- * { text: 'The renewal date is March 1st.', source: 'renewal.pdf', score: 0.88 },
148
- * ],
149
- * })
150
- */
151
- respondWithFileSearchResults(opts: {
152
- text?: string;
153
- hits?: Array<{
154
- text: string;
155
- source?: string;
156
- score?: number;
157
- }>;
158
- usage?: TokenUsage;
159
- }): void;
160
- /** Install the fake — replaces all registered providers with a mock */
161
- static fake(): AiFake;
162
- /** Assert at least one prompt was sent, optionally matching a predicate */
163
- assertPrompted(predicate?: (input: string) => boolean): void;
164
- /** Assert no prompts were sent */
165
- assertNothingPrompted(): void;
166
- /** Assert at least one image generation was made */
167
- assertImageGenerated(predicate?: (prompt: string) => boolean): void;
168
- /** Assert at least one TTS generation was made */
169
- assertAudioGenerated(predicate?: (text: string) => boolean): void;
170
- /** Assert at least one transcription was made */
171
- assertTranscribed(predicate?: (opts: SpeechToTextOptions) => boolean): void;
172
- /** Get all recorded provider calls */
173
- getCalls(): ProviderRequestOptions[];
174
- /** Get all recorded image generation calls */
175
- getImageCalls(): ImageGenerationOptions[];
176
- /** Get all recorded TTS calls */
177
- getTtsCalls(): TextToSpeechOptions[];
178
- /** Get all recorded STT calls */
179
- getSttCalls(): SpeechToTextOptions[];
180
- /** Assert at least one embedding was made */
181
- assertEmbedded(predicate?: (input: string | string[]) => boolean): void;
182
- /** Assert at least one reranking was made */
183
- assertReranked(predicate?: (opts: RerankingOptions) => boolean): void;
184
- /** Get all recorded embedding calls */
185
- getEmbedCalls(): Array<{
186
- input: string | string[];
187
- model: string;
188
- }>;
189
- /** Get all recorded reranking calls */
190
- getRerankCalls(): RerankingOptions[];
191
- /** Assert at least one file upload was made */
192
- assertFileUploaded(predicate?: (filePath: string) => boolean): void;
193
- /** Get all recorded file operation calls */
194
- getFileCalls(): Array<{
195
- method: string;
196
- args: unknown;
197
- }>;
198
- /** Restore — clears the fake (user must re-register real providers) */
199
- restore(): void;
200
- }
201
- //# sourceMappingURL=fake.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fake.d.ts","sourceRoot":"","sources":["../src/fake.ts"],"names":[],"mappings":"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"}