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.
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/raindrop.d.ts +166 -0
- package/dist/raindrop.d.ts.map +1 -0
- package/dist/raindrop.js +515 -0
- package/dist/raindrop.js.map +1 -0
- package/dist/transport.d.ts +82 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +288 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +180 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/wrappers/ai-sdk.d.ts +32 -0
- package/dist/wrappers/ai-sdk.d.ts.map +1 -0
- package/dist/wrappers/ai-sdk.js +295 -0
- package/dist/wrappers/ai-sdk.js.map +1 -0
- package/dist/wrappers/anthropic.d.ts +23 -0
- package/dist/wrappers/anthropic.d.ts.map +1 -0
- package/dist/wrappers/anthropic.js +251 -0
- package/dist/wrappers/anthropic.js.map +1 -0
- package/dist/wrappers/openai.d.ts +29 -0
- package/dist/wrappers/openai.d.ts.map +1 -0
- package/dist/wrappers/openai.js +328 -0
- package/dist/wrappers/openai.js.map +1 -0
- package/package.json +60 -0
package/dist/raindrop.js
ADDED
|
@@ -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"}
|