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,295 @@
1
+ /**
2
+ * Vercel AI SDK Wrapper
3
+ * Wraps AI SDK model providers to auto-capture all calls
4
+ */
5
+ /**
6
+ * Wrap a Vercel AI SDK model to auto-trace calls
7
+ *
8
+ * Usage:
9
+ * const model = raindrop.wrap(openai('gpt-4o'));
10
+ * const result = await generateText({ model, prompt: '...' });
11
+ */
12
+ export function wrapAISDKModel(model, context, defaultOptions) {
13
+ // Create a proxy that intercepts method calls
14
+ const handler = {
15
+ get(target, prop, receiver) {
16
+ const value = Reflect.get(target, prop, receiver);
17
+ // Intercept doGenerate (non-streaming)
18
+ if (prop === 'doGenerate' && typeof value === 'function') {
19
+ return async function (options) {
20
+ const traceId = (defaultOptions?.traceId) || context.generateTraceId();
21
+ const startTime = Date.now();
22
+ const userId = defaultOptions?.userId || context.getUserId();
23
+ if (context.debug) {
24
+ console.log('[raindrop] AI SDK generate started:', traceId);
25
+ }
26
+ try {
27
+ const result = await value.call(target, options);
28
+ const endTime = Date.now();
29
+ // Extract data from result
30
+ const text = result.text || '';
31
+ const usage = result.usage;
32
+ const toolCalls = result.toolCalls;
33
+ // Check if we're within an interaction
34
+ const interaction = context.getInteractionContext();
35
+ if (interaction) {
36
+ // Add as span to the interaction
37
+ const span = {
38
+ spanId: traceId,
39
+ parentId: interaction.interactionId,
40
+ name: `ai-sdk:${target.modelId}`,
41
+ type: 'ai',
42
+ startTime,
43
+ endTime,
44
+ latencyMs: endTime - startTime,
45
+ input: options.prompt || options.messages,
46
+ output: text,
47
+ properties: {
48
+ ...defaultOptions?.properties,
49
+ input_tokens: usage?.promptTokens,
50
+ output_tokens: usage?.completionTokens,
51
+ tool_calls: toolCalls?.map(tc => ({ name: tc.toolName, arguments: tc.args })),
52
+ },
53
+ };
54
+ interaction.spans.push(span);
55
+ }
56
+ else {
57
+ context.sendTrace({
58
+ traceId,
59
+ provider: 'ai-sdk',
60
+ model: target.modelId,
61
+ input: options.prompt || options.messages,
62
+ output: text,
63
+ startTime,
64
+ endTime,
65
+ latencyMs: endTime - startTime,
66
+ tokens: usage ? {
67
+ input: usage.promptTokens,
68
+ output: usage.completionTokens,
69
+ total: (usage.promptTokens || 0) + (usage.completionTokens || 0),
70
+ } : undefined,
71
+ toolCalls: toolCalls?.map(tc => ({
72
+ id: '',
73
+ name: tc.toolName,
74
+ arguments: tc.args,
75
+ })),
76
+ userId,
77
+ conversationId: defaultOptions?.conversationId,
78
+ properties: defaultOptions?.properties,
79
+ });
80
+ }
81
+ // Attach traceId to result
82
+ return Object.assign(result, { _traceId: traceId });
83
+ }
84
+ catch (error) {
85
+ const endTime = Date.now();
86
+ const interaction = context.getInteractionContext();
87
+ if (interaction) {
88
+ const span = {
89
+ spanId: traceId,
90
+ parentId: interaction.interactionId,
91
+ name: `ai-sdk:${target.modelId}`,
92
+ type: 'ai',
93
+ startTime,
94
+ endTime,
95
+ latencyMs: endTime - startTime,
96
+ input: options.prompt || options.messages,
97
+ error: error instanceof Error ? error.message : String(error),
98
+ };
99
+ interaction.spans.push(span);
100
+ }
101
+ else {
102
+ context.sendTrace({
103
+ traceId,
104
+ provider: 'ai-sdk',
105
+ model: target.modelId,
106
+ input: options.prompt || options.messages,
107
+ startTime,
108
+ endTime,
109
+ latencyMs: endTime - startTime,
110
+ userId,
111
+ conversationId: defaultOptions?.conversationId,
112
+ properties: defaultOptions?.properties,
113
+ error: error instanceof Error ? error.message : String(error),
114
+ });
115
+ }
116
+ throw error;
117
+ }
118
+ };
119
+ }
120
+ // Intercept doStream (streaming)
121
+ if (prop === 'doStream' && typeof value === 'function') {
122
+ return async function (options) {
123
+ const traceId = (defaultOptions?.traceId) || context.generateTraceId();
124
+ const startTime = Date.now();
125
+ const userId = defaultOptions?.userId || context.getUserId();
126
+ const interaction = context.getInteractionContext();
127
+ if (context.debug) {
128
+ console.log('[raindrop] AI SDK stream started:', traceId);
129
+ }
130
+ try {
131
+ const result = await value.call(target, options);
132
+ // Wrap the stream to capture data
133
+ const originalStream = result.stream;
134
+ const collectedText = [];
135
+ const collectedToolCalls = [];
136
+ let usage = { promptTokens: 0, completionTokens: 0 };
137
+ const wrappedStream = {
138
+ [Symbol.asyncIterator]: async function* () {
139
+ try {
140
+ for await (const chunk of originalStream) {
141
+ const c = chunk;
142
+ // Collect text
143
+ if (c.type === 'text-delta' && typeof c.textDelta === 'string') {
144
+ collectedText.push(c.textDelta);
145
+ }
146
+ // Collect tool calls
147
+ if (c.type === 'tool-call' && c.toolName) {
148
+ collectedToolCalls.push({
149
+ id: c.toolCallId || '',
150
+ name: c.toolName,
151
+ arguments: c.args,
152
+ });
153
+ }
154
+ // Collect usage
155
+ if (c.type === 'finish' && c.usage) {
156
+ const u = c.usage;
157
+ usage = {
158
+ promptTokens: u.promptTokens || 0,
159
+ completionTokens: u.completionTokens || 0,
160
+ };
161
+ }
162
+ yield chunk;
163
+ }
164
+ // Stream complete - send trace
165
+ const endTime = Date.now();
166
+ const output = collectedText.join('');
167
+ if (interaction) {
168
+ // Add as span to the interaction
169
+ const span = {
170
+ spanId: traceId,
171
+ parentId: interaction.interactionId,
172
+ name: `ai-sdk:${target.modelId}`,
173
+ type: 'ai',
174
+ startTime,
175
+ endTime,
176
+ latencyMs: endTime - startTime,
177
+ input: options.prompt || options.messages,
178
+ output,
179
+ properties: {
180
+ ...defaultOptions?.properties,
181
+ input_tokens: usage.promptTokens,
182
+ output_tokens: usage.completionTokens,
183
+ tool_calls: collectedToolCalls.length > 0 ? collectedToolCalls : undefined,
184
+ },
185
+ };
186
+ interaction.spans.push(span);
187
+ }
188
+ else {
189
+ context.sendTrace({
190
+ traceId,
191
+ provider: 'ai-sdk',
192
+ model: target.modelId,
193
+ input: options.prompt || options.messages,
194
+ output,
195
+ startTime,
196
+ endTime,
197
+ latencyMs: endTime - startTime,
198
+ tokens: {
199
+ input: usage.promptTokens,
200
+ output: usage.completionTokens,
201
+ total: usage.promptTokens + usage.completionTokens,
202
+ },
203
+ toolCalls: collectedToolCalls.length > 0 ? collectedToolCalls : undefined,
204
+ userId,
205
+ conversationId: defaultOptions?.conversationId,
206
+ properties: defaultOptions?.properties,
207
+ });
208
+ }
209
+ }
210
+ catch (error) {
211
+ const endTime = Date.now();
212
+ if (interaction) {
213
+ const span = {
214
+ spanId: traceId,
215
+ parentId: interaction.interactionId,
216
+ name: `ai-sdk:${target.modelId}`,
217
+ type: 'ai',
218
+ startTime,
219
+ endTime,
220
+ latencyMs: endTime - startTime,
221
+ input: options.prompt || options.messages,
222
+ error: error instanceof Error ? error.message : String(error),
223
+ };
224
+ interaction.spans.push(span);
225
+ }
226
+ else {
227
+ context.sendTrace({
228
+ traceId,
229
+ provider: 'ai-sdk',
230
+ model: target.modelId,
231
+ input: options.prompt || options.messages,
232
+ startTime,
233
+ endTime,
234
+ latencyMs: endTime - startTime,
235
+ userId,
236
+ conversationId: defaultOptions?.conversationId,
237
+ properties: defaultOptions?.properties,
238
+ error: error instanceof Error ? error.message : String(error),
239
+ });
240
+ }
241
+ throw error;
242
+ }
243
+ },
244
+ };
245
+ return Object.assign(result, {
246
+ stream: wrappedStream,
247
+ _traceId: traceId,
248
+ });
249
+ }
250
+ catch (error) {
251
+ const endTime = Date.now();
252
+ if (interaction) {
253
+ const span = {
254
+ spanId: traceId,
255
+ parentId: interaction.interactionId,
256
+ name: `ai-sdk:${target.modelId}`,
257
+ type: 'ai',
258
+ startTime,
259
+ endTime,
260
+ latencyMs: endTime - startTime,
261
+ input: options.prompt || options.messages,
262
+ error: error instanceof Error ? error.message : String(error),
263
+ };
264
+ interaction.spans.push(span);
265
+ }
266
+ else {
267
+ context.sendTrace({
268
+ traceId,
269
+ provider: 'ai-sdk',
270
+ model: target.modelId,
271
+ input: options.prompt || options.messages,
272
+ startTime,
273
+ endTime,
274
+ latencyMs: endTime - startTime,
275
+ userId,
276
+ conversationId: defaultOptions?.conversationId,
277
+ properties: defaultOptions?.properties,
278
+ error: error instanceof Error ? error.message : String(error),
279
+ });
280
+ }
281
+ throw error;
282
+ }
283
+ };
284
+ }
285
+ return value;
286
+ },
287
+ };
288
+ const proxied = new Proxy(model, handler);
289
+ // Attach context for potential later use
290
+ return Object.assign(proxied, {
291
+ _raindropContext: context,
292
+ _raindropOptions: defaultOptions,
293
+ });
294
+ }
295
+ //# sourceMappingURL=ai-sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-sdk.js","sourceRoot":"","sources":["../../src/wrappers/ai-sdk.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqBH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAQ,EACR,OAA4B,EAC5B,cAAuC;IAEvC,8CAA8C;IAC9C,MAAM,OAAO,GAAoB;QAC/B,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAElD,uCAAuC;YACvC,IAAI,IAAI,KAAK,YAAY,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBACzD,OAAO,KAAK,WAAmB,OAAgC;oBAC7D,MAAM,OAAO,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;oBACvE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC7B,MAAM,MAAM,GAAG,cAAc,EAAE,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;oBAE7D,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;wBAClB,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,OAAO,CAAC,CAAC;oBAC9D,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAA4B,CAAC;wBAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBAE3B,2BAA2B;wBAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAc,IAAI,EAAE,CAAC;wBACzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAyE,CAAC;wBAC/F,MAAM,SAAS,GAAG,MAAM,CAAC,SAAmE,CAAC;wBAE7F,uCAAuC;wBACvC,MAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;wBAEpD,IAAI,WAAW,EAAE,CAAC;4BAChB,iCAAiC;4BACjC,MAAM,IAAI,GAAa;gCACrB,MAAM,EAAE,OAAO;gCACf,QAAQ,EAAE,WAAW,CAAC,aAAa;gCACnC,IAAI,EAAE,UAAU,MAAM,CAAC,OAAO,EAAE;gCAChC,IAAI,EAAE,IAAI;gCACV,SAAS;gCACT,OAAO;gCACP,SAAS,EAAE,OAAO,GAAG,SAAS;gCAC9B,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ;gCACzC,MAAM,EAAE,IAAI;gCACZ,UAAU,EAAE;oCACV,GAAG,cAAc,EAAE,UAAU;oCAC7B,YAAY,EAAE,KAAK,EAAE,YAAY;oCACjC,aAAa,EAAE,KAAK,EAAE,gBAAgB;oCACtC,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;iCAC9E;6BACF,CAAC;4BACF,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC/B,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,SAAS,CAAC;gCAChB,OAAO;gCACP,QAAQ,EAAE,QAAQ;gCAClB,KAAK,EAAE,MAAM,CAAC,OAAO;gCACrB,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ;gCACzC,MAAM,EAAE,IAAI;gCACZ,SAAS;gCACT,OAAO;gCACP,SAAS,EAAE,OAAO,GAAG,SAAS;gCAC9B,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;oCACd,KAAK,EAAE,KAAK,CAAC,YAAY;oCACzB,MAAM,EAAE,KAAK,CAAC,gBAAgB;oCAC9B,KAAK,EAAE,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC;iCACjE,CAAC,CAAC,CAAC,SAAS;gCACb,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oCAC/B,EAAE,EAAE,EAAE;oCACN,IAAI,EAAE,EAAE,CAAC,QAAQ;oCACjB,SAAS,EAAE,EAAE,CAAC,IAAI;iCACnB,CAAC,CAAC;gCACH,MAAM;gCACN,cAAc,EAAE,cAAc,EAAE,cAAc;gCAC9C,UAAU,EAAE,cAAc,EAAE,UAAU;6BACvC,CAAC,CAAC;wBACL,CAAC;wBAED,2BAA2B;wBAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;oBACtD,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;wBAEpD,IAAI,WAAW,EAAE,CAAC;4BAChB,MAAM,IAAI,GAAa;gCACrB,MAAM,EAAE,OAAO;gCACf,QAAQ,EAAE,WAAW,CAAC,aAAa;gCACnC,IAAI,EAAE,UAAU,MAAM,CAAC,OAAO,EAAE;gCAChC,IAAI,EAAE,IAAI;gCACV,SAAS;gCACT,OAAO;gCACP,SAAS,EAAE,OAAO,GAAG,SAAS;gCAC9B,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ;gCACzC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;6BAC9D,CAAC;4BACF,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC/B,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,SAAS,CAAC;gCAChB,OAAO;gCACP,QAAQ,EAAE,QAAQ;gCAClB,KAAK,EAAE,MAAM,CAAC,OAAO;gCACrB,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ;gCACzC,SAAS;gCACT,OAAO;gCACP,SAAS,EAAE,OAAO,GAAG,SAAS;gCAC9B,MAAM;gCACN,cAAc,EAAE,cAAc,EAAE,cAAc;gCAC9C,UAAU,EAAE,cAAc,EAAE,UAAU;gCACtC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;6BAC9D,CAAC,CAAC;wBACL,CAAC;wBAED,MAAM,KAAK,CAAC;oBACd,CAAC;gBACH,CAAC,CAAC;YACJ,CAAC;YAED,iCAAiC;YACjC,IAAI,IAAI,KAAK,UAAU,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBACvD,OAAO,KAAK,WAAmB,OAAgC;oBAC7D,MAAM,OAAO,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;oBACvE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC7B,MAAM,MAAM,GAAG,cAAc,EAAE,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;oBAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;oBAEpD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;wBAClB,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;oBAC5D,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAG9C,CAAC;wBAEF,kCAAkC;wBAClC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;wBACrC,MAAM,aAAa,GAAa,EAAE,CAAC;wBACnC,MAAM,kBAAkB,GAA4D,EAAE,CAAC;wBACvF,IAAI,KAAK,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;wBAErD,MAAM,aAAa,GAAG;4BACpB,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,KAAK,SAAS,CAAC;gCACrC,IAAI,CAAC;oCACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;wCACzC,MAAM,CAAC,GAAG,KAAgC,CAAC;wCAE3C,eAAe;wCACf,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;4CAC/D,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;wCAClC,CAAC;wCAED,qBAAqB;wCACrB,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;4CACzC,kBAAkB,CAAC,IAAI,CAAC;gDACtB,EAAE,EAAG,CAAC,CAAC,UAAqB,IAAI,EAAE;gDAClC,IAAI,EAAE,CAAC,CAAC,QAAkB;gDAC1B,SAAS,EAAE,CAAC,CAAC,IAAI;6CAClB,CAAC,CAAC;wCACL,CAAC;wCAED,gBAAgB;wCAChB,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;4CACnC,MAAM,CAAC,GAAG,CAAC,CAAC,KAA6D,CAAC;4CAC1E,KAAK,GAAG;gDACN,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC;gDACjC,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,IAAI,CAAC;6CAC1C,CAAC;wCACJ,CAAC;wCAED,MAAM,KAAK,CAAC;oCACd,CAAC;oCAED,+BAA+B;oCAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oCAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oCAEtC,IAAI,WAAW,EAAE,CAAC;wCAChB,iCAAiC;wCACjC,MAAM,IAAI,GAAa;4CACrB,MAAM,EAAE,OAAO;4CACf,QAAQ,EAAE,WAAW,CAAC,aAAa;4CACnC,IAAI,EAAE,UAAU,MAAM,CAAC,OAAO,EAAE;4CAChC,IAAI,EAAE,IAAI;4CACV,SAAS;4CACT,OAAO;4CACP,SAAS,EAAE,OAAO,GAAG,SAAS;4CAC9B,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ;4CACzC,MAAM;4CACN,UAAU,EAAE;gDACV,GAAG,cAAc,EAAE,UAAU;gDAC7B,YAAY,EAAE,KAAK,CAAC,YAAY;gDAChC,aAAa,EAAE,KAAK,CAAC,gBAAgB;gDACrC,UAAU,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;6CAC3E;yCACF,CAAC;wCACF,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oCAC/B,CAAC;yCAAM,CAAC;wCACN,OAAO,CAAC,SAAS,CAAC;4CAChB,OAAO;4CACP,QAAQ,EAAE,QAAQ;4CAClB,KAAK,EAAE,MAAM,CAAC,OAAO;4CACrB,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ;4CACzC,MAAM;4CACN,SAAS;4CACT,OAAO;4CACP,SAAS,EAAE,OAAO,GAAG,SAAS;4CAC9B,MAAM,EAAE;gDACN,KAAK,EAAE,KAAK,CAAC,YAAY;gDACzB,MAAM,EAAE,KAAK,CAAC,gBAAgB;gDAC9B,KAAK,EAAE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,gBAAgB;6CACnD;4CACD,SAAS,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;4CACzE,MAAM;4CACN,cAAc,EAAE,cAAc,EAAE,cAAc;4CAC9C,UAAU,EAAE,cAAc,EAAE,UAAU;yCACvC,CAAC,CAAC;oCACL,CAAC;gCACH,CAAC;gCAAC,OAAO,KAAK,EAAE,CAAC;oCACf,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oCAE3B,IAAI,WAAW,EAAE,CAAC;wCAChB,MAAM,IAAI,GAAa;4CACrB,MAAM,EAAE,OAAO;4CACf,QAAQ,EAAE,WAAW,CAAC,aAAa;4CACnC,IAAI,EAAE,UAAU,MAAM,CAAC,OAAO,EAAE;4CAChC,IAAI,EAAE,IAAI;4CACV,SAAS;4CACT,OAAO;4CACP,SAAS,EAAE,OAAO,GAAG,SAAS;4CAC9B,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ;4CACzC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yCAC9D,CAAC;wCACF,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oCAC/B,CAAC;yCAAM,CAAC;wCACN,OAAO,CAAC,SAAS,CAAC;4CAChB,OAAO;4CACP,QAAQ,EAAE,QAAQ;4CAClB,KAAK,EAAE,MAAM,CAAC,OAAO;4CACrB,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ;4CACzC,SAAS;4CACT,OAAO;4CACP,SAAS,EAAE,OAAO,GAAG,SAAS;4CAC9B,MAAM;4CACN,cAAc,EAAE,cAAc,EAAE,cAAc;4CAC9C,UAAU,EAAE,cAAc,EAAE,UAAU;4CACtC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yCAC9D,CAAC,CAAC;oCACL,CAAC;oCAED,MAAM,KAAK,CAAC;gCACd,CAAC;4BACH,CAAC;yBACF,CAAC;wBAEF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;4BAC3B,MAAM,EAAE,aAAa;4BACrB,QAAQ,EAAE,OAAO;yBAClB,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBAE3B,IAAI,WAAW,EAAE,CAAC;4BAChB,MAAM,IAAI,GAAa;gCACrB,MAAM,EAAE,OAAO;gCACf,QAAQ,EAAE,WAAW,CAAC,aAAa;gCACnC,IAAI,EAAE,UAAU,MAAM,CAAC,OAAO,EAAE;gCAChC,IAAI,EAAE,IAAI;gCACV,SAAS;gCACT,OAAO;gCACP,SAAS,EAAE,OAAO,GAAG,SAAS;gCAC9B,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ;gCACzC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;6BAC9D,CAAC;4BACF,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC/B,CAAC;6BAAM,CAAC;4BACN,OAAO,CAAC,SAAS,CAAC;gCAChB,OAAO;gCACP,QAAQ,EAAE,QAAQ;gCAClB,KAAK,EAAE,MAAM,CAAC,OAAO;gCACrB,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ;gCACzC,SAAS;gCACT,OAAO;gCACP,SAAS,EAAE,OAAO,GAAG,SAAS;gCAC9B,MAAM;gCACN,cAAc,EAAE,cAAc,EAAE,cAAc;gCAC9C,UAAU,EAAE,cAAc,EAAE,UAAU;gCACtC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;6BAC9D,CAAC,CAAC;wBACL,CAAC;wBAED,MAAM,KAAK,CAAC;oBACd,CAAC;gBACH,CAAC,CAAC;YACJ,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAE1C,yCAAyC;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;QAC5B,gBAAgB,EAAE,OAAO;QACzB,gBAAgB,EAAE,cAAc;KACjC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Anthropic SDK Wrapper
3
+ * Wraps Anthropic client to auto-capture all message creations
4
+ */
5
+ import type { TraceData, InteractionContext } from '../types.js';
6
+ type AnthropicClient = {
7
+ messages: {
8
+ create: (params: unknown, options?: unknown) => Promise<unknown>;
9
+ };
10
+ };
11
+ export interface AnthropicWrapperContext {
12
+ generateTraceId: () => string;
13
+ sendTrace: (trace: TraceData) => void;
14
+ getUserId: () => string | undefined;
15
+ getInteractionContext: () => InteractionContext | undefined;
16
+ debug: boolean;
17
+ }
18
+ /**
19
+ * Creates a wrapped Anthropic client that auto-traces all calls
20
+ */
21
+ export declare function wrapAnthropic<T extends AnthropicClient>(client: T, context: AnthropicWrapperContext): T;
22
+ export {};
23
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/wrappers/anthropic.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAuC,kBAAkB,EAAY,MAAM,aAAa,CAAC;AAEhH,KAAK,eAAe,GAAG;IACrB,QAAQ,EAAE;QACR,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAClE,CAAC;CACH,CAAC;AA+CF,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,MAAM,CAAC;IAC9B,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACpC,qBAAqB,EAAE,MAAM,kBAAkB,GAAG,SAAS,CAAC;IAC5D,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,eAAe,EACrD,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,uBAAuB,GAC/B,CAAC,CA2IH"}
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Anthropic SDK Wrapper
3
+ * Wraps Anthropic client to auto-capture all message creations
4
+ */
5
+ /**
6
+ * Creates a wrapped Anthropic client that auto-traces all calls
7
+ */
8
+ export function wrapAnthropic(client, context) {
9
+ const originalCreate = client.messages.create.bind(client.messages);
10
+ const wrappedCreate = async (params, options) => {
11
+ const traceId = options?.raindrop?.traceId || context.generateTraceId();
12
+ const startTime = Date.now();
13
+ const userId = options?.raindrop?.userId || context.getUserId();
14
+ if (context.debug) {
15
+ console.log('[raindrop] Anthropic request started:', traceId);
16
+ }
17
+ // Handle streaming
18
+ if (params.stream) {
19
+ const stream = await originalCreate(params, options);
20
+ return wrapStream(stream, {
21
+ traceId,
22
+ startTime,
23
+ userId,
24
+ conversationId: options?.raindrop?.conversationId,
25
+ properties: options?.raindrop?.properties,
26
+ model: params.model,
27
+ input: params.messages,
28
+ context,
29
+ });
30
+ }
31
+ // Handle non-streaming
32
+ try {
33
+ const response = await originalCreate(params, options);
34
+ const endTime = Date.now();
35
+ // Extract text output
36
+ const textBlocks = response.content.filter(c => c.type === 'text');
37
+ const output = textBlocks.map(c => c.text).join('');
38
+ // Extract tool calls
39
+ const toolUseBlocks = response.content.filter(c => c.type === 'tool_use');
40
+ const toolCalls = toolUseBlocks.map(c => ({
41
+ id: c.id || '',
42
+ name: c.name || '',
43
+ arguments: c.input,
44
+ }));
45
+ // Check if we're within an interaction
46
+ const interaction = context.getInteractionContext();
47
+ if (interaction) {
48
+ // Add as span to the interaction
49
+ const span = {
50
+ spanId: traceId,
51
+ parentId: interaction.interactionId,
52
+ name: `anthropic:${params.model}`,
53
+ type: 'ai',
54
+ startTime,
55
+ endTime,
56
+ latencyMs: endTime - startTime,
57
+ input: params.messages,
58
+ output,
59
+ properties: {
60
+ ...options?.raindrop?.properties,
61
+ input_tokens: response.usage.input_tokens,
62
+ output_tokens: response.usage.output_tokens,
63
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
64
+ },
65
+ };
66
+ interaction.spans.push(span);
67
+ }
68
+ else {
69
+ // Send trace
70
+ context.sendTrace({
71
+ traceId,
72
+ provider: 'anthropic',
73
+ model: params.model,
74
+ input: params.messages,
75
+ output,
76
+ startTime,
77
+ endTime,
78
+ latencyMs: endTime - startTime,
79
+ tokens: {
80
+ input: response.usage.input_tokens,
81
+ output: response.usage.output_tokens,
82
+ total: response.usage.input_tokens + response.usage.output_tokens,
83
+ },
84
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
85
+ userId,
86
+ conversationId: options?.raindrop?.conversationId,
87
+ properties: options?.raindrop?.properties,
88
+ });
89
+ }
90
+ return Object.assign(response, { _traceId: traceId });
91
+ }
92
+ catch (error) {
93
+ const endTime = Date.now();
94
+ const interaction = context.getInteractionContext();
95
+ if (interaction) {
96
+ const span = {
97
+ spanId: traceId,
98
+ parentId: interaction.interactionId,
99
+ name: `anthropic:${params.model}`,
100
+ type: 'ai',
101
+ startTime,
102
+ endTime,
103
+ latencyMs: endTime - startTime,
104
+ input: params.messages,
105
+ error: error instanceof Error ? error.message : String(error),
106
+ };
107
+ interaction.spans.push(span);
108
+ }
109
+ else {
110
+ context.sendTrace({
111
+ traceId,
112
+ provider: 'anthropic',
113
+ model: params.model,
114
+ input: params.messages,
115
+ startTime,
116
+ endTime,
117
+ latencyMs: endTime - startTime,
118
+ userId,
119
+ conversationId: options?.raindrop?.conversationId,
120
+ properties: options?.raindrop?.properties,
121
+ error: error instanceof Error ? error.message : String(error),
122
+ });
123
+ }
124
+ throw error;
125
+ }
126
+ };
127
+ // Create wrapped client
128
+ const wrappedClient = Object.create(Object.getPrototypeOf(client));
129
+ Object.assign(wrappedClient, client);
130
+ wrappedClient.messages = Object.create(client.messages);
131
+ wrappedClient.messages.create = wrappedCreate;
132
+ return wrappedClient;
133
+ }
134
+ /**
135
+ * Wrap a stream to capture events and send trace on completion
136
+ */
137
+ function wrapStream(stream, options) {
138
+ const interaction = options.context.getInteractionContext();
139
+ const collectedText = [];
140
+ const toolCalls = [];
141
+ let usage = { input_tokens: 0, output_tokens: 0 };
142
+ const wrappedStream = {
143
+ [Symbol.asyncIterator]: async function* () {
144
+ try {
145
+ for await (const event of stream) {
146
+ // Collect text deltas
147
+ if (event.type === 'content_block_delta' && event.delta?.type === 'text_delta') {
148
+ collectedText.push(event.delta.text || '');
149
+ }
150
+ // Collect tool use blocks
151
+ if (event.type === 'content_block_start' && event.content_block?.type === 'tool_use') {
152
+ toolCalls.push({
153
+ id: event.content_block.id || '',
154
+ name: event.content_block.name || '',
155
+ arguments: event.content_block.input,
156
+ });
157
+ }
158
+ // Collect usage from message_delta
159
+ if (event.type === 'message_delta' && event.message?.usage) {
160
+ usage = {
161
+ input_tokens: event.message.usage.input_tokens || usage.input_tokens,
162
+ output_tokens: event.message.usage.output_tokens || usage.output_tokens,
163
+ };
164
+ }
165
+ yield event;
166
+ }
167
+ // Stream complete - send trace
168
+ const endTime = Date.now();
169
+ const output = collectedText.join('');
170
+ if (interaction) {
171
+ // Add as span to the interaction
172
+ const span = {
173
+ spanId: options.traceId,
174
+ parentId: interaction.interactionId,
175
+ name: `anthropic:${options.model}`,
176
+ type: 'ai',
177
+ startTime: options.startTime,
178
+ endTime,
179
+ latencyMs: endTime - options.startTime,
180
+ input: options.input,
181
+ output,
182
+ properties: {
183
+ ...options.properties,
184
+ input_tokens: usage.input_tokens,
185
+ output_tokens: usage.output_tokens,
186
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
187
+ },
188
+ };
189
+ interaction.spans.push(span);
190
+ }
191
+ else {
192
+ options.context.sendTrace({
193
+ traceId: options.traceId,
194
+ provider: 'anthropic',
195
+ model: options.model,
196
+ input: options.input,
197
+ output,
198
+ startTime: options.startTime,
199
+ endTime,
200
+ latencyMs: endTime - options.startTime,
201
+ tokens: {
202
+ input: usage.input_tokens,
203
+ output: usage.output_tokens,
204
+ total: usage.input_tokens + usage.output_tokens,
205
+ },
206
+ toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
207
+ userId: options.userId,
208
+ conversationId: options.conversationId,
209
+ properties: options.properties,
210
+ });
211
+ }
212
+ }
213
+ catch (error) {
214
+ const endTime = Date.now();
215
+ if (interaction) {
216
+ const span = {
217
+ spanId: options.traceId,
218
+ parentId: interaction.interactionId,
219
+ name: `anthropic:${options.model}`,
220
+ type: 'ai',
221
+ startTime: options.startTime,
222
+ endTime,
223
+ latencyMs: endTime - options.startTime,
224
+ input: options.input,
225
+ error: error instanceof Error ? error.message : String(error),
226
+ };
227
+ interaction.spans.push(span);
228
+ }
229
+ else {
230
+ options.context.sendTrace({
231
+ traceId: options.traceId,
232
+ provider: 'anthropic',
233
+ model: options.model,
234
+ input: options.input,
235
+ startTime: options.startTime,
236
+ endTime,
237
+ latencyMs: endTime - options.startTime,
238
+ userId: options.userId,
239
+ conversationId: options.conversationId,
240
+ properties: options.properties,
241
+ error: error instanceof Error ? error.message : String(error),
242
+ });
243
+ }
244
+ throw error;
245
+ }
246
+ },
247
+ _traceId: options.traceId,
248
+ };
249
+ return wrappedStream;
250
+ }
251
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/wrappers/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * OpenAI SDK Wrapper
3
+ * Wraps OpenAI client to auto-capture chat completions AND the new Responses API
4
+ */
5
+ import type { TraceData, InteractionContext } from '../types.js';
6
+ type OpenAIClient = {
7
+ chat?: {
8
+ completions: {
9
+ create: (params: unknown, options?: unknown) => Promise<unknown>;
10
+ };
11
+ };
12
+ responses?: {
13
+ create: (params: unknown, options?: unknown) => Promise<unknown>;
14
+ };
15
+ };
16
+ export interface OpenAIWrapperContext {
17
+ generateTraceId: () => string;
18
+ sendTrace: (trace: TraceData) => void;
19
+ getUserId: () => string | undefined;
20
+ getInteractionContext: () => InteractionContext | undefined;
21
+ debug: boolean;
22
+ }
23
+ /**
24
+ * Creates a wrapped OpenAI client that auto-traces all calls
25
+ * Supports both chat.completions.create AND responses.create (new API)
26
+ */
27
+ export declare function wrapOpenAI<T extends OpenAIClient>(client: T, context: OpenAIWrapperContext): T;
28
+ export {};
29
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/wrappers/openai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAuC,kBAAkB,EAAY,MAAM,aAAa,CAAC;AAGhH,KAAK,YAAY,GAAG;IAClB,IAAI,CAAC,EAAE;QACL,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;SAClE,CAAC;KACH,CAAC;IACF,SAAS,CAAC,EAAE;QACV,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAClE,CAAC;CACH,CAAC;AA0EF,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,MAAM,CAAC;IAC9B,SAAS,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACtC,SAAS,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACpC,qBAAqB,EAAE,MAAM,kBAAkB,GAAG,SAAS,CAAC;IAC5D,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,YAAY,EAC/C,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,oBAAoB,GAC5B,CAAC,CAqBH"}