@rudderjs/ai 1.5.0 → 1.6.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 (163) hide show
  1. package/README.md +482 -4
  2. package/boost/guidelines.md +60 -0
  3. package/boost/skills/ai-agents/SKILL.md +7 -0
  4. package/boost/skills/ai-tools/SKILL.md +7 -0
  5. package/dist/agent.d.ts +35 -1
  6. package/dist/agent.d.ts.map +1 -1
  7. package/dist/agent.js +118 -16
  8. package/dist/agent.js.map +1 -1
  9. package/dist/budget/pricing.d.ts +124 -0
  10. package/dist/budget/pricing.d.ts.map +1 -0
  11. package/dist/budget/pricing.js +175 -0
  12. package/dist/budget/pricing.js.map +1 -0
  13. package/dist/budget/storage.d.ts +104 -0
  14. package/dist/budget/storage.d.ts.map +1 -0
  15. package/dist/budget/storage.js +0 -0
  16. package/dist/budget/storage.js.map +1 -0
  17. package/dist/budget/with-budget.d.ts +119 -0
  18. package/dist/budget/with-budget.d.ts.map +1 -0
  19. package/dist/budget/with-budget.js +175 -0
  20. package/dist/budget/with-budget.js.map +1 -0
  21. package/dist/budget-orm/index.d.ts +96 -0
  22. package/dist/budget-orm/index.d.ts.map +1 -0
  23. package/dist/budget-orm/index.js +177 -0
  24. package/dist/budget-orm/index.js.map +1 -0
  25. package/dist/commands/ai-eval.d.ts +93 -0
  26. package/dist/commands/ai-eval.d.ts.map +1 -0
  27. package/dist/commands/ai-eval.js +378 -0
  28. package/dist/commands/ai-eval.js.map +1 -0
  29. package/dist/computer-use/actions.d.ts +214 -0
  30. package/dist/computer-use/actions.d.ts.map +1 -0
  31. package/dist/computer-use/actions.js +48 -0
  32. package/dist/computer-use/actions.js.map +1 -0
  33. package/dist/computer-use/errors.d.ts +57 -0
  34. package/dist/computer-use/errors.d.ts.map +1 -0
  35. package/dist/computer-use/errors.js +76 -0
  36. package/dist/computer-use/errors.js.map +1 -0
  37. package/dist/computer-use/index.d.ts +53 -0
  38. package/dist/computer-use/index.d.ts.map +1 -0
  39. package/dist/computer-use/index.js +51 -0
  40. package/dist/computer-use/index.js.map +1 -0
  41. package/dist/computer-use/playwright.d.ts +76 -0
  42. package/dist/computer-use/playwright.d.ts.map +1 -0
  43. package/dist/computer-use/playwright.js +270 -0
  44. package/dist/computer-use/playwright.js.map +1 -0
  45. package/dist/computer-use/tool.d.ts +154 -0
  46. package/dist/computer-use/tool.d.ts.map +1 -0
  47. package/dist/computer-use/tool.js +210 -0
  48. package/dist/computer-use/tool.js.map +1 -0
  49. package/dist/eval/fixtures.d.ts +65 -0
  50. package/dist/eval/fixtures.d.ts.map +1 -0
  51. package/dist/eval/fixtures.js +110 -0
  52. package/dist/eval/fixtures.js.map +1 -0
  53. package/dist/eval/html-reporter.d.ts +25 -0
  54. package/dist/eval/html-reporter.d.ts.map +1 -0
  55. package/dist/eval/html-reporter.js +209 -0
  56. package/dist/eval/html-reporter.js.map +1 -0
  57. package/dist/eval/index.d.ts +271 -0
  58. package/dist/eval/index.d.ts.map +1 -0
  59. package/dist/eval/index.js +510 -0
  60. package/dist/eval/index.js.map +1 -0
  61. package/dist/eval/json-reporter.d.ts +43 -0
  62. package/dist/eval/json-reporter.d.ts.map +1 -0
  63. package/dist/eval/json-reporter.js +40 -0
  64. package/dist/eval/json-reporter.js.map +1 -0
  65. package/dist/fake.d.ts +36 -1
  66. package/dist/fake.d.ts.map +1 -1
  67. package/dist/fake.js +49 -2
  68. package/dist/fake.js.map +1 -1
  69. package/dist/file-search.d.ts +168 -0
  70. package/dist/file-search.d.ts.map +1 -0
  71. package/dist/file-search.js +158 -0
  72. package/dist/file-search.js.map +1 -0
  73. package/dist/index.d.ts +22 -2
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +17 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/mcp/client-tools.d.ts +39 -0
  78. package/dist/mcp/client-tools.d.ts.map +1 -0
  79. package/dist/mcp/client-tools.js +147 -0
  80. package/dist/mcp/client-tools.js.map +1 -0
  81. package/dist/mcp/index.d.ts +16 -0
  82. package/dist/mcp/index.d.ts.map +1 -0
  83. package/dist/mcp/index.js +15 -0
  84. package/dist/mcp/index.js.map +1 -0
  85. package/dist/mcp/server-from-agent.d.ts +24 -0
  86. package/dist/mcp/server-from-agent.d.ts.map +1 -0
  87. package/dist/mcp/server-from-agent.js +113 -0
  88. package/dist/mcp/server-from-agent.js.map +1 -0
  89. package/dist/mcp/types.d.ts +64 -0
  90. package/dist/mcp/types.d.ts.map +1 -0
  91. package/dist/mcp/types.js +6 -0
  92. package/dist/mcp/types.js.map +1 -0
  93. package/dist/memory-embedding/index.d.ts +121 -0
  94. package/dist/memory-embedding/index.d.ts.map +1 -0
  95. package/dist/memory-embedding/index.js +229 -0
  96. package/dist/memory-embedding/index.js.map +1 -0
  97. package/dist/memory-extract.d.ts +60 -0
  98. package/dist/memory-extract.d.ts.map +1 -0
  99. package/dist/memory-extract.js +163 -0
  100. package/dist/memory-extract.js.map +1 -0
  101. package/dist/memory-inject.d.ts +39 -0
  102. package/dist/memory-inject.d.ts.map +1 -0
  103. package/dist/memory-inject.js +135 -0
  104. package/dist/memory-inject.js.map +1 -0
  105. package/dist/memory-orm/index.d.ts +118 -0
  106. package/dist/memory-orm/index.d.ts.map +1 -0
  107. package/dist/memory-orm/index.js +187 -0
  108. package/dist/memory-orm/index.js.map +1 -0
  109. package/dist/memory.d.ts +55 -0
  110. package/dist/memory.d.ts.map +1 -0
  111. package/dist/memory.js +132 -0
  112. package/dist/memory.js.map +1 -0
  113. package/dist/observers.d.ts +22 -0
  114. package/dist/observers.d.ts.map +1 -1
  115. package/dist/observers.js.map +1 -1
  116. package/dist/provider-tools.d.ts +15 -1
  117. package/dist/provider-tools.d.ts.map +1 -1
  118. package/dist/provider-tools.js +21 -1
  119. package/dist/provider-tools.js.map +1 -1
  120. package/dist/providers/anthropic.d.ts.map +1 -1
  121. package/dist/providers/anthropic.js +61 -6
  122. package/dist/providers/anthropic.js.map +1 -1
  123. package/dist/providers/elevenlabs.d.ts +98 -0
  124. package/dist/providers/elevenlabs.d.ts.map +1 -0
  125. package/dist/providers/elevenlabs.js +229 -0
  126. package/dist/providers/elevenlabs.js.map +1 -0
  127. package/dist/providers/google.d.ts +83 -1
  128. package/dist/providers/google.d.ts.map +1 -1
  129. package/dist/providers/google.js +491 -8
  130. package/dist/providers/google.js.map +1 -1
  131. package/dist/providers/openai.d.ts +3 -1
  132. package/dist/providers/openai.d.ts.map +1 -1
  133. package/dist/providers/openai.js +209 -5
  134. package/dist/providers/openai.js.map +1 -1
  135. package/dist/providers/voyage.d.ts +91 -0
  136. package/dist/providers/voyage.d.ts.map +1 -0
  137. package/dist/providers/voyage.js +166 -0
  138. package/dist/providers/voyage.js.map +1 -0
  139. package/dist/queue-job.d.ts +69 -4
  140. package/dist/queue-job.d.ts.map +1 -1
  141. package/dist/queue-job.js +114 -11
  142. package/dist/queue-job.js.map +1 -1
  143. package/dist/registry.d.ts +3 -1
  144. package/dist/registry.d.ts.map +1 -1
  145. package/dist/registry.js +10 -0
  146. package/dist/registry.js.map +1 -1
  147. package/dist/server/provider.d.ts.map +1 -1
  148. package/dist/server/provider.js +23 -1
  149. package/dist/server/provider.js.map +1 -1
  150. package/dist/similarity-search.d.ts +163 -0
  151. package/dist/similarity-search.d.ts.map +1 -0
  152. package/dist/similarity-search.js +147 -0
  153. package/dist/similarity-search.js.map +1 -0
  154. package/dist/tool.d.ts.map +1 -1
  155. package/dist/tool.js +13 -4
  156. package/dist/tool.js.map +1 -1
  157. package/dist/types.d.ts +246 -0
  158. package/dist/types.d.ts.map +1 -1
  159. package/dist/vector-stores/index.d.ts +96 -0
  160. package/dist/vector-stores/index.d.ts.map +1 -0
  161. package/dist/vector-stores/index.js +153 -0
  162. package/dist/vector-stores/index.js.map +1 -0
  163. package/package.json +41 -3
@@ -0,0 +1,166 @@
1
+ /**
2
+ * VoyageAI provider — best-in-class embeddings + reranking (#B10).
3
+ *
4
+ * Implements `EmbeddingAdapter` + `RerankingAdapter` only — Voyage has
5
+ * no chat-completions surface, so `create()` throws. Apps reach this
6
+ * provider through `AI.embed(...)` and `AI.rerank(...)` (or their facade
7
+ * equivalents).
8
+ *
9
+ * Wire-protocol via raw `fetch` (no SDK peer dep), matching the Jina /
10
+ * ElevenLabs shape. Voyage's REST API is small enough that pulling in
11
+ * an SDK would add weight without much leverage.
12
+ *
13
+ * @example Config-driven (recommended)
14
+ * ```ts
15
+ * // config/ai.ts
16
+ * export default {
17
+ * default: 'openai/gpt-4o',
18
+ * providers: {
19
+ * openai: { driver: 'openai', apiKey: env('OPENAI_API_KEY')! },
20
+ * voyage: { driver: 'voyage', apiKey: env('VOYAGE_API_KEY')! },
21
+ * },
22
+ * }
23
+ *
24
+ * // somewhere in app code
25
+ * const { embeddings } = await AI.embed('hello world', { model: 'voyage/voyage-3-large' })
26
+ * const ranked = await AI.rerank({
27
+ * model: 'voyage/rerank-2.5',
28
+ * query: 'how do I reset my password?',
29
+ * documents: [...],
30
+ * topK: 5,
31
+ * })
32
+ * ```
33
+ *
34
+ * # Model strings
35
+ *
36
+ * - **Embeddings:** `voyage-3` (general), `voyage-3-large` (best quality),
37
+ * `voyage-code-3` (code), `voyage-finance-2` (finance), `voyage-law-2` (legal).
38
+ * - **Reranking:** `rerank-2.5` (best), `rerank-2.5-lite`, `rerank-2`.
39
+ *
40
+ * # Embedding `input_type`
41
+ *
42
+ * Voyage embeddings perform measurably better when the API knows whether
43
+ * a string is a search **query** or an indexed **document**. We default
44
+ * `input_type` to `'document'` because that's the most common case for
45
+ * RAG pipelines (matches `@rudderjs/ai`'s `similaritySearch` and
46
+ * `EmbeddingUserMemory` ingestion paths). Apps building query-side
47
+ * pipelines should override via `inputType: 'query'` on the embed call
48
+ * — see {@link VoyageEmbedExtras}.
49
+ */
50
+ const VOYAGE_BASE_URL = 'https://api.voyageai.com';
51
+ export class VoyageProvider {
52
+ name = 'voyage';
53
+ config;
54
+ constructor(config) {
55
+ this.config = config;
56
+ }
57
+ create(_model) {
58
+ throw new Error('[RudderJS AI] Voyage does not support text generation. Use it for embeddings and reranking.');
59
+ }
60
+ createEmbedding(model) {
61
+ return new VoyageEmbeddingAdapter(this.config, model);
62
+ }
63
+ createReranking(model) {
64
+ return new VoyageRerankingAdapter(this.config, model);
65
+ }
66
+ }
67
+ // ─── Embeddings ──────────────────────────────────────────
68
+ class VoyageEmbeddingAdapter {
69
+ config;
70
+ model;
71
+ constructor(config, model) {
72
+ this.config = config;
73
+ this.model = model;
74
+ }
75
+ async embed(input, _model) {
76
+ const baseUrl = this.config.baseUrl ?? VOYAGE_BASE_URL;
77
+ const inputType = this.config.defaultInputType ?? 'document';
78
+ const texts = Array.isArray(input) ? input : [input];
79
+ const response = await fetch(`${baseUrl}/v1/embeddings`, {
80
+ method: 'POST',
81
+ headers: {
82
+ 'Content-Type': 'application/json',
83
+ 'Authorization': `Bearer ${this.config.apiKey}`,
84
+ },
85
+ body: JSON.stringify({
86
+ model: this.model,
87
+ input: texts,
88
+ input_type: inputType,
89
+ }),
90
+ });
91
+ if (!response.ok) {
92
+ const text = await safeText(response);
93
+ throw new Error(`[RudderJS AI] Voyage embed failed (${response.status}): ${text}`);
94
+ }
95
+ const data = await response.json();
96
+ // Voyage returns `data` indexed by input order — sort defensively in
97
+ // case a future API revision returns out-of-order results.
98
+ const sorted = (data.data ?? []).slice().sort((a, b) => (a.index ?? 0) - (b.index ?? 0));
99
+ const embeddings = sorted.map(d => d.embedding ?? []);
100
+ const totalTokens = data.usage?.total_tokens ?? 0;
101
+ return {
102
+ embeddings,
103
+ usage: {
104
+ promptTokens: totalTokens,
105
+ totalTokens,
106
+ },
107
+ };
108
+ }
109
+ }
110
+ // ─── Reranking ───────────────────────────────────────────
111
+ class VoyageRerankingAdapter {
112
+ config;
113
+ model;
114
+ constructor(config, model) {
115
+ this.config = config;
116
+ this.model = model;
117
+ }
118
+ async rerank(options) {
119
+ const baseUrl = this.config.baseUrl ?? VOYAGE_BASE_URL;
120
+ const response = await fetch(`${baseUrl}/v1/rerank`, {
121
+ method: 'POST',
122
+ headers: {
123
+ 'Content-Type': 'application/json',
124
+ 'Authorization': `Bearer ${this.config.apiKey}`,
125
+ },
126
+ body: JSON.stringify({
127
+ model: this.model,
128
+ query: options.query,
129
+ documents: options.documents,
130
+ ...(options.topK !== undefined ? { top_k: options.topK } : {}),
131
+ }),
132
+ });
133
+ if (!response.ok) {
134
+ const text = await safeText(response);
135
+ throw new Error(`[RudderJS AI] Voyage rerank failed (${response.status}): ${text}`);
136
+ }
137
+ const data = await response.json();
138
+ const results = (data.data ?? []).map(r => {
139
+ // Prefer Voyage's echoed document when present; otherwise look up
140
+ // by index in the original input. Defensive against API revisions
141
+ // that may toggle the echo behavior.
142
+ const idx = r.index ?? 0;
143
+ const doc = typeof r.document === 'string' ? r.document : (options.documents[idx] ?? '');
144
+ return {
145
+ index: idx,
146
+ relevanceScore: r.relevance_score ?? 0,
147
+ document: doc,
148
+ };
149
+ });
150
+ const totalTokens = data.usage?.total_tokens;
151
+ const result = { results };
152
+ if (totalTokens !== undefined)
153
+ result.usage = { tokens: totalTokens };
154
+ return result;
155
+ }
156
+ }
157
+ // ─── Helpers ─────────────────────────────────────────────
158
+ async function safeText(response) {
159
+ try {
160
+ return await response.text();
161
+ }
162
+ catch {
163
+ return '<unreadable response body>';
164
+ }
165
+ }
166
+ //# sourceMappingURL=voyage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voyage.js","sourceRoot":"","sources":["../../src/providers/voyage.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,23 @@
1
- import type { AgentPromptOptions, AgentResponse } from './types.js';
1
+ import type { AgentPromptOptions, AgentResponse, AgentStreamResponse } from './types.js';
2
+ /**
3
+ * Optional shape on the agent reference — when set, the queued job uses
4
+ * `stream()` to broadcast incremental progress, otherwise falls back to
5
+ * `prompt()`. Declared conditionally so `agent.queue('...')` still works
6
+ * without requiring `stream()` on every wrapper.
7
+ */
8
+ type StreamableAgent = {
9
+ prompt(input: string, options?: AgentPromptOptions): Promise<AgentResponse>;
10
+ stream?(input: string, options?: AgentPromptOptions): AgentStreamResponse;
11
+ };
12
+ export interface BroadcastOptions {
13
+ /**
14
+ * Event name prefix on broadcast envelopes. Defaults to no prefix — events
15
+ * are emitted as `chunk`, `done`, `error`. Set to e.g. `'agent.'` to namespace
16
+ * (`agent.chunk`, `agent.done`, `agent.error`) when the channel carries other
17
+ * unrelated events.
18
+ */
19
+ eventPrefix?: string;
20
+ }
2
21
  /**
3
22
  * Queued AI prompt builder.
4
23
  * Created via `agent.queue('prompt')`.
@@ -9,6 +28,17 @@ import type { AgentPromptOptions, AgentResponse } from './types.js';
9
28
  * .then(response => console.log(response.text))
10
29
  * .catch(err => console.error(err))
11
30
  * .send()
31
+ *
32
+ * @example Broadcast progress to a channel as the job runs
33
+ * await new SupportAgent()
34
+ * .queue('Help with refund request')
35
+ * .broadcast(`user.${userId}.support`)
36
+ * .send()
37
+ *
38
+ * // Subscribers on `user.${userId}.support` receive:
39
+ * // { event: 'chunk', data: <StreamChunk> } // one per stream chunk
40
+ * // { event: 'done', data: <AgentResponse> } // final result
41
+ * // { event: 'error', data: { message } } // on failure
12
42
  */
13
43
  export declare class QueuedPromptBuilder {
14
44
  private readonly agentRef;
@@ -18,9 +48,9 @@ export declare class QueuedPromptBuilder {
18
48
  private _delay;
19
49
  private _thenFn;
20
50
  private _catchFn;
21
- constructor(agentRef: {
22
- prompt(input: string, options?: AgentPromptOptions): Promise<AgentResponse>;
23
- }, input: string, options?: AgentPromptOptions | undefined);
51
+ private _broadcastChannel;
52
+ private _broadcastEventPrefix;
53
+ constructor(agentRef: StreamableAgent, input: string, options?: AgentPromptOptions | undefined);
24
54
  /** Set the queue name */
25
55
  onQueue(name: string): this;
26
56
  /** Set a delay before the job runs */
@@ -29,7 +59,42 @@ export declare class QueuedPromptBuilder {
29
59
  then(fn: (response: AgentResponse) => void | Promise<void>): this;
30
60
  /** Callback when the prompt fails */
31
61
  catch(fn: (error: unknown) => void | Promise<void>): this;
62
+ /**
63
+ * Stream the agent's progress to a broadcast channel as the job runs.
64
+ *
65
+ * When set, the queued job uses `agent.stream()` instead of `prompt()` and
66
+ * pushes each chunk to `channel` via `@rudderjs/broadcast`. Events:
67
+ *
68
+ * - `chunk` (per `StreamChunk` from the agent)
69
+ * - `done` (the final `AgentResponse`)
70
+ * - `error` (`{ message }` if the run fails)
71
+ *
72
+ * Requires `@rudderjs/broadcast` installed and its WS server running in the
73
+ * worker process. In the typical RudderJS dev setup (single process running
74
+ * both web + queue:work) this works out of the box. If your queue worker is
75
+ * a separate process from the broadcast WS server, you'll need a pub/sub
76
+ * bridge (Redis, Reverb, etc.) — outside the scope of v1.
77
+ */
78
+ broadcast(channel: string, opts?: BroadcastOptions): this;
32
79
  /** Dispatch the job to the queue */
33
80
  send(): Promise<void>;
34
81
  }
82
+ type DispatchFn = (fn: () => void | Promise<void>, options?: {
83
+ queue?: string;
84
+ delay?: number;
85
+ }) => Promise<void>;
86
+ type BroadcastFn = (channel: string, event: string, data: unknown) => void;
87
+ /**
88
+ * Test-only seam — swap the dispatch + broadcast loaders for fakes so tests can
89
+ * exercise the queued-job flow without booting Queue / Broadcast providers.
90
+ *
91
+ * The `_` prefix and explicit `ForTests` suffix are deliberate: these hooks
92
+ * exist for `src/queue-job.test.ts`, not for app code. Production callers
93
+ * should never import these.
94
+ */
95
+ export declare function _setQueueJobLoadersForTests(opts: {
96
+ dispatch?: () => Promise<DispatchFn>;
97
+ broadcast?: () => Promise<BroadcastFn | null>;
98
+ }): () => void;
99
+ export {};
35
100
  //# sourceMappingURL=queue-job.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue-job.d.ts","sourceRoot":"","sources":["../src/queue-job.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEnE;;;;;;;;;;GAUG;AACH,qBAAa,mBAAmB;IAO5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAR3B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,OAAO,CAAiE;IAChF,OAAO,CAAC,QAAQ,CAAwD;gBAGrD,QAAQ,EAAE;QAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;KAAE,EACzF,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,kBAAkB,YAAA;IAG/C,yBAAyB;IACzB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,sCAAsC;IACtC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKvB,wCAAwC;IACxC,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAKjE,qCAAqC;IACrC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAKzD,oCAAoC;IAC9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAmC5B"}
1
+ {"version":3,"file":"queue-job.d.ts","sourceRoot":"","sources":["../src/queue-job.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,mBAAmB,EAAe,MAAM,YAAY,CAAA;AAErG;;;;;GAKG;AACH,KAAK,eAAe,GAAG;IACrB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAC3E,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,mBAAmB,CAAA;CAC1E,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,mBAAmB;IAS5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAV3B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,OAAO,CAAkE;IACjF,OAAO,CAAC,QAAQ,CAAwD;IACxE,OAAO,CAAC,iBAAiB,CAAwB;IACjD,OAAO,CAAC,qBAAqB,CAAK;gBAGf,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,kBAAkB,YAAA;IAG/C,yBAAyB;IACzB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B,sCAAsC;IACtC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKvB,wCAAwC;IACxC,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAKjE,qCAAqC;IACrC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAKzD;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,gBAAqB,GAAG,IAAI;IAM7D,oCAAoC;IAC9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAkC5B;AAID,KAAK,UAAU,GAAG,CAChB,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC9B,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KACzC,OAAO,CAAC,IAAI,CAAC,CAAA;AAClB,KAAK,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;AA+B1E;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,QAAQ,CAAC,EAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;IACrC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;CAC9C,GAAG,MAAM,IAAI,CASb"}
package/dist/queue-job.js CHANGED
@@ -8,6 +8,17 @@
8
8
  * .then(response => console.log(response.text))
9
9
  * .catch(err => console.error(err))
10
10
  * .send()
11
+ *
12
+ * @example Broadcast progress to a channel as the job runs
13
+ * await new SupportAgent()
14
+ * .queue('Help with refund request')
15
+ * .broadcast(`user.${userId}.support`)
16
+ * .send()
17
+ *
18
+ * // Subscribers on `user.${userId}.support` receive:
19
+ * // { event: 'chunk', data: <StreamChunk> } // one per stream chunk
20
+ * // { event: 'done', data: <AgentResponse> } // final result
21
+ * // { event: 'error', data: { message } } // on failure
11
22
  */
12
23
  export class QueuedPromptBuilder {
13
24
  agentRef;
@@ -17,6 +28,8 @@ export class QueuedPromptBuilder {
17
28
  _delay = 0;
18
29
  _thenFn;
19
30
  _catchFn;
31
+ _broadcastChannel;
32
+ _broadcastEventPrefix = '';
20
33
  constructor(agentRef, input, options) {
21
34
  this.agentRef = agentRef;
22
35
  this.input = input;
@@ -42,30 +55,52 @@ export class QueuedPromptBuilder {
42
55
  this._catchFn = fn;
43
56
  return this;
44
57
  }
58
+ /**
59
+ * Stream the agent's progress to a broadcast channel as the job runs.
60
+ *
61
+ * When set, the queued job uses `agent.stream()` instead of `prompt()` and
62
+ * pushes each chunk to `channel` via `@rudderjs/broadcast`. Events:
63
+ *
64
+ * - `chunk` (per `StreamChunk` from the agent)
65
+ * - `done` (the final `AgentResponse`)
66
+ * - `error` (`{ message }` if the run fails)
67
+ *
68
+ * Requires `@rudderjs/broadcast` installed and its WS server running in the
69
+ * worker process. In the typical RudderJS dev setup (single process running
70
+ * both web + queue:work) this works out of the box. If your queue worker is
71
+ * a separate process from the broadcast WS server, you'll need a pub/sub
72
+ * bridge (Redis, Reverb, etc.) — outside the scope of v1.
73
+ */
74
+ broadcast(channel, opts = {}) {
75
+ this._broadcastChannel = channel;
76
+ if (opts.eventPrefix !== undefined)
77
+ this._broadcastEventPrefix = opts.eventPrefix;
78
+ return this;
79
+ }
45
80
  /** Dispatch the job to the queue */
46
81
  async send() {
47
- // Lazy import @rudderjs/queue — uses dispatch(fn) for queued closures
48
- let dispatchFn;
49
- try {
50
- const specifier = '@rudderjs/queue';
51
- const mod = await import(/* @vite-ignore */ specifier);
52
- dispatchFn = mod['dispatch'];
53
- }
54
- catch {
55
- throw new Error('[RudderJS AI] @rudderjs/queue is required for agent.queue(). Install it: pnpm add @rudderjs/queue');
56
- }
82
+ const dispatchFn = await loadDispatch();
57
83
  const agentRef = this.agentRef;
58
84
  const input = this.input;
59
85
  const promptOptions = this.options;
60
86
  const thenFn = this._thenFn;
61
87
  const catchFn = this._catchFn;
88
+ const broadcastChannel = this._broadcastChannel;
89
+ const eventPrefix = this._broadcastEventPrefix;
62
90
  await dispatchFn(async () => {
63
91
  try {
64
- const response = await agentRef.prompt(input, promptOptions);
92
+ const response = broadcastChannel !== undefined
93
+ ? await runStreamingAndBroadcast(agentRef, input, promptOptions, broadcastChannel, eventPrefix)
94
+ : await agentRef.prompt(input, promptOptions);
65
95
  if (thenFn)
66
96
  await thenFn(response);
67
97
  }
68
98
  catch (error) {
99
+ if (broadcastChannel !== undefined) {
100
+ await safeBroadcast(broadcastChannel, eventPrefix + 'error', {
101
+ message: error instanceof Error ? error.message : String(error),
102
+ });
103
+ }
69
104
  if (catchFn) {
70
105
  await catchFn(error);
71
106
  }
@@ -79,4 +114,72 @@ export class QueuedPromptBuilder {
79
114
  });
80
115
  }
81
116
  }
117
+ let _dispatchLoader = defaultLoadDispatch;
118
+ let _broadcastLoader = defaultLoadBroadcast;
119
+ async function loadDispatch() { return _dispatchLoader(); }
120
+ async function loadBroadcast() { return _broadcastLoader(); }
121
+ async function defaultLoadDispatch() {
122
+ try {
123
+ const specifier = '@rudderjs/queue';
124
+ const mod = await import(/* @vite-ignore */ specifier);
125
+ return mod['dispatch'];
126
+ }
127
+ catch {
128
+ throw new Error('[RudderJS AI] @rudderjs/queue is required for agent.queue(). Install it: pnpm add @rudderjs/queue');
129
+ }
130
+ }
131
+ async function defaultLoadBroadcast() {
132
+ try {
133
+ const specifier = '@rudderjs/broadcast';
134
+ const mod = await import(/* @vite-ignore */ specifier);
135
+ const fn = mod['broadcast'];
136
+ return typeof fn === 'function' ? fn : null;
137
+ }
138
+ catch {
139
+ return null;
140
+ }
141
+ }
142
+ /**
143
+ * Test-only seam — swap the dispatch + broadcast loaders for fakes so tests can
144
+ * exercise the queued-job flow without booting Queue / Broadcast providers.
145
+ *
146
+ * The `_` prefix and explicit `ForTests` suffix are deliberate: these hooks
147
+ * exist for `src/queue-job.test.ts`, not for app code. Production callers
148
+ * should never import these.
149
+ */
150
+ export function _setQueueJobLoadersForTests(opts) {
151
+ const prevDispatch = _dispatchLoader;
152
+ const prevBroadcast = _broadcastLoader;
153
+ if (opts.dispatch)
154
+ _dispatchLoader = opts.dispatch;
155
+ if (opts.broadcast)
156
+ _broadcastLoader = opts.broadcast;
157
+ return () => {
158
+ _dispatchLoader = prevDispatch;
159
+ _broadcastLoader = prevBroadcast;
160
+ };
161
+ }
162
+ async function runStreamingAndBroadcast(agentRef, input, options, channel, eventPrefix) {
163
+ const broadcastFn = await loadBroadcast();
164
+ if (broadcastFn === null) {
165
+ throw new Error('[RudderJS AI] @rudderjs/broadcast is required for .broadcast(). Install it: pnpm add @rudderjs/broadcast');
166
+ }
167
+ if (typeof agentRef.stream !== 'function') {
168
+ throw new Error('[RudderJS AI] .broadcast() requires an agent with .stream(); the wrapper passed to QueuedPromptBuilder is missing it.');
169
+ }
170
+ const { stream, response } = agentRef.stream(input, options);
171
+ for await (const chunk of stream) {
172
+ broadcastFn(channel, eventPrefix + 'chunk', chunk);
173
+ }
174
+ const final = await response;
175
+ broadcastFn(channel, eventPrefix + 'done', final);
176
+ return final;
177
+ }
178
+ async function safeBroadcast(channel, event, data) {
179
+ try {
180
+ const broadcastFn = await loadBroadcast();
181
+ broadcastFn?.(channel, event, data);
182
+ }
183
+ catch { /* best-effort — don't let broadcast errors mask the original failure */ }
184
+ }
82
185
  //# sourceMappingURL=queue-job.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue-job.js","sourceRoot":"","sources":["../src/queue-job.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,OAAO,mBAAmB;IAOX;IACA;IACA;IARX,MAAM,GAAG,SAAS,CAAA;IAClB,MAAM,GAAG,CAAC,CAAA;IACV,OAAO,CAAiE;IACxE,QAAQ,CAAwD;IAExE,YACmB,QAAyF,EACzF,KAAa,EACb,OAA4B;QAF5B,aAAQ,GAAR,QAAQ,CAAiF;QACzF,UAAK,GAAL,KAAK,CAAQ;QACb,YAAO,GAAP,OAAO,CAAqB;IAC5C,CAAC;IAEJ,yBAAyB;IACzB,OAAO,CAAC,IAAY;QAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,EAAU;QACd,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC,EAAqD;QACxD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,EAA4C;QAChD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;QAClB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,oCAAoC;IACpC,KAAK,CAAC,IAAI;QACR,sEAAsE;QACtE,IAAI,UAA2G,CAAA;QAC/G,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,iBAAiB,CAAA;YACnC,MAAM,GAAG,GAA4B,MAAM,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;YAC/E,UAAU,GAAG,GAAG,CAAC,UAAU,CAAsB,CAAA;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,mGAAmG,CACpG,CAAA;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACxB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAA;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAA;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAA;QAE7B,MAAM,UAAU,CAAC,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;gBAC5D,IAAI,MAAM;oBAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,OAAO,CAAC,KAAK,CAAC,CAAA;gBACtB,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,CAAA;gBACb,CAAC;YACH,CAAC;QACH,CAAC,EAAE;YACD,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,KAAK,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC,CAAA;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"queue-job.js","sourceRoot":"","sources":["../src/queue-job.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { AiModelConfig, ProviderFactory, ProviderAdapter, RerankingAdapter, FileAdapter } from './types.js';
1
+ import type { AiModelConfig, ProviderFactory, ProviderAdapter, RerankingAdapter, FileAdapter, VectorStoreAdapter } from './types.js';
2
2
  /**
3
3
  * Try a list of provider/model strings in order until one succeeds.
4
4
  *
@@ -36,6 +36,8 @@ export declare class AiRegistry {
36
36
  static resolveReranking(modelString: string): RerankingAdapter;
37
37
  /** Resolve a file adapter for a provider name */
38
38
  static resolveFiles(providerName: string): FileAdapter;
39
+ /** Resolve a vector-store adapter for a provider name (#B8) */
40
+ static resolveVectorStores(providerName: string): VectorStoreAdapter;
39
41
  /** Set available models for user selection */
40
42
  static setModels(models: AiModelConfig[]): void;
41
43
  /** Get available models */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEhH;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,CAAC,CAAC,CAaZ;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAqC;IACtE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAC7C,OAAO,CAAC,MAAM,CAAC,OAAO,CAAsB;IAE5C,kCAAkC;IAClC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAI/C,gDAAgD;IAChD,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAMhD,4CAA4C;IAC5C,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI5C,4CAA4C;IAC5C,MAAM,CAAC,UAAU,IAAI,MAAM;IAK3B,iEAAiE;IACjE,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAM9D,2DAA2D;IAC3D,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe;IAMpD,4DAA4D;IAC5D,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB;IAY9D,iDAAiD;IACjD,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW;IAWtD,8CAA8C;IAC9C,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;IAI/C,2BAA2B;IAC3B,MAAM,CAAC,SAAS,IAAI,aAAa,EAAE;IAInC,oCAAoC;IACpC,MAAM,CAAC,KAAK,IAAI,IAAI;CAKrB"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpI;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACrC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,CAAC,CAAC,CAaZ;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAqC;IACtE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAC7C,OAAO,CAAC,MAAM,CAAC,OAAO,CAAsB;IAE5C,kCAAkC;IAClC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAI/C,gDAAgD;IAChD,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAMhD,4CAA4C;IAC5C,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI5C,4CAA4C;IAC5C,MAAM,CAAC,UAAU,IAAI,MAAM;IAK3B,iEAAiE;IACjE,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAM9D,2DAA2D;IAC3D,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe;IAMpD,4DAA4D;IAC5D,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB;IAY9D,iDAAiD;IACjD,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW;IAWtD,+DAA+D;IAC/D,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB;IAYpE,8CAA8C;IAC9C,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;IAI/C,2BAA2B;IAC3B,MAAM,CAAC,SAAS,IAAI,aAAa,EAAE;IAInC,oCAAoC;IACpC,MAAM,CAAC,KAAK,IAAI,IAAI;CAKrB"}
package/dist/registry.js CHANGED
@@ -86,6 +86,16 @@ export class AiRegistry {
86
86
  }
87
87
  return factory.createFiles();
88
88
  }
89
+ /** Resolve a vector-store adapter for a provider name (#B8) */
90
+ static resolveVectorStores(providerName) {
91
+ const factory = this.getFactory(providerName);
92
+ if (!factory.createVectorStores) {
93
+ throw new Error(`[RudderJS AI] Provider "${providerName}" does not support hosted vector stores. ` +
94
+ `Use a provider that implements createVectorStores() (e.g. openai). ` +
95
+ `For self-hosted RAG, use similaritySearch() against an @rudderjs/orm Model with a pgvector column.`);
96
+ }
97
+ return factory.createVectorStores();
98
+ }
89
99
  /** Set available models for user selection */
90
100
  static setModels(models) {
91
101
  this._models = models;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/server/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAU,MAAM,gBAAgB,CAAA;AAMxD;;;;;;;GAOG;AACH,qBAAa,UAAW,SAAQ,eAAe;IAC7C,QAAQ,IAAI,IAAI;IAEV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmG3B;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;CAOjC"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/server/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAU,MAAM,gBAAgB,CAAA;AAMxD;;;;;;;GAOG;AACH,qBAAa,UAAW,SAAQ,eAAe;IAC7C,QAAQ,IAAI,IAAI;IAEV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwH3B;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;CAOjC"}
@@ -1,6 +1,6 @@
1
1
  import { ServiceProvider, config } from '@rudderjs/core';
2
2
  import { AiRegistry } from '../registry.js';
3
- import { setConversationStore } from '../agent.js';
3
+ import { setConversationStore, setUserMemory } from '../agent.js';
4
4
  import { GoogleCacheRegistry } from '../providers/google-cache-registry.js';
5
5
  /**
6
6
  * AI ServiceProvider — reads config from `config('ai')`.
@@ -94,6 +94,22 @@ export class AiProvider extends ServiceProvider {
94
94
  const credentials = providerConfig['credentials'];
95
95
  AiRegistry.register(new BedrockProvider(credentials ? { region, credentials } : { region }));
96
96
  }
97
+ else if (driver === 'elevenlabs') {
98
+ const { ElevenLabsProvider } = await import('../providers/elevenlabs.js');
99
+ AiRegistry.register(new ElevenLabsProvider({
100
+ apiKey: providerConfig.apiKey,
101
+ ...(providerConfig.baseUrl ? { baseUrl: providerConfig.baseUrl } : {}),
102
+ ...(providerConfig['defaultTtsModelId'] ? { defaultTtsModelId: providerConfig['defaultTtsModelId'] } : {}),
103
+ }));
104
+ }
105
+ else if (driver === 'voyage') {
106
+ const { VoyageProvider } = await import('../providers/voyage.js');
107
+ AiRegistry.register(new VoyageProvider({
108
+ apiKey: providerConfig.apiKey,
109
+ ...(providerConfig.baseUrl ? { baseUrl: providerConfig.baseUrl } : {}),
110
+ ...(providerConfig['defaultInputType'] ? { defaultInputType: providerConfig['defaultInputType'] } : {}),
111
+ }));
112
+ }
97
113
  }
98
114
  AiRegistry.setDefault(cfg.default);
99
115
  AiRegistry.setModels(cfg.models ?? []);
@@ -104,6 +120,12 @@ export class AiProvider extends ServiceProvider {
104
120
  setConversationStore(store);
105
121
  this.app.instance('ai.conversations', store);
106
122
  }
123
+ // Register user-memory store if provided in config (#A4)
124
+ if (cfg.memory) {
125
+ const memory = cfg.memory;
126
+ setUserMemory(memory);
127
+ this.app.instance('ai.memory', memory);
128
+ }
107
129
  // Register make:agent scaffolder
108
130
  try {
109
131
  const { registerMakeSpecs } = await import('@rudderjs/console');
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/server/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/server/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAuB,MAAM,uCAAuC,CAAA;AAGhG;;;;;;;GAOG;AACH,MAAM,OAAO,UAAW,SAAQ,eAAe;IAC7C,QAAQ,KAAU,CAAC;IAEnB,KAAK,CAAC,IAAI;QACR,MAAM,GAAG,GAAG,MAAM,CAAW,IAAI,CAAC,CAAA;QAClC,MAAM,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAA;QAE3D,KAAK,MAAM,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,IAAI,IAAI,CAAA;YAE5C,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC3B,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAA;gBACvE,UAAU,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC;oBACxC,MAAM,EAAE,cAAc,CAAC,MAAO;oBAC9B,OAAO,EAAE,cAAc,CAAC,OAAO;iBAChC,CAAC,CAAC,CAAA;YACL,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;gBACjE,UAAU,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC;oBACrC,MAAM,EAAE,cAAc,CAAC,MAAO;oBAC9B,OAAO,EAAE,cAAc,CAAC,OAAO;oBAC/B,YAAY,EAAE,cAAc,CAAC,cAAc,CAAuB;iBACnE,CAAC,CAAC,CAAA;YACL,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;gBACjE,UAAU,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC;oBACrC,MAAM,EAAE,cAAc,CAAC,MAAO;iBAC/B,EAAE,mBAAmB,CAAC,CAAC,CAAA;YAC1B,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;gBACjE,UAAU,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC;oBACrC,OAAO,EAAE,cAAc,CAAC,OAAO;iBAChC,CAAC,CAAC,CAAA;YACL,CAAC;iBAAM,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;gBACjC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAA;gBACrE,UAAU,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC;oBACvC,MAAM,EAAE,cAAc,CAAC,MAAO;oBAC9B,OAAO,EAAE,cAAc,CAAC,OAAO;iBAChC,CAAC,CAAC,CAAA;YACL,CAAC;iBAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC5B,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;gBAC3D,UAAU,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC;oBAClC,MAAM,EAAE,cAAc,CAAC,MAAO;oBAC9B,OAAO,EAAE,cAAc,CAAC,OAAO;iBAChC,CAAC,CAAC,CAAA;YACL,CAAC;iBAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC7B,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;gBAC7D,UAAU,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC;oBACnC,MAAM,EAAE,cAAc,CAAC,MAAO;oBAC9B,OAAO,EAAE,cAAc,CAAC,OAAO;iBAChC,CAAC,CAAC,CAAA;YACL,CAAC;iBAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;gBACnE,UAAU,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC;oBACtC,MAAM,EAAE,cAAc,CAAC,MAAO;oBAC9B,OAAO,EAAE,cAAc,CAAC,OAAO;iBAChC,CAAC,CAAC,CAAA;YACL,CAAC;iBAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC9B,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAA;gBACrE,UAAU,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC;oBAC1C,MAAM,EAAE,cAAc,CAAC,MAAO;oBAC9B,OAAO,EAAE,cAAc,CAAC,OAAQ;iBACjC,CAAC,CAAC,CAAA;YACL,CAAC;iBAAM,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;gBACnC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAA;gBACzE,UAAU,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC;oBACzC,MAAM,EAAE,cAAc,CAAC,MAAO;oBAC9B,OAAO,EAAE,cAAc,CAAC,OAAO;oBAC/B,OAAO,EAAE,cAAc,CAAC,SAAS,CAAuB;oBACxD,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAuB;iBAC3D,CAAC,CAAC,CAAA;YACL,CAAC;iBAAM,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;gBACnE,MAAM,MAAM,GAAI,cAAc,CAAC,QAAQ,CAAwB,IAAI,WAAW,CAAA;gBAC9E,MAAM,WAAW,GAAG,cAAc,CAAC,aAAa,CAEnC,CAAA;gBACb,UAAU,CAAC,QAAQ,CAAC,IAAI,eAAe,CACrC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CACnD,CAAC,CAAA;YACJ,CAAC;iBAAM,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;gBACnC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAA;gBACzE,UAAU,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC;oBACzC,MAAM,EAAE,cAAc,CAAC,MAAO;oBAC9B,GAAG,CAAC,cAAc,CAAC,OAAO,CAAc,CAAC,CAAC,EAAE,OAAO,EAAY,cAAc,CAAC,OAAO,EAA+B,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1H,GAAG,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,cAAc,CAAC,mBAAmB,CAAW,EAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC3H,CAAC,CAAC,CAAA;YACL,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;gBACjE,UAAU,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC;oBACrC,MAAM,EAAE,cAAc,CAAC,MAAO;oBAC9B,GAAG,CAAC,cAAc,CAAC,OAAO,CAAa,CAAC,CAAC,EAAE,OAAO,EAAW,cAAc,CAAC,OAAO,EAA6C,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtI,GAAG,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,cAAc,CAAC,kBAAkB,CAAyB,EAAS,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvI,CAAC,CAAC,CAAA;YACL,CAAC;QACH,CAAC;QAEH,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAClC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;QAE5C,oDAAoD;QACpD,IAAK,GAAwD,CAAC,aAAa,EAAE,CAAC;YAC5E,MAAM,KAAK,GAAI,GAAwD,CAAC,aAAc,CAAA;YACtF,oBAAoB,CAAC,KAAK,CAAC,CAAA;YAC3B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;QAC9C,CAAC;QAED,yDAAyD;QACzD,IAAK,GAA0C,CAAC,MAAM,EAAE,CAAC;YACvD,MAAM,MAAM,GAAI,GAA0C,CAAC,MAAO,CAAA;YAClE,aAAa,CAAC,MAAM,CAAC,CAAA;YACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QACxC,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC;YACH,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAA;YAC/D,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAA;YACnE,iBAAiB,CAAC,aAAa,CAAC,CAAA;QAClC,CAAC;QAAC,MAAM,CAAC,CAAC,0BAA0B,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACK,wBAAwB;QAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAiB,OAAO,CAAC,CAAA;YACpD,OAAO,IAAI,mBAAmB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3C,CAAC;QACD,OAAO,IAAI,mBAAmB,EAAE,CAAA;IAClC,CAAC;CACF"}