ai-experiments 0.1.0 → 2.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/.turbo/turbo-build.log +5 -0
- package/CHANGELOG.md +15 -0
- package/README.md +306 -91
- package/dist/cartesian.d.ts +140 -0
- package/dist/cartesian.d.ts.map +1 -0
- package/dist/cartesian.js +216 -0
- package/dist/cartesian.js.map +1 -0
- package/dist/decide.d.ts +152 -0
- package/dist/decide.d.ts.map +1 -0
- package/dist/decide.js +329 -0
- package/dist/decide.js.map +1 -0
- package/dist/experiment.d.ts +53 -0
- package/dist/experiment.d.ts.map +1 -0
- package/dist/experiment.js +292 -0
- package/dist/experiment.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/tracking.d.ts +159 -0
- package/dist/tracking.d.ts.map +1 -0
- package/dist/tracking.js +310 -0
- package/dist/tracking.js.map +1 -0
- package/dist/types.d.ts +198 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/examples.ts +261 -0
- package/package.json +21 -39
- package/src/cartesian.ts +259 -0
- package/src/decide.ts +398 -0
- package/src/experiment.ts +358 -0
- package/src/index.ts +44 -0
- package/src/tracking.ts +339 -0
- package/src/types.ts +215 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"experiment.js","sourceRoot":"","sources":["../src/experiment.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ai-experiments - AI-powered experimentation primitives for testing and evaluating models
|
|
3
|
+
*
|
|
4
|
+
* This package provides tools for A/B testing, parameter exploration, decision making,
|
|
5
|
+
* and tracking in AI applications.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
export * from './types.js';
|
|
10
|
+
export { Experiment, createVariantsFromGrid } from './experiment.js';
|
|
11
|
+
export { cartesian, cartesianFilter, cartesianSample, cartesianCount, cartesianWithLabels, } from './cartesian.js';
|
|
12
|
+
export { decide, decideWeighted, decideEpsilonGreedy, decideThompsonSampling, decideUCB, } from './decide.js';
|
|
13
|
+
export { track, flush, configureTracking, getTrackingConfig, createConsoleBackend, createMemoryBackend, createBatchBackend, createFileBackend, } from './tracking.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,cAAc,YAAY,CAAA;AAG1B,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAGpE,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,cAAc,EACd,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACL,MAAM,EACN,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,SAAS,GACV,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,eAAe,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ai-experiments - AI-powered experimentation primitives for testing and evaluating models
|
|
3
|
+
*
|
|
4
|
+
* This package provides tools for A/B testing, parameter exploration, decision making,
|
|
5
|
+
* and tracking in AI applications.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
// Export core types
|
|
10
|
+
export * from './types.js';
|
|
11
|
+
// Export experiment functionality
|
|
12
|
+
export { Experiment, createVariantsFromGrid } from './experiment.js';
|
|
13
|
+
// Export cartesian product utilities
|
|
14
|
+
export { cartesian, cartesianFilter, cartesianSample, cartesianCount, cartesianWithLabels, } from './cartesian.js';
|
|
15
|
+
// Export decision making utilities
|
|
16
|
+
export { decide, decideWeighted, decideEpsilonGreedy, decideThompsonSampling, decideUCB, } from './decide.js';
|
|
17
|
+
// Export tracking utilities
|
|
18
|
+
export { track, flush, configureTracking, getTrackingConfig, createConsoleBackend, createMemoryBackend, createBatchBackend, createFileBackend, } from './tracking.js';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oBAAoB;AACpB,cAAc,YAAY,CAAA;AAE1B,kCAAkC;AAClC,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAEpE,qCAAqC;AACrC,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,cAAc,EACd,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AAEvB,mCAAmC;AACnC,OAAO,EACL,MAAM,EACN,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,SAAS,GACV,MAAM,aAAa,CAAA;AAEpB,4BAA4B;AAC5B,OAAO,EACL,KAAK,EACL,KAAK,EACL,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event tracking for experiments
|
|
3
|
+
*/
|
|
4
|
+
import type { TrackingEvent, TrackingBackend, TrackingOptions } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Configure tracking
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { configureTracking } from 'ai-experiments'
|
|
11
|
+
*
|
|
12
|
+
* // Use console backend (default)
|
|
13
|
+
* configureTracking({
|
|
14
|
+
* enabled: true,
|
|
15
|
+
* metadata: { projectId: 'my-project' },
|
|
16
|
+
* })
|
|
17
|
+
*
|
|
18
|
+
* // Use custom backend
|
|
19
|
+
* configureTracking({
|
|
20
|
+
* backend: {
|
|
21
|
+
* track: async (event) => {
|
|
22
|
+
* await fetch('/api/analytics', {
|
|
23
|
+
* method: 'POST',
|
|
24
|
+
* body: JSON.stringify(event),
|
|
25
|
+
* })
|
|
26
|
+
* },
|
|
27
|
+
* },
|
|
28
|
+
* })
|
|
29
|
+
*
|
|
30
|
+
* // Disable tracking
|
|
31
|
+
* configureTracking({ enabled: false })
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare function configureTracking(options: TrackingOptions): void;
|
|
35
|
+
/**
|
|
36
|
+
* Track an event
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* import { track } from 'ai-experiments'
|
|
41
|
+
*
|
|
42
|
+
* track({
|
|
43
|
+
* type: 'experiment.start',
|
|
44
|
+
* timestamp: new Date(),
|
|
45
|
+
* data: {
|
|
46
|
+
* experimentId: 'my-experiment',
|
|
47
|
+
* variantCount: 3,
|
|
48
|
+
* },
|
|
49
|
+
* })
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare function track(event: TrackingEvent): void;
|
|
53
|
+
/**
|
|
54
|
+
* Flush pending events
|
|
55
|
+
*
|
|
56
|
+
* Call this before the process exits to ensure all events are sent.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```ts
|
|
60
|
+
* import { flush } from 'ai-experiments'
|
|
61
|
+
*
|
|
62
|
+
* process.on('SIGINT', async () => {
|
|
63
|
+
* await flush()
|
|
64
|
+
* process.exit(0)
|
|
65
|
+
* })
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare function flush(): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Create a console-based tracking backend
|
|
71
|
+
*
|
|
72
|
+
* Logs events to console.log in a human-readable format.
|
|
73
|
+
*/
|
|
74
|
+
export declare function createConsoleBackend(options?: {
|
|
75
|
+
/** Whether to include full event data (default: false) */
|
|
76
|
+
verbose?: boolean;
|
|
77
|
+
}): TrackingBackend;
|
|
78
|
+
/**
|
|
79
|
+
* Create an in-memory tracking backend that stores events
|
|
80
|
+
*
|
|
81
|
+
* Useful for testing or collecting events for batch processing.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
* import { createMemoryBackend } from 'ai-experiments'
|
|
86
|
+
*
|
|
87
|
+
* const backend = createMemoryBackend()
|
|
88
|
+
* configureTracking({ backend })
|
|
89
|
+
*
|
|
90
|
+
* // Run experiments...
|
|
91
|
+
*
|
|
92
|
+
* // Get all events
|
|
93
|
+
* const events = backend.getEvents()
|
|
94
|
+
* console.log(`Tracked ${events.length} events`)
|
|
95
|
+
*
|
|
96
|
+
* // Clear events
|
|
97
|
+
* backend.clear()
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
export declare function createMemoryBackend(): TrackingBackend & {
|
|
101
|
+
getEvents: () => TrackingEvent[];
|
|
102
|
+
clear: () => void;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Create a batching tracking backend
|
|
106
|
+
*
|
|
107
|
+
* Batches events and sends them in groups to reduce network overhead.
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```ts
|
|
111
|
+
* import { createBatchBackend } from 'ai-experiments'
|
|
112
|
+
*
|
|
113
|
+
* const backend = createBatchBackend({
|
|
114
|
+
* batchSize: 10,
|
|
115
|
+
* flushInterval: 5000, // 5 seconds
|
|
116
|
+
* send: async (events) => {
|
|
117
|
+
* await fetch('/api/analytics/batch', {
|
|
118
|
+
* method: 'POST',
|
|
119
|
+
* body: JSON.stringify({ events }),
|
|
120
|
+
* })
|
|
121
|
+
* },
|
|
122
|
+
* })
|
|
123
|
+
*
|
|
124
|
+
* configureTracking({ backend })
|
|
125
|
+
* ```
|
|
126
|
+
*/
|
|
127
|
+
export declare function createBatchBackend(options: {
|
|
128
|
+
/** Maximum batch size before auto-flush */
|
|
129
|
+
batchSize: number;
|
|
130
|
+
/** Interval in ms to auto-flush (default: no auto-flush) */
|
|
131
|
+
flushInterval?: number;
|
|
132
|
+
/** Function to send batched events */
|
|
133
|
+
send: (events: TrackingEvent[]) => Promise<void>;
|
|
134
|
+
}): TrackingBackend;
|
|
135
|
+
/**
|
|
136
|
+
* Create a file-based tracking backend
|
|
137
|
+
*
|
|
138
|
+
* Writes events to a file (JSONL format).
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```ts
|
|
142
|
+
* import { createFileBackend } from 'ai-experiments'
|
|
143
|
+
*
|
|
144
|
+
* const backend = createFileBackend({
|
|
145
|
+
* path: './experiments.jsonl',
|
|
146
|
+
* })
|
|
147
|
+
*
|
|
148
|
+
* configureTracking({ backend })
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
export declare function createFileBackend(options: {
|
|
152
|
+
/** Path to the file */
|
|
153
|
+
path: string;
|
|
154
|
+
}): TrackingBackend;
|
|
155
|
+
/**
|
|
156
|
+
* Get current tracking configuration
|
|
157
|
+
*/
|
|
158
|
+
export declare function getTrackingConfig(): Readonly<Required<TrackingOptions>>;
|
|
159
|
+
//# sourceMappingURL=tracking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracking.d.ts","sourceRoot":"","sources":["../src/tracking.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAWjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAMhE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAsBhD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAI3C;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE;IAC7C,0DAA0D;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GAAG,eAAe,CAgBlB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,IAAI,eAAe,GAAG;IACvD,SAAS,EAAE,MAAM,aAAa,EAAE,CAAA;IAChC,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB,CAYA;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,sCAAsC;IACtC,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACjD,GAAG,eAAe,CAkDlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,eAAe,CAwClB;AAaD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAEvE"}
|
package/dist/tracking.js
ADDED
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event tracking for experiments
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Default tracking configuration
|
|
6
|
+
*/
|
|
7
|
+
let trackingConfig = {
|
|
8
|
+
backend: createConsoleBackend(),
|
|
9
|
+
enabled: true,
|
|
10
|
+
metadata: {},
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Configure tracking
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { configureTracking } from 'ai-experiments'
|
|
18
|
+
*
|
|
19
|
+
* // Use console backend (default)
|
|
20
|
+
* configureTracking({
|
|
21
|
+
* enabled: true,
|
|
22
|
+
* metadata: { projectId: 'my-project' },
|
|
23
|
+
* })
|
|
24
|
+
*
|
|
25
|
+
* // Use custom backend
|
|
26
|
+
* configureTracking({
|
|
27
|
+
* backend: {
|
|
28
|
+
* track: async (event) => {
|
|
29
|
+
* await fetch('/api/analytics', {
|
|
30
|
+
* method: 'POST',
|
|
31
|
+
* body: JSON.stringify(event),
|
|
32
|
+
* })
|
|
33
|
+
* },
|
|
34
|
+
* },
|
|
35
|
+
* })
|
|
36
|
+
*
|
|
37
|
+
* // Disable tracking
|
|
38
|
+
* configureTracking({ enabled: false })
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export function configureTracking(options) {
|
|
42
|
+
trackingConfig = {
|
|
43
|
+
backend: options.backend ?? trackingConfig.backend,
|
|
44
|
+
enabled: options.enabled ?? trackingConfig.enabled,
|
|
45
|
+
metadata: options.metadata ?? trackingConfig.metadata,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Track an event
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* import { track } from 'ai-experiments'
|
|
54
|
+
*
|
|
55
|
+
* track({
|
|
56
|
+
* type: 'experiment.start',
|
|
57
|
+
* timestamp: new Date(),
|
|
58
|
+
* data: {
|
|
59
|
+
* experimentId: 'my-experiment',
|
|
60
|
+
* variantCount: 3,
|
|
61
|
+
* },
|
|
62
|
+
* })
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export function track(event) {
|
|
66
|
+
if (!trackingConfig.enabled) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// Merge global metadata
|
|
70
|
+
const enrichedEvent = {
|
|
71
|
+
...event,
|
|
72
|
+
data: {
|
|
73
|
+
...event.data,
|
|
74
|
+
...trackingConfig.metadata,
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
// Track via backend (handle both sync and async)
|
|
78
|
+
const result = trackingConfig.backend.track(enrichedEvent);
|
|
79
|
+
if (result instanceof Promise) {
|
|
80
|
+
// Don't await - fire and forget
|
|
81
|
+
result.catch((error) => {
|
|
82
|
+
console.error('Error tracking event:', error);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Flush pending events
|
|
88
|
+
*
|
|
89
|
+
* Call this before the process exits to ensure all events are sent.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* import { flush } from 'ai-experiments'
|
|
94
|
+
*
|
|
95
|
+
* process.on('SIGINT', async () => {
|
|
96
|
+
* await flush()
|
|
97
|
+
* process.exit(0)
|
|
98
|
+
* })
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
export async function flush() {
|
|
102
|
+
if (trackingConfig.backend.flush) {
|
|
103
|
+
await trackingConfig.backend.flush();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Create a console-based tracking backend
|
|
108
|
+
*
|
|
109
|
+
* Logs events to console.log in a human-readable format.
|
|
110
|
+
*/
|
|
111
|
+
export function createConsoleBackend(options) {
|
|
112
|
+
const { verbose = false } = options ?? {};
|
|
113
|
+
return {
|
|
114
|
+
track: (event) => {
|
|
115
|
+
const timestamp = event.timestamp.toISOString();
|
|
116
|
+
if (verbose) {
|
|
117
|
+
console.log(`[${timestamp}] ${event.type}`, event.data);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Condensed format
|
|
121
|
+
const key = extractKey(event);
|
|
122
|
+
console.log(`[${timestamp}] ${event.type} ${key}`);
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Create an in-memory tracking backend that stores events
|
|
129
|
+
*
|
|
130
|
+
* Useful for testing or collecting events for batch processing.
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```ts
|
|
134
|
+
* import { createMemoryBackend } from 'ai-experiments'
|
|
135
|
+
*
|
|
136
|
+
* const backend = createMemoryBackend()
|
|
137
|
+
* configureTracking({ backend })
|
|
138
|
+
*
|
|
139
|
+
* // Run experiments...
|
|
140
|
+
*
|
|
141
|
+
* // Get all events
|
|
142
|
+
* const events = backend.getEvents()
|
|
143
|
+
* console.log(`Tracked ${events.length} events`)
|
|
144
|
+
*
|
|
145
|
+
* // Clear events
|
|
146
|
+
* backend.clear()
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
export function createMemoryBackend() {
|
|
150
|
+
const events = [];
|
|
151
|
+
return {
|
|
152
|
+
track: (event) => {
|
|
153
|
+
events.push(event);
|
|
154
|
+
},
|
|
155
|
+
getEvents: () => [...events],
|
|
156
|
+
clear: () => {
|
|
157
|
+
events.length = 0;
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Create a batching tracking backend
|
|
163
|
+
*
|
|
164
|
+
* Batches events and sends them in groups to reduce network overhead.
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```ts
|
|
168
|
+
* import { createBatchBackend } from 'ai-experiments'
|
|
169
|
+
*
|
|
170
|
+
* const backend = createBatchBackend({
|
|
171
|
+
* batchSize: 10,
|
|
172
|
+
* flushInterval: 5000, // 5 seconds
|
|
173
|
+
* send: async (events) => {
|
|
174
|
+
* await fetch('/api/analytics/batch', {
|
|
175
|
+
* method: 'POST',
|
|
176
|
+
* body: JSON.stringify({ events }),
|
|
177
|
+
* })
|
|
178
|
+
* },
|
|
179
|
+
* })
|
|
180
|
+
*
|
|
181
|
+
* configureTracking({ backend })
|
|
182
|
+
* ```
|
|
183
|
+
*/
|
|
184
|
+
export function createBatchBackend(options) {
|
|
185
|
+
const { batchSize, flushInterval, send } = options;
|
|
186
|
+
const batch = [];
|
|
187
|
+
let flushTimer = null;
|
|
188
|
+
const flush = async () => {
|
|
189
|
+
if (batch.length === 0)
|
|
190
|
+
return;
|
|
191
|
+
const eventsToSend = [...batch];
|
|
192
|
+
batch.length = 0;
|
|
193
|
+
try {
|
|
194
|
+
await send(eventsToSend);
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
console.error('Error sending batch:', error);
|
|
198
|
+
// Re-add failed events to batch (simple retry strategy)
|
|
199
|
+
batch.unshift(...eventsToSend);
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
const scheduleFlush = () => {
|
|
203
|
+
if (flushTimer) {
|
|
204
|
+
clearTimeout(flushTimer);
|
|
205
|
+
}
|
|
206
|
+
if (flushInterval) {
|
|
207
|
+
flushTimer = setTimeout(() => {
|
|
208
|
+
flush().catch(console.error);
|
|
209
|
+
}, flushInterval);
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
return {
|
|
213
|
+
track: (event) => {
|
|
214
|
+
batch.push(event);
|
|
215
|
+
// Auto-flush if batch is full
|
|
216
|
+
if (batch.length >= batchSize) {
|
|
217
|
+
flush().catch(console.error);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
scheduleFlush();
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
flush: async () => {
|
|
224
|
+
if (flushTimer) {
|
|
225
|
+
clearTimeout(flushTimer);
|
|
226
|
+
flushTimer = null;
|
|
227
|
+
}
|
|
228
|
+
await flush();
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Create a file-based tracking backend
|
|
234
|
+
*
|
|
235
|
+
* Writes events to a file (JSONL format).
|
|
236
|
+
*
|
|
237
|
+
* @example
|
|
238
|
+
* ```ts
|
|
239
|
+
* import { createFileBackend } from 'ai-experiments'
|
|
240
|
+
*
|
|
241
|
+
* const backend = createFileBackend({
|
|
242
|
+
* path: './experiments.jsonl',
|
|
243
|
+
* })
|
|
244
|
+
*
|
|
245
|
+
* configureTracking({ backend })
|
|
246
|
+
* ```
|
|
247
|
+
*/
|
|
248
|
+
export function createFileBackend(options) {
|
|
249
|
+
// Note: This requires Node.js fs module
|
|
250
|
+
// Import dynamically to avoid breaking in non-Node environments
|
|
251
|
+
let fs = null;
|
|
252
|
+
let writeStream = null;
|
|
253
|
+
const ensureStream = async () => {
|
|
254
|
+
if (!writeStream) {
|
|
255
|
+
try {
|
|
256
|
+
fs = await import('fs');
|
|
257
|
+
writeStream = fs.createWriteStream(options.path, { flags: 'a' });
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
console.error('Failed to create file stream:', error);
|
|
261
|
+
throw error;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return writeStream;
|
|
265
|
+
};
|
|
266
|
+
return {
|
|
267
|
+
track: async (event) => {
|
|
268
|
+
try {
|
|
269
|
+
const stream = await ensureStream();
|
|
270
|
+
const line = JSON.stringify(event) + '\n';
|
|
271
|
+
stream.write(line);
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
console.error('Failed to write event to file:', error);
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
flush: async () => {
|
|
278
|
+
if (writeStream) {
|
|
279
|
+
return new Promise((resolve, reject) => {
|
|
280
|
+
writeStream.end((error) => {
|
|
281
|
+
if (error)
|
|
282
|
+
reject(error);
|
|
283
|
+
else
|
|
284
|
+
resolve();
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Extract a key identifier from event data for logging
|
|
293
|
+
*/
|
|
294
|
+
function extractKey(event) {
|
|
295
|
+
const data = event.data;
|
|
296
|
+
if ('experimentId' in data)
|
|
297
|
+
return `exp=${data.experimentId}`;
|
|
298
|
+
if ('variantId' in data)
|
|
299
|
+
return `variant=${data.variantId}`;
|
|
300
|
+
if ('runId' in data)
|
|
301
|
+
return `run=${data.runId}`;
|
|
302
|
+
return '';
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Get current tracking configuration
|
|
306
|
+
*/
|
|
307
|
+
export function getTrackingConfig() {
|
|
308
|
+
return { ...trackingConfig };
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=tracking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracking.js","sourceRoot":"","sources":["../src/tracking.ts"],"names":[],"mappings":"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"}
|