@rudderjs/ai 0.0.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/LICENSE +21 -0
- package/README.md +461 -0
- package/boost/guidelines.md +150 -0
- package/dist/agent.d.ts +74 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +1070 -0
- package/dist/agent.js.map +1 -0
- package/dist/attachment.d.ts +35 -0
- package/dist/attachment.d.ts.map +1 -0
- package/dist/attachment.js +121 -0
- package/dist/attachment.js.map +1 -0
- package/dist/audio.d.ts +33 -0
- package/dist/audio.d.ts.map +1 -0
- package/dist/audio.js +76 -0
- package/dist/audio.js.map +1 -0
- package/dist/cached-embedding.d.ts +14 -0
- package/dist/cached-embedding.d.ts.map +1 -0
- package/dist/cached-embedding.js +44 -0
- package/dist/cached-embedding.js.map +1 -0
- package/dist/conversation.d.ts +16 -0
- package/dist/conversation.d.ts.map +1 -0
- package/dist/conversation.js +53 -0
- package/dist/conversation.js.map +1 -0
- package/dist/facade.d.ts +53 -0
- package/dist/facade.d.ts.map +1 -0
- package/dist/facade.js +100 -0
- package/dist/facade.js.map +1 -0
- package/dist/fake.d.ts +55 -0
- package/dist/fake.d.ts.map +1 -0
- package/dist/fake.js +172 -0
- package/dist/fake.js.map +1 -0
- package/dist/image.d.ts +27 -0
- package/dist/image.d.ts.map +1 -0
- package/dist/image.js +90 -0
- package/dist/image.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware.d.ts +18 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +72 -0
- package/dist/middleware.js.map +1 -0
- package/dist/output.d.ts +22 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +55 -0
- package/dist/output.js.map +1 -0
- package/dist/provider-tools.d.ts +60 -0
- package/dist/provider-tools.d.ts.map +1 -0
- package/dist/provider-tools.js +133 -0
- package/dist/provider-tools.js.map +1 -0
- package/dist/provider.d.ts +12 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +94 -0
- package/dist/provider.js.map +1 -0
- package/dist/providers/anthropic.d.ts +12 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +221 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/azure.d.ts +13 -0
- package/dist/providers/azure.d.ts.map +1 -0
- package/dist/providers/azure.js +15 -0
- package/dist/providers/azure.js.map +1 -0
- package/dist/providers/deepseek.d.ts +12 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +15 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/google.d.ts +13 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +293 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/groq.d.ts +12 -0
- package/dist/providers/groq.d.ts.map +1 -0
- package/dist/providers/groq.js +15 -0
- package/dist/providers/groq.js.map +1 -0
- package/dist/providers/mistral.d.ts +13 -0
- package/dist/providers/mistral.d.ts.map +1 -0
- package/dist/providers/mistral.js +46 -0
- package/dist/providers/mistral.js.map +1 -0
- package/dist/providers/ollama.d.ts +11 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +15 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +26 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +374 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/xai.d.ts +12 -0
- package/dist/providers/xai.d.ts.map +1 -0
- package/dist/providers/xai.js +15 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/queue-job.d.ts +35 -0
- package/dist/queue-job.d.ts.map +1 -0
- package/dist/queue-job.js +82 -0
- package/dist/queue-job.js.map +1 -0
- package/dist/registry.d.ts +25 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +54 -0
- package/dist/registry.js.map +1 -0
- package/dist/tool.d.ts +157 -0
- package/dist/tool.d.ts.map +1 -0
- package/dist/tool.js +134 -0
- package/dist/tool.js.map +1 -0
- package/dist/transcription.d.ts +28 -0
- package/dist/transcription.d.ts.map +1 -0
- package/dist/transcription.js +63 -0
- package/dist/transcription.js.map +1 -0
- package/dist/types.d.ts +439 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/vercel-protocol.d.ts +18 -0
- package/dist/vercel-protocol.d.ts.map +1 -0
- package/dist/vercel-protocol.js +75 -0
- package/dist/vercel-protocol.js.map +1 -0
- package/dist/zod-to-json-schema.d.ts +8 -0
- package/dist/zod-to-json-schema.d.ts.map +1 -0
- package/dist/zod-to-json-schema.js +86 -0
- package/dist/zod-to-json-schema.js.map +1 -0
- package/package.json +45 -0
package/dist/facade.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { AiRegistry } from './registry.js';
|
|
2
|
+
import { agent as agentHelper } from './agent.js';
|
|
3
|
+
import { ImageGenerator } from './image.js';
|
|
4
|
+
import { AudioGenerator } from './audio.js';
|
|
5
|
+
import { Transcription } from './transcription.js';
|
|
6
|
+
import { CachedEmbeddingAdapter } from './cached-embedding.js';
|
|
7
|
+
/**
|
|
8
|
+
* AI facade — static entry point for quick prompts, embeddings, and image generation.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* const response = await AI.prompt('Hello')
|
|
12
|
+
* const a = AI.agent('You are helpful.')
|
|
13
|
+
* const result = await AI.embed('Some text')
|
|
14
|
+
* const image = await AI.image('A sunset').generate()
|
|
15
|
+
*/
|
|
16
|
+
export class AI {
|
|
17
|
+
/** Quick prompt with default model */
|
|
18
|
+
static async prompt(input, options) {
|
|
19
|
+
const opts = {
|
|
20
|
+
instructions: 'You are a helpful assistant.',
|
|
21
|
+
};
|
|
22
|
+
if (options?.model)
|
|
23
|
+
opts.model = options.model;
|
|
24
|
+
return agentHelper(opts).prompt(input);
|
|
25
|
+
}
|
|
26
|
+
/** Create an anonymous agent */
|
|
27
|
+
static agent(instructionsOrOptions) {
|
|
28
|
+
return agentHelper(instructionsOrOptions);
|
|
29
|
+
}
|
|
30
|
+
/** Create an image generator with a fluent API */
|
|
31
|
+
static image(prompt) {
|
|
32
|
+
return ImageGenerator.of(prompt);
|
|
33
|
+
}
|
|
34
|
+
/** Create a text-to-speech audio generator */
|
|
35
|
+
static audio(text) {
|
|
36
|
+
return AudioGenerator.of(text);
|
|
37
|
+
}
|
|
38
|
+
/** Create a speech-to-text transcription */
|
|
39
|
+
static transcribe(pathOrBuffer) {
|
|
40
|
+
return typeof pathOrBuffer === 'string'
|
|
41
|
+
? Transcription.fromPath(pathOrBuffer)
|
|
42
|
+
: Transcription.fromBuffer(pathOrBuffer);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Generate embeddings for text.
|
|
46
|
+
*
|
|
47
|
+
* Large arrays (100+ items) are automatically chunked into batches.
|
|
48
|
+
* Pass `cache: true` to enable in-memory caching of embeddings.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* const result = await AI.embed('Hello world')
|
|
52
|
+
* const result = await AI.embed(['text1', 'text2'])
|
|
53
|
+
* const result = await AI.embed('text', { model: 'openai/text-embedding-3-small' })
|
|
54
|
+
* const result = await AI.embed('text', { cache: true })
|
|
55
|
+
*/
|
|
56
|
+
static async embed(input, options) {
|
|
57
|
+
const modelString = options?.model ?? AiRegistry.getDefault();
|
|
58
|
+
const [providerName, modelId] = AiRegistry.parseModelString(modelString);
|
|
59
|
+
const factory = AiRegistry.getFactory(providerName);
|
|
60
|
+
if (!factory.createEmbedding) {
|
|
61
|
+
throw new Error(`[RudderJS AI] Provider "${providerName}" does not support embeddings. ` +
|
|
62
|
+
`Use a provider that implements createEmbedding() (e.g. openai, google, mistral).`);
|
|
63
|
+
}
|
|
64
|
+
let adapter = factory.createEmbedding(modelId);
|
|
65
|
+
if (options?.cache) {
|
|
66
|
+
adapter = AI.getCachedAdapter(adapter);
|
|
67
|
+
}
|
|
68
|
+
// Batch chunking for large arrays
|
|
69
|
+
const inputs = Array.isArray(input) ? input : [input];
|
|
70
|
+
if (inputs.length > 100) {
|
|
71
|
+
const batches = [];
|
|
72
|
+
for (let i = 0; i < inputs.length; i += 100) {
|
|
73
|
+
batches.push(inputs.slice(i, i + 100));
|
|
74
|
+
}
|
|
75
|
+
const results = [];
|
|
76
|
+
for (const batch of batches) {
|
|
77
|
+
results.push(await adapter.embed(batch, modelId));
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
embeddings: results.flatMap(r => r.embeddings),
|
|
81
|
+
usage: {
|
|
82
|
+
promptTokens: results.reduce((sum, r) => sum + r.usage.promptTokens, 0),
|
|
83
|
+
totalTokens: results.reduce((sum, r) => sum + r.usage.totalTokens, 0),
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return adapter.embed(inputs.length === 1 ? inputs[0] : inputs, modelId);
|
|
88
|
+
}
|
|
89
|
+
/** Cache adapter instances so the in-memory cache persists across calls. */
|
|
90
|
+
static cachedAdapters = new WeakMap();
|
|
91
|
+
static getCachedAdapter(inner) {
|
|
92
|
+
let cached = AI.cachedAdapters.get(inner);
|
|
93
|
+
if (!cached) {
|
|
94
|
+
cached = new CachedEmbeddingAdapter(inner);
|
|
95
|
+
AI.cachedAdapters.set(inner, cached);
|
|
96
|
+
}
|
|
97
|
+
return cached;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=facade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facade.js","sourceRoot":"","sources":["../src/facade.ts"],"names":[],"mappings":"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"}
|
package/dist/fake.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { ProviderRequestOptions, ImageGenerationOptions, TextToSpeechOptions, SpeechToTextOptions } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Testing fake for @rudderjs/ai.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* const fake = AiFake.fake()
|
|
7
|
+
* fake.respondWith('Mocked response')
|
|
8
|
+
*
|
|
9
|
+
* const response = await AI.prompt('Hello')
|
|
10
|
+
* assert.strictEqual(response.text, 'Mocked response')
|
|
11
|
+
*
|
|
12
|
+
* fake.assertPrompted(input => input.includes('Hello'))
|
|
13
|
+
* fake.restore()
|
|
14
|
+
*/
|
|
15
|
+
export declare class AiFake {
|
|
16
|
+
private readonly calls;
|
|
17
|
+
private readonly imageCalls;
|
|
18
|
+
private readonly ttsCalls;
|
|
19
|
+
private readonly sttCalls;
|
|
20
|
+
private _response;
|
|
21
|
+
private _imageResponse;
|
|
22
|
+
private _ttsResponse;
|
|
23
|
+
private _sttResponse;
|
|
24
|
+
/** Set the text response the fake will return */
|
|
25
|
+
respondWith(text: string): void;
|
|
26
|
+
/** Set the base64 image the fake will return */
|
|
27
|
+
respondWithImage(base64: string): void;
|
|
28
|
+
/** Set the audio buffer the TTS fake will return */
|
|
29
|
+
respondWithAudio(audio: Buffer): void;
|
|
30
|
+
/** Set the transcription text the STT fake will return */
|
|
31
|
+
respondWithTranscription(text: string): void;
|
|
32
|
+
/** Install the fake — replaces all registered providers with a mock */
|
|
33
|
+
static fake(): AiFake;
|
|
34
|
+
/** Assert at least one prompt was sent, optionally matching a predicate */
|
|
35
|
+
assertPrompted(predicate?: (input: string) => boolean): void;
|
|
36
|
+
/** Assert no prompts were sent */
|
|
37
|
+
assertNothingPrompted(): void;
|
|
38
|
+
/** Assert at least one image generation was made */
|
|
39
|
+
assertImageGenerated(predicate?: (prompt: string) => boolean): void;
|
|
40
|
+
/** Assert at least one TTS generation was made */
|
|
41
|
+
assertAudioGenerated(predicate?: (text: string) => boolean): void;
|
|
42
|
+
/** Assert at least one transcription was made */
|
|
43
|
+
assertTranscribed(predicate?: (opts: SpeechToTextOptions) => boolean): void;
|
|
44
|
+
/** Get all recorded provider calls */
|
|
45
|
+
getCalls(): ProviderRequestOptions[];
|
|
46
|
+
/** Get all recorded image generation calls */
|
|
47
|
+
getImageCalls(): ImageGenerationOptions[];
|
|
48
|
+
/** Get all recorded TTS calls */
|
|
49
|
+
getTtsCalls(): TextToSpeechOptions[];
|
|
50
|
+
/** Get all recorded STT calls */
|
|
51
|
+
getSttCalls(): SpeechToTextOptions[];
|
|
52
|
+
/** Restore — clears the fake (user must re-register real providers) */
|
|
53
|
+
restore(): void;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=fake.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake.d.ts","sourceRoot":"","sources":["../src/fake.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,sBAAsB,EAItB,sBAAsB,EAGtB,mBAAmB,EAGnB,mBAAmB,EAEpB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;GAYG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+B;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,YAAY,CAAuB;IAE3C,iDAAiD;IACjD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,gDAAgD;IAChD,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAItC,oDAAoD;IACpD,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC,0DAA0D;IAC1D,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5C,uEAAuE;IACvE,MAAM,CAAC,IAAI,IAAI,MAAM;IAiErB,2EAA2E;IAC3E,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI;IAa5D,kCAAkC;IAClC,qBAAqB,IAAI,IAAI;IAM7B,oDAAoD;IACpD,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI;IAQnE,kDAAkD;IAClD,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI;IAQjE,iDAAiD;IACjD,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,OAAO,GAAG,IAAI;IAQ3E,sCAAsC;IACtC,QAAQ,IAAI,sBAAsB,EAAE;IAIpC,8CAA8C;IAC9C,aAAa,IAAI,sBAAsB,EAAE;IAIzC,iCAAiC;IACjC,WAAW,IAAI,mBAAmB,EAAE;IAIpC,iCAAiC;IACjC,WAAW,IAAI,mBAAmB,EAAE;IAIpC,uEAAuE;IACvE,OAAO,IAAI,IAAI;CAGhB"}
|
package/dist/fake.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { AiRegistry } from './registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Testing fake for @rudderjs/ai.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* const fake = AiFake.fake()
|
|
7
|
+
* fake.respondWith('Mocked response')
|
|
8
|
+
*
|
|
9
|
+
* const response = await AI.prompt('Hello')
|
|
10
|
+
* assert.strictEqual(response.text, 'Mocked response')
|
|
11
|
+
*
|
|
12
|
+
* fake.assertPrompted(input => input.includes('Hello'))
|
|
13
|
+
* fake.restore()
|
|
14
|
+
*/
|
|
15
|
+
export class AiFake {
|
|
16
|
+
calls = [];
|
|
17
|
+
imageCalls = [];
|
|
18
|
+
ttsCalls = [];
|
|
19
|
+
sttCalls = [];
|
|
20
|
+
_response = 'fake response';
|
|
21
|
+
_imageResponse = 'ZmFrZS1pbWFnZQ=='; // base64 of 'fake-image'
|
|
22
|
+
_ttsResponse = Buffer.from('fake-audio');
|
|
23
|
+
_sttResponse = 'fake transcription';
|
|
24
|
+
/** Set the text response the fake will return */
|
|
25
|
+
respondWith(text) {
|
|
26
|
+
this._response = text;
|
|
27
|
+
}
|
|
28
|
+
/** Set the base64 image the fake will return */
|
|
29
|
+
respondWithImage(base64) {
|
|
30
|
+
this._imageResponse = base64;
|
|
31
|
+
}
|
|
32
|
+
/** Set the audio buffer the TTS fake will return */
|
|
33
|
+
respondWithAudio(audio) {
|
|
34
|
+
this._ttsResponse = audio;
|
|
35
|
+
}
|
|
36
|
+
/** Set the transcription text the STT fake will return */
|
|
37
|
+
respondWithTranscription(text) {
|
|
38
|
+
this._sttResponse = text;
|
|
39
|
+
}
|
|
40
|
+
/** Install the fake — replaces all registered providers with a mock */
|
|
41
|
+
static fake() {
|
|
42
|
+
const fake = new AiFake();
|
|
43
|
+
const adapter = {
|
|
44
|
+
async generate(opts) {
|
|
45
|
+
fake.calls.push(opts);
|
|
46
|
+
return {
|
|
47
|
+
message: { role: 'assistant', content: fake._response },
|
|
48
|
+
usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
|
|
49
|
+
finishReason: 'stop',
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
async *stream(opts) {
|
|
53
|
+
fake.calls.push(opts);
|
|
54
|
+
yield { type: 'text-delta', text: fake._response };
|
|
55
|
+
yield { type: 'finish', finishReason: 'stop', usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 } };
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
const imageAdapter = {
|
|
59
|
+
async generate(opts) {
|
|
60
|
+
fake.imageCalls.push(opts);
|
|
61
|
+
return {
|
|
62
|
+
images: [{ base64: fake._imageResponse }],
|
|
63
|
+
model: opts.model ?? 'fake-image',
|
|
64
|
+
};
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
const ttsAdapter = {
|
|
68
|
+
async generate(opts) {
|
|
69
|
+
fake.ttsCalls.push(opts);
|
|
70
|
+
return {
|
|
71
|
+
audio: fake._ttsResponse,
|
|
72
|
+
format: opts.format ?? 'mp3',
|
|
73
|
+
model: opts.model ?? 'fake-tts',
|
|
74
|
+
};
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
const sttAdapter = {
|
|
78
|
+
async transcribe(opts) {
|
|
79
|
+
fake.sttCalls.push(opts);
|
|
80
|
+
return {
|
|
81
|
+
text: fake._sttResponse,
|
|
82
|
+
language: opts.language,
|
|
83
|
+
model: opts.model ?? 'fake-stt',
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
const factory = {
|
|
88
|
+
name: '__fake__',
|
|
89
|
+
create: () => adapter,
|
|
90
|
+
createImage: () => imageAdapter,
|
|
91
|
+
createTts: () => ttsAdapter,
|
|
92
|
+
createStt: () => sttAdapter,
|
|
93
|
+
};
|
|
94
|
+
AiRegistry.reset();
|
|
95
|
+
AiRegistry.register(factory);
|
|
96
|
+
AiRegistry.setDefault('__fake__/default');
|
|
97
|
+
return fake;
|
|
98
|
+
}
|
|
99
|
+
/** Assert at least one prompt was sent, optionally matching a predicate */
|
|
100
|
+
assertPrompted(predicate) {
|
|
101
|
+
if (this.calls.length === 0)
|
|
102
|
+
throw new Error('[RudderJS AI] Expected at least one prompt, but none were sent.');
|
|
103
|
+
if (predicate) {
|
|
104
|
+
const match = this.calls.some(c => {
|
|
105
|
+
const userMsg = c.messages.find(m => m.role === 'user');
|
|
106
|
+
if (!userMsg)
|
|
107
|
+
return false;
|
|
108
|
+
const text = typeof userMsg.content === 'string' ? userMsg.content : userMsg.content.filter(p => p.type === 'text').map(p => p.text).join('');
|
|
109
|
+
return predicate(text);
|
|
110
|
+
});
|
|
111
|
+
if (!match)
|
|
112
|
+
throw new Error('[RudderJS AI] No prompt matched the predicate.');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/** Assert no prompts were sent */
|
|
116
|
+
assertNothingPrompted() {
|
|
117
|
+
if (this.calls.length > 0) {
|
|
118
|
+
throw new Error(`[RudderJS AI] Expected no prompts, but ${this.calls.length} were sent.`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/** Assert at least one image generation was made */
|
|
122
|
+
assertImageGenerated(predicate) {
|
|
123
|
+
if (this.imageCalls.length === 0)
|
|
124
|
+
throw new Error('[RudderJS AI] Expected at least one image generation, but none were made.');
|
|
125
|
+
if (predicate) {
|
|
126
|
+
const match = this.imageCalls.some(c => predicate(c.prompt));
|
|
127
|
+
if (!match)
|
|
128
|
+
throw new Error('[RudderJS AI] No image generation matched the predicate.');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/** Assert at least one TTS generation was made */
|
|
132
|
+
assertAudioGenerated(predicate) {
|
|
133
|
+
if (this.ttsCalls.length === 0)
|
|
134
|
+
throw new Error('[RudderJS AI] Expected at least one audio generation, but none were made.');
|
|
135
|
+
if (predicate) {
|
|
136
|
+
const match = this.ttsCalls.some(c => predicate(c.text));
|
|
137
|
+
if (!match)
|
|
138
|
+
throw new Error('[RudderJS AI] No audio generation matched the predicate.');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/** Assert at least one transcription was made */
|
|
142
|
+
assertTranscribed(predicate) {
|
|
143
|
+
if (this.sttCalls.length === 0)
|
|
144
|
+
throw new Error('[RudderJS AI] Expected at least one transcription, but none were made.');
|
|
145
|
+
if (predicate) {
|
|
146
|
+
const match = this.sttCalls.some(c => predicate(c));
|
|
147
|
+
if (!match)
|
|
148
|
+
throw new Error('[RudderJS AI] No transcription matched the predicate.');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/** Get all recorded provider calls */
|
|
152
|
+
getCalls() {
|
|
153
|
+
return [...this.calls];
|
|
154
|
+
}
|
|
155
|
+
/** Get all recorded image generation calls */
|
|
156
|
+
getImageCalls() {
|
|
157
|
+
return [...this.imageCalls];
|
|
158
|
+
}
|
|
159
|
+
/** Get all recorded TTS calls */
|
|
160
|
+
getTtsCalls() {
|
|
161
|
+
return [...this.ttsCalls];
|
|
162
|
+
}
|
|
163
|
+
/** Get all recorded STT calls */
|
|
164
|
+
getSttCalls() {
|
|
165
|
+
return [...this.sttCalls];
|
|
166
|
+
}
|
|
167
|
+
/** Restore — clears the fake (user must re-register real providers) */
|
|
168
|
+
restore() {
|
|
169
|
+
AiRegistry.reset();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=fake.js.map
|
package/dist/fake.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake.js","sourceRoot":"","sources":["../src/fake.ts"],"names":[],"mappings":"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"}
|
package/dist/image.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ImageGenerationResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Fluent image generation facade.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* const result = await ImageGenerator.of('A sunset over mountains').size('landscape').generate()
|
|
7
|
+
* const path = await ImageGenerator.of('A logo').model('openai/dall-e-3').store('images/logo.png')
|
|
8
|
+
*/
|
|
9
|
+
export declare class ImageGenerator {
|
|
10
|
+
private readonly _prompt;
|
|
11
|
+
private _model;
|
|
12
|
+
private _size;
|
|
13
|
+
private _quality;
|
|
14
|
+
private _style;
|
|
15
|
+
private _n;
|
|
16
|
+
private constructor();
|
|
17
|
+
static of(prompt: string): ImageGenerator;
|
|
18
|
+
model(model: string): this;
|
|
19
|
+
size(size: string): this;
|
|
20
|
+
quality(quality: 'standard' | 'hd'): this;
|
|
21
|
+
style(style: 'natural' | 'vivid'): this;
|
|
22
|
+
count(n: number): this;
|
|
23
|
+
generate(): Promise<ImageGenerationResult>;
|
|
24
|
+
/** Generate and store the first image to storage. Requires @rudderjs/storage. */
|
|
25
|
+
store(path: string): Promise<string>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA0B,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAE/E;;;;;;GAMG;AACH,qBAAa,cAAc;IAOL,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN5C,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,EAAE,CAAoB;IAE9B,OAAO;IAEP,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAIzC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI;IAKzC,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,IAAI;IAKvC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKhB,QAAQ,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAuBhD,iFAAiF;IAC3E,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAwB3C"}
|
package/dist/image.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { AiRegistry } from './registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Fluent image generation facade.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* const result = await ImageGenerator.of('A sunset over mountains').size('landscape').generate()
|
|
7
|
+
* const path = await ImageGenerator.of('A logo').model('openai/dall-e-3').store('images/logo.png')
|
|
8
|
+
*/
|
|
9
|
+
export class ImageGenerator {
|
|
10
|
+
_prompt;
|
|
11
|
+
_model;
|
|
12
|
+
_size;
|
|
13
|
+
_quality;
|
|
14
|
+
_style;
|
|
15
|
+
_n;
|
|
16
|
+
constructor(_prompt) {
|
|
17
|
+
this._prompt = _prompt;
|
|
18
|
+
}
|
|
19
|
+
static of(prompt) {
|
|
20
|
+
return new ImageGenerator(prompt);
|
|
21
|
+
}
|
|
22
|
+
model(model) {
|
|
23
|
+
this._model = model;
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
size(size) {
|
|
27
|
+
this._size = size;
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
quality(quality) {
|
|
31
|
+
this._quality = quality;
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
style(style) {
|
|
35
|
+
this._style = style;
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
count(n) {
|
|
39
|
+
this._n = n;
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
async generate() {
|
|
43
|
+
const modelStr = this._model ?? AiRegistry.getDefault();
|
|
44
|
+
const [providerName, modelName] = AiRegistry.parseModelString(modelStr);
|
|
45
|
+
const factory = AiRegistry.getFactory(providerName);
|
|
46
|
+
if (!factory.createImage) {
|
|
47
|
+
throw new Error(`[RudderJS AI] Provider "${providerName}" does not support image generation.`);
|
|
48
|
+
}
|
|
49
|
+
const adapter = factory.createImage(modelName);
|
|
50
|
+
const options = {
|
|
51
|
+
prompt: this._prompt,
|
|
52
|
+
model: modelStr,
|
|
53
|
+
};
|
|
54
|
+
if (this._size !== undefined)
|
|
55
|
+
options.size = this._size;
|
|
56
|
+
if (this._quality !== undefined)
|
|
57
|
+
options.quality = this._quality;
|
|
58
|
+
if (this._style !== undefined)
|
|
59
|
+
options.style = this._style;
|
|
60
|
+
if (this._n !== undefined)
|
|
61
|
+
options.n = this._n;
|
|
62
|
+
return adapter.generate(options);
|
|
63
|
+
}
|
|
64
|
+
/** Generate and store the first image to storage. Requires @rudderjs/storage. */
|
|
65
|
+
async store(path) {
|
|
66
|
+
const result = await this.generate();
|
|
67
|
+
const image = result.images[0];
|
|
68
|
+
if (!image)
|
|
69
|
+
throw new Error('[RudderJS AI] No image generated.');
|
|
70
|
+
try {
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
72
|
+
const mod = await import(/* @vite-ignore */ '@rudderjs/storage');
|
|
73
|
+
const Storage = mod.Storage;
|
|
74
|
+
if (image.base64) {
|
|
75
|
+
const buffer = Buffer.from(image.base64, 'base64');
|
|
76
|
+
await Storage.put(path, buffer);
|
|
77
|
+
}
|
|
78
|
+
else if (image.url) {
|
|
79
|
+
const response = await fetch(image.url);
|
|
80
|
+
const buffer = Buffer.from(await response.arrayBuffer());
|
|
81
|
+
await Storage.put(path, buffer);
|
|
82
|
+
}
|
|
83
|
+
return path;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
throw new Error('[RudderJS AI] Image storage requires @rudderjs/storage to be installed.');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
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';
|
|
3
|
+
export { AiRegistry } from './registry.js';
|
|
4
|
+
export { AnthropicProvider, type AnthropicConfig } from './providers/anthropic.js';
|
|
5
|
+
export { OpenAIProvider, OpenAIAdapter, type OpenAIConfig } from './providers/openai.js';
|
|
6
|
+
export { GoogleProvider, type GoogleConfig } from './providers/google.js';
|
|
7
|
+
export { OllamaProvider, type OllamaConfig } from './providers/ollama.js';
|
|
8
|
+
export { DeepSeekProvider, type DeepSeekConfig } from './providers/deepseek.js';
|
|
9
|
+
export { XaiProvider, type XaiConfig } from './providers/xai.js';
|
|
10
|
+
export { GroqProvider, type GroqConfig } from './providers/groq.js';
|
|
11
|
+
export { MistralProvider, type MistralConfig } from './providers/mistral.js';
|
|
12
|
+
export { AzureOpenAIProvider, type AzureOpenAIConfig } from './providers/azure.js';
|
|
13
|
+
export { toolDefinition, dynamicTool, ToolBuilder, toolToSchema, pauseForClientTools, isPauseForClientToolsChunk, } from './tool.js';
|
|
14
|
+
export type { PauseForClientToolsChunk } from './tool.js';
|
|
15
|
+
export { zodToJsonSchema } from './zod-to-json-schema.js';
|
|
16
|
+
export { Agent, ConversableAgent, agent, stepCountIs, hasToolCall, setConversationStore } from './agent.js';
|
|
17
|
+
export { QueuedPromptBuilder } from './queue-job.js';
|
|
18
|
+
export { runOnConfig, runOnChunk, runOnBeforeToolCall, runOnAfterToolCall, runSequential, runOnUsage, runOnAbort, runOnError } from './middleware.js';
|
|
19
|
+
export { Output, type OutputWrapper } from './output.js';
|
|
20
|
+
export { MemoryConversationStore } from './conversation.js';
|
|
21
|
+
export { AI } from './facade.js';
|
|
22
|
+
export { ai } from './provider.js';
|
|
23
|
+
export { ImageGenerator } from './image.js';
|
|
24
|
+
export { AudioGenerator } from './audio.js';
|
|
25
|
+
export { Transcription } from './transcription.js';
|
|
26
|
+
export { WebSearch, WebFetch, CodeExecution } from './provider-tools.js';
|
|
27
|
+
export { toVercelDataStream, toVercelResponse } from './vercel-protocol.js';
|
|
28
|
+
export { CachedEmbeddingAdapter } from './cached-embedding.js';
|
|
29
|
+
export { AiFake } from './fake.js';
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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,GACnB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAG1C,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAClF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACxF,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAGlF,OAAO,EACL,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAGzD,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;AAGpD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGrJ,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAGxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAG3D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAGhC,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAA;AAGlC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAG3C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGlD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGxE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAG3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAG9D,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// @rudderjs/ai — AI engine
|
|
2
|
+
// Attachments
|
|
3
|
+
export { DocumentAttachment as Document, ImageAttachment as Image, getMessageText, attachmentsToContentParts } from './attachment.js';
|
|
4
|
+
// Registry
|
|
5
|
+
export { AiRegistry } from './registry.js';
|
|
6
|
+
// Providers
|
|
7
|
+
export { AnthropicProvider } from './providers/anthropic.js';
|
|
8
|
+
export { OpenAIProvider, OpenAIAdapter } from './providers/openai.js';
|
|
9
|
+
export { GoogleProvider } from './providers/google.js';
|
|
10
|
+
export { OllamaProvider } from './providers/ollama.js';
|
|
11
|
+
export { DeepSeekProvider } from './providers/deepseek.js';
|
|
12
|
+
export { XaiProvider } from './providers/xai.js';
|
|
13
|
+
export { GroqProvider } from './providers/groq.js';
|
|
14
|
+
export { MistralProvider } from './providers/mistral.js';
|
|
15
|
+
export { AzureOpenAIProvider } from './providers/azure.js';
|
|
16
|
+
// Tools
|
|
17
|
+
export { toolDefinition, dynamicTool, ToolBuilder, toolToSchema, pauseForClientTools, isPauseForClientToolsChunk, } from './tool.js';
|
|
18
|
+
export { zodToJsonSchema } from './zod-to-json-schema.js';
|
|
19
|
+
// Agent
|
|
20
|
+
export { Agent, ConversableAgent, agent, stepCountIs, hasToolCall, setConversationStore } from './agent.js';
|
|
21
|
+
export { QueuedPromptBuilder } from './queue-job.js';
|
|
22
|
+
// Middleware
|
|
23
|
+
export { runOnConfig, runOnChunk, runOnBeforeToolCall, runOnAfterToolCall, runSequential, runOnUsage, runOnAbort, runOnError } from './middleware.js';
|
|
24
|
+
// Structured Output
|
|
25
|
+
export { Output } from './output.js';
|
|
26
|
+
// Conversation
|
|
27
|
+
export { MemoryConversationStore } from './conversation.js';
|
|
28
|
+
// Facade
|
|
29
|
+
export { AI } from './facade.js';
|
|
30
|
+
// ServiceProvider factory
|
|
31
|
+
export { ai } from './provider.js';
|
|
32
|
+
// Image Generation
|
|
33
|
+
export { ImageGenerator } from './image.js';
|
|
34
|
+
// Audio (TTS & STT)
|
|
35
|
+
export { AudioGenerator } from './audio.js';
|
|
36
|
+
export { Transcription } from './transcription.js';
|
|
37
|
+
// Provider Tools
|
|
38
|
+
export { WebSearch, WebFetch, CodeExecution } from './provider-tools.js';
|
|
39
|
+
// Vercel AI Protocol
|
|
40
|
+
export { toVercelDataStream, toVercelResponse } from './vercel-protocol.js';
|
|
41
|
+
// Cached Embeddings
|
|
42
|
+
export { CachedEmbeddingAdapter } from './cached-embedding.js';
|
|
43
|
+
// Testing
|
|
44
|
+
export { AiFake } from './fake.js';
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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;AA0DrI,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;AAElF,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,0BAA0B;AAC1B,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAA;AAElC,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,oBAAoB;AACpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAE9D,UAAU;AACV,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AiMiddleware, BeforeToolCallResult, MiddlewareConfigResult, MiddlewareContext, StreamChunk, TokenUsage } from './types.js';
|
|
2
|
+
/** Run onConfig hooks — piped (each transforms config, next sees result) */
|
|
3
|
+
export declare function runOnConfig(middlewares: AiMiddleware[], ctx: MiddlewareContext, config: MiddlewareConfigResult, phase: 'init' | 'beforeModel'): MiddlewareConfigResult;
|
|
4
|
+
/** Run onChunk hooks — piped (each can transform or drop by returning null) */
|
|
5
|
+
export declare function runOnChunk(middlewares: AiMiddleware[], ctx: MiddlewareContext, chunk: StreamChunk): StreamChunk | null;
|
|
6
|
+
/** Run onBeforeToolCall hooks — first non-void result wins */
|
|
7
|
+
export declare function runOnBeforeToolCall(middlewares: AiMiddleware[], ctx: MiddlewareContext, toolName: string, args: Record<string, unknown>): Promise<BeforeToolCallResult>;
|
|
8
|
+
/** Run a sequential hook (onStart, onIteration, onAfterToolCall, etc.) */
|
|
9
|
+
export declare function runSequential(middlewares: AiMiddleware[], hook: 'onStart' | 'onIteration' | 'onToolPhaseComplete' | 'onFinish', ctx: MiddlewareContext): Promise<void>;
|
|
10
|
+
/** Run onAfterToolCall hooks sequentially */
|
|
11
|
+
export declare function runOnAfterToolCall(middlewares: AiMiddleware[], ctx: MiddlewareContext, toolName: string, args: Record<string, unknown>, result: unknown): Promise<void>;
|
|
12
|
+
/** Run onUsage hooks sequentially */
|
|
13
|
+
export declare function runOnUsage(middlewares: AiMiddleware[], ctx: MiddlewareContext, usage: TokenUsage): Promise<void>;
|
|
14
|
+
/** Run onAbort hooks sequentially */
|
|
15
|
+
export declare function runOnAbort(middlewares: AiMiddleware[], ctx: MiddlewareContext, reason: string): Promise<void>;
|
|
16
|
+
/** Run onError hooks sequentially */
|
|
17
|
+
export declare function runOnError(middlewares: AiMiddleware[], ctx: MiddlewareContext, error: unknown): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,WAAW,EACX,UAAU,EACX,MAAM,YAAY,CAAA;AAEnB,4EAA4E;AAC5E,wBAAgB,WAAW,CACzB,WAAW,EAAE,YAAY,EAAE,EAC3B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,MAAM,GAAG,aAAa,GAC5B,sBAAsB,CASxB;AAED,+EAA+E;AAC/E,wBAAgB,UAAU,CACxB,WAAW,EAAE,YAAY,EAAE,EAC3B,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,WAAW,GACjB,WAAW,GAAG,IAAI,CASpB;AAED,8DAA8D;AAC9D,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,YAAY,EAAE,EAC3B,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,oBAAoB,CAAC,CAQ/B;AAED,0EAA0E;AAC1E,wBAAsB,aAAa,CACjC,WAAW,EAAE,YAAY,EAAE,EAC3B,IAAI,EAAE,SAAS,GAAG,aAAa,GAAG,qBAAqB,GAAG,UAAU,EACpE,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,6CAA6C;AAC7C,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,YAAY,EAAE,EAC3B,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,qCAAqC;AACrC,wBAAsB,UAAU,CAC9B,WAAW,EAAE,YAAY,EAAE,EAC3B,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,qCAAqC;AACrC,wBAAsB,UAAU,CAC9B,WAAW,EAAE,YAAY,EAAE,EAC3B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,qCAAqC;AACrC,wBAAsB,UAAU,CAC9B,WAAW,EAAE,YAAY,EAAE,EAC3B,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CAIf"}
|