@rudderjs/ai 0.0.1 → 0.0.2
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 +89 -12
- package/boost/skills/ai-agents/SKILL.md +233 -0
- package/boost/skills/ai-tools/SKILL.md +244 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +110 -0
- package/dist/agent.js.map +1 -1
- package/dist/commands/make-agent.d.ts +3 -0
- package/dist/commands/make-agent.d.ts.map +1 -0
- package/dist/commands/make-agent.js +23 -0
- package/dist/commands/make-agent.js.map +1 -0
- package/dist/facade.d.ts +28 -1
- package/dist/facade.d.ts.map +1 -1
- package/dist/facade.js +25 -0
- package/dist/facade.js.map +1 -1
- package/dist/fake.d.ts +31 -1
- package/dist/fake.d.ts.map +1 -1
- package/dist/fake.js +98 -0
- package/dist/fake.js.map +1 -1
- package/dist/files.d.ts +27 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +44 -0
- package/dist/files.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/observers.d.ts +84 -0
- package/dist/observers.d.ts.map +1 -0
- package/dist/observers.js +40 -0
- package/dist/observers.js.map +1 -0
- package/dist/provider.d.ts +8 -6
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +86 -81
- package/dist/provider.js.map +1 -1
- package/dist/providers/anthropic.d.ts +2 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +63 -0
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/cohere.d.ts +13 -0
- package/dist/providers/cohere.d.ts.map +1 -0
- package/dist/providers/cohere.js +87 -0
- package/dist/providers/cohere.js.map +1 -0
- package/dist/providers/google.d.ts +2 -1
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js +53 -0
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/jina.d.ts +13 -0
- package/dist/providers/jina.d.ts.map +1 -0
- package/dist/providers/jina.js +90 -0
- package/dist/providers/jina.js.map +1 -0
- package/dist/providers/openai.d.ts +2 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +62 -0
- package/dist/providers/openai.js.map +1 -1
- package/dist/registry.d.ts +5 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +19 -0
- package/dist/registry.js.map +1 -1
- package/dist/rerank.d.ts +20 -0
- package/dist/rerank.d.ts.map +1 -0
- package/dist/rerank.js +40 -0
- package/dist/rerank.js.map +1 -0
- package/dist/types.d.ts +46 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +18 -4
package/dist/fake.js
CHANGED
|
@@ -17,10 +17,16 @@ export class AiFake {
|
|
|
17
17
|
imageCalls = [];
|
|
18
18
|
ttsCalls = [];
|
|
19
19
|
sttCalls = [];
|
|
20
|
+
embedCalls = [];
|
|
21
|
+
rerankCalls = [];
|
|
22
|
+
fileCalls = [];
|
|
20
23
|
_response = 'fake response';
|
|
21
24
|
_imageResponse = 'ZmFrZS1pbWFnZQ=='; // base64 of 'fake-image'
|
|
22
25
|
_ttsResponse = Buffer.from('fake-audio');
|
|
23
26
|
_sttResponse = 'fake transcription';
|
|
27
|
+
_embedResponse = [[0.1, 0.2, 0.3]];
|
|
28
|
+
_rerankResponse = { results: [] };
|
|
29
|
+
_fileUploadResponse = { id: 'fake-file-id', filename: 'fake.txt', bytes: 0 };
|
|
24
30
|
/** Set the text response the fake will return */
|
|
25
31
|
respondWith(text) {
|
|
26
32
|
this._response = text;
|
|
@@ -37,6 +43,18 @@ export class AiFake {
|
|
|
37
43
|
respondWithTranscription(text) {
|
|
38
44
|
this._sttResponse = text;
|
|
39
45
|
}
|
|
46
|
+
/** Set the embeddings the fake will return */
|
|
47
|
+
respondWithEmbedding(embeddings) {
|
|
48
|
+
this._embedResponse = embeddings;
|
|
49
|
+
}
|
|
50
|
+
/** Set the reranking results the fake will return */
|
|
51
|
+
respondWithRanking(results) {
|
|
52
|
+
this._rerankResponse = { results };
|
|
53
|
+
}
|
|
54
|
+
/** Set the file upload result the fake will return */
|
|
55
|
+
respondWithFileUpload(result) {
|
|
56
|
+
this._fileUploadResponse = result;
|
|
57
|
+
}
|
|
40
58
|
/** Install the fake — replaces all registered providers with a mock */
|
|
41
59
|
static fake() {
|
|
42
60
|
const fake = new AiFake();
|
|
@@ -84,12 +102,49 @@ export class AiFake {
|
|
|
84
102
|
};
|
|
85
103
|
},
|
|
86
104
|
};
|
|
105
|
+
const embeddingAdapter = {
|
|
106
|
+
async embed(input, model) {
|
|
107
|
+
fake.embedCalls.push({ input, model });
|
|
108
|
+
const inputs = Array.isArray(input) ? input : [input];
|
|
109
|
+
const embeddings = inputs.map((_, i) => fake._embedResponse[i % fake._embedResponse.length]);
|
|
110
|
+
return {
|
|
111
|
+
embeddings,
|
|
112
|
+
usage: { promptTokens: 0, totalTokens: 0 },
|
|
113
|
+
};
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
const rerankingAdapter = {
|
|
117
|
+
async rerank(opts) {
|
|
118
|
+
fake.rerankCalls.push(opts);
|
|
119
|
+
return fake._rerankResponse;
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
const fileAdapter = {
|
|
123
|
+
async upload(opts) {
|
|
124
|
+
fake.fileCalls.push({ method: 'upload', args: opts });
|
|
125
|
+
return { ...fake._fileUploadResponse, filename: opts.filePath.split('/').pop() ?? fake._fileUploadResponse.filename };
|
|
126
|
+
},
|
|
127
|
+
async list() {
|
|
128
|
+
fake.fileCalls.push({ method: 'list', args: {} });
|
|
129
|
+
return { files: [fake._fileUploadResponse] };
|
|
130
|
+
},
|
|
131
|
+
async delete(fileId) {
|
|
132
|
+
fake.fileCalls.push({ method: 'delete', args: fileId });
|
|
133
|
+
},
|
|
134
|
+
async retrieve(fileId) {
|
|
135
|
+
fake.fileCalls.push({ method: 'retrieve', args: fileId });
|
|
136
|
+
return { data: Buffer.from('fake-content'), mimeType: 'application/octet-stream' };
|
|
137
|
+
},
|
|
138
|
+
};
|
|
87
139
|
const factory = {
|
|
88
140
|
name: '__fake__',
|
|
89
141
|
create: () => adapter,
|
|
142
|
+
createEmbedding: () => embeddingAdapter,
|
|
90
143
|
createImage: () => imageAdapter,
|
|
91
144
|
createTts: () => ttsAdapter,
|
|
92
145
|
createStt: () => sttAdapter,
|
|
146
|
+
createReranking: () => rerankingAdapter,
|
|
147
|
+
createFiles: () => fileAdapter,
|
|
93
148
|
};
|
|
94
149
|
AiRegistry.reset();
|
|
95
150
|
AiRegistry.register(factory);
|
|
@@ -164,6 +219,49 @@ export class AiFake {
|
|
|
164
219
|
getSttCalls() {
|
|
165
220
|
return [...this.sttCalls];
|
|
166
221
|
}
|
|
222
|
+
/** Assert at least one embedding was made */
|
|
223
|
+
assertEmbedded(predicate) {
|
|
224
|
+
if (this.embedCalls.length === 0)
|
|
225
|
+
throw new Error('[RudderJS AI] Expected at least one embedding, but none were made.');
|
|
226
|
+
if (predicate) {
|
|
227
|
+
const match = this.embedCalls.some(c => predicate(c.input));
|
|
228
|
+
if (!match)
|
|
229
|
+
throw new Error('[RudderJS AI] No embedding matched the predicate.');
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/** Assert at least one reranking was made */
|
|
233
|
+
assertReranked(predicate) {
|
|
234
|
+
if (this.rerankCalls.length === 0)
|
|
235
|
+
throw new Error('[RudderJS AI] Expected at least one reranking, but none were made.');
|
|
236
|
+
if (predicate) {
|
|
237
|
+
const match = this.rerankCalls.some(c => predicate(c));
|
|
238
|
+
if (!match)
|
|
239
|
+
throw new Error('[RudderJS AI] No reranking matched the predicate.');
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/** Get all recorded embedding calls */
|
|
243
|
+
getEmbedCalls() {
|
|
244
|
+
return [...this.embedCalls];
|
|
245
|
+
}
|
|
246
|
+
/** Get all recorded reranking calls */
|
|
247
|
+
getRerankCalls() {
|
|
248
|
+
return [...this.rerankCalls];
|
|
249
|
+
}
|
|
250
|
+
/** Assert at least one file upload was made */
|
|
251
|
+
assertFileUploaded(predicate) {
|
|
252
|
+
const uploads = this.fileCalls.filter(c => c.method === 'upload');
|
|
253
|
+
if (uploads.length === 0)
|
|
254
|
+
throw new Error('[RudderJS AI] Expected at least one file upload, but none were made.');
|
|
255
|
+
if (predicate) {
|
|
256
|
+
const match = uploads.some(c => predicate(c.args.filePath));
|
|
257
|
+
if (!match)
|
|
258
|
+
throw new Error('[RudderJS AI] No file upload matched the predicate.');
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/** Get all recorded file operation calls */
|
|
262
|
+
getFileCalls() {
|
|
263
|
+
return [...this.fileCalls];
|
|
264
|
+
}
|
|
167
265
|
/** Restore — clears the fake (user must re-register real providers) */
|
|
168
266
|
restore() {
|
|
169
267
|
AiRegistry.reset();
|
package/dist/fake.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fake.js","sourceRoot":"","sources":["../src/fake.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"fake.js","sourceRoot":"","sources":["../src/fake.ts"],"names":[],"mappings":"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"}
|
package/dist/files.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FileUploadResult, FileListResult, FileContent } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Provider file management — upload, list, delete, and retrieve files
|
|
4
|
+
* on provider platforms (OpenAI, Anthropic, Google).
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* const files = AI.files('openai')
|
|
8
|
+
* const uploaded = await files.upload('./report.pdf', { purpose: 'assistants' })
|
|
9
|
+
* const list = await files.list()
|
|
10
|
+
* await files.delete(uploaded.id)
|
|
11
|
+
*/
|
|
12
|
+
export declare class FileManager {
|
|
13
|
+
private readonly providerName;
|
|
14
|
+
private constructor();
|
|
15
|
+
static for(providerName: string): FileManager;
|
|
16
|
+
/** Upload a file to the provider */
|
|
17
|
+
upload(filePath: string, options?: {
|
|
18
|
+
purpose?: string | undefined;
|
|
19
|
+
}): Promise<FileUploadResult>;
|
|
20
|
+
/** List all files on the provider */
|
|
21
|
+
list(): Promise<FileListResult>;
|
|
22
|
+
/** Delete a file by ID */
|
|
23
|
+
delete(fileId: string): Promise<void>;
|
|
24
|
+
/** Retrieve file content by ID (not all providers support this) */
|
|
25
|
+
retrieve(fileId: string): Promise<FileContent>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE/E;;;;;;;;;GASG;AACH,qBAAa,WAAW;IACF,OAAO,CAAC,QAAQ,CAAC,YAAY;IAAjD,OAAO;IAEP,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW;IAI7C,oCAAoC;IAC9B,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAKrG,qCAAqC;IAC/B,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC;IAKrC,0BAA0B;IACpB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,mEAAmE;IAC7D,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAOrD"}
|
package/dist/files.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { AiRegistry } from './registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Provider file management — upload, list, delete, and retrieve files
|
|
4
|
+
* on provider platforms (OpenAI, Anthropic, Google).
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* const files = AI.files('openai')
|
|
8
|
+
* const uploaded = await files.upload('./report.pdf', { purpose: 'assistants' })
|
|
9
|
+
* const list = await files.list()
|
|
10
|
+
* await files.delete(uploaded.id)
|
|
11
|
+
*/
|
|
12
|
+
export class FileManager {
|
|
13
|
+
providerName;
|
|
14
|
+
constructor(providerName) {
|
|
15
|
+
this.providerName = providerName;
|
|
16
|
+
}
|
|
17
|
+
static for(providerName) {
|
|
18
|
+
return new FileManager(providerName);
|
|
19
|
+
}
|
|
20
|
+
/** Upload a file to the provider */
|
|
21
|
+
async upload(filePath, options) {
|
|
22
|
+
const adapter = AiRegistry.resolveFiles(this.providerName);
|
|
23
|
+
return adapter.upload({ filePath, purpose: options?.purpose });
|
|
24
|
+
}
|
|
25
|
+
/** List all files on the provider */
|
|
26
|
+
async list() {
|
|
27
|
+
const adapter = AiRegistry.resolveFiles(this.providerName);
|
|
28
|
+
return adapter.list();
|
|
29
|
+
}
|
|
30
|
+
/** Delete a file by ID */
|
|
31
|
+
async delete(fileId) {
|
|
32
|
+
const adapter = AiRegistry.resolveFiles(this.providerName);
|
|
33
|
+
return adapter.delete(fileId);
|
|
34
|
+
}
|
|
35
|
+
/** Retrieve file content by ID (not all providers support this) */
|
|
36
|
+
async retrieve(fileId) {
|
|
37
|
+
const adapter = AiRegistry.resolveFiles(this.providerName);
|
|
38
|
+
if (!adapter.retrieve) {
|
|
39
|
+
throw new Error(`[RudderJS AI] Provider "${this.providerName}" does not support file retrieval.`);
|
|
40
|
+
}
|
|
41
|
+
return adapter.retrieve(fileId);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAG1C;;;;;;;;;GASG;AACH,MAAM,OAAO,WAAW;IACe;IAArC,YAAqC,YAAoB;QAApB,iBAAY,GAAZ,YAAY,CAAQ;IAAG,CAAC;IAE7D,MAAM,CAAC,GAAG,CAAC,YAAoB;QAC7B,OAAO,IAAI,WAAW,CAAC,YAAY,CAAC,CAAA;IACtC,CAAC;IAED,oCAAoC;IACpC,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,OAA0C;QACvE,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC1D,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;IAChE,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,IAAI;QACR,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC1D,OAAO,OAAO,CAAC,IAAI,EAAE,CAAA;IACvB,CAAC;IAED,0BAA0B;IAC1B,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC1D,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC/B,CAAC;IAED,mEAAmE;IACnE,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC1D,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,YAAY,oCAAoC,CAAC,CAAA;QACnG,CAAC;QACD,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { DocumentAttachment as Document, ImageAttachment as Image, getMessageText, attachmentsToContentParts } from './attachment.js';
|
|
2
|
-
export type { AgentPromptOptions, Attachment, AiMessage, ContentPart, AiConfig, AiModelConfig, AiProviderConfig, AiMiddleware, AgentResponse, AgentStep, AgentStreamResponse, AnyTool, BeforeToolCallResult, ClientTool, ConversationStore, ConversationStoreMeta, FinishReason, HasMiddleware, HasMemory, HasStructuredOutput, HasTools, MiddlewareConfigResult, MiddlewareContext, PrepareStepResult, ProviderAdapter, ProviderFactory, ProviderRequestOptions, ProviderResponse, ServerTool, StopCondition, Tool, StreamChunk, TokenUsage, ToolCall, ToolCallContext, ToolChoice, ToolDefinitionOptions, ToolDefinitionSchema, ToolExecuteFn, ToolNeedsApproval, ToolResult, EmbeddingAdapter, EmbeddingResult, ImageGenerationAdapter, ImageGenerationOptions, ImageGenerationResult, TextToSpeechAdapter, TextToSpeechOptions, TextToSpeechResult, SpeechToTextAdapter, SpeechToTextOptions, SpeechToTextResult, } from './types.js';
|
|
2
|
+
export type { AgentPromptOptions, Attachment, AiMessage, ContentPart, AiConfig, AiModelConfig, AiProviderConfig, AiMiddleware, AgentResponse, AgentStep, AgentStreamResponse, AnyTool, BeforeToolCallResult, ClientTool, ConversationStore, ConversationStoreMeta, FinishReason, HasMiddleware, HasMemory, HasStructuredOutput, HasTools, MiddlewareConfigResult, MiddlewareContext, PrepareStepResult, ProviderAdapter, ProviderFactory, ProviderRequestOptions, ProviderResponse, ServerTool, StopCondition, Tool, StreamChunk, TokenUsage, ToolCall, ToolCallContext, ToolChoice, ToolDefinitionOptions, ToolDefinitionSchema, ToolExecuteFn, ToolNeedsApproval, ToolResult, EmbeddingAdapter, EmbeddingResult, ImageGenerationAdapter, ImageGenerationOptions, ImageGenerationResult, TextToSpeechAdapter, TextToSpeechOptions, TextToSpeechResult, SpeechToTextAdapter, SpeechToTextOptions, SpeechToTextResult, RerankingAdapter, RerankingOptions, RerankingResult, FileAdapter, FileUploadOptions, FileUploadResult, FileListResult, FileContent, } from './types.js';
|
|
3
3
|
export { AiRegistry } from './registry.js';
|
|
4
4
|
export { AnthropicProvider, type AnthropicConfig } from './providers/anthropic.js';
|
|
5
5
|
export { OpenAIProvider, OpenAIAdapter, type OpenAIConfig } from './providers/openai.js';
|
|
@@ -10,6 +10,8 @@ export { XaiProvider, type XaiConfig } from './providers/xai.js';
|
|
|
10
10
|
export { GroqProvider, type GroqConfig } from './providers/groq.js';
|
|
11
11
|
export { MistralProvider, type MistralConfig } from './providers/mistral.js';
|
|
12
12
|
export { AzureOpenAIProvider, type AzureOpenAIConfig } from './providers/azure.js';
|
|
13
|
+
export { CohereProvider, type CohereConfig } from './providers/cohere.js';
|
|
14
|
+
export { JinaProvider, type JinaConfig } from './providers/jina.js';
|
|
13
15
|
export { toolDefinition, dynamicTool, ToolBuilder, toolToSchema, pauseForClientTools, isPauseForClientToolsChunk, } from './tool.js';
|
|
14
16
|
export type { PauseForClientToolsChunk } from './tool.js';
|
|
15
17
|
export { zodToJsonSchema } from './zod-to-json-schema.js';
|
|
@@ -19,12 +21,14 @@ export { runOnConfig, runOnChunk, runOnBeforeToolCall, runOnAfterToolCall, runSe
|
|
|
19
21
|
export { Output, type OutputWrapper } from './output.js';
|
|
20
22
|
export { MemoryConversationStore } from './conversation.js';
|
|
21
23
|
export { AI } from './facade.js';
|
|
22
|
-
export {
|
|
24
|
+
export { AiProvider } from './provider.js';
|
|
23
25
|
export { ImageGenerator } from './image.js';
|
|
24
26
|
export { AudioGenerator } from './audio.js';
|
|
25
27
|
export { Transcription } from './transcription.js';
|
|
26
28
|
export { WebSearch, WebFetch, CodeExecution } from './provider-tools.js';
|
|
27
29
|
export { toVercelDataStream, toVercelResponse } from './vercel-protocol.js';
|
|
30
|
+
export { Reranker } from './rerank.js';
|
|
31
|
+
export { FileManager } from './files.js';
|
|
28
32
|
export { CachedEmbeddingAdapter } from './cached-embedding.js';
|
|
29
33
|
export { AiFake } from './fake.js';
|
|
30
34
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,IAAI,QAAQ,EAAE,eAAe,IAAI,KAAK,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAGrI,YAAY,EACV,kBAAkB,EAClB,UAAU,EACV,SAAS,EACT,WAAW,EACX,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,OAAO,EACP,oBAAoB,EACpB,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,QAAQ,EACR,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,IAAI,EACJ,WAAW,EACX,UAAU,EACV,QAAQ,EACR,eAAe,EACf,UAAU,EACV,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -13,6 +13,8 @@ export { XaiProvider } from './providers/xai.js';
|
|
|
13
13
|
export { GroqProvider } from './providers/groq.js';
|
|
14
14
|
export { MistralProvider } from './providers/mistral.js';
|
|
15
15
|
export { AzureOpenAIProvider } from './providers/azure.js';
|
|
16
|
+
export { CohereProvider } from './providers/cohere.js';
|
|
17
|
+
export { JinaProvider } from './providers/jina.js';
|
|
16
18
|
// Tools
|
|
17
19
|
export { toolDefinition, dynamicTool, ToolBuilder, toolToSchema, pauseForClientTools, isPauseForClientToolsChunk, } from './tool.js';
|
|
18
20
|
export { zodToJsonSchema } from './zod-to-json-schema.js';
|
|
@@ -27,8 +29,8 @@ export { Output } from './output.js';
|
|
|
27
29
|
export { MemoryConversationStore } from './conversation.js';
|
|
28
30
|
// Facade
|
|
29
31
|
export { AI } from './facade.js';
|
|
30
|
-
// ServiceProvider
|
|
31
|
-
export {
|
|
32
|
+
// ServiceProvider
|
|
33
|
+
export { AiProvider } from './provider.js';
|
|
32
34
|
// Image Generation
|
|
33
35
|
export { ImageGenerator } from './image.js';
|
|
34
36
|
// Audio (TTS & STT)
|
|
@@ -38,6 +40,10 @@ export { Transcription } from './transcription.js';
|
|
|
38
40
|
export { WebSearch, WebFetch, CodeExecution } from './provider-tools.js';
|
|
39
41
|
// Vercel AI Protocol
|
|
40
42
|
export { toVercelDataStream, toVercelResponse } from './vercel-protocol.js';
|
|
43
|
+
// Reranking
|
|
44
|
+
export { Reranker } from './rerank.js';
|
|
45
|
+
// File Management
|
|
46
|
+
export { FileManager } from './files.js';
|
|
41
47
|
// Cached Embeddings
|
|
42
48
|
export { CachedEmbeddingAdapter } from './cached-embedding.js';
|
|
43
49
|
// Testing
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,cAAc;AACd,OAAO,EAAE,kBAAkB,IAAI,QAAQ,EAAE,eAAe,IAAI,KAAK,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,cAAc;AACd,OAAO,EAAE,kBAAkB,IAAI,QAAQ,EAAE,eAAe,IAAI,KAAK,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAkErI,WAAW;AACX,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,YAAY;AACZ,OAAO,EAAE,iBAAiB,EAAwB,MAAM,0BAA0B,CAAA;AAClF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAqB,MAAM,uBAAuB,CAAA;AACxF,OAAO,EAAE,cAAc,EAAqB,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAqB,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAuB,MAAM,yBAAyB,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAkB,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAmB,MAAM,qBAAqB,CAAA;AACnE,OAAO,EAAE,eAAe,EAAsB,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EAAE,mBAAmB,EAA0B,MAAM,sBAAsB,CAAA;AAClF,OAAO,EAAE,cAAc,EAAqB,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,YAAY,EAAmB,MAAM,qBAAqB,CAAA;AAEnE,QAAQ;AACR,OAAO,EACL,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC3G,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEpD,aAAa;AACb,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAErJ,oBAAoB;AACpB,OAAO,EAAE,MAAM,EAAsB,MAAM,aAAa,CAAA;AAExD,eAAe;AACf,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAE3D,SAAS;AACT,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,kBAAkB;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,iBAAiB;AACjB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExE,qBAAqB;AACrB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE3E,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,oBAAoB;AACpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAE9D,UAAU;AACV,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI agent event observers — process-wide pub/sub for agent executions
|
|
3
|
+
* made through `@rudderjs/ai`. Any package can subscribe to be notified
|
|
4
|
+
* about completed or failed agent runs.
|
|
5
|
+
*
|
|
6
|
+
* Used today by `@rudderjs/telescope`'s AiCollector to record agent
|
|
7
|
+
* executions into the dashboard. The registry is defined here (inside
|
|
8
|
+
* `@rudderjs/ai`) so the observer contract lives with the package that
|
|
9
|
+
* owns the AI abstraction.
|
|
10
|
+
*/
|
|
11
|
+
export interface AiObserverToolCall {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
args: unknown;
|
|
15
|
+
result: unknown;
|
|
16
|
+
duration: number;
|
|
17
|
+
needsApproval: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface AiObserverStep {
|
|
20
|
+
iteration: number;
|
|
21
|
+
model: string;
|
|
22
|
+
tokens: {
|
|
23
|
+
prompt: number;
|
|
24
|
+
completion: number;
|
|
25
|
+
total: number;
|
|
26
|
+
};
|
|
27
|
+
finishReason: string;
|
|
28
|
+
toolCalls: AiObserverToolCall[];
|
|
29
|
+
}
|
|
30
|
+
/** Discriminated union of every event the AI agent loop can emit. */
|
|
31
|
+
export type AiEvent = {
|
|
32
|
+
kind: 'agent.completed';
|
|
33
|
+
agentName: string;
|
|
34
|
+
model: string;
|
|
35
|
+
provider: string;
|
|
36
|
+
input: string;
|
|
37
|
+
output: string;
|
|
38
|
+
steps: AiObserverStep[];
|
|
39
|
+
tokens: {
|
|
40
|
+
prompt: number;
|
|
41
|
+
completion: number;
|
|
42
|
+
total: number;
|
|
43
|
+
};
|
|
44
|
+
duration: number;
|
|
45
|
+
finishReason: string;
|
|
46
|
+
streaming: boolean;
|
|
47
|
+
conversationId: string | null;
|
|
48
|
+
failoverAttempts: number;
|
|
49
|
+
} | {
|
|
50
|
+
kind: 'agent.failed';
|
|
51
|
+
agentName: string;
|
|
52
|
+
model: string;
|
|
53
|
+
provider: string;
|
|
54
|
+
input: string;
|
|
55
|
+
output: string;
|
|
56
|
+
steps: AiObserverStep[];
|
|
57
|
+
tokens: {
|
|
58
|
+
prompt: number;
|
|
59
|
+
completion: number;
|
|
60
|
+
total: number;
|
|
61
|
+
};
|
|
62
|
+
duration: number;
|
|
63
|
+
finishReason: string;
|
|
64
|
+
streaming: boolean;
|
|
65
|
+
conversationId: string | null;
|
|
66
|
+
failoverAttempts: number;
|
|
67
|
+
error: string;
|
|
68
|
+
};
|
|
69
|
+
export type AiObserver = (event: AiEvent) => void;
|
|
70
|
+
export declare class AiObserverRegistry {
|
|
71
|
+
private observers;
|
|
72
|
+
/** Subscribe; returns an unsubscribe function. */
|
|
73
|
+
subscribe(fn: AiObserver): () => void;
|
|
74
|
+
/**
|
|
75
|
+
* Called by `runAgentLoop()` / `runAgentLoopStreaming()` after each
|
|
76
|
+
* agent execution. Errors thrown by observers are swallowed —
|
|
77
|
+
* observability must never break agent runs.
|
|
78
|
+
*/
|
|
79
|
+
emit(event: AiEvent): void;
|
|
80
|
+
/** @internal — used in tests */
|
|
81
|
+
reset(): void;
|
|
82
|
+
}
|
|
83
|
+
export declare const aiObservers: AiObserverRegistry;
|
|
84
|
+
//# sourceMappingURL=observers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observers.d.ts","sourceRoot":"","sources":["../src/observers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAa,MAAM,CAAA;IACrB,IAAI,EAAW,MAAM,CAAA;IACrB,IAAI,EAAW,OAAO,CAAA;IACtB,MAAM,EAAS,OAAO,CAAA;IACtB,QAAQ,EAAO,MAAM,CAAA;IACrB,aAAa,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAK,MAAM,CAAA;IACpB,KAAK,EAAS,MAAM,CAAA;IACpB,MAAM,EAAQ;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACnE,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAK,kBAAkB,EAAE,CAAA;CACnC;AAED,qEAAqE;AACrE,MAAM,MAAM,OAAO,GACf;IACE,IAAI,EAAc,iBAAiB,CAAA;IACnC,SAAS,EAAS,MAAM,CAAA;IACxB,KAAK,EAAa,MAAM,CAAA;IACxB,QAAQ,EAAU,MAAM,CAAA;IACxB,KAAK,EAAa,MAAM,CAAA;IACxB,MAAM,EAAY,MAAM,CAAA;IACxB,KAAK,EAAa,cAAc,EAAE,CAAA;IAClC,MAAM,EAAY;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACvE,QAAQ,EAAU,MAAM,CAAA;IACxB,YAAY,EAAM,MAAM,CAAA;IACxB,SAAS,EAAS,OAAO,CAAA;IACzB,cAAc,EAAI,MAAM,GAAG,IAAI,CAAA;IAC/B,gBAAgB,EAAE,MAAM,CAAA;CACzB,GACD;IACE,IAAI,EAAc,cAAc,CAAA;IAChC,SAAS,EAAS,MAAM,CAAA;IACxB,KAAK,EAAa,MAAM,CAAA;IACxB,QAAQ,EAAU,MAAM,CAAA;IACxB,KAAK,EAAa,MAAM,CAAA;IACxB,MAAM,EAAY,MAAM,CAAA;IACxB,KAAK,EAAa,cAAc,EAAE,CAAA;IAClC,MAAM,EAAY;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACvE,QAAQ,EAAU,MAAM,CAAA;IACxB,YAAY,EAAM,MAAM,CAAA;IACxB,SAAS,EAAS,OAAO,CAAA;IACzB,cAAc,EAAI,MAAM,GAAG,IAAI,CAAA;IAC/B,gBAAgB,EAAE,MAAM,CAAA;IACxB,KAAK,EAAa,MAAM,CAAA;CACzB,CAAA;AAEL,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;AAEjD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAAmB;IAEpC,kDAAkD;IAClD,SAAS,CAAC,EAAE,EAAE,UAAU,GAAG,MAAM,IAAI;IAKrC;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAM1B,gCAAgC;IAChC,KAAK,IAAI,IAAI;CACd;AAQD,eAAO,MAAM,WAAW,EAAsC,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI agent event observers — process-wide pub/sub for agent executions
|
|
3
|
+
* made through `@rudderjs/ai`. Any package can subscribe to be notified
|
|
4
|
+
* about completed or failed agent runs.
|
|
5
|
+
*
|
|
6
|
+
* Used today by `@rudderjs/telescope`'s AiCollector to record agent
|
|
7
|
+
* executions into the dashboard. The registry is defined here (inside
|
|
8
|
+
* `@rudderjs/ai`) so the observer contract lives with the package that
|
|
9
|
+
* owns the AI abstraction.
|
|
10
|
+
*/
|
|
11
|
+
export class AiObserverRegistry {
|
|
12
|
+
observers = [];
|
|
13
|
+
/** Subscribe; returns an unsubscribe function. */
|
|
14
|
+
subscribe(fn) {
|
|
15
|
+
this.observers.push(fn);
|
|
16
|
+
return () => { this.observers = this.observers.filter(o => o !== fn); };
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Called by `runAgentLoop()` / `runAgentLoopStreaming()` after each
|
|
20
|
+
* agent execution. Errors thrown by observers are swallowed —
|
|
21
|
+
* observability must never break agent runs.
|
|
22
|
+
*/
|
|
23
|
+
emit(event) {
|
|
24
|
+
for (const o of this.observers) {
|
|
25
|
+
try {
|
|
26
|
+
o(event);
|
|
27
|
+
}
|
|
28
|
+
catch { /* observer errors must not break agents */ }
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** @internal — used in tests */
|
|
32
|
+
reset() { this.observers = []; }
|
|
33
|
+
}
|
|
34
|
+
// Process-wide singleton, like `httpObservers` in `@rudderjs/http`.
|
|
35
|
+
const _g = globalThis;
|
|
36
|
+
if (!_g['__rudderjs_ai_observers__']) {
|
|
37
|
+
_g['__rudderjs_ai_observers__'] = new AiObserverRegistry();
|
|
38
|
+
}
|
|
39
|
+
export const aiObservers = _g['__rudderjs_ai_observers__'];
|
|
40
|
+
//# sourceMappingURL=observers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observers.js","sourceRoot":"","sources":["../src/observers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAyDH,MAAM,OAAO,kBAAkB;IACrB,SAAS,GAAiB,EAAE,CAAA;IAEpC,kDAAkD;IAClD,SAAS,CAAC,EAAc;QACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACvB,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA,CAAC,CAAC,CAAA;IACxE,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,KAAc;QACjB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC;gBAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,2CAA2C,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,KAAK,KAAW,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA,CAAC,CAAC;CACtC;AAED,oEAAoE;AACpE,MAAM,EAAE,GAAG,UAAqC,CAAA;AAChD,IAAI,CAAC,EAAE,CAAC,2BAA2B,CAAC,EAAE,CAAC;IACrC,EAAE,CAAC,2BAA2B,CAAC,GAAG,IAAI,kBAAkB,EAAE,CAAA;AAC5D,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC,2BAA2B,CAAuB,CAAA"}
|
package/dist/provider.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { ServiceProvider
|
|
2
|
-
import type { AiConfig } from './types.js';
|
|
1
|
+
import { ServiceProvider } from '@rudderjs/core';
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
3
|
+
* AI ServiceProvider — reads config from `config('ai')`.
|
|
5
4
|
*
|
|
6
5
|
* @example
|
|
7
6
|
* // bootstrap/providers.ts
|
|
8
|
-
* import {
|
|
9
|
-
* export default [
|
|
7
|
+
* import { AiProvider } from '@rudderjs/ai'
|
|
8
|
+
* export default [AiProvider, ...]
|
|
10
9
|
*/
|
|
11
|
-
export declare
|
|
10
|
+
export declare class AiProvider extends ServiceProvider {
|
|
11
|
+
register(): void;
|
|
12
|
+
boot(): Promise<void>;
|
|
13
|
+
}
|
|
12
14
|
//# sourceMappingURL=provider.d.ts.map
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAU,MAAM,gBAAgB,CAAA;AAKxD;;;;;;;GAOG;AACH,qBAAa,UAAW,SAAQ,eAAe;IAC7C,QAAQ,IAAI,IAAI;IAEV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CA+E5B"}
|