rd-mini 0.1.0

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.
@@ -0,0 +1,515 @@
1
+ /**
2
+ * Raindrop - Zero-config AI Observability SDK
3
+ *
4
+ * Usage:
5
+ * const raindrop = new Raindrop({ apiKey: process.env.RAINDROP_API_KEY });
6
+ * const openai = raindrop.wrap(new OpenAI());
7
+ * // All calls are now automatically traced
8
+ *
9
+ * Multi-step pipelines:
10
+ * await raindrop.withInteraction({ userId, event: 'rag_query' }, async () => {
11
+ * const docs = await searchDocs(query); // Auto-linked
12
+ * const response = await openai.chat.completions.create(...); // Auto-linked
13
+ * });
14
+ */
15
+ import { AsyncLocalStorage } from 'node:async_hooks';
16
+ import { Transport } from './transport.js';
17
+ import { wrapOpenAI } from './wrappers/openai.js';
18
+ import { wrapAnthropic } from './wrappers/anthropic.js';
19
+ import { wrapAISDKModel } from './wrappers/ai-sdk.js';
20
+ const DEFAULT_BASE_URL = 'https://api.raindrop.ai';
21
+ // Global context storage for interaction tracking
22
+ const interactionStorage = new AsyncLocalStorage();
23
+ /**
24
+ * Interaction object returned by begin()
25
+ * Allows manual control over interaction lifecycle
26
+ */
27
+ export class Interaction {
28
+ context;
29
+ raindrop;
30
+ finished = false;
31
+ constructor(context, raindrop) {
32
+ this.context = context;
33
+ this.raindrop = raindrop;
34
+ }
35
+ /** Get the interaction/event ID */
36
+ get id() {
37
+ return this.context.interactionId;
38
+ }
39
+ /** Get or set the output */
40
+ get output() {
41
+ return this.context.output;
42
+ }
43
+ set output(value) {
44
+ this.context.output = value;
45
+ }
46
+ /** Set a single property */
47
+ setProperty(key, value) {
48
+ if (!this.context.properties) {
49
+ this.context.properties = {};
50
+ }
51
+ this.context.properties[key] = value;
52
+ return this;
53
+ }
54
+ /** Merge multiple properties */
55
+ setProperties(props) {
56
+ this.context.properties = {
57
+ ...this.context.properties,
58
+ ...props,
59
+ };
60
+ return this;
61
+ }
62
+ /** Add attachments */
63
+ addAttachments(attachments) {
64
+ if (!this.context.attachments) {
65
+ this.context.attachments = [];
66
+ }
67
+ this.context.attachments.push(...attachments);
68
+ return this;
69
+ }
70
+ /** Set the input */
71
+ setInput(input) {
72
+ this.context.input = input;
73
+ return this;
74
+ }
75
+ /** Get the underlying context (for internal use) */
76
+ getContext() {
77
+ return this.context;
78
+ }
79
+ /**
80
+ * Finish the interaction and send to Raindrop
81
+ */
82
+ finish(options) {
83
+ if (this.finished) {
84
+ console.warn('[raindrop] Interaction already finished:', this.id);
85
+ return;
86
+ }
87
+ this.finished = true;
88
+ // Merge any final options
89
+ if (options?.output) {
90
+ this.context.output = options.output;
91
+ }
92
+ if (options?.properties) {
93
+ this.setProperties(options.properties);
94
+ }
95
+ if (options?.attachments) {
96
+ this.addAttachments(options.attachments);
97
+ }
98
+ // Send the interaction
99
+ this.raindrop._finishInteraction(this.context);
100
+ }
101
+ }
102
+ export class Raindrop {
103
+ config;
104
+ transport;
105
+ currentUserId;
106
+ _currentUserTraits; // Stored for future use
107
+ lastTraceId;
108
+ activeInteractions = new Map();
109
+ constructor(config) {
110
+ this.config = {
111
+ apiKey: config.apiKey,
112
+ baseUrl: config.baseUrl || DEFAULT_BASE_URL,
113
+ debug: config.debug || false,
114
+ disabled: config.disabled || false,
115
+ };
116
+ this.transport = new Transport({
117
+ apiKey: this.config.apiKey,
118
+ baseUrl: this.config.baseUrl,
119
+ debug: this.config.debug,
120
+ disabled: this.config.disabled,
121
+ });
122
+ if (this.config.debug) {
123
+ console.log('[raindrop] Initialized', {
124
+ baseUrl: this.config.baseUrl,
125
+ disabled: this.config.disabled,
126
+ });
127
+ }
128
+ }
129
+ /**
130
+ * Wrap an AI client or model to auto-trace all calls
131
+ *
132
+ * Supports:
133
+ * - OpenAI client: raindrop.wrap(new OpenAI())
134
+ * - Anthropic client: raindrop.wrap(new Anthropic())
135
+ * - Vercel AI SDK model: raindrop.wrap(openai('gpt-4o'))
136
+ */
137
+ wrap(client, options) {
138
+ const providerType = this.detectProvider(client);
139
+ if (this.config.debug) {
140
+ console.log('[raindrop] Wrapping provider:', providerType);
141
+ }
142
+ const context = {
143
+ generateTraceId: () => this.generateTraceId(),
144
+ sendTrace: (trace) => this.sendTrace(trace),
145
+ getUserId: () => this.currentUserId,
146
+ getInteractionContext: () => this.getInteractionContext(),
147
+ debug: this.config.debug,
148
+ };
149
+ switch (providerType) {
150
+ case 'openai':
151
+ return wrapOpenAI(client, context);
152
+ case 'anthropic':
153
+ return wrapAnthropic(client, context);
154
+ case 'ai-sdk':
155
+ return wrapAISDKModel(client, context, options);
156
+ default:
157
+ if (this.config.debug) {
158
+ console.warn('[raindrop] Unknown provider type, returning unwrapped');
159
+ }
160
+ return client;
161
+ }
162
+ }
163
+ /**
164
+ * Identify a user for all subsequent calls
165
+ */
166
+ identify(userId, traits) {
167
+ this.currentUserId = userId;
168
+ this._currentUserTraits = traits;
169
+ if (traits) {
170
+ this.transport.sendIdentify(userId, traits);
171
+ }
172
+ if (this.config.debug) {
173
+ console.log('[raindrop] User identified:', userId);
174
+ }
175
+ }
176
+ /**
177
+ * Send feedback for a specific trace
178
+ */
179
+ async feedback(traceId, options) {
180
+ this.transport.sendFeedback(traceId, options);
181
+ if (this.config.debug) {
182
+ console.log('[raindrop] Feedback sent:', traceId, options);
183
+ }
184
+ }
185
+ /**
186
+ * Start an interaction manually (escape hatch for complex flows)
187
+ *
188
+ * For simple cases, use withInteraction() instead.
189
+ * Use begin() when you need to start and finish in different places.
190
+ *
191
+ * @example
192
+ * const interaction = raindrop.begin({
193
+ * userId: 'user123',
194
+ * event: 'chat_message',
195
+ * input: 'What is X?',
196
+ * });
197
+ *
198
+ * // ... later, maybe in a different function
199
+ * interaction.finish({ output: 'X is...' });
200
+ */
201
+ begin(options = {}) {
202
+ const interactionId = options.eventId || this.generateTraceId();
203
+ const userId = options.userId || this.currentUserId;
204
+ const context = {
205
+ interactionId,
206
+ userId,
207
+ conversationId: options.conversationId,
208
+ startTime: Date.now(),
209
+ input: options.input,
210
+ model: options.model,
211
+ event: options.event || 'interaction',
212
+ properties: options.properties,
213
+ attachments: options.attachments,
214
+ spans: [],
215
+ };
216
+ const interaction = new Interaction(context, this);
217
+ this.activeInteractions.set(interactionId, interaction);
218
+ // Also set it in AsyncLocalStorage so wrapped clients can find it
219
+ interactionStorage.enterWith(context);
220
+ if (this.config.debug) {
221
+ console.log('[raindrop] Interaction started:', interactionId);
222
+ }
223
+ return interaction;
224
+ }
225
+ /**
226
+ * Resume an existing interaction by ID
227
+ *
228
+ * @example
229
+ * const interaction = raindrop.resumeInteraction(eventId);
230
+ * interaction.finish({ output: 'Done!' });
231
+ */
232
+ resumeInteraction(eventId) {
233
+ const existing = this.activeInteractions.get(eventId);
234
+ if (existing) {
235
+ return existing;
236
+ }
237
+ // Create a new interaction with the given ID (for cases where
238
+ // the interaction was started elsewhere or we lost the reference)
239
+ if (this.config.debug) {
240
+ console.log('[raindrop] Creating new interaction for resume:', eventId);
241
+ }
242
+ const context = {
243
+ interactionId: eventId,
244
+ userId: this.currentUserId,
245
+ startTime: Date.now(),
246
+ spans: [],
247
+ };
248
+ const interaction = new Interaction(context, this);
249
+ this.activeInteractions.set(eventId, interaction);
250
+ return interaction;
251
+ }
252
+ /**
253
+ * Internal: Called by Interaction.finish()
254
+ * @internal
255
+ */
256
+ _finishInteraction(context) {
257
+ const endTime = Date.now();
258
+ this.lastTraceId = context.interactionId;
259
+ // Remove from active interactions
260
+ this.activeInteractions.delete(context.interactionId);
261
+ this.transport.sendInteraction({
262
+ interactionId: context.interactionId,
263
+ userId: context.userId,
264
+ event: context.event || 'interaction',
265
+ input: context.input,
266
+ output: context.output,
267
+ startTime: context.startTime,
268
+ endTime,
269
+ latencyMs: endTime - context.startTime,
270
+ conversationId: context.conversationId,
271
+ properties: context.properties,
272
+ attachments: context.attachments,
273
+ spans: context.spans,
274
+ });
275
+ if (this.config.debug) {
276
+ console.log('[raindrop] Interaction finished:', context.interactionId);
277
+ }
278
+ }
279
+ /**
280
+ * Get the last trace ID (useful if you can't access _traceId on response)
281
+ */
282
+ getLastTraceId() {
283
+ return this.lastTraceId;
284
+ }
285
+ /**
286
+ * Get the current user's traits (set via identify)
287
+ */
288
+ getUserTraits() {
289
+ return this._currentUserTraits;
290
+ }
291
+ /**
292
+ * Flush all pending events and close
293
+ */
294
+ async close() {
295
+ await this.transport.close();
296
+ if (this.config.debug) {
297
+ console.log('[raindrop] Closed');
298
+ }
299
+ }
300
+ /**
301
+ * Run code within an interaction context
302
+ * All wrapped clients and tools called within will be auto-linked
303
+ *
304
+ * @example
305
+ * await raindrop.withInteraction(
306
+ * { userId: 'user123', event: 'rag_query', input: 'What is X?' },
307
+ * async (ctx) => {
308
+ * const docs = await searchDocs(query); // Auto-linked
309
+ * const response = await openai.chat.completions.create(...); // Auto-linked
310
+ * ctx.output = response.choices[0].message.content; // Set output
311
+ * }
312
+ * );
313
+ */
314
+ async withInteraction(options, fn) {
315
+ const interactionId = this.generateTraceId();
316
+ const startTime = Date.now();
317
+ const userId = options.userId || this.currentUserId;
318
+ const context = {
319
+ interactionId,
320
+ userId,
321
+ conversationId: options.conversationId,
322
+ startTime,
323
+ input: options.input,
324
+ event: options.event || 'interaction',
325
+ properties: options.properties,
326
+ spans: [],
327
+ };
328
+ if (this.config.debug) {
329
+ console.log('[raindrop] Interaction started:', interactionId);
330
+ }
331
+ try {
332
+ // Run the function within the context, passing ctx for output/properties
333
+ const result = await interactionStorage.run(context, () => fn(context));
334
+ const endTime = Date.now();
335
+ // Use context.output if set, otherwise use return value
336
+ const output = context.output !== undefined
337
+ ? context.output
338
+ : (typeof result === 'string' ? result : undefined);
339
+ // Send the interaction trace with all spans
340
+ this.sendInteraction(context, {
341
+ output,
342
+ endTime,
343
+ latencyMs: endTime - startTime,
344
+ });
345
+ return result;
346
+ }
347
+ catch (error) {
348
+ const endTime = Date.now();
349
+ // Send the interaction trace with error
350
+ this.sendInteraction(context, {
351
+ endTime,
352
+ latencyMs: endTime - startTime,
353
+ error: error instanceof Error ? error.message : String(error),
354
+ });
355
+ throw error;
356
+ }
357
+ }
358
+ /**
359
+ * Wrap a tool function for automatic tracing
360
+ * When called within withInteraction(), the tool will be auto-linked
361
+ *
362
+ * @example
363
+ * const searchDocs = raindrop.wrapTool('search_docs', async (query: string) => {
364
+ * return await vectorDb.search(query);
365
+ * });
366
+ *
367
+ * // Use normally
368
+ * const docs = await searchDocs('how to use raindrop');
369
+ */
370
+ wrapTool(name, fn, options) {
371
+ const self = this;
372
+ return async function (...args) {
373
+ const context = interactionStorage.getStore();
374
+ const spanId = self.generateTraceId();
375
+ const startTime = Date.now();
376
+ if (self.config.debug) {
377
+ console.log('[raindrop] Tool started:', name, spanId);
378
+ }
379
+ const span = {
380
+ spanId,
381
+ parentId: context?.interactionId,
382
+ name,
383
+ type: 'tool',
384
+ startTime,
385
+ input: args.length === 1 ? args[0] : args,
386
+ properties: options?.properties,
387
+ };
388
+ try {
389
+ const result = await fn(...args);
390
+ const endTime = Date.now();
391
+ span.endTime = endTime;
392
+ span.latencyMs = endTime - startTime;
393
+ span.output = result;
394
+ // If within an interaction, add to its spans
395
+ if (context) {
396
+ context.spans.push(span);
397
+ }
398
+ else {
399
+ // Standalone tool call - send as individual trace
400
+ self.sendToolTrace(span);
401
+ }
402
+ return result;
403
+ }
404
+ catch (error) {
405
+ const endTime = Date.now();
406
+ span.endTime = endTime;
407
+ span.latencyMs = endTime - startTime;
408
+ span.error = error instanceof Error ? error.message : String(error);
409
+ if (context) {
410
+ context.spans.push(span);
411
+ }
412
+ else {
413
+ self.sendToolTrace(span);
414
+ }
415
+ throw error;
416
+ }
417
+ };
418
+ }
419
+ /**
420
+ * Get the current interaction context (if any)
421
+ * Useful for wrappers to check if they're within an interaction
422
+ */
423
+ getInteractionContext() {
424
+ return interactionStorage.getStore();
425
+ }
426
+ /**
427
+ * Internal: Send an interaction with all its spans
428
+ */
429
+ sendInteraction(context, result) {
430
+ this.lastTraceId = context.interactionId;
431
+ this.transport.sendInteraction({
432
+ interactionId: context.interactionId,
433
+ userId: context.userId,
434
+ event: context.event || 'interaction',
435
+ input: context.input,
436
+ output: result.output,
437
+ startTime: context.startTime,
438
+ endTime: result.endTime,
439
+ latencyMs: result.latencyMs,
440
+ conversationId: context.conversationId,
441
+ properties: context.properties,
442
+ error: result.error,
443
+ spans: context.spans,
444
+ });
445
+ }
446
+ /**
447
+ * Internal: Send a standalone tool trace
448
+ */
449
+ sendToolTrace(span) {
450
+ this.lastTraceId = span.spanId;
451
+ this.transport.sendTrace({
452
+ traceId: span.spanId,
453
+ provider: 'unknown',
454
+ model: `tool:${span.name}`,
455
+ input: span.input,
456
+ output: span.output,
457
+ startTime: span.startTime,
458
+ endTime: span.endTime,
459
+ latencyMs: span.latencyMs,
460
+ error: span.error,
461
+ properties: span.properties,
462
+ });
463
+ }
464
+ /**
465
+ * Internal: Send a trace
466
+ */
467
+ sendTrace(trace) {
468
+ this.lastTraceId = trace.traceId;
469
+ this.transport.sendTrace(trace);
470
+ }
471
+ /**
472
+ * Internal: Generate a unique trace ID
473
+ */
474
+ generateTraceId() {
475
+ // Use crypto.randomUUID if available, otherwise fallback
476
+ if (typeof crypto !== 'undefined' && crypto.randomUUID) {
477
+ return `trace_${crypto.randomUUID()}`;
478
+ }
479
+ // Fallback for environments without crypto.randomUUID
480
+ return `trace_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
481
+ }
482
+ /**
483
+ * Internal: Detect the provider type from a client/model
484
+ */
485
+ detectProvider(client) {
486
+ if (!client || typeof client !== 'object') {
487
+ return 'unknown';
488
+ }
489
+ const c = client;
490
+ // OpenAI: has chat.completions
491
+ if (c.chat && typeof c.chat === 'object') {
492
+ const chat = c.chat;
493
+ if (chat.completions && typeof chat.completions === 'object') {
494
+ return 'openai';
495
+ }
496
+ }
497
+ // Anthropic: has messages.create
498
+ if (c.messages && typeof c.messages === 'object') {
499
+ const messages = c.messages;
500
+ if (typeof messages.create === 'function') {
501
+ return 'anthropic';
502
+ }
503
+ }
504
+ // Vercel AI SDK: has modelId and provider
505
+ if (typeof c.modelId === 'string' && typeof c.provider === 'string') {
506
+ return 'ai-sdk';
507
+ }
508
+ // Vercel AI SDK: has specificationVersion (newer versions)
509
+ if (c.specificationVersion !== undefined) {
510
+ return 'ai-sdk';
511
+ }
512
+ return 'unknown';
513
+ }
514
+ }
515
+ //# sourceMappingURL=raindrop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raindrop.js","sourceRoot":"","sources":["../src/raindrop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * HTTP Transport for Raindrop
3
+ * Fire-and-forget with buffering and retry
4
+ */
5
+ import type { TraceData, FeedbackOptions, UserTraits, SpanData, Attachment } from './types.js';
6
+ interface TransportConfig {
7
+ apiKey: string;
8
+ baseUrl: string;
9
+ debug: boolean;
10
+ disabled: boolean;
11
+ }
12
+ interface InteractionData {
13
+ interactionId: string;
14
+ userId?: string;
15
+ event: string;
16
+ input?: string;
17
+ output?: string;
18
+ startTime: number;
19
+ endTime: number;
20
+ latencyMs: number;
21
+ conversationId?: string;
22
+ properties?: Record<string, unknown>;
23
+ attachments?: Attachment[];
24
+ error?: string;
25
+ spans: SpanData[];
26
+ }
27
+ export declare class Transport {
28
+ private config;
29
+ private queue;
30
+ private flushTimeout;
31
+ private readonly FLUSH_INTERVAL;
32
+ private readonly MAX_QUEUE_SIZE;
33
+ private readonly MAX_RETRIES;
34
+ constructor(config: TransportConfig);
35
+ /**
36
+ * Send a trace event (fire-and-forget)
37
+ */
38
+ sendTrace(trace: TraceData): void;
39
+ /**
40
+ * Send feedback/signal event
41
+ */
42
+ sendFeedback(traceId: string, feedback: FeedbackOptions): void;
43
+ /**
44
+ * Send user identification
45
+ */
46
+ sendIdentify(userId: string, traits: UserTraits): void;
47
+ /**
48
+ * Send an interaction with nested spans
49
+ */
50
+ sendInteraction(interaction: InteractionData): void;
51
+ /**
52
+ * Format interaction data for API
53
+ */
54
+ private formatInteraction;
55
+ /**
56
+ * Format trace data for API
57
+ */
58
+ private formatTrace;
59
+ /**
60
+ * Enqueue an event for sending
61
+ */
62
+ private enqueue;
63
+ /**
64
+ * Flush all queued events
65
+ */
66
+ flush(): Promise<void>;
67
+ /**
68
+ * Send a batch of events
69
+ */
70
+ private sendBatch;
71
+ /**
72
+ * Send a single event
73
+ */
74
+ private sendSingle;
75
+ private delay;
76
+ /**
77
+ * Close transport and flush remaining events
78
+ */
79
+ close(): Promise<void>;
80
+ }
81
+ export {};
82
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE/F,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAQD,UAAU,eAAe;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAK;gBAErB,MAAM,EAAE,eAAe;IAInC;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAUjC;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAwB9D;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAatD;;OAEG;IACH,eAAe,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAUnD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA2CzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAuCnB;;OAEG;IACH,OAAO,CAAC,OAAO;IAmBf;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoC5B;;OAEG;YACW,SAAS;IAkCvB;;OAEG;YACW,UAAU;IA0BxB,OAAO,CAAC,KAAK;IAIb;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}