@rudderjs/ai 1.17.3 → 1.18.1

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/fake.js DELETED
@@ -1,428 +0,0 @@
1
- import { AiRegistry } from './registry.js';
2
- /**
3
- * Testing fake for @rudderjs/ai.
4
- *
5
- * @example Single-response shorthand
6
- * const fake = AiFake.fake()
7
- * fake.respondWith('Mocked response')
8
- *
9
- * const response = await AI.prompt('Hello')
10
- * assert.strictEqual(response.text, 'Mocked response')
11
- *
12
- * fake.assertPrompted(input => input.includes('Hello'))
13
- * fake.restore()
14
- *
15
- * @example Multi-step sequence
16
- * const fake = AiFake.fake()
17
- * fake.respondWithSequence([
18
- * { toolCalls: [{ id: 't1', name: 'lookup', arguments: { q: 'a' } }] },
19
- * { text: 'Done.' },
20
- * ])
21
- *
22
- * @example Forced failure
23
- * const fake = AiFake.fake()
24
- * fake.failOnStep(0, new Error('Rate limited'))
25
- * // first provider call throws; useful for testing onError middleware
26
- */
27
- export class AiFake {
28
- calls = [];
29
- imageCalls = [];
30
- ttsCalls = [];
31
- sttCalls = [];
32
- embedCalls = [];
33
- rerankCalls = [];
34
- fileCalls = [];
35
- _response = 'fake response';
36
- _sequence = [];
37
- _failures = new Map();
38
- _preventStray = false;
39
- _imageResponse = 'ZmFrZS1pbWFnZQ=='; // base64 of 'fake-image'
40
- _ttsResponse = Buffer.from('fake-audio');
41
- _sttResponse = 'fake transcription';
42
- _embedResponse = [[0.1, 0.2, 0.3]];
43
- _rerankResponse = { results: [] };
44
- _fileUploadResponse = { id: 'fake-file-id', filename: 'fake.txt', bytes: 0 };
45
- /** Set the text response the fake will return */
46
- respondWith(text) {
47
- this._response = text;
48
- }
49
- /**
50
- * Strict mode — throw when the agent makes a prompt the fake doesn't have a
51
- * scripted response for.
52
- *
53
- * Without this, an unscripted prompt silently falls back to the ambient
54
- * `respondWith` default (`'fake response'` if untouched). That behavior
55
- * makes tests pass even when they accidentally trigger an extra prompt the
56
- * test never asserted on.
57
- *
58
- * Under strict mode, only entries from {@link respondWithSequence} count
59
- * as valid responses; the ambient `respondWith` default is **not used**.
60
- * Force a single-step script via `respondWithSequence([{ text: '...' }])`
61
- * if you need an exact-one-prompt test that still returns content.
62
- *
63
- * @example
64
- * const fake = AiFake.fake().preventStrayPrompts()
65
- * fake.respondWithSequence([{ text: 'expected reply' }])
66
- *
67
- * await new ChatAgent().prompt('hello') // OK
68
- * await new ChatAgent().prompt('again') // throws — no second script entry
69
- */
70
- preventStrayPrompts() {
71
- this._preventStray = true;
72
- return this;
73
- }
74
- /**
75
- * Script a multi-step provider response. Each entry in `steps` corresponds
76
- * to one provider call (the Nth `generate`/`stream` invocation consumes
77
- * `steps[N]`). When the sequence is exhausted, subsequent calls fall back
78
- * to {@link respondWith} (default: `'fake response'`).
79
- *
80
- * Pair with `tools` on an agent to drive a complete tool-call loop:
81
- * step 0 emits `toolCalls`, step 1 returns the final assistant text.
82
- *
83
- * Calling this resets the sequence and the provider-call counter so
84
- * scripted step indices are relative to this call. Registered failures
85
- * (see {@link failOnStep}) are left intact, so the order in which you
86
- * call `respondWithSequence` and `failOnStep` does not matter.
87
- */
88
- respondWithSequence(steps) {
89
- this._sequence = [...steps];
90
- this.calls.length = 0;
91
- }
92
- /**
93
- * Force the Nth provider call to throw. Useful for testing failover
94
- * (paired with multiple registered factories), error middleware, and
95
- * `onError` hooks without a real network failure.
96
- *
97
- * The step index is 0-based and counts every `generate`/`stream` call
98
- * the fake adapter receives. Failures take precedence over any scripted
99
- * sequence at the same index — the sequence step is NOT consumed.
100
- */
101
- failOnStep(stepIndex, error) {
102
- this._failures.set(stepIndex, error);
103
- }
104
- /** Set the base64 image the fake will return */
105
- respondWithImage(base64) {
106
- this._imageResponse = base64;
107
- }
108
- /** Set the audio buffer the TTS fake will return */
109
- respondWithAudio(audio) {
110
- this._ttsResponse = audio;
111
- }
112
- /** Set the transcription text the STT fake will return */
113
- respondWithTranscription(text) {
114
- this._sttResponse = text;
115
- }
116
- /** Set the embeddings the fake will return */
117
- respondWithEmbedding(embeddings) {
118
- this._embedResponse = embeddings;
119
- }
120
- /** Set the reranking results the fake will return */
121
- respondWithRanking(results) {
122
- this._rerankResponse = { results };
123
- }
124
- /** Set the file upload result the fake will return */
125
- respondWithFileUpload(result) {
126
- this._fileUploadResponse = result;
127
- }
128
- /**
129
- * Stub a `fileSearch` interaction. The hosted-OpenAI path runs the
130
- * search server-side and the result lands in the assistant message —
131
- * no agent-loop tool round-trip — so the simplest fake is a single
132
- * scripted response carrying the synthesized text.
133
- *
134
- * Pass `hits` to auto-format the text or pass `text` to control the
135
- * exact assistant reply. `usage` flows through to budget middleware.
136
- *
137
- * @example
138
- * fake.respondWithFileSearchResults({ text: 'The policy expires in 2027.' })
139
- *
140
- * @example
141
- * fake.respondWithFileSearchResults({
142
- * hits: [
143
- * { text: 'Policies are reviewed annually.', source: 'policy.pdf', score: 0.92 },
144
- * { text: 'The renewal date is March 1st.', source: 'renewal.pdf', score: 0.88 },
145
- * ],
146
- * })
147
- */
148
- respondWithFileSearchResults(opts) {
149
- const text = opts.text ?? formatFileSearchHits(opts.hits ?? []);
150
- const step = { text };
151
- if (opts.usage)
152
- step.usage = opts.usage;
153
- this.respondWithSequence([step]);
154
- }
155
- /** Install the fake — replaces all registered providers with a mock */
156
- static fake() {
157
- const fake = new AiFake();
158
- const strayError = (stepIndex) => new Error(`[Rudder AI] Stray prompt: no scripted response at step ${stepIndex}. ` +
159
- `Add an entry via respondWithSequence([...]) or remove preventStrayPrompts().`);
160
- const adapter = {
161
- async generate(opts) {
162
- const stepIndex = fake.calls.length;
163
- fake.calls.push(opts);
164
- const failure = fake._failures.get(stepIndex);
165
- if (failure)
166
- throw failure;
167
- const next = fake._sequence[stepIndex];
168
- if (next) {
169
- return {
170
- message: {
171
- role: 'assistant',
172
- content: next.text ?? '',
173
- ...(next.toolCalls ? { toolCalls: next.toolCalls } : {}),
174
- },
175
- usage: next.usage ?? { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
176
- finishReason: next.finishReason ?? (next.toolCalls ? 'tool_calls' : 'stop'),
177
- };
178
- }
179
- if (fake._preventStray)
180
- throw strayError(stepIndex);
181
- return {
182
- message: { role: 'assistant', content: fake._response },
183
- usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
184
- finishReason: 'stop',
185
- };
186
- },
187
- async *stream(opts) {
188
- const stepIndex = fake.calls.length;
189
- fake.calls.push(opts);
190
- const failure = fake._failures.get(stepIndex);
191
- if (failure)
192
- throw failure;
193
- const next = fake._sequence[stepIndex];
194
- if (next) {
195
- if (next.text)
196
- yield { type: 'text-delta', text: next.text };
197
- if (next.toolCalls) {
198
- for (const tc of next.toolCalls)
199
- yield { type: 'tool-call', toolCall: tc };
200
- }
201
- yield {
202
- type: 'finish',
203
- finishReason: next.finishReason ?? (next.toolCalls ? 'tool_calls' : 'stop'),
204
- usage: next.usage ?? { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
205
- };
206
- return;
207
- }
208
- if (fake._preventStray)
209
- throw strayError(stepIndex);
210
- yield { type: 'text-delta', text: fake._response };
211
- yield { type: 'finish', finishReason: 'stop', usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 } };
212
- },
213
- };
214
- const imageAdapter = {
215
- async generate(opts) {
216
- fake.imageCalls.push(opts);
217
- return {
218
- images: [{ base64: fake._imageResponse }],
219
- model: opts.model ?? 'fake-image',
220
- };
221
- },
222
- };
223
- const ttsAdapter = {
224
- async generate(opts) {
225
- fake.ttsCalls.push(opts);
226
- return {
227
- audio: fake._ttsResponse,
228
- format: opts.format ?? 'mp3',
229
- model: opts.model ?? 'fake-tts',
230
- };
231
- },
232
- };
233
- const sttAdapter = {
234
- async transcribe(opts) {
235
- fake.sttCalls.push(opts);
236
- return {
237
- text: fake._sttResponse,
238
- language: opts.language,
239
- model: opts.model ?? 'fake-stt',
240
- };
241
- },
242
- };
243
- const embeddingAdapter = {
244
- async embed(input, model) {
245
- fake.embedCalls.push({ input, model });
246
- const inputs = Array.isArray(input) ? input : [input];
247
- const embeddings = inputs.map((_, i) => fake._embedResponse[i % fake._embedResponse.length]);
248
- return {
249
- embeddings,
250
- usage: { promptTokens: 0, totalTokens: 0 },
251
- };
252
- },
253
- };
254
- const rerankingAdapter = {
255
- async rerank(opts) {
256
- fake.rerankCalls.push(opts);
257
- return fake._rerankResponse;
258
- },
259
- };
260
- const fileAdapter = {
261
- async upload(opts) {
262
- fake.fileCalls.push({ method: 'upload', args: opts });
263
- return { ...fake._fileUploadResponse, filename: opts.filePath.split('/').pop() ?? fake._fileUploadResponse.filename };
264
- },
265
- async list() {
266
- fake.fileCalls.push({ method: 'list', args: {} });
267
- return { files: [fake._fileUploadResponse] };
268
- },
269
- async delete(fileId) {
270
- fake.fileCalls.push({ method: 'delete', args: fileId });
271
- },
272
- async retrieve(fileId) {
273
- fake.fileCalls.push({ method: 'retrieve', args: fileId });
274
- return { data: Buffer.from('fake-content'), mimeType: 'application/octet-stream' };
275
- },
276
- };
277
- const factory = {
278
- name: '__fake__',
279
- create: () => adapter,
280
- createEmbedding: () => embeddingAdapter,
281
- createImage: () => imageAdapter,
282
- createTts: () => ttsAdapter,
283
- createStt: () => sttAdapter,
284
- createReranking: () => rerankingAdapter,
285
- createFiles: () => fileAdapter,
286
- };
287
- AiRegistry.reset();
288
- AiRegistry.register(factory);
289
- AiRegistry.setDefault('__fake__/default');
290
- return fake;
291
- }
292
- /** Assert at least one prompt was sent, optionally matching a predicate */
293
- assertPrompted(predicate) {
294
- if (this.calls.length === 0)
295
- throw new Error('[Rudder AI] Expected at least one prompt, but none were sent.');
296
- if (predicate) {
297
- const match = this.calls.some(c => {
298
- const userMsg = c.messages.find(m => m.role === 'user');
299
- if (!userMsg)
300
- return false;
301
- const text = typeof userMsg.content === 'string' ? userMsg.content : userMsg.content.filter(p => p.type === 'text').map(p => p.text).join('');
302
- return predicate(text);
303
- });
304
- if (!match)
305
- throw new Error('[Rudder AI] No prompt matched the predicate.');
306
- }
307
- }
308
- /** Assert no prompts were sent */
309
- assertNothingPrompted() {
310
- if (this.calls.length > 0) {
311
- throw new Error(`[Rudder AI] Expected no prompts, but ${this.calls.length} were sent.`);
312
- }
313
- }
314
- /** Assert at least one image generation was made */
315
- assertImageGenerated(predicate) {
316
- if (this.imageCalls.length === 0)
317
- throw new Error('[Rudder AI] Expected at least one image generation, but none were made.');
318
- if (predicate) {
319
- const match = this.imageCalls.some(c => predicate(c.prompt));
320
- if (!match)
321
- throw new Error('[Rudder AI] No image generation matched the predicate.');
322
- }
323
- }
324
- /** Assert at least one TTS generation was made */
325
- assertAudioGenerated(predicate) {
326
- if (this.ttsCalls.length === 0)
327
- throw new Error('[Rudder AI] Expected at least one audio generation, but none were made.');
328
- if (predicate) {
329
- const match = this.ttsCalls.some(c => predicate(c.text));
330
- if (!match)
331
- throw new Error('[Rudder AI] No audio generation matched the predicate.');
332
- }
333
- }
334
- /** Assert at least one transcription was made */
335
- assertTranscribed(predicate) {
336
- if (this.sttCalls.length === 0)
337
- throw new Error('[Rudder AI] Expected at least one transcription, but none were made.');
338
- if (predicate) {
339
- const match = this.sttCalls.some(c => predicate(c));
340
- if (!match)
341
- throw new Error('[Rudder AI] No transcription matched the predicate.');
342
- }
343
- }
344
- /** Get all recorded provider calls */
345
- getCalls() {
346
- return [...this.calls];
347
- }
348
- /** Get all recorded image generation calls */
349
- getImageCalls() {
350
- return [...this.imageCalls];
351
- }
352
- /** Get all recorded TTS calls */
353
- getTtsCalls() {
354
- return [...this.ttsCalls];
355
- }
356
- /** Get all recorded STT calls */
357
- getSttCalls() {
358
- return [...this.sttCalls];
359
- }
360
- /** Assert at least one embedding was made */
361
- assertEmbedded(predicate) {
362
- if (this.embedCalls.length === 0)
363
- throw new Error('[Rudder AI] Expected at least one embedding, but none were made.');
364
- if (predicate) {
365
- const match = this.embedCalls.some(c => predicate(c.input));
366
- if (!match)
367
- throw new Error('[Rudder AI] No embedding matched the predicate.');
368
- }
369
- }
370
- /** Assert at least one reranking was made */
371
- assertReranked(predicate) {
372
- if (this.rerankCalls.length === 0)
373
- throw new Error('[Rudder AI] Expected at least one reranking, but none were made.');
374
- if (predicate) {
375
- const match = this.rerankCalls.some(c => predicate(c));
376
- if (!match)
377
- throw new Error('[Rudder AI] No reranking matched the predicate.');
378
- }
379
- }
380
- /** Get all recorded embedding calls */
381
- getEmbedCalls() {
382
- return [...this.embedCalls];
383
- }
384
- /** Get all recorded reranking calls */
385
- getRerankCalls() {
386
- return [...this.rerankCalls];
387
- }
388
- /** Assert at least one file upload was made */
389
- assertFileUploaded(predicate) {
390
- const uploads = this.fileCalls.filter(c => c.method === 'upload');
391
- if (uploads.length === 0)
392
- throw new Error('[Rudder AI] Expected at least one file upload, but none were made.');
393
- if (predicate) {
394
- const match = uploads.some(c => predicate(c.args.filePath));
395
- if (!match)
396
- throw new Error('[Rudder AI] No file upload matched the predicate.');
397
- }
398
- }
399
- /** Get all recorded file operation calls */
400
- getFileCalls() {
401
- return [...this.fileCalls];
402
- }
403
- /** Restore — clears the fake (user must re-register real providers) */
404
- restore() {
405
- AiRegistry.reset();
406
- }
407
- }
408
- /**
409
- * Render canned file-search hits into a prose assistant reply for
410
- * {@link AiFake.respondWithFileSearchResults}. Keeps tests readable
411
- * without each app having to ad-hoc its own formatter.
412
- */
413
- function formatFileSearchHits(hits) {
414
- if (hits.length === 0)
415
- return 'No relevant documents found.';
416
- return hits
417
- .map(h => {
418
- const parts = [];
419
- if (h.score !== undefined)
420
- parts.push(`(${h.score.toFixed(2)})`);
421
- parts.push(h.text);
422
- if (h.source)
423
- parts.push(`— ${h.source}`);
424
- return parts.join(' ');
425
- })
426
- .join('\n');
427
- }
428
- //# sourceMappingURL=fake.js.map
package/dist/fake.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"fake.js","sourceRoot":"","sources":["../src/fake.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAyD1C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,MAAM;IACA,KAAK,GAA6B,EAAE,CAAA;IACpC,UAAU,GAA6B,EAAE,CAAA;IACzC,QAAQ,GAA0B,EAAE,CAAA;IACpC,QAAQ,GAA0B,EAAE,CAAA;IACpC,UAAU,GAAuD,EAAE,CAAA;IACnE,WAAW,GAAuB,EAAE,CAAA;IACpC,SAAS,GAA6C,EAAE,CAAA;IACjE,SAAS,GAAG,eAAe,CAAA;IAC3B,SAAS,GAAiB,EAAE,CAAA;IACnB,SAAS,GAAG,IAAI,GAAG,EAAiB,CAAA;IAC7C,aAAa,GAAG,KAAK,CAAA;IACrB,cAAc,GAAG,kBAAkB,CAAA,CAAE,yBAAyB;IAC9D,YAAY,GAAW,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAChD,YAAY,GAAG,oBAAoB,CAAA;IACnC,cAAc,GAAe,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IAC9C,eAAe,GAAoB,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;IAClD,mBAAmB,GAAqB,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;IAEtG,iDAAiD;IACjD,WAAW,CAAC,IAAY;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACvB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,mBAAmB;QACjB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,KAAmB;QACrC,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;QAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAA;IACvB,CAAC;IAED;;;;;;;;OAQG;IACH,UAAU,CAAC,SAAiB,EAAE,KAAY;QACxC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACtC,CAAC;IAED,gDAAgD;IAChD,gBAAgB,CAAC,MAAc;QAC7B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAA;IAC9B,CAAC;IAED,oDAAoD;IACpD,gBAAgB,CAAC,KAAa;QAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;IAC3B,CAAC;IAED,0DAA0D;IAC1D,wBAAwB,CAAC,IAAY;QACnC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IAC1B,CAAC;IAED,8CAA8C;IAC9C,oBAAoB,CAAC,UAAsB;QACzC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAA;IAClC,CAAC;IAED,qDAAqD;IACrD,kBAAkB,CAAC,OAAmC;QACpD,IAAI,CAAC,eAAe,GAAG,EAAE,OAAO,EAAE,CAAA;IACpC,CAAC;IAED,sDAAsD;IACtD,qBAAqB,CAAC,MAAwB;QAC5C,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAA;IACnC,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,4BAA4B,CAAC,IAI5B;QACC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;QAC/D,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,CAAA;QACjC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACvC,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAClC,CAAC;IAED,uEAAuE;IACvE,MAAM,CAAC,IAAI;QACT,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAA;QAEzB,MAAM,UAAU,GAAG,CAAC,SAAiB,EAAS,EAAE,CAAC,IAAI,KAAK,CACxD,0DAA0D,SAAS,IAAI;YACvE,8EAA8E,CAC/E,CAAA;QAED,MAAM,OAAO,GAAoB;YAC/B,KAAK,CAAC,QAAQ,CAAC,IAA4B;gBACzC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;gBACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;gBAC7C,IAAI,OAAO;oBAAE,MAAM,OAAO,CAAA;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;gBACtC,IAAI,IAAI,EAAE,CAAC;oBACT,OAAO;wBACL,OAAO,EAAE;4BACP,IAAI,EAAE,WAAW;4BACjB,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;4BACxB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBACzD;wBACD,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;wBAC7E,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;qBAC5E,CAAA;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,aAAa;oBAAE,MAAM,UAAU,CAAC,SAAS,CAAC,CAAA;gBACnD,OAAO;oBACL,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE;oBACvD,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;oBAC/D,YAAY,EAAE,MAAM;iBACrB,CAAA;YACH,CAAC;YACD,KAAK,CAAC,CAAC,MAAM,CAAC,IAA4B;gBACxC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA;gBACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACrB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;gBAC7C,IAAI,OAAO;oBAAE,MAAM,OAAO,CAAA;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;gBACtC,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,IAAI,CAAC,IAAI;wBAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;oBAC5D,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBACnB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS;4BAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;oBAC5E,CAAC;oBACD,MAAM;wBACJ,IAAI,EAAE,QAAQ;wBACd,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;wBAC3E,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;qBAC9E,CAAA;oBACD,OAAM;gBACR,CAAC;gBACD,IAAI,IAAI,CAAC,aAAa;oBAAE,MAAM,UAAU,CAAC,SAAS,CAAC,CAAA;gBACnD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,CAAA;gBAClD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,CAAA;YACjH,CAAC;SACF,CAAA;QAED,MAAM,YAAY,GAA2B;YAC3C,KAAK,CAAC,QAAQ,CAAC,IAA4B;gBACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC1B,OAAO;oBACL,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;oBACzC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,YAAY;iBAClC,CAAA;YACH,CAAC;SACF,CAAA;QAED,MAAM,UAAU,GAAwB;YACtC,KAAK,CAAC,QAAQ,CAAC,IAAyB;gBACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACxB,OAAO;oBACL,KAAK,EAAE,IAAI,CAAC,YAAY;oBACxB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;oBAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,UAAU;iBAChC,CAAA;YACH,CAAC;SACF,CAAA;QAED,MAAM,UAAU,GAAwB;YACtC,KAAK,CAAC,UAAU,CAAC,IAAyB;gBACxC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACxB,OAAO;oBACL,IAAI,EAAE,IAAI,CAAC,YAAY;oBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,UAAU;iBAChC,CAAA;YACH,CAAC;SACF,CAAA;QAED,MAAM,gBAAgB,GAAqB;YACzC,KAAK,CAAC,KAAK,CAAC,KAAwB,EAAE,KAAa;gBACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;gBACtC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;gBACrD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAE,CAAC,CAAA;gBAC7F,OAAO;oBACL,UAAU;oBACV,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;iBAC3C,CAAA;YACH,CAAC;SACF,CAAA;QAED,MAAM,gBAAgB,GAAqB;YACzC,KAAK,CAAC,MAAM,CAAC,IAAsB;gBACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC3B,OAAO,IAAI,CAAC,eAAe,CAAA;YAC7B,CAAC;SACF,CAAA;QAED,MAAM,WAAW,GAAgB;YAC/B,KAAK,CAAC,MAAM,CAAC,IAAuB;gBAClC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;gBACrD,OAAO,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAA;YACvH,CAAC;YACD,KAAK,CAAC,IAAI;gBACR,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;gBACjD,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAA;YAC9C,CAAC;YACD,KAAK,CAAC,MAAM,CAAC,MAAc;gBACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;YACzD,CAAC;YACD,KAAK,CAAC,QAAQ,CAAC,MAAc;gBAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;gBACzD,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,0BAA0B,EAAE,CAAA;YACpF,CAAC;SACF,CAAA;QAED,MAAM,OAAO,GAAoB;YAC/B,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO;YACrB,eAAe,EAAE,GAAG,EAAE,CAAC,gBAAgB;YACvC,WAAW,EAAE,GAAG,EAAE,CAAC,YAAY;YAC/B,SAAS,EAAE,GAAG,EAAE,CAAC,UAAU;YAC3B,SAAS,EAAE,GAAG,EAAE,CAAC,UAAU;YAC3B,eAAe,EAAE,GAAG,EAAE,CAAC,gBAAgB;YACvC,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW;SAC/B,CAAA;QAED,UAAU,CAAC,KAAK,EAAE,CAAA;QAClB,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC5B,UAAU,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAA;QACzC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,2EAA2E;IAC3E,cAAc,CAAC,SAAsC;QACnD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAA;QAC7G,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAChC,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;gBACvD,IAAI,CAAC,OAAO;oBAAE,OAAO,KAAK,CAAA;gBAC1B,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAsB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACnK,OAAO,SAAS,CAAC,IAAI,CAAC,CAAA;YACxB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QAC7E,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,qBAAqB;QACnB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,CAAC,KAAK,CAAC,MAAM,aAAa,CAAC,CAAA;QACzF,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,oBAAoB,CAAC,SAAuC;QAC1D,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAA;QAC5H,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;YAC5D,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;QACvF,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,oBAAoB,CAAC,SAAqC;QACxD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAA;QAC1H,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;YACxD,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;QACvF,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,iBAAiB,CAAC,SAAkD;QAClE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAA;QACvH,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;YACnD,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;QACpF,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IAED,8CAA8C;IAC9C,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;IAC7B,CAAC;IAED,iCAAiC;IACjC,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC3B,CAAC;IAED,iCAAiC;IACjC,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC3B,CAAC;IAED,6CAA6C;IAC7C,cAAc,CAAC,SAAiD;QAC9D,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;QACrH,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;YAC3D,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;QAChF,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,cAAc,CAAC,SAA+C;QAC5D,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;QACtH,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;YACtD,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;QAChF,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,aAAa;QACX,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;IAC7B,CAAC;IAED,uCAAuC;IACvC,cAAc;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAA;IAC9B,CAAC;IAED,+CAA+C;IAC/C,kBAAkB,CAAC,SAAyC;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAA;QACjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;QAC/G,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAE,CAAC,CAAC,IAA0B,CAAC,QAAQ,CAAC,CAAC,CAAA;YAClF,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;QAClF,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,YAAY;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;IAC5B,CAAC;IAED,uEAAuE;IACvE,OAAO;QACL,UAAU,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;CACF;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAC3B,IAA8D;IAE9D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,8BAA8B,CAAA;IAC5D,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,CAAC,EAAE;QACP,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAChE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAClB,IAAI,CAAC,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QACzC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC"}
@@ -1,168 +0,0 @@
1
- /**
2
- * `fileSearch({ stores, where?, maxResults?, name?, description? })` — agent
3
- * tool factory for hosted vector-store retrieval (#B8 Phase 2).
4
- *
5
- * Wraps OpenAI's native `file_search` tool. The tool object is tagged with
6
- * `providerHint: { type: 'file-search', ... }`; the OpenAI adapter's
7
- * `toOpenAITools` recognizes the hint and emits the native
8
- * `{ type: 'file_search', vector_store_ids, filters, max_num_results }`
9
- * block instead of a generic function-call shape. The model runs the search
10
- * server-side and the results land in the assistant message — no agent-loop
11
- * tool round-trip on the hosted path.
12
- *
13
- * # Hosted on OpenAI today
14
- *
15
- * Other providers see the tool as a regular function-call tool with the
16
- * placeholder `{ query: string }` schema — without an `execute` they pause
17
- * for client tools, which is degraded. Phase 3 will add a `fallback` opt
18
- * that installs an `execute` delegating to `similaritySearch` over a local
19
- * pgvector model.
20
- *
21
- * # Wiring
22
- *
23
- * ```ts
24
- * import { Agent, fileSearch, VectorStores } from '@rudderjs/ai'
25
- *
26
- * const kb = await VectorStores.get('vs_abc123')
27
- *
28
- * class SupportAgent extends Agent {
29
- * model() { return 'openai/gpt-4o' }
30
- * tools() {
31
- * return [
32
- * fileSearch({
33
- * stores: [kb.id],
34
- * where: { author: 'Alice', year: 2026 },
35
- * maxResults: 10,
36
- * }),
37
- * ]
38
- * }
39
- * }
40
- * ```
41
- *
42
- * # Metadata filter sugar
43
- *
44
- * `where: { author: 'Alice', year: 2026 }` is shorthand for the typed
45
- * OpenAI filter shape `{ type: 'and', filters: [{ type: 'eq', key: 'author',
46
- * value: 'Alice' }, { type: 'eq', key: 'year', value: 2026 }] }`. Either
47
- * shape works — pass the typed object form for `gt` / `lt` / `or`.
48
- */
49
- import type { SimilaritySearchOptions } from './similarity-search.js';
50
- import type { Tool, ToolDefinitionOptions, ToolDefinitionSchema } from './types.js';
51
- /**
52
- * Symbol-tagged marker identifying a file-search tool. Mirrors the
53
- * `COMPUTER_USE_MARKER` pattern — `Symbol.for(...)` so cross-bundle /
54
- * cross-realm checks succeed even when `@rudderjs/ai` loads twice.
55
- */
56
- export declare const FILE_SEARCH_MARKER: unique symbol;
57
- /**
58
- * Default tool name. OpenAI's native `file_search` tool expects calls to
59
- * land on a tool literally named `file_search` — the model is trained on
60
- * that identifier. Apps can override via `opts.name` but usually shouldn't.
61
- */
62
- export declare const FILE_SEARCH_TOOL_NAME = "file_search";
63
- /** OpenAI vector-store metadata filter, typed form. */
64
- export type FileSearchFilter = {
65
- type: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte';
66
- key: string;
67
- value: string | number | boolean;
68
- } | {
69
- type: 'and' | 'or';
70
- filters: FileSearchFilter[];
71
- };
72
- /** Sugar shape for `where` — `{ key: value }` pairs lowered to a typed `and` of `eq` filters. */
73
- export type FileSearchWhereSugar = Record<string, string | number | boolean>;
74
- /**
75
- * Local pgvector fallback configuration (#B8 Phase 3). When set, the tool
76
- * gains an `execute` that delegates to {@link similaritySearch} against
77
- * the supplied Model. Forwards every {@link SimilaritySearchOptions} field
78
- * except `name` / `description` (those flow from the outer `fileSearch`
79
- * call so the agent prompt stays identical across providers).
80
- */
81
- export type FileSearchFallback<TInstance = unknown> = Omit<SimilaritySearchOptions<TInstance>, 'name' | 'description'>;
82
- export interface FileSearchOptions<TInstance = unknown> {
83
- /**
84
- * Vector-store IDs the model should search. At least one required.
85
- * Mixing providers (e.g. an OpenAI `vs_...` id with a Gemini cached-
86
- * content id) is not supported in v1 — every id must come from the
87
- * agent's configured provider.
88
- */
89
- stores: string[];
90
- /**
91
- * Metadata filter applied server-side. Accepts either the sugar
92
- * `{ key: value }` form (lowered to an `and` of `eq` filters) or the
93
- * typed {@link FileSearchFilter} shape directly.
94
- */
95
- where?: FileSearchWhereSugar | FileSearchFilter;
96
- /** Maximum number of result chunks to return. Provider default applies when unset. */
97
- maxResults?: number;
98
- /** Override the tool name. Defaults to {@link FILE_SEARCH_TOOL_NAME}. */
99
- name?: string;
100
- /** Override the tool description shown to the model. Defaults to a generic phrasing. */
101
- description?: string;
102
- /**
103
- * Local pgvector fallback (#B8 Phase 3). When set, the returned tool gains
104
- * an `execute` that delegates to `similaritySearch` for providers that
105
- * don't recognize the `'file-search'` `providerHint`.
106
- *
107
- * The cascade is automatic. On OpenAI the adapter emits the native
108
- * `file_search` block — the search runs server-side, the model never
109
- * invokes the function-call tool, and `execute` is dead weight. On any
110
- * other provider (Anthropic, Gemini today, others) the tool serializes
111
- * as a regular function-call schema, the model calls it, and `execute`
112
- * delegates to `similaritySearch` against the local pgvector model.
113
- *
114
- * Same agent prompt across hosted and self-hosted RAG — ops can swap
115
- * deployment targets without retraining.
116
- *
117
- * @example
118
- * ```ts
119
- * fileSearch({
120
- * stores: [vs_id],
121
- * fallback: {
122
- * model: Document,
123
- * column: 'embedding',
124
- * embedWith: 'openai/text-embedding-3-small',
125
- * },
126
- * })
127
- * ```
128
- */
129
- fallback?: FileSearchFallback<TInstance>;
130
- }
131
- /**
132
- * A `fileSearch` tool. Implements {@link Tool}; carries
133
- * {@link FILE_SEARCH_MARKER} for typeguarding.
134
- *
135
- * `execute` is absent on the hosted-only path (no `fallback` opt) — the
136
- * provider runs the search natively and the model gets results back
137
- * inline. With a `fallback` opt configured (#B8 Phase 3), `execute` is
138
- * present and delegates to `similaritySearch` so non-native providers
139
- * (Anthropic, Gemini today, others) get a working RAG path against a
140
- * local pgvector model.
141
- */
142
- export interface FileSearchTool extends Tool<{
143
- query: string;
144
- }, unknown> {
145
- readonly [FILE_SEARCH_MARKER]: true;
146
- readonly definition: ToolDefinitionOptions;
147
- toSchema(): ToolDefinitionSchema;
148
- }
149
- /** Build the agent tool. See module JSDoc for usage. */
150
- export declare function fileSearch<TInstance = unknown>(opts: FileSearchOptions<TInstance>): FileSearchTool;
151
- /**
152
- * Structural typeguard. Mirrors `isComputerUseTool` / `isHandoffTool` —
153
- * tools are plain objects tagged with `Symbol.for(...)` markers so the
154
- * loop and adapters can detect them without coupling to a class.
155
- */
156
- export declare function isFileSearchTool(t: unknown): t is FileSearchTool;
157
- /**
158
- * Lower the user-friendly `where` shape to OpenAI's typed filter object.
159
- *
160
- * - `{ author: 'Alice', year: 2026 }` → `{ type: 'and', filters: [eq, eq] }`
161
- * - `{ type: 'eq' | ... }` → pass-through
162
- * - `{ type: 'and' | 'or', filters }` → pass-through
163
- *
164
- * A single-key sugar object short-circuits to the bare `eq` (no `and`
165
- * wrapper), matching OpenAI's recommended shape.
166
- */
167
- export declare function normalizeWhere(where: FileSearchWhereSugar | FileSearchFilter): FileSearchFilter;
168
- //# sourceMappingURL=file-search.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-search.d.ts","sourceRoot":"","sources":["../src/file-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAKH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,KAAK,EAAgB,IAAI,EAAE,qBAAqB,EAAE,oBAAoB,EAAiB,MAAM,YAAY,CAAA;AAEhH;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAAO,MAA8C,CAAA;AAEtF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,gBAAgB,CAAA;AAMlD,uDAAuD;AACvD,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;CAAE,GAClG;IAAE,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAAA;AAEvD,iGAAiG;AACjG,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;AAE5E;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,CAAC,SAAS,GAAG,OAAO,IAChD,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,CAAA;AAElE,MAAM,WAAW,iBAAiB,CAAC,SAAS,GAAG,OAAO;IACpD;;;;;OAKG;IACH,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,oBAAoB,GAAG,gBAAgB,CAAA;IAC/C,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAA;CACzC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,CAAC;IACtE,QAAQ,CAAC,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAA;IACnC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAA;IAC1C,QAAQ,IAAI,oBAAoB,CAAA;CACjC;AAED,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,SAAS,GAAG,OAAO,EAAE,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC,GAAG,cAAc,CA4DlG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,cAAc,CAIhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,oBAAoB,GAAG,gBAAgB,GAAG,gBAAgB,CAS/F"}