@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.
- package/README.md +482 -4
- package/boost/guidelines.md +60 -0
- package/boost/skills/ai-agents/SKILL.md +7 -0
- package/boost/skills/ai-tools/SKILL.md +7 -0
- package/dist/agent.d.ts +35 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +118 -16
- package/dist/agent.js.map +1 -1
- package/dist/budget/pricing.d.ts +124 -0
- package/dist/budget/pricing.d.ts.map +1 -0
- package/dist/budget/pricing.js +175 -0
- package/dist/budget/pricing.js.map +1 -0
- package/dist/budget/storage.d.ts +104 -0
- package/dist/budget/storage.d.ts.map +1 -0
- package/dist/budget/storage.js +0 -0
- package/dist/budget/storage.js.map +1 -0
- package/dist/budget/with-budget.d.ts +119 -0
- package/dist/budget/with-budget.d.ts.map +1 -0
- package/dist/budget/with-budget.js +175 -0
- package/dist/budget/with-budget.js.map +1 -0
- package/dist/budget-orm/index.d.ts +96 -0
- package/dist/budget-orm/index.d.ts.map +1 -0
- package/dist/budget-orm/index.js +177 -0
- package/dist/budget-orm/index.js.map +1 -0
- package/dist/commands/ai-eval.d.ts +93 -0
- package/dist/commands/ai-eval.d.ts.map +1 -0
- package/dist/commands/ai-eval.js +378 -0
- package/dist/commands/ai-eval.js.map +1 -0
- package/dist/computer-use/actions.d.ts +214 -0
- package/dist/computer-use/actions.d.ts.map +1 -0
- package/dist/computer-use/actions.js +48 -0
- package/dist/computer-use/actions.js.map +1 -0
- package/dist/computer-use/errors.d.ts +57 -0
- package/dist/computer-use/errors.d.ts.map +1 -0
- package/dist/computer-use/errors.js +76 -0
- package/dist/computer-use/errors.js.map +1 -0
- package/dist/computer-use/index.d.ts +53 -0
- package/dist/computer-use/index.d.ts.map +1 -0
- package/dist/computer-use/index.js +51 -0
- package/dist/computer-use/index.js.map +1 -0
- package/dist/computer-use/playwright.d.ts +76 -0
- package/dist/computer-use/playwright.d.ts.map +1 -0
- package/dist/computer-use/playwright.js +270 -0
- package/dist/computer-use/playwright.js.map +1 -0
- package/dist/computer-use/tool.d.ts +154 -0
- package/dist/computer-use/tool.d.ts.map +1 -0
- package/dist/computer-use/tool.js +210 -0
- package/dist/computer-use/tool.js.map +1 -0
- package/dist/eval/fixtures.d.ts +65 -0
- package/dist/eval/fixtures.d.ts.map +1 -0
- package/dist/eval/fixtures.js +110 -0
- package/dist/eval/fixtures.js.map +1 -0
- package/dist/eval/html-reporter.d.ts +25 -0
- package/dist/eval/html-reporter.d.ts.map +1 -0
- package/dist/eval/html-reporter.js +209 -0
- package/dist/eval/html-reporter.js.map +1 -0
- package/dist/eval/index.d.ts +271 -0
- package/dist/eval/index.d.ts.map +1 -0
- package/dist/eval/index.js +510 -0
- package/dist/eval/index.js.map +1 -0
- package/dist/eval/json-reporter.d.ts +43 -0
- package/dist/eval/json-reporter.d.ts.map +1 -0
- package/dist/eval/json-reporter.js +40 -0
- package/dist/eval/json-reporter.js.map +1 -0
- package/dist/fake.d.ts +36 -1
- package/dist/fake.d.ts.map +1 -1
- package/dist/fake.js +49 -2
- package/dist/fake.js.map +1 -1
- package/dist/file-search.d.ts +168 -0
- package/dist/file-search.d.ts.map +1 -0
- package/dist/file-search.js +158 -0
- package/dist/file-search.js.map +1 -0
- package/dist/index.d.ts +22 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/client-tools.d.ts +39 -0
- package/dist/mcp/client-tools.d.ts.map +1 -0
- package/dist/mcp/client-tools.js +147 -0
- package/dist/mcp/client-tools.js.map +1 -0
- package/dist/mcp/index.d.ts +16 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +15 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server-from-agent.d.ts +24 -0
- package/dist/mcp/server-from-agent.d.ts.map +1 -0
- package/dist/mcp/server-from-agent.js +113 -0
- package/dist/mcp/server-from-agent.js.map +1 -0
- package/dist/mcp/types.d.ts +64 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +6 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/memory-embedding/index.d.ts +121 -0
- package/dist/memory-embedding/index.d.ts.map +1 -0
- package/dist/memory-embedding/index.js +229 -0
- package/dist/memory-embedding/index.js.map +1 -0
- package/dist/memory-extract.d.ts +60 -0
- package/dist/memory-extract.d.ts.map +1 -0
- package/dist/memory-extract.js +163 -0
- package/dist/memory-extract.js.map +1 -0
- package/dist/memory-inject.d.ts +39 -0
- package/dist/memory-inject.d.ts.map +1 -0
- package/dist/memory-inject.js +135 -0
- package/dist/memory-inject.js.map +1 -0
- package/dist/memory-orm/index.d.ts +118 -0
- package/dist/memory-orm/index.d.ts.map +1 -0
- package/dist/memory-orm/index.js +187 -0
- package/dist/memory-orm/index.js.map +1 -0
- package/dist/memory.d.ts +55 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +132 -0
- package/dist/memory.js.map +1 -0
- package/dist/observers.d.ts +22 -0
- package/dist/observers.d.ts.map +1 -1
- package/dist/observers.js.map +1 -1
- package/dist/provider-tools.d.ts +15 -1
- package/dist/provider-tools.d.ts.map +1 -1
- package/dist/provider-tools.js +21 -1
- package/dist/provider-tools.js.map +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +61 -6
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/elevenlabs.d.ts +98 -0
- package/dist/providers/elevenlabs.d.ts.map +1 -0
- package/dist/providers/elevenlabs.js +229 -0
- package/dist/providers/elevenlabs.js.map +1 -0
- package/dist/providers/google.d.ts +83 -1
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js +491 -8
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/openai.d.ts +3 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +209 -5
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/voyage.d.ts +91 -0
- package/dist/providers/voyage.d.ts.map +1 -0
- package/dist/providers/voyage.js +166 -0
- package/dist/providers/voyage.js.map +1 -0
- package/dist/queue-job.d.ts +69 -4
- package/dist/queue-job.d.ts.map +1 -1
- package/dist/queue-job.js +114 -11
- package/dist/queue-job.js.map +1 -1
- package/dist/registry.d.ts +3 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +10 -0
- package/dist/registry.js.map +1 -1
- package/dist/server/provider.d.ts.map +1 -1
- package/dist/server/provider.js +23 -1
- package/dist/server/provider.js.map +1 -1
- package/dist/similarity-search.d.ts +163 -0
- package/dist/similarity-search.d.ts.map +1 -0
- package/dist/similarity-search.js +147 -0
- package/dist/similarity-search.js.map +1 -0
- package/dist/tool.d.ts.map +1 -1
- package/dist/tool.js +13 -4
- package/dist/tool.js.map +1 -1
- package/dist/types.d.ts +246 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/vector-stores/index.d.ts +96 -0
- package/dist/vector-stores/index.d.ts.map +1 -0
- package/dist/vector-stores/index.js +153 -0
- package/dist/vector-stores/index.js.map +1 -0
- 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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"}
|
package/dist/queue-job.d.ts
CHANGED
|
@@ -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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
package/dist/queue-job.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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 =
|
|
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
|
package/dist/queue-job.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue-job.js","sourceRoot":"","sources":["../src/queue-job.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"queue-job.js","sourceRoot":"","sources":["../src/queue-job.ts"],"names":[],"mappings":"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"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -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 */
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -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;
|
|
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;
|
package/dist/registry.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/server/provider.js
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/server/provider.ts"],"names":[],"mappings":"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"}
|